ZGlmZiAtLWdpdCBhL0FuZHJvaWQuYnAgYi9BbmRyb2lkLmJwCmluZGV4IGYzNDI2ZTguLmY2YWFjZDIgMTAwNjQ0Ci0tLSBhL0FuZHJvaWQuYnAKKysrIGIvQW5kcm9pZC5icApAQCAtMiw4ICsyLDE0IEBACiAKIGNjX2xpYnJhcnlfaGVhZGVycyB7CiAgICAgbmFtZTogImxpYmhhcmR3YXJlX2hlYWRlcnMiLAotICAgIGhlYWRlcl9saWJzOiBbImxpYnN5c3RlbV9oZWFkZXJzIl0sCi0gICAgZXhwb3J0X2hlYWRlcl9saWJfaGVhZGVyczogWyJsaWJzeXN0ZW1faGVhZGVycyJdLAorICAgIGhlYWRlcl9saWJzOiBbCisgICAgICAgICJsaWJhdWRpb19zeXN0ZW1faGVhZGVycyIsCisgICAgICAgICJsaWJzeXN0ZW1faGVhZGVycyIsCisgICAgXSwKKyAgICBleHBvcnRfaGVhZGVyX2xpYl9oZWFkZXJzOiBbCisgICAgICAgICJsaWJhdWRpb19zeXN0ZW1faGVhZGVycyIsCisgICAgICAgICJsaWJzeXN0ZW1faGVhZGVycyIKKyAgICBdLAogCiAgICAgZXhwb3J0X2luY2x1ZGVfZGlyczogWyJpbmNsdWRlIl0sCiAgICAgdmVuZG9yX2F2YWlsYWJsZTogdHJ1ZSwKZGlmZiAtLWdpdCBhL0NsZWFuU3BlYy5tayBiL0NsZWFuU3BlYy5tawppbmRleCBiODRlMWI2Li4xYzY0YmZjIDEwMDY0NAotLS0gYS9DbGVhblNwZWMubWsKKysrIGIvQ2xlYW5TcGVjLm1rCkBAIC00NywzICs0NywxMyBAQAogIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICMgTkVXRVIgQ0xFQU4gU1RFUFMgTVVTVCBCRSBBVCBUSEUgRU5EIE9GIFRIRSBMSVNUCiAjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCiskKGNhbGwgYWRkLWNsZWFuLXN0ZXAsIHJtIC1mICQoUFJPRFVDVF9PVVQpL3N5c3RlbS9saWIvbGliZHluYW1pY19zZW5zb3JfZXh0LnNvKQorJChjYWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtZiAkKFBST0RVQ1RfT1VUKS9zeXN0ZW0vbGliNjQvbGliZHluYW1pY19zZW5zb3JfZXh0LnNvKQorJChjYWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtZiAkKFBST0RVQ1RfT1VUKS9zeXN0ZW0vbGliL2h3L3NlbnNvcnMuZHluYW1pY19zZW5zb3JfaGFsLnNvKQorJChjYWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtZiAkKFBST0RVQ1RfT1VUKS9zeXN0ZW0vbGliNjQvaHcvc2Vuc29ycy5keW5hbWljX3NlbnNvcl9oYWwuc28pCisKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIE5FV0VSIENMRUFOIFNURVBTIE1VU1QgQkUgQVQgVEhFIEVORCBPRiBUSEUgTElTVAorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9oYXJkd2FyZS9hdWRpby5oIGIvaW5jbHVkZS9oYXJkd2FyZS9hdWRpby5oCmluZGV4IGM5NWFkMDkuLjJkNmViMzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaGFyZHdhcmUvYXVkaW8uaAorKysgYi9pbmNsdWRlL2hhcmR3YXJlL2F1ZGlvLmgKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dGltZS5oPgogCiAjaW5jbHVkZSA8Y3V0aWxzL2JpdG9wcy5oPgogCkBAIC01OSwxOSArNjAsNiBAQAogLyogTWluaW1hbCBhdWRpbyBIQUwgdmVyc2lvbiBzdXBwb3J0ZWQgYnkgdGhlIGF1ZGlvIGZyYW1ld29yayAqLwogI2RlZmluZSBBVURJT19ERVZJQ0VfQVBJX1ZFUlNJT05fTUlOIEFVRElPX0RFVklDRV9BUElfVkVSU0lPTl8yXzAKIAotLyoqCi0gKiBMaXN0IG9mIGtub3duIGF1ZGlvIEhBTCBtb2R1bGVzLiBUaGlzIGlzIHRoZSBiYXNlIG5hbWUgb2YgdGhlIGF1ZGlvIEhBTAotICogbGlicmFyeSBjb21wb3NlZCBvZiB0aGUgImF1ZGlvLiIgcHJlZml4LCBvbmUgb2YgdGhlIGJhc2UgbmFtZXMgYmVsb3cgYW5kCi0gKiBhIHN1ZmZpeCBzcGVjaWZpYyB0byB0aGUgZGV2aWNlLgotICogZS5nOiBhdWRpby5wcmltYXJ5LmdvbGRmaXNoLnNvIG9yIGF1ZGlvLmEyZHAuZGVmYXVsdC5zbwotICovCi0KLSNkZWZpbmUgQVVESU9fSEFSRFdBUkVfTU9EVUxFX0lEX1BSSU1BUlkgInByaW1hcnkiCi0jZGVmaW5lIEFVRElPX0hBUkRXQVJFX01PRFVMRV9JRF9BMkRQICJhMmRwIgotI2RlZmluZSBBVURJT19IQVJEV0FSRV9NT0RVTEVfSURfVVNCICJ1c2IiCi0jZGVmaW5lIEFVRElPX0hBUkRXQVJFX01PRFVMRV9JRF9SRU1PVEVfU1VCTUlYICJyX3N1Ym1peCIKLSNkZWZpbmUgQVVESU9fSEFSRFdBUkVfTU9EVUxFX0lEX0NPREVDX09GRkxPQUQgImNvZGVjX29mZmxvYWQiCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoqCkBAIC04MiwxMSArNzAsNiBAQAogICogIGF1ZGlvIGRldmljZSBwYXJhbWV0ZXJzCiAgKi8KIAotLyogQlQgU0NPIE5vaXNlIFJlZHVjdGlvbiArIEVjaG8gQ2FuY2VsbGF0aW9uIHBhcmFtZXRlcnMgKi8KLSNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX0tFWV9CVF9OUkVDICJidF9oZWFkc2V0X25yZWMiCi0jZGVmaW5lIEFVRElPX1BBUkFNRVRFUl9WQUxVRV9PTiAib24iCi0jZGVmaW5lIEFVRElPX1BBUkFNRVRFUl9WQUxVRV9PRkYgIm9mZiIKLQogLyogVFRZIG1vZGUgc2VsZWN0aW9uICovCiAjZGVmaW5lIEFVRElPX1BBUkFNRVRFUl9LRVlfVFRZX01PREUgInR0eV9tb2RlIgogI2RlZmluZSBBVURJT19QQVJBTUVURVJfVkFMVUVfVFRZX09GRiAidHR5X29mZiIKQEAgLTk0LDggKzc3LDcgQEAKICNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX1ZBTFVFX1RUWV9IQ08gInR0eV9oY28iCiAjZGVmaW5lIEFVRElPX1BBUkFNRVRFUl9WQUxVRV9UVFlfRlVMTCAidHR5X2Z1bGwiCiAKLS8qIEhlYXJpbmcgQWlkIENvbXBhdGliaWxpdHkgLSBUZWxlY29pbCAoSEFDLVQpIG1vZGUgb24vb2ZmCi0gICBTdHJpbmdzIG11c3QgYmUgaW4gc3luYyB3aXRoIENhbGxGZWF0dXJlc1NldHRpbmcuamF2YSAqLworLyogSGVhcmluZyBBaWQgQ29tcGF0aWJpbGl0eSAtIFRlbGVjb2lsIChIQUMtVCkgbW9kZSBvbi9vZmYgKi8KICNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX0tFWV9IQUMgIkhBQ1NldHRpbmciCiAjZGVmaW5lIEFVRElPX1BBUkFNRVRFUl9WQUxVRV9IQUNfT04gIk9OIgogI2RlZmluZSBBVURJT19QQVJBTUVURVJfVkFMVUVfSEFDX09GRiAiT0ZGIgpAQCAtMTA2LDYzICs4OCwxNSBAQAogLyogQTJEUCBzb3VyY2UgYWRkcmVzcyBzZXQgYnkgZnJhbWV3b3JrICovCiAjZGVmaW5lIEFVRElPX1BBUkFNRVRFUl9BMkRQX1NPVVJDRV9BRERSRVNTICJhMmRwX3NvdXJjZV9hZGRyZXNzIgogCi0vKiBTY3JlZW4gc3RhdGUgKi8KLSNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX0tFWV9TQ1JFRU5fU1RBVEUgInNjcmVlbl9zdGF0ZSIKLQogLyogQmx1ZXRvb3RoIFNDTyB3aWRlYmFuZCAqLwogI2RlZmluZSBBVURJT19QQVJBTUVURVJfS0VZX0JUX1NDT19XQiAiYnRfd2JzIgogCi0vKiBHZXQgYSBuZXcgSFcgc3luY2hyb25pemF0aW9uIHNvdXJjZSBpZGVudGlmaWVyLgotICogUmV0dXJuIGEgdmFsaWQgc291cmNlIChwb3NpdGl2ZSBpbnRlZ2VyKSBvciBBVURJT19IV19TWU5DX0lOVkFMSUQgaWYgYW4gZXJyb3Igb2NjdXJzCi0gKiBvciBubyBIVyBzeW5jIGlzIGF2YWlsYWJsZS4gKi8KLSNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX0hXX0FWX1NZTkMgImh3X2F2X3N5bmMiCi0KIC8qKgogICogIGF1ZGlvIHN0cmVhbSBwYXJhbWV0ZXJzCiAgKi8KIAotI2RlZmluZSBBVURJT19QQVJBTUVURVJfU1RSRUFNX1JPVVRJTkcgInJvdXRpbmciICAgICAgICAgICAgIC8qIGF1ZGlvX2RldmljZXNfdCAqLwotI2RlZmluZSBBVURJT19QQVJBTUVURVJfU1RSRUFNX0ZPUk1BVCAiZm9ybWF0IiAgICAgICAgICAgICAgIC8qIGF1ZGlvX2Zvcm1hdF90ICovCi0jZGVmaW5lIEFVRElPX1BBUkFNRVRFUl9TVFJFQU1fQ0hBTk5FTFMgImNoYW5uZWxzIiAgICAgICAgICAgLyogYXVkaW9fY2hhbm5lbF9tYXNrX3QgKi8KLSNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX1NUUkVBTV9GUkFNRV9DT1VOVCAiZnJhbWVfY291bnQiICAgICAvKiBzaXplX3QgKi8KLSNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX1NUUkVBTV9JTlBVVF9TT1VSQ0UgImlucHV0X3NvdXJjZSIgICAvKiBhdWRpb19zb3VyY2VfdCAqLwotI2RlZmluZSBBVURJT19QQVJBTUVURVJfU1RSRUFNX1NBTVBMSU5HX1JBVEUgInNhbXBsaW5nX3JhdGUiIC8qIHVpbnQzMl90ICovCi0KLSNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX0RFVklDRV9DT05ORUNUICJjb25uZWN0IiAgICAgICAgICAgIC8qIGF1ZGlvX2RldmljZXNfdCAqLwotI2RlZmluZSBBVURJT19QQVJBTUVURVJfREVWSUNFX0RJU0NPTk5FQ1QgImRpc2Nvbm5lY3QiICAgICAgLyogYXVkaW9fZGV2aWNlc190ICovCi0KLS8qIFF1ZXJ5IHN1cHBvcnRlZCBmb3JtYXRzLiBUaGUgcmVzcG9uc2UgaXMgYSAnfCcgc2VwYXJhdGVkIGxpc3Qgb2Ygc3RyaW5ncyBmcm9tCi0gKiBhdWRpb19mb3JtYXRfdCBlbnVtIGUuZzogInN1cF9mb3JtYXRzPUFVRElPX0ZPUk1BVF9QQ01fMTZfQklUIiAqLwotI2RlZmluZSBBVURJT19QQVJBTUVURVJfU1RSRUFNX1NVUF9GT1JNQVRTICJzdXBfZm9ybWF0cyIKLS8qIFF1ZXJ5IHN1cHBvcnRlZCBjaGFubmVsIG1hc2tzLiBUaGUgcmVzcG9uc2UgaXMgYSAnfCcgc2VwYXJhdGVkIGxpc3Qgb2Ygc3RyaW5ncyBmcm9tCi0gKiBhdWRpb19jaGFubmVsX21hc2tfdCBlbnVtIGUuZzogInN1cF9jaGFubmVscz1BVURJT19DSEFOTkVMX09VVF9TVEVSRU98QVVESU9fQ0hBTk5FTF9PVVRfTU9OTyIgKi8KLSNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX1NUUkVBTV9TVVBfQ0hBTk5FTFMgInN1cF9jaGFubmVscyIKLS8qIFF1ZXJ5IHN1cHBvcnRlZCBzYW1wbGluZyByYXRlcy4gVGhlIHJlc3BvbnNlIGlzIGEgJ3wnIHNlcGFyYXRlZCBsaXN0IG9mIGludGVnZXIgdmFsdWVzIGUuZzoKLSAqICJzdXBfc2FtcGxpbmdfcmF0ZXM9NDQxMDB8NDgwMDAiICovCi0jZGVmaW5lIEFVRElPX1BBUkFNRVRFUl9TVFJFQU1fU1VQX1NBTVBMSU5HX1JBVEVTICJzdXBfc2FtcGxpbmdfcmF0ZXMiCi0KLS8qIFNldCB0aGUgSFcgc3luY2hyb25pemF0aW9uIHNvdXJjZSBmb3IgYW4gb3V0cHV0IHN0cmVhbS4gKi8KLSNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX1NUUkVBTV9IV19BVl9TWU5DICJod19hdl9zeW5jIgotCi0vKiBFbmFibGUgbW9ubyBhdWRpbyBwbGF5YmFjayBpZiAxLCBlbHNlIHNob3VsZCBiZSAwLiAqLwotI2RlZmluZSBBVURJT19QQVJBTUVURVJfTU9OT19PVVRQVVQgIm1vbm9fb3V0cHV0IgotCi0vKioKLSAqIGF1ZGlvIGNvZGVjIHBhcmFtZXRlcnMKLSAqLwotCi0jZGVmaW5lIEFVRElPX09GRkxPQURfQ09ERUNfUEFSQU1TICJtdXNpY19vZmZsb2FkX2NvZGVjX3BhcmFtIgotI2RlZmluZSBBVURJT19PRkZMT0FEX0NPREVDX0JJVF9QRVJfU0FNUExFICJtdXNpY19vZmZsb2FkX2JpdF9wZXJfc2FtcGxlIgotI2RlZmluZSBBVURJT19PRkZMT0FEX0NPREVDX0JJVF9SQVRFICJtdXNpY19vZmZsb2FkX2JpdF9yYXRlIgotI2RlZmluZSBBVURJT19PRkZMT0FEX0NPREVDX0FWR19CSVRfUkFURSAibXVzaWNfb2ZmbG9hZF9hdmdfYml0X3JhdGUiCi0jZGVmaW5lIEFVRElPX09GRkxPQURfQ09ERUNfSUQgIm11c2ljX29mZmxvYWRfY29kZWNfaWQiCi0jZGVmaW5lIEFVRElPX09GRkxPQURfQ09ERUNfQkxPQ0tfQUxJR04gIm11c2ljX29mZmxvYWRfYmxvY2tfYWxpZ24iCi0jZGVmaW5lIEFVRElPX09GRkxPQURfQ09ERUNfU0FNUExFX1JBVEUgIm11c2ljX29mZmxvYWRfc2FtcGxlX3JhdGUiCi0jZGVmaW5lIEFVRElPX09GRkxPQURfQ09ERUNfRU5DT0RFX09QVElPTiAibXVzaWNfb2ZmbG9hZF9lbmNvZGVfb3B0aW9uIgotI2RlZmluZSBBVURJT19PRkZMT0FEX0NPREVDX05VTV9DSEFOTkVMICAibXVzaWNfb2ZmbG9hZF9udW1fY2hhbm5lbHMiCi0jZGVmaW5lIEFVRElPX09GRkxPQURfQ09ERUNfRE9XTl9TQU1QTElORyAgIm11c2ljX29mZmxvYWRfZG93bl9zYW1wbGluZyIKLSNkZWZpbmUgQVVESU9fT0ZGTE9BRF9DT0RFQ19ERUxBWV9TQU1QTEVTICAiZGVsYXlfc2FtcGxlcyIKLSNkZWZpbmUgQVVESU9fT0ZGTE9BRF9DT0RFQ19QQURESU5HX1NBTVBMRVMgICJwYWRkaW5nX3NhbXBsZXMiCisvKiBFbmFibGUgQUFOQyAqLworI2RlZmluZSBBVURJT19QQVJBTUVURVJfS0VZX0FBTkMgImFhbmNfZW5hYmxlZCIKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC0zOTksNiArMzMzLDY1IEBACiAgICAgaW50ICgqZ2V0X3ByZXNlbnRhdGlvbl9wb3NpdGlvbikoY29uc3Qgc3RydWN0IGF1ZGlvX3N0cmVhbV9vdXQgKnN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCAqZnJhbWVzLCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWVzdGFtcCk7CiAKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIGZyYW1ld29yayB0byBzdGFydCBhIHN0cmVhbSBvcGVyYXRpbmcgaW4gbW1hcCBtb2RlLgorICAgICAqIGNyZWF0ZV9tbWFwX2J1ZmZlciBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBzdGFydCgpCisgICAgICoKKyAgICAgKiBcbm90ZSBGdW5jdGlvbiBvbmx5IGltcGxlbWVudGVkIGJ5IHN0cmVhbXMgb3BlcmF0aW5nIGluIG1tYXAgbW9kZS4KKyAgICAgKgorICAgICAqIFxwYXJhbVtpbl0gc3RyZWFtIHRoZSBzdHJlYW0gb2JqZWN0LgorICAgICAqIFxyZXR1cm4gMCBpbiBjYXNlIG9mIHN1Y2Nlc3MuCisgICAgICogICAgICAgICAtRU5PU1lTIGlmIGNhbGxlZCBvdXQgb2Ygc2VxdWVuY2Ugb3Igb24gbm9uIG1tYXAgc3RyZWFtCisgICAgICovCisgICAgaW50ICgqc3RhcnQpKGNvbnN0IHN0cnVjdCBhdWRpb19zdHJlYW1fb3V0KiBzdHJlYW0pOworCisgICAgLyoqCisgICAgICogQ2FsbGVkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gc3RvcCBhIHN0cmVhbSBvcGVyYXRpbmcgaW4gbW1hcCBtb2RlLgorICAgICAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIHN0YXJ0KCkKKyAgICAgKgorICAgICAqIFxub3RlIEZ1bmN0aW9uIG9ubHkgaW1wbGVtZW50ZWQgYnkgc3RyZWFtcyBvcGVyYXRpbmcgaW4gbW1hcCBtb2RlLgorICAgICAqCisgICAgICogXHBhcmFtW2luXSBzdHJlYW0gdGhlIHN0cmVhbSBvYmplY3QuCisgICAgICogXHJldHVybiAwIGluIGNhc2Ugb2Ygc3VjY2Vzcy4KKyAgICAgKiAgICAgICAgIC1FTk9TWVMgaWYgY2FsbGVkIG91dCBvZiBzZXF1ZW5jZSBvciBvbiBub24gbW1hcCBzdHJlYW0KKyAgICAgKi8KKyAgICBpbnQgKCpzdG9wKShjb25zdCBzdHJ1Y3QgYXVkaW9fc3RyZWFtX291dCogc3RyZWFtKTsKKworICAgIC8qKgorICAgICAqIENhbGxlZCBieSB0aGUgZnJhbWV3b3JrIHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIG9uIHRoZSBtbWFwIGJ1ZmZlciB1c2VkIGZvciBhdWRpbworICAgICAqIHNhbXBsZXMgdHJhbnNmZXIuCisgICAgICoKKyAgICAgKiBcbm90ZSBGdW5jdGlvbiBvbmx5IGltcGxlbWVudGVkIGJ5IHN0cmVhbXMgb3BlcmF0aW5nIGluIG1tYXAgbW9kZS4KKyAgICAgKgorICAgICAqIFxwYXJhbVtpbl0gc3RyZWFtIHRoZSBzdHJlYW0gb2JqZWN0LgorICAgICAqIFxwYXJhbVtpbl0gbWluX3NpemVfZnJhbWVzIG1pbmltdW0gYnVmZmVyIHNpemUgcmVxdWVzdGVkLiBUaGUgYWN0dWFsIGJ1ZmZlcgorICAgICAqICAgICAgICBzaXplIHJldHVybmVkIGluIHN0cnVjdCBhdWRpb19tbWFwX2J1ZmZlcl9pbmZvIGNhbiBiZSBsYXJnZXIuCisgICAgICogXHBhcmFtW291dF0gaW5mbyBhZGRyZXNzIGF0IHdoaWNoIHRoZSBtbWFwIGJ1ZmZlciBpbmZvcm1hdGlvbiBzaG91bGQgYmUgcmV0dXJuZWQuCisgICAgICoKKyAgICAgKiBccmV0dXJuIDAgaWYgdGhlIGJ1ZmZlciB3YXMgYWxsb2NhdGVkLgorICAgICAqICAgICAgICAgLUVOT0RFViBpbiBjYXNlIG9mIGluaXRpYWxpemF0aW9uIGVycm9yCisgICAgICogICAgICAgICAtRUlOVkFMIGlmIHRoZSByZXF1ZXN0ZWQgYnVmZmVyIHNpemUgaXMgdG9vIGxhcmdlCisgICAgICogICAgICAgICAtRU5PU1lTIGlmIGNhbGxlZCBvdXQgb2Ygc2VxdWVuY2UgKGUuZy4gYnVmZmVyIGFscmVhZHkgYWxsb2NhdGVkKQorICAgICAqLworICAgIGludCAoKmNyZWF0ZV9tbWFwX2J1ZmZlcikoY29uc3Qgc3RydWN0IGF1ZGlvX3N0cmVhbV9vdXQgKnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbWluX3NpemVfZnJhbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF1ZGlvX21tYXBfYnVmZmVyX2luZm8gKmluZm8pOworCisgICAgLyoqCisgICAgICogQ2FsbGVkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gcmVhZCBjdXJyZW50IHJlYWQvd3JpdGUgcG9zaXRpb24gaW4gdGhlIG1tYXAgYnVmZmVyCisgICAgICogd2l0aCBhc3NvY2lhdGVkIHRpbWUgc3RhbXAuCisgICAgICoKKyAgICAgKiBcbm90ZSBGdW5jdGlvbiBvbmx5IGltcGxlbWVudGVkIGJ5IHN0cmVhbXMgb3BlcmF0aW5nIGluIG1tYXAgbW9kZS4KKyAgICAgKgorICAgICAqIFxwYXJhbVtpbl0gc3RyZWFtIHRoZSBzdHJlYW0gb2JqZWN0LgorICAgICAqIFxwYXJhbVtvdXRdIHBvc2l0aW9uIGFkZHJlc3MgYXQgd2hpY2ggdGhlIG1tYXAgcmVhZC93cml0ZSBwb3NpdGlvbiBzaG91bGQgYmUgcmV0dXJuZWQuCisgICAgICoKKyAgICAgKiBccmV0dXJuIDAgaWYgdGhlIHBvc2l0aW9uIGlzIHN1Y2Nlc3NmdWxseSByZXR1cm5lZC4KKyAgICAgKiAgICAgICAgIC1FTk9EQVRBIGlmIHRoZSBwb3NpdGlvbiBjYW5ub3QgYmUgcmV0cmlldmVkCisgICAgICogICAgICAgICAtRU5PU1lTIGlmIGNhbGxlZCBiZWZvcmUgY3JlYXRlX21tYXBfYnVmZmVyKCkKKyAgICAgKi8KKyAgICBpbnQgKCpnZXRfbW1hcF9wb3NpdGlvbikoY29uc3Qgc3RydWN0IGF1ZGlvX3N0cmVhbV9vdXQgKnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF1ZGlvX21tYXBfcG9zaXRpb24gKnBvc2l0aW9uKTsKIH07CiB0eXBlZGVmIHN0cnVjdCBhdWRpb19zdHJlYW1fb3V0IGF1ZGlvX3N0cmVhbV9vdXRfdDsKIApAQCAtNDQ5LDYgKzQ0Miw2NSBAQAogICAgICAqLwogICAgIGludCAoKmdldF9jYXB0dXJlX3Bvc2l0aW9uKShjb25zdCBzdHJ1Y3QgYXVkaW9fc3RyZWFtX2luICpzdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgKmZyYW1lcywgaW50NjRfdCAqdGltZSk7CisKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIGZyYW1ld29yayB0byBzdGFydCBhIHN0cmVhbSBvcGVyYXRpbmcgaW4gbW1hcCBtb2RlLgorICAgICAqIGNyZWF0ZV9tbWFwX2J1ZmZlciBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBzdGFydCgpCisgICAgICoKKyAgICAgKiBcbm90ZSBGdW5jdGlvbiBvbmx5IGltcGxlbWVudGVkIGJ5IHN0cmVhbXMgb3BlcmF0aW5nIGluIG1tYXAgbW9kZS4KKyAgICAgKgorICAgICAqIFxwYXJhbVtpbl0gc3RyZWFtIHRoZSBzdHJlYW0gb2JqZWN0LgorICAgICAqIFxyZXR1cm4gMCBpbiBjYXNlIG9mZiBzdWNjZXNzLgorICAgICAqICAgICAgICAgLUVOT1NZUyBpZiBjYWxsZWQgb3V0IG9mIHNlcXVlbmNlIG9yIG9uIG5vbiBtbWFwIHN0cmVhbQorICAgICAqLworICAgIGludCAoKnN0YXJ0KShjb25zdCBzdHJ1Y3QgYXVkaW9fc3RyZWFtX2luKiBzdHJlYW0pOworCisgICAgLyoqCisgICAgICogQ2FsbGVkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gc3RvcCBhIHN0cmVhbSBvcGVyYXRpbmcgaW4gbW1hcCBtb2RlLgorICAgICAqCisgICAgICogXG5vdGUgRnVuY3Rpb24gb25seSBpbXBsZW1lbnRlZCBieSBzdHJlYW1zIG9wZXJhdGluZyBpbiBtbWFwIG1vZGUuCisgICAgICoKKyAgICAgKiBccGFyYW1baW5dIHN0cmVhbSB0aGUgc3RyZWFtIG9iamVjdC4KKyAgICAgKiBccmV0dXJuIDAgaW4gY2FzZSBvZiBzdWNjZXNzLgorICAgICAqICAgICAgICAgLUVOT1NZUyBpZiBjYWxsZWQgb3V0IG9mIHNlcXVlbmNlIG9yIG9uIG5vbiBtbWFwIHN0cmVhbQorICAgICAqLworICAgIGludCAoKnN0b3ApKGNvbnN0IHN0cnVjdCBhdWRpb19zdHJlYW1faW4qIHN0cmVhbSk7CisKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIGZyYW1ld29yayB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgbW1hcCBidWZmZXIgdXNlZCBmb3IgYXVkaW8KKyAgICAgKiBzYW1wbGVzIHRyYW5zZmVyLgorICAgICAqCisgICAgICogXG5vdGUgRnVuY3Rpb24gb25seSBpbXBsZW1lbnRlZCBieSBzdHJlYW1zIG9wZXJhdGluZyBpbiBtbWFwIG1vZGUuCisgICAgICoKKyAgICAgKiBccGFyYW1baW5dIHN0cmVhbSB0aGUgc3RyZWFtIG9iamVjdC4KKyAgICAgKiBccGFyYW1baW5dIG1pbl9zaXplX2ZyYW1lcyBtaW5pbXVtIGJ1ZmZlciBzaXplIHJlcXVlc3RlZC4gVGhlIGFjdHVhbCBidWZmZXIKKyAgICAgKiAgICAgICAgc2l6ZSByZXR1cm5lZCBpbiBzdHJ1Y3QgYXVkaW9fbW1hcF9idWZmZXJfaW5mbyBjYW4gYmUgbGFyZ2VyLgorICAgICAqIFxwYXJhbVtvdXRdIGluZm8gYWRkcmVzcyBhdCB3aGljaCB0aGUgbW1hcCBidWZmZXIgaW5mb3JtYXRpb24gc2hvdWxkIGJlIHJldHVybmVkLgorICAgICAqCisgICAgICogXHJldHVybiAwIGlmIHRoZSBidWZmZXIgd2FzIGFsbG9jYXRlZC4KKyAgICAgKiAgICAgICAgIC1FTk9ERVYgaW4gY2FzZSBvZiBpbml0aWFsaXphdGlvbiBlcnJvcgorICAgICAqICAgICAgICAgLUVJTlZBTCBpZiB0aGUgcmVxdWVzdGVkIGJ1ZmZlciBzaXplIGlzIHRvbyBsYXJnZQorICAgICAqICAgICAgICAgLUVOT1NZUyBpZiBjYWxsZWQgb3V0IG9mIHNlcXVlbmNlIChlLmcuIGJ1ZmZlciBhbHJlYWR5IGFsbG9jYXRlZCkKKyAgICAgKi8KKyAgICBpbnQgKCpjcmVhdGVfbW1hcF9idWZmZXIpKGNvbnN0IHN0cnVjdCBhdWRpb19zdHJlYW1faW4gKnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbWluX3NpemVfZnJhbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF1ZGlvX21tYXBfYnVmZmVyX2luZm8gKmluZm8pOworCisgICAgLyoqCisgICAgICogQ2FsbGVkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gcmVhZCBjdXJyZW50IHJlYWQvd3JpdGUgcG9zaXRpb24gaW4gdGhlIG1tYXAgYnVmZmVyCisgICAgICogd2l0aCBhc3NvY2lhdGVkIHRpbWUgc3RhbXAuCisgICAgICoKKyAgICAgKiBcbm90ZSBGdW5jdGlvbiBvbmx5IGltcGxlbWVudGVkIGJ5IHN0cmVhbXMgb3BlcmF0aW5nIGluIG1tYXAgbW9kZS4KKyAgICAgKgorICAgICAqIFxwYXJhbVtpbl0gc3RyZWFtIHRoZSBzdHJlYW0gb2JqZWN0LgorICAgICAqIFxwYXJhbVtvdXRdIHBvc2l0aW9uIGFkZHJlc3MgYXQgd2hpY2ggdGhlIG1tYXAgcmVhZC93cml0ZSBwb3NpdGlvbiBzaG91bGQgYmUgcmV0dXJuZWQuCisgICAgICoKKyAgICAgKiBccmV0dXJuIDAgaWYgdGhlIHBvc2l0aW9uIGlzIHN1Y2Nlc3NmdWxseSByZXR1cm5lZC4KKyAgICAgKiAgICAgICAgIC1FTk9EQVRBIGlmIHRoZSBwb3NpdGlvbiBjYW5ub3QgYmUgcmV0cmVpdmVkCisgICAgICogICAgICAgICAtRU5PU1lTIGlmIGNhbGxlZCBiZWZvcmUgbW1hcF9yZWFkX3Bvc2l0aW9uKCkKKyAgICAgKi8KKyAgICBpbnQgKCpnZXRfbW1hcF9wb3NpdGlvbikoY29uc3Qgc3RydWN0IGF1ZGlvX3N0cmVhbV9pbiAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXVkaW9fbW1hcF9wb3NpdGlvbiAqcG9zaXRpb24pOwogfTsKIHR5cGVkZWYgc3RydWN0IGF1ZGlvX3N0cmVhbV9pbiBhdWRpb19zdHJlYW1faW5fdDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9oYXJkd2FyZS9hdWRpb19hbHNhb3BzLmggYi9pbmNsdWRlL2hhcmR3YXJlL2F1ZGlvX2Fsc2FvcHMuaAppbmRleCBmODM5NDFlLi42YTE3YTM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2hhcmR3YXJlL2F1ZGlvX2Fsc2FvcHMuaAorKysgYi9pbmNsdWRlL2hhcmR3YXJlL2F1ZGlvX2Fsc2FvcHMuaApAQCAtMzgsNyArMzgsNyBAQAogc3RhdGljIGlubGluZSBlbnVtIHBjbV9mb3JtYXQgcGNtX2Zvcm1hdF9mcm9tX2F1ZGlvX2Zvcm1hdChhdWRpb19mb3JtYXRfdCBmb3JtYXQpCiB7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSNpZmRlZiBIQVZFX0JJR19FTkRJQU4KKyNpZiBIQVZFX0JJR19FTkRJQU4KICAgICBjYXNlIEFVRElPX0ZPUk1BVF9QQ01fMTZfQklUOgogICAgICAgICByZXR1cm4gUENNX0ZPUk1BVF9TMTZfQkU7CiAgICAgY2FzZSBBVURJT19GT1JNQVRfUENNXzI0X0JJVF9QQUNLRUQ6CkBAIC03Myw3ICs3Myw3IEBACiBzdGF0aWMgaW5saW5lIGF1ZGlvX2Zvcm1hdF90IGF1ZGlvX2Zvcm1hdF9mcm9tX3BjbV9mb3JtYXQoZW51bSBwY21fZm9ybWF0IGZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewotI2lmZGVmIEhBVkVfQklHX0VORElBTgorI2lmIEhBVkVfQklHX0VORElBTgogICAgIGNhc2UgUENNX0ZPUk1BVF9TMTZfQkU6CiAgICAgICAgIHJldHVybiBBVURJT19GT1JNQVRfUENNXzE2X0JJVDsKICAgICBjYXNlIFBDTV9GT1JNQVRfUzI0XzNCRToKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaGFyZHdhcmUvYXVkaW9fZWZmZWN0LmggYi9pbmNsdWRlL2hhcmR3YXJlL2F1ZGlvX2VmZmVjdC5oCmluZGV4IDhhODg0MTQuLjMzNjZlMTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaGFyZHdhcmUvYXVkaW9fZWZmZWN0LmgKKysrIGIvaW5jbHVkZS9oYXJkd2FyZS9hdWRpb19lZmZlY3QuaApAQCAtMjYsNyArMjYsNyBAQAogCiAjaW5jbHVkZSA8Y3V0aWxzL2JpdG9wcy5oPgogCi0jaW5jbHVkZSA8c3lzdGVtL2F1ZGlvLmg+CisjaW5jbHVkZSA8c3lzdGVtL2F1ZGlvX2VmZmVjdC5oPgogCiAKIF9fQkVHSU5fREVDTFMKQEAgLTM2LDIzMSArMzYsMTEgQEAKIC8vICAgICAgQ29tbW9uIERlZmluaXRpb25zCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLS8vCi0vLy0tLSBFZmZlY3QgZGVzY3JpcHRvciBzdHJ1Y3R1cmUgZWZmZWN0X2Rlc2NyaXB0b3JfdAotLy8KLQotLy8gVW5pcXVlIGVmZmVjdCBJRCAoY2FuIGJlIGdlbmVyYXRlZCBmcm9tIHRoZSBmb2xsb3dpbmcgc2l0ZToKLS8vICBodHRwOi8vd3d3Lml0dS5pbnQvSVRVLVQvYXNuMS91dWlkLmh0bWwpCi0vLyBUaGlzIGZvcm1hdCBpcyB1c2VkIGZvciBib3RoICJ0eXBlIiBhbmQgInV1aWQiIGZpZWxkcyBvZiB0aGUgZWZmZWN0IGRlc2NyaXB0b3Igc3RydWN0dXJlLgotLy8gLSBXaGVuIHVzZWQgZm9yIGVmZmVjdCB0eXBlIGFuZCB0aGUgZW5naW5lIGlzIGltcGxlbWVudGluZyBhbmQgZWZmZWN0IGNvcnJlc3BvbmRpbmcgdG8gYSBzdGFuZGFyZAotLy8gT3BlblNMIEVTIGludGVyZmFjZSwgdGhpcyBJRCBtdXN0IGJlIHRoZSBvbmUgZGVmaW5lZCBpbiBPcGVuU0xFU19JSUQuaCBmb3IgdGhhdCBpbnRlcmZhY2UuCi0vLyAtIFdoZW4gdXNlZCBhcyB1dWlkLCBpdCBzaG91bGQgYmUgYSB1bmlxdWUgVVVJRCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uLgotdHlwZWRlZiBzdHJ1Y3QgZWZmZWN0X3V1aWRfcyB7Ci0gICAgdWludDMyX3QgdGltZUxvdzsKLSAgICB1aW50MTZfdCB0aW1lTWlkOwotICAgIHVpbnQxNl90IHRpbWVIaUFuZFZlcnNpb247Ci0gICAgdWludDE2X3QgY2xvY2tTZXE7Ci0gICAgdWludDhfdCBub2RlWzZdOwotfSBlZmZlY3RfdXVpZF90OwotCi0vLyBNYXhpbXVtIGxlbmd0aCBvZiBjaGFyYWN0ZXIgc3RyaW5ncyBpbiBzdHJ1Y3R1cmVzIGRlZmluZXMgYnkgdGhpcyBBUEkuCi0jZGVmaW5lIEVGRkVDVF9TVFJJTkdfTEVOX01BWCA2NAotCi0vLyBOVUxMIFVVSUQgZGVmaW5pdGlvbiAobWF0Y2hlcyBTTF9JSURfTlVMTF8pCi0jZGVmaW5lIEVGRkVDVF9VVUlEX0lOSVRJQUxJWkVSIHsgMHhlYzcxNzhlYywgMHhlNWUxLCAweDQ0MzIsIDB4YTNmNCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgMHg0NiwgMHg1NywgMHhlNiwgMHg3OSwgMHg1MiwgMHgxMCB9IH0KLXN0YXRpYyBjb25zdCBlZmZlY3RfdXVpZF90IEVGRkVDVF9VVUlEX05VTExfID0gRUZGRUNUX1VVSURfSU5JVElBTElaRVI7Ci1zdGF0aWMgY29uc3QgZWZmZWN0X3V1aWRfdCAqIGNvbnN0IEVGRkVDVF9VVUlEX05VTEwgPSAmRUZGRUNUX1VVSURfTlVMTF87Ci1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IEVGRkVDVF9VVUlEX05VTExfU1RSID0gImVjNzE3OGVjLWU1ZTEtNDQzMi1hM2Y0LTQ2NTdlNjc5NTIxMCI7Ci0KLQotLy8gVGhlIGVmZmVjdCBkZXNjcmlwdG9yIGNvbnRhaW5zIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBmYWNpbGl0YXRlIHRoZSBlbnVtZXJhdGlvbiBvZiB0aGUgZWZmZWN0Ci0vLyBlbmdpbmVzIHByZXNlbnQgaW4gYSBsaWJyYXJ5LgotdHlwZWRlZiBzdHJ1Y3QgZWZmZWN0X2Rlc2NyaXB0b3JfcyB7Ci0gICAgZWZmZWN0X3V1aWRfdCB0eXBlOyAgICAgLy8gVVVJRCBvZiB0byB0aGUgT3BlblNMIEVTIGludGVyZmFjZSBpbXBsZW1lbnRlZCBieSB0aGlzIGVmZmVjdAotICAgIGVmZmVjdF91dWlkX3QgdXVpZDsgICAgIC8vIFVVSUQgZm9yIHRoaXMgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbgotICAgIHVpbnQzMl90IGFwaVZlcnNpb247ICAgIC8vIFZlcnNpb24gb2YgdGhlIGVmZmVjdCBjb250cm9sIEFQSSBpbXBsZW1lbnRlZAotICAgIHVpbnQzMl90IGZsYWdzOyAgICAgICAgIC8vIGVmZmVjdCBlbmdpbmUgY2FwYWJpbGl0aWVzL3JlcXVpcmVtZW50cyBmbGFncyAoc2VlIGJlbG93KQotICAgIHVpbnQxNl90IGNwdUxvYWQ7ICAgICAgIC8vIENQVSBsb2FkIGluZGljYXRpb24gKHNlZSBiZWxvdykKLSAgICB1aW50MTZfdCBtZW1vcnlVc2FnZTsgICAvLyBEYXRhIE1lbW9yeSB1c2FnZSAoc2VlIGJlbG93KQotICAgIGNoYXIgICAgbmFtZVtFRkZFQ1RfU1RSSU5HX0xFTl9NQVhdOyAgIC8vIGh1bWFuIHJlYWRhYmxlIGVmZmVjdCBuYW1lCi0gICAgY2hhciAgICBpbXBsZW1lbnRvcltFRkZFQ1RfU1RSSU5HX0xFTl9NQVhdOyAgICAvLyBodW1hbiByZWFkYWJsZSBlZmZlY3QgaW1wbGVtZW50b3IgbmFtZQotfSBlZmZlY3RfZGVzY3JpcHRvcl90OwotCi0vLyBDUFUgbG9hZCBhbmQgbWVtb3J5IHVzYWdlIGluZGljYXRpb246IGVhY2ggZWZmZWN0IGltcGxlbWVudGF0aW9uIG11c3QgcHJvdmlkZSBhbiBpbmRpY2F0aW9uIG9mCi0vLyBpdHMgQ1BVIGFuZCBtZW1vcnkgdXNhZ2UgZm9yIHRoZSBhdWRpbyBlZmZlY3QgZnJhbWV3b3JrIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgZWZmZWN0cwotLy8gaW5zdGFudGlhdGVkIGF0IGEgZ2l2ZW4gdGltZSBvbiBhIGdpdmVuIHBsYXRmb3JtLgotLy8gVGhlIENQVSBsb2FkIGlzIGV4cHJlc3NlZCBpbiAwLjEgTUlQUyB1bml0cyBhcyBlc3RpbWF0ZWQgb24gYW4gQVJNOUUgY29yZSAoQVJNdjVURSkgd2l0aCAwIFdTLgotLy8gVGhlIG1lbW9yeSB1c2FnZSBpcyBleHByZXNzZWQgaW4gS0IgYW5kIGluY2x1ZGVzIG9ubHkgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeQotCi0vLyBEZWZpbml0aW9ucyBmb3IgZmxhZ3MgZmllbGQgb2YgZWZmZWN0IGRlc2NyaXB0b3IuCi0vLyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIHwgZGVzY3JpcHRpb24gICAgICAgICAgICAgICB8IGJpdHMgICAgICB8IHZhbHVlcwotLy8gICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICB8IGNvbm5lY3Rpb24gbW9kZSAgICAgICAgICAgfCAwLi4yICAgICAgfCAwIGluc2VydDogYWZ0ZXIgdHJhY2sgcHJvY2VzcwotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDEgYXV4aWxpYXJ5OiBjb25uZWN0IHRvIHRyYWNrIGF1eGlsaWFyeQotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICBvdXRwdXQgYW5kIHVzZSBzZW5kIGxldmVsCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgMiByZXBsYWNlOiByZXBsYWNlcyB0cmFjayBwcm9jZXNzIGZ1bmN0aW9uOwotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgbXVzdCBpbXBsZW1lbnQgU1JDLCB2b2x1bWUgYW5kIG1vbm8gdG8gc3RlcmVvLgotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDMgcHJlIHByb2Nlc3Npbmc6IGFwcGxpZWQgYmVsb3cgYXVkaW8gSEFMIG9uIGlucHV0Ci0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgNCBwb3N0IHByb2Nlc3Npbmc6IGFwcGxpZWQgYmVsb3cgYXVkaW8gSEFMIG9uIG91dHB1dAotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDUgLSA3IHJlc2VydmVkCi0vLyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIHwgaW5zZXJ0aW9uIHByZWZlcmVuY2UgICAgICB8IDMuLjUgICAgICB8IDAgbm9uZQotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDEgZmlyc3Qgb2YgdGhlIGNoYWluCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgMiBsYXN0IG9mIHRoZSBjaGFpbgotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDMgZXhjbHVzaXZlIChvbmx5IGVmZmVjdCBpbiB0aGUgaW5zZXJ0IGNoYWluKQotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDQuLjcgcmVzZXJ2ZWQKLS8vICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgfCBWb2x1bWUgbWFuYWdlbWVudCAgICAgICAgIHwgNi4uOCAgICAgIHwgMCBub25lCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgMSBpbXBsZW1lbnRzIHZvbHVtZSBjb250cm9sCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgMiByZXF1aXJlcyB2b2x1bWUgaW5kaWNhdGlvbgotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDQgcmVzZXJ2ZWQKLS8vICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgfCBEZXZpY2UgaW5kaWNhdGlvbiAgICAgICAgIHwgOS4uMTEgICAgIHwgMCBub25lCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgMSByZXF1aXJlcyBkZXZpY2UgdXBkYXRlcwotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDIsIDQgcmVzZXJ2ZWQKLS8vICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgfCBTYW1wbGUgaW5wdXQgbW9kZSAgICAgICAgIHwgMTIuLjEzICAgIHwgMSBkaXJlY3Q6IHByb2Nlc3MoKSBmdW5jdGlvbiBvciBFRkZFQ1RfQ01EX1NFVF9DT05GSUcKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgIGNvbW1hbmQgbXVzdCBzcGVjaWZ5IGEgYnVmZmVyIGRlc2NyaXB0b3IKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAyIHByb3ZpZGVyOiBwcm9jZXNzKCkgZnVuY3Rpb24gdXNlcyB0aGUKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgIGJ1ZmZlclByb3ZpZGVyIGluZGljYXRlZCBieSB0aGUKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgIEVGRkVDVF9DTURfU0VUX0NPTkZJRyBjb21tYW5kIHRvIHJlcXVlc3QgaW5wdXQuCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICBidWZmZXJzLgotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDMgYm90aDogYm90aCBpbnB1dCBtb2RlcyBhcmUgc3VwcG9ydGVkCi0vLyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIHwgU2FtcGxlIG91dHB1dCBtb2RlICAgICAgICB8IDE0Li4xNSAgICB8IDEgZGlyZWN0OiBwcm9jZXNzKCkgZnVuY3Rpb24gb3IgRUZGRUNUX0NNRF9TRVRfQ09ORklHCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICBjb21tYW5kIG11c3Qgc3BlY2lmeSBhIGJ1ZmZlciBkZXNjcmlwdG9yCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgMiBwcm92aWRlcjogcHJvY2VzcygpIGZ1bmN0aW9uIHVzZXMgdGhlCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICBidWZmZXJQcm92aWRlciBpbmRpY2F0ZWQgYnkgdGhlCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICBFRkZFQ1RfQ01EX1NFVF9DT05GSUcgY29tbWFuZCB0byByZXF1ZXN0IG91dHB1dAotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgYnVmZmVycy4KLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAzIGJvdGg6IGJvdGggb3V0cHV0IG1vZGVzIGFyZSBzdXBwb3J0ZWQKLS8vICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgfCBIYXJkd2FyZSBhY2NlbGVyYXRpb24gICAgIHwgMTYuLjE3ICAgIHwgMCBObyBoYXJkd2FyZSBhY2NlbGVyYXRpb24KLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAxIG5vbiB0dW5uZWxlZCBodyBhY2NlbGVyYXRpb246IHRoZSBwcm9jZXNzKCkgZnVuY3Rpb24KLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgIHJlYWRzIHRoZSBzYW1wbGVzLCBzZW5kIHRoZW0gdG8gSFcgYWNjZWxlcmF0ZWQKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgIGVmZmVjdCBwcm9jZXNzb3IsIHJlYWRzIGJhY2sgdGhlIHByb2Nlc3NlZCBzYW1wbGVzCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICBhbmQgcmV0dXJucyB0aGVtIHRvIHRoZSBvdXRwdXQgYnVmZmVyLgotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDIgdHVubmVsZWQgaHcgYWNjZWxlcmF0aW9uOiB0aGUgcHJvY2VzcygpIGZ1bmN0aW9uIGlzCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICB0cmFuc3BhcmVudC4gVGhlIGVmZmVjdCBpbnRlcmZhY2UgaXMgb25seSB1c2VkIHRvCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICBjb250cm9sIHRoZSBlZmZlY3QgZW5naW5lLiBUaGlzIG1vZGUgaXMgcmVsZXZhbnQgZm9yCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICBnbG9iYWwgZWZmZWN0cyBhY3R1YWxseSBhcHBsaWVkIGJ5IHRoZSBhdWRpbwotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgaGFyZHdhcmUgb24gdGhlIG91dHB1dCBzdHJlYW0uCi0vLyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIHwgQXVkaW8gTW9kZSBpbmRpY2F0aW9uICAgICB8IDE4Li4xOSAgICB8IDAgbm9uZQotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDEgcmVxdWlyZXMgYXVkaW8gbW9kZSB1cGRhdGVzCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgMi4uMyByZXNlcnZlZAotLy8gICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICB8IEF1ZGlvIHNvdXJjZSBpbmRpY2F0aW9uICAgfCAyMC4uMjEgICAgfCAwIG5vbmUKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAxIHJlcXVpcmVzIGF1ZGlvIHNvdXJjZSB1cGRhdGVzCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgMi4uMyByZXNlcnZlZAotLy8gICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICB8IEVmZmVjdCBvZmZsb2FkIHN1cHBvcnRlZCAgfCAyMiAgICAgICAgfCAwIFRoZSBlZmZlY3QgY2Fubm90IGJlIG9mZmxvYWRlZCB0byBhbiBhdWRpbyBEU1AKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAxIFRoZSBlZmZlY3QgY2FuIGJlIG9mZmxvYWRlZCB0byBhbiBhdWRpbyBEU1AKLS8vICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgfCBQcm9jZXNzIGZ1bmN0aW9uIG5vdCAgICAgIHwgMjMgICAgICAgIHwgMCBUaGUgZWZmZWN0IGltcGxlbWVudHMgYSBwcm9jZXNzIGZ1bmN0aW9uLgotLy8gIHwgaW1wbGVtZW50ZWQgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDEgVGhlIGVmZmVjdCBkb2VzIG5vdCBpbXBsZW1lbnQgYSBwcm9jZXNzIGZ1bmN0aW9uOgotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgZW5hYmxpbmcgdGhlIGVmZmVjdCBoYXMgbm8gaW1wYWN0IG9uIGxhdGVuY3kgb3IKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgIENQVSBsb2FkLgotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgRWZmZWN0IGltcGxlbWVudGF0aW9ucyBzZXR0aW5nIHRoaXMgZmxhZyBkbyBub3QgaGF2ZQotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgdG8gaW1wbGVtZW50IGEgcHJvY2VzcyBmdW5jdGlvbi4KLS8vICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEluc2VydCBtb2RlCi0jZGVmaW5lIEVGRkVDVF9GTEFHX1RZUEVfU0hJRlQgICAgICAgICAgMAotI2RlZmluZSBFRkZFQ1RfRkxBR19UWVBFX1NJWkUgICAgICAgICAgIDMKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfVFlQRV9NQVNLICAgICAgICAgICAoKCgxIDw8IEVGRkVDVF9GTEFHX1RZUEVfU0laRSkgLTEpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgRUZGRUNUX0ZMQUdfVFlQRV9TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfVFlQRV9JTlNFUlQgICAgICAgICAoMCA8PCBFRkZFQ1RfRkxBR19UWVBFX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19UWVBFX0FVWElMSUFSWSAgICAgICgxIDw8IEVGRkVDVF9GTEFHX1RZUEVfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX1RZUEVfUkVQTEFDRSAgICAgICAgKDIgPDwgRUZGRUNUX0ZMQUdfVFlQRV9TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfVFlQRV9QUkVfUFJPQyAgICAgICAoMyA8PCBFRkZFQ1RfRkxBR19UWVBFX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19UWVBFX1BPU1RfUFJPQyAgICAgICg0IDw8IEVGRkVDVF9GTEFHX1RZUEVfU0hJRlQpCi0KLS8vIEluc2VydCBwcmVmZXJlbmNlCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0lOU0VSVF9TSElGVCAgICAgICAgKEVGRkVDVF9GTEFHX1RZUEVfU0hJRlQgKyBFRkZFQ1RfRkxBR19UWVBFX1NJWkUpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0lOU0VSVF9TSVpFICAgICAgICAgMwotI2RlZmluZSBFRkZFQ1RfRkxBR19JTlNFUlRfTUFTSyAgICAgICAgICgoKDEgPDwgRUZGRUNUX0ZMQUdfSU5TRVJUX1NJWkUpIC0xKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IEVGRkVDVF9GTEFHX0lOU0VSVF9TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfSU5TRVJUX0FOWSAgICAgICAgICAoMCA8PCBFRkZFQ1RfRkxBR19JTlNFUlRfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0lOU0VSVF9GSVJTVCAgICAgICAgKDEgPDwgRUZGRUNUX0ZMQUdfSU5TRVJUX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19JTlNFUlRfTEFTVCAgICAgICAgICgyIDw8IEVGRkVDVF9GTEFHX0lOU0VSVF9TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfSU5TRVJUX0VYQ0xVU0lWRSAgICAoMyA8PCBFRkZFQ1RfRkxBR19JTlNFUlRfU0hJRlQpCi0KLQotLy8gVm9sdW1lIGNvbnRyb2wKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfVk9MVU1FX1NISUZUICAgICAgICAoRUZGRUNUX0ZMQUdfSU5TRVJUX1NISUZUICsgRUZGRUNUX0ZMQUdfSU5TRVJUX1NJWkUpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX1ZPTFVNRV9TSVpFICAgICAgICAgMwotI2RlZmluZSBFRkZFQ1RfRkxBR19WT0xVTUVfTUFTSyAgICAgICAgICgoKDEgPDwgRUZGRUNUX0ZMQUdfVk9MVU1FX1NJWkUpIC0xKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IEVGRkVDVF9GTEFHX1ZPTFVNRV9TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfVk9MVU1FX0NUUkwgICAgICAgICAoMSA8PCBFRkZFQ1RfRkxBR19WT0xVTUVfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX1ZPTFVNRV9JTkQgICAgICAgICAgKDIgPDwgRUZGRUNUX0ZMQUdfVk9MVU1FX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19WT0xVTUVfTk9ORSAgICAgICAgICgwIDw8IEVGRkVDVF9GTEFHX1ZPTFVNRV9TSElGVCkKLQotLy8gRGV2aWNlIGluZGljYXRpb24KLSNkZWZpbmUgRUZGRUNUX0ZMQUdfREVWSUNFX1NISUZUICAgICAgICAoRUZGRUNUX0ZMQUdfVk9MVU1FX1NISUZUICsgRUZGRUNUX0ZMQUdfVk9MVU1FX1NJWkUpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0RFVklDRV9TSVpFICAgICAgICAgMwotI2RlZmluZSBFRkZFQ1RfRkxBR19ERVZJQ0VfTUFTSyAgICAgICAgICgoKDEgPDwgRUZGRUNUX0ZMQUdfREVWSUNFX1NJWkUpIC0xKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IEVGRkVDVF9GTEFHX0RFVklDRV9TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfREVWSUNFX0lORCAgICAgICAgICAoMSA8PCBFRkZFQ1RfRkxBR19ERVZJQ0VfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0RFVklDRV9OT05FICAgICAgICAgKDAgPDwgRUZGRUNUX0ZMQUdfREVWSUNFX1NISUZUKQotCi0vLyBTYW1wbGUgaW5wdXQgbW9kZXMKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfSU5QVVRfU0hJRlQgICAgICAgICAoRUZGRUNUX0ZMQUdfREVWSUNFX1NISUZUICsgRUZGRUNUX0ZMQUdfREVWSUNFX1NJWkUpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0lOUFVUX1NJWkUgICAgICAgICAgMgotI2RlZmluZSBFRkZFQ1RfRkxBR19JTlBVVF9NQVNLICAgICAgICAgICgoKDEgPDwgRUZGRUNUX0ZMQUdfSU5QVVRfU0laRSkgLTEpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgRUZGRUNUX0ZMQUdfSU5QVVRfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0lOUFVUX0RJUkVDVCAgICAgICAgKDEgPDwgRUZGRUNUX0ZMQUdfSU5QVVRfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0lOUFVUX1BST1ZJREVSICAgICAgKDIgPDwgRUZGRUNUX0ZMQUdfSU5QVVRfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0lOUFVUX0JPVEggICAgICAgICAgKDMgPDwgRUZGRUNUX0ZMQUdfSU5QVVRfU0hJRlQpCi0KLS8vIFNhbXBsZSBvdXRwdXQgbW9kZXMKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfT1VUUFVUX1NISUZUICAgICAgICAoRUZGRUNUX0ZMQUdfSU5QVVRfU0hJRlQgKyBFRkZFQ1RfRkxBR19JTlBVVF9TSVpFKQotI2RlZmluZSBFRkZFQ1RfRkxBR19PVVRQVVRfU0laRSAgICAgICAgIDIKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfT1VUUFVUX01BU0sgICAgICAgICAoKCgxIDw8IEVGRkVDVF9GTEFHX09VVFBVVF9TSVpFKSAtMSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBFRkZFQ1RfRkxBR19PVVRQVVRfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX09VVFBVVF9ESVJFQ1QgICAgICAgKDEgPDwgRUZGRUNUX0ZMQUdfT1VUUFVUX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19PVVRQVVRfUFJPVklERVIgICAgICgyIDw8IEVGRkVDVF9GTEFHX09VVFBVVF9TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfT1VUUFVUX0JPVEggICAgICAgICAoMyA8PCBFRkZFQ1RfRkxBR19PVVRQVVRfU0hJRlQpCi0KLS8vIEhhcmR3YXJlIGFjY2VsZXJhdGlvbiBtb2RlCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0hXX0FDQ19TSElGVCAgICAgICAgKEVGRkVDVF9GTEFHX09VVFBVVF9TSElGVCArIEVGRkVDVF9GTEFHX09VVFBVVF9TSVpFKQotI2RlZmluZSBFRkZFQ1RfRkxBR19IV19BQ0NfU0laRSAgICAgICAgIDIKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfSFdfQUNDX01BU0sgICAgICAgICAoKCgxIDw8IEVGRkVDVF9GTEFHX0hXX0FDQ19TSVpFKSAtMSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBFRkZFQ1RfRkxBR19IV19BQ0NfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0hXX0FDQ19TSU1QTEUgICAgICAgKDEgPDwgRUZGRUNUX0ZMQUdfSFdfQUNDX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19IV19BQ0NfVFVOTkVMICAgICAgICgyIDw8IEVGRkVDVF9GTEFHX0hXX0FDQ19TSElGVCkKLQotLy8gQXVkaW8gbW9kZSBpbmRpY2F0aW9uCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0FVRElPX01PREVfU0hJRlQgICAgKEVGRkVDVF9GTEFHX0hXX0FDQ19TSElGVCArIEVGRkVDVF9GTEFHX0hXX0FDQ19TSVpFKQotI2RlZmluZSBFRkZFQ1RfRkxBR19BVURJT19NT0RFX1NJWkUgICAgIDIKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfQVVESU9fTU9ERV9NQVNLICAgICAoKCgxIDw8IEVGRkVDVF9GTEFHX0FVRElPX01PREVfU0laRSkgLTEpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgRUZGRUNUX0ZMQUdfQVVESU9fTU9ERV9TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfQVVESU9fTU9ERV9JTkQgICAgICAoMSA8PCBFRkZFQ1RfRkxBR19BVURJT19NT0RFX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19BVURJT19NT0RFX05PTkUgICAgICgwIDw8IEVGRkVDVF9GTEFHX0FVRElPX01PREVfU0hJRlQpCi0KLS8vIEF1ZGlvIHNvdXJjZSBpbmRpY2F0aW9uCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0FVRElPX1NPVVJDRV9TSElGVCAgKEVGRkVDVF9GTEFHX0FVRElPX01PREVfU0hJRlQgKyBFRkZFQ1RfRkxBR19BVURJT19NT0RFX1NJWkUpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0FVRElPX1NPVVJDRV9TSVpFICAgMgotI2RlZmluZSBFRkZFQ1RfRkxBR19BVURJT19TT1VSQ0VfTUFTSyAgICgoKDEgPDwgRUZGRUNUX0ZMQUdfQVVESU9fU09VUkNFX1NJWkUpIC0xKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBFRkZFQ1RfRkxBR19BVURJT19TT1VSQ0VfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0FVRElPX1NPVVJDRV9JTkQgICAgKDEgPDwgRUZGRUNUX0ZMQUdfQVVESU9fU09VUkNFX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19BVURJT19TT1VSQ0VfTk9ORSAgICgwIDw8IEVGRkVDVF9GTEFHX0FVRElPX1NPVVJDRV9TSElGVCkKLQotLy8gRWZmZWN0IG9mZmxvYWQgaW5kaWNhdGlvbgotI2RlZmluZSBFRkZFQ1RfRkxBR19PRkZMT0FEX1NISUZUICAgICAgIChFRkZFQ1RfRkxBR19BVURJT19TT1VSQ0VfU0hJRlQgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZGRUNUX0ZMQUdfQVVESU9fU09VUkNFX1NJWkUpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX09GRkxPQURfU0laRSAgICAgICAgMQotI2RlZmluZSBFRkZFQ1RfRkxBR19PRkZMT0FEX01BU0sgICAgICAgICgoKDEgPDwgRUZGRUNUX0ZMQUdfT0ZGTE9BRF9TSVpFKSAtMSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgRUZGRUNUX0ZMQUdfT0ZGTE9BRF9TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfT0ZGTE9BRF9TVVBQT1JURUQgICAoMSA8PCBFRkZFQ1RfRkxBR19PRkZMT0FEX1NISUZUKQotCi0vLyBFZmZlY3QgaGFzIG5vIHByb2Nlc3MgaW5kaWNhdGlvbgotI2RlZmluZSBFRkZFQ1RfRkxBR19OT19QUk9DRVNTX1NISUZUICAgICAgIChFRkZFQ1RfRkxBR19PRkZMT0FEX1NISUZUICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGRkVDVF9GTEFHX09GRkxPQURfU0laRSkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfTk9fUFJPQ0VTU19TSVpFICAgICAgICAxCi0jZGVmaW5lIEVGRkVDVF9GTEFHX05PX1BST0NFU1NfTUFTSyAgICAgICAgKCgoMSA8PCBFRkZFQ1RfRkxBR19OT19QUk9DRVNTX1NJWkUpIC0xKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBFRkZFQ1RfRkxBR19OT19QUk9DRVNTX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19OT19QUk9DRVNTICAgICAgICAgICgxIDw8IEVGRkVDVF9GTEFHX05PX1BST0NFU1NfU0hJRlQpCi0KICNkZWZpbmUgRUZGRUNUX01BS0VfQVBJX1ZFUlNJT04oTSwgbSkgICgoKE0pPDwxNikgfCAoKG0pICYgMHhGRkZGKSkKICNkZWZpbmUgRUZGRUNUX0FQSV9WRVJTSU9OX01BSk9SKHYpICAgICgodik+PjE2KQogI2RlZmluZSBFRkZFQ1RfQVBJX1ZFUlNJT05fTUlOT1IodikgICAgKChtKSAmIDB4RkZGRikKIAogCi0KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vICAgICAgRWZmZWN0IGNvbnRyb2wgaW50ZXJmYWNlCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkBAIC0yODgsMTUgKzY4LDYgQEAKIC8vIHR5cGUgYW5kIHJldHVybiBpdHMgYWRkcmVzcyBhcyBlZmZlY3RfaGFuZGxlX3QKIHR5cGVkZWYgc3RydWN0IGVmZmVjdF9pbnRlcmZhY2VfcyAqKmVmZmVjdF9oYW5kbGVfdDsKIAotCi0vLyBGb3J3YXJkIGRlZmluaXRpb24gb2YgdHlwZSBhdWRpb19idWZmZXJfdAotdHlwZWRlZiBzdHJ1Y3QgYXVkaW9fYnVmZmVyX3MgYXVkaW9fYnVmZmVyX3Q7Ci0KLQotCi0KLQotCiAvLyBFZmZlY3QgY29udHJvbCBpbnRlcmZhY2UgZGVmaW5pdGlvbgogc3RydWN0IGVmZmVjdF9pbnRlcmZhY2VfcyB7CiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTQyOCw0OTkgKzE5OSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fYnVmZmVyX3QgKm91dEJ1ZmZlcik7CiB9OwogCi0KLS8vCi0vLy0tLSBTdGFuZGFyZGl6ZWQgY29tbWFuZCBjb2RlcyBmb3IgY29tbWFuZCgpIGZ1bmN0aW9uCi0vLwotZW51bSBlZmZlY3RfY29tbWFuZF9lIHsKLSAgIEVGRkVDVF9DTURfSU5JVCwgICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgZWZmZWN0IGVuZ2luZQotICAgRUZGRUNUX0NNRF9TRVRfQ09ORklHLCAgICAgICAgICAgLy8gY29uZmlndXJlIGVmZmVjdCBlbmdpbmUgKHNlZSBlZmZlY3RfY29uZmlnX3QpCi0gICBFRkZFQ1RfQ01EX1JFU0VULCAgICAgICAgICAgICAgICAvLyByZXNldCBlZmZlY3QgZW5naW5lCi0gICBFRkZFQ1RfQ01EX0VOQUJMRSwgICAgICAgICAgICAgICAvLyBlbmFibGUgZWZmZWN0IHByb2Nlc3MKLSAgIEVGRkVDVF9DTURfRElTQUJMRSwgICAgICAgICAgICAgIC8vIGRpc2FibGUgZWZmZWN0IHByb2Nlc3MKLSAgIEVGRkVDVF9DTURfU0VUX1BBUkFNLCAgICAgICAgICAgIC8vIHNldCBwYXJhbWV0ZXIgaW1tZWRpYXRlbHkgKHNlZSBlZmZlY3RfcGFyYW1fdCkKLSAgIEVGRkVDVF9DTURfU0VUX1BBUkFNX0RFRkVSUkVELCAgIC8vIHNldCBwYXJhbWV0ZXIgZGVmZXJyZWQKLSAgIEVGRkVDVF9DTURfU0VUX1BBUkFNX0NPTU1JVCwgICAgIC8vIGNvbW1pdCBwcmV2aW91cyBzZXQgcGFyYW1ldGVyIGRlZmVycmVkCi0gICBFRkZFQ1RfQ01EX0dFVF9QQVJBTSwgICAgICAgICAgICAvLyBnZXQgcGFyYW1ldGVyCi0gICBFRkZFQ1RfQ01EX1NFVF9ERVZJQ0UsICAgICAgICAgICAvLyBzZXQgYXVkaW8gZGV2aWNlIChzZWUgYXVkaW8uaCwgYXVkaW9fZGV2aWNlc190KQotICAgRUZGRUNUX0NNRF9TRVRfVk9MVU1FLCAgICAgICAgICAgLy8gc2V0IHZvbHVtZQotICAgRUZGRUNUX0NNRF9TRVRfQVVESU9fTU9ERSwgICAgICAgLy8gc2V0IHRoZSBhdWRpbyBtb2RlIChub3JtYWwsIHJpbmcsIC4uLikKLSAgIEVGRkVDVF9DTURfU0VUX0NPTkZJR19SRVZFUlNFLCAgIC8vIGNvbmZpZ3VyZSBlZmZlY3QgZW5naW5lIHJldmVyc2Ugc3RyZWFtKHNlZSBlZmZlY3RfY29uZmlnX3QpCi0gICBFRkZFQ1RfQ01EX1NFVF9JTlBVVF9ERVZJQ0UsICAgICAvLyBzZXQgY2FwdHVyZSBkZXZpY2UgKHNlZSBhdWRpby5oLCBhdWRpb19kZXZpY2VzX3QpCi0gICBFRkZFQ1RfQ01EX0dFVF9DT05GSUcsICAgICAgICAgICAvLyByZWFkIGVmZmVjdCBlbmdpbmUgY29uZmlndXJhdGlvbgotICAgRUZGRUNUX0NNRF9HRVRfQ09ORklHX1JFVkVSU0UsICAgLy8gcmVhZCBjb25maWd1cmUgZWZmZWN0IGVuZ2luZSByZXZlcnNlIHN0cmVhbSBjb25maWd1cmF0aW9uCi0gICBFRkZFQ1RfQ01EX0dFVF9GRUFUVVJFX1NVUFBPUlRFRF9DT05GSUdTLC8vIGdldCBhbGwgc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb25zIGZvciBhIGZlYXR1cmUuCi0gICBFRkZFQ1RfQ01EX0dFVF9GRUFUVVJFX0NPTkZJRywgICAvLyBnZXQgY3VycmVudCBmZWF0dXJlIGNvbmZpZ3VyYXRpb24KLSAgIEVGRkVDVF9DTURfU0VUX0ZFQVRVUkVfQ09ORklHLCAgIC8vIHNldCBjdXJyZW50IGZlYXR1cmUgY29uZmlndXJhdGlvbgotICAgRUZGRUNUX0NNRF9TRVRfQVVESU9fU09VUkNFLCAgICAgLy8gc2V0IHRoZSBhdWRpbyBzb3VyY2UgKHNlZSBhdWRpby5oLCBhdWRpb19zb3VyY2VfdCkKLSAgIEVGRkVDVF9DTURfT0ZGTE9BRCwgICAgICAgICAgICAgIC8vIHNldCBpZiBlZmZlY3QgdGhyZWFkIGlzIGFuIG9mZmxvYWQgb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VuZCB0aGUgaW9IYW5kbGUgb2YgdGhlIGVmZmVjdCB0aHJlYWQKLSAgIEVGRkVDVF9DTURfRklSU1RfUFJPUFJJRVRBUlkgPSAweDEwMDAwIC8vIGZpcnN0IHByb3ByaWV0YXJ5IGNvbW1hbmQgY29kZQotfTsKLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gY29tbWFuZDogRUZGRUNUX0NNRF9JTklUCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBkZXNjcmlwdGlvbjoKLS8vICBJbml0aWFsaXplIGVmZmVjdCBlbmdpbmU6IEFsbCBjb25maWd1cmF0aW9ucyByZXR1cm4gdG8gZGVmYXVsdAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29tbWFuZCBmb3JtYXQ6Ci0vLyAgc2l6ZTogMAotLy8gIGRhdGE6IE4vQQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gcmVwbHkgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZihpbnQpCi0vLyAgZGF0YTogc3RhdHVzCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBjb21tYW5kOiBFRkZFQ1RfQ01EX1NFVF9DT05GSUcKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGRlc2NyaXB0aW9uOgotLy8gIEFwcGx5IG5ldyBhdWRpbyBwYXJhbWV0ZXJzIGNvbmZpZ3VyYXRpb25zIGZvciBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbW1hbmQgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZihlZmZlY3RfY29uZmlnX3QpCi0vLyAgZGF0YTogZWZmZWN0X2NvbmZpZ190Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyByZXBseSBmb3JtYXQ6Ci0vLyAgc2l6ZTogc2l6ZW9mKGludCkKLS8vICBkYXRhOiBzdGF0dXMKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGNvbW1hbmQ6IEVGRkVDVF9DTURfUkVTRVQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGRlc2NyaXB0aW9uOgotLy8gIFJlc2V0IHRoZSBlZmZlY3QgZW5naW5lLiBLZWVwIGNvbmZpZ3VyYXRpb24gYnV0IHJlc2V0cyBzdGF0ZSBhbmQgYnVmZmVyIGNvbnRlbnQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbW1hbmQgZm9ybWF0OgotLy8gIHNpemU6IDAKLS8vICBkYXRhOiBOL0EKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHJlcGx5IGZvcm1hdDoKLS8vICBzaXplOiAwCi0vLyAgZGF0YTogTi9BCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBjb21tYW5kOiBFRkZFQ1RfQ01EX0VOQUJMRQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGVzY3JpcHRpb246Ci0vLyAgRW5hYmxlIHRoZSBwcm9jZXNzLiBDYWxsZWQgYnkgdGhlIGZyYW1ld29yayBiZWZvcmUgdGhlIGZpcnN0IGNhbGwgdG8gcHJvY2VzcygpCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiAwCi0vLyAgZGF0YTogTi9BCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyByZXBseSBmb3JtYXQ6Ci0vLyAgc2l6ZTogc2l6ZW9mKGludCkKLS8vICBkYXRhOiBzdGF0dXMKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGNvbW1hbmQ6IEVGRkVDVF9DTURfRElTQUJMRQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGVzY3JpcHRpb246Ci0vLyAgRGlzYWJsZSB0aGUgcHJvY2Vzcy4gQ2FsbGVkIGJ5IHRoZSBmcmFtZXdvcmsgYWZ0ZXIgdGhlIGxhc3QgY2FsbCB0byBwcm9jZXNzKCkKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbW1hbmQgZm9ybWF0OgotLy8gIHNpemU6IDAKLS8vICBkYXRhOiBOL0EKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHJlcGx5IGZvcm1hdDoKLS8vICBzaXplOiBzaXplb2YoaW50KQotLy8gIGRhdGE6IHN0YXR1cwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gY29tbWFuZDogRUZGRUNUX0NNRF9TRVRfUEFSQU0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGRlc2NyaXB0aW9uOgotLy8gIFNldCBhIHBhcmFtZXRlciBhbmQgYXBwbHkgaXQgaW1tZWRpYXRlbHkKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbW1hbmQgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZihlZmZlY3RfcGFyYW1fdCkgKyBzaXplIG9mIHBhcmFtIGFuZCB2YWx1ZQotLy8gIGRhdGE6IGVmZmVjdF9wYXJhbV90ICsgcGFyYW0gKyB2YWx1ZS4gU2VlIGVmZmVjdF9wYXJhbV90IGRlZmluaXRpb24gYmVsb3cgZm9yIHZhbHVlIG9mZnNldAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gcmVwbHkgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZihpbnQpCi0vLyAgZGF0YTogc3RhdHVzCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBjb21tYW5kOiBFRkZFQ1RfQ01EX1NFVF9QQVJBTV9ERUZFUlJFRAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGVzY3JpcHRpb246Ci0vLyAgU2V0IGEgcGFyYW1ldGVyIGJ1dCBhcHBseSBpdCBvbmx5IHdoZW4gcmVjZWl2aW5nIEVGRkVDVF9DTURfU0VUX1BBUkFNX0NPTU1JVCBjb21tYW5kCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiBzaXplb2YoZWZmZWN0X3BhcmFtX3QpICsgc2l6ZSBvZiBwYXJhbSBhbmQgdmFsdWUKLS8vICBkYXRhOiBlZmZlY3RfcGFyYW1fdCArIHBhcmFtICsgdmFsdWUuIFNlZSBlZmZlY3RfcGFyYW1fdCBkZWZpbml0aW9uIGJlbG93IGZvciB2YWx1ZSBvZmZzZXQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHJlcGx5IGZvcm1hdDoKLS8vICBzaXplOiAwCi0vLyAgZGF0YTogTi9BCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBjb21tYW5kOiBFRkZFQ1RfQ01EX1NFVF9QQVJBTV9DT01NSVQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGRlc2NyaXB0aW9uOgotLy8gIEFwcGx5IGFsbCBwcmV2aW91c2x5IHJlY2VpdmVkIEVGRkVDVF9DTURfU0VUX1BBUkFNX0RFRkVSUkVEIGNvbW1hbmRzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiAwCi0vLyAgZGF0YTogTi9BCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyByZXBseSBmb3JtYXQ6Ci0vLyAgc2l6ZTogc2l6ZW9mKGludCkKLS8vICBkYXRhOiBzdGF0dXMKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGNvbW1hbmQ6IEVGRkVDVF9DTURfR0VUX1BBUkFNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBkZXNjcmlwdGlvbjoKLS8vICBHZXQgYSBwYXJhbWV0ZXIgdmFsdWUKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbW1hbmQgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZihlZmZlY3RfcGFyYW1fdCkgKyBzaXplIG9mIHBhcmFtCi0vLyAgZGF0YTogZWZmZWN0X3BhcmFtX3QgKyBwYXJhbQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gcmVwbHkgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZihlZmZlY3RfcGFyYW1fdCkgKyBzaXplIG9mIHBhcmFtIGFuZCB2YWx1ZQotLy8gIGRhdGE6IGVmZmVjdF9wYXJhbV90ICsgcGFyYW0gKyB2YWx1ZS4gU2VlIGVmZmVjdF9wYXJhbV90IGRlZmluaXRpb24gYmVsb3cgZm9yIHZhbHVlIG9mZnNldAotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gY29tbWFuZDogRUZGRUNUX0NNRF9TRVRfREVWSUNFCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBkZXNjcmlwdGlvbjoKLS8vICBTZXQgdGhlIHJlbmRlcmluZyBkZXZpY2UgdGhlIGF1ZGlvIG91dHB1dCBwYXRoIGlzIGNvbm5lY3RlZCB0by4gU2VlIGF1ZGlvLmgsIGF1ZGlvX2RldmljZXNfdAotLy8gIGZvciBkZXZpY2UgdmFsdWVzLgotLy8gIFRoZSBlZmZlY3QgaW1wbGVtZW50YXRpb24gbXVzdCBzZXQgRUZGRUNUX0ZMQUdfREVWSUNFX0lORCBmbGFnIGluIGl0cyBkZXNjcmlwdG9yIHRvIHJlY2VpdmUgdGhpcwotLy8gIGNvbW1hbmQgd2hlbiB0aGUgZGV2aWNlIGNoYW5nZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbW1hbmQgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZih1aW50MzJfdCkKLS8vICBkYXRhOiB1aW50MzJfdAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gcmVwbHkgZm9ybWF0OgotLy8gIHNpemU6IDAKLS8vICBkYXRhOiBOL0EKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGNvbW1hbmQ6IEVGRkVDVF9DTURfU0VUX1ZPTFVNRQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGVzY3JpcHRpb246Ci0vLyAgU2V0IGFuZCBnZXQgdm9sdW1lLiBVc2VkIGJ5IGF1ZGlvIGZyYW1ld29yayB0byBkZWxlZ2F0ZSB2b2x1bWUgY29udHJvbCB0byBlZmZlY3QgZW5naW5lLgotLy8gIFRoZSBlZmZlY3QgaW1wbGVtZW50YXRpb24gbXVzdCBzZXQgRUZGRUNUX0ZMQUdfVk9MVU1FX0lORCBvciBFRkZFQ1RfRkxBR19WT0xVTUVfQ1RSTCBmbGFnIGluCi0vLyAgaXRzIGRlc2NyaXB0b3IgdG8gcmVjZWl2ZSB0aGlzIGNvbW1hbmQgYmVmb3JlIGV2ZXJ5IGNhbGwgdG8gcHJvY2VzcygpIGZ1bmN0aW9uCi0vLyAgSWYgRUZGRUNUX0ZMQUdfVk9MVU1FX0NUUkwgZmxhZyBpcyBzZXQgaW4gdGhlIGVmZmVjdCBkZXNjcmlwdG9yLCB0aGUgZWZmZWN0IGVuZ2luZSBtdXN0IHJldHVybgotLy8gIHRoZSB2b2x1bWUgdGhhdCBzaG91bGQgYmUgYXBwbGllZCBiZWZvcmUgdGhlIGVmZmVjdCBpcyBwcm9jZXNzZWQuIFRoZSBvdmVyYWxsIHZvbHVtZSAodGhlIHZvbHVtZQotLy8gIGFjdHVhbGx5IGFwcGxpZWQgYnkgdGhlIGVmZmVjdCBlbmdpbmUgbXVsdGlwbGllZCBieSB0aGUgcmV0dXJuZWQgdmFsdWUpIHNob3VsZCBtYXRjaCB0aGUgdmFsdWUKLS8vICBpbmRpY2F0ZWQgaW4gdGhlIGNvbW1hbmQuCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiBuICogc2l6ZW9mKHVpbnQzMl90KQotLy8gIGRhdGE6IHZvbHVtZSBmb3IgZWFjaCBjaGFubmVsIGRlZmluZWQgaW4gZWZmZWN0X2NvbmZpZ190IGZvciBvdXRwdXQgYnVmZmVyIGV4cHJlc3NlZCBpbgotLy8gICAgICA4LjI0IGZpeGVkIHBvaW50IGZvcm1hdAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gcmVwbHkgZm9ybWF0OgotLy8gIHNpemU6IG4gKiBzaXplb2YodWludDMyX3QpIC8gMAotLy8gIGRhdGE6IC0gaWYgRUZGRUNUX0ZMQUdfVk9MVU1FX0NUUkwgaXMgc2V0IGluIGVmZmVjdCBkZXNjcmlwdG9yOgotLy8gICAgICAgICAgICAgIHZvbHVtZSBmb3IgZWFjaCBjaGFubmVsIGRlZmluZWQgaW4gZWZmZWN0X2NvbmZpZ190IGZvciBvdXRwdXQgYnVmZmVyIGV4cHJlc3NlZCBpbgotLy8gICAgICAgICAgICAgIDguMjQgZml4ZWQgcG9pbnQgZm9ybWF0Ci0vLyAgICAgICAgLSBpZiBFRkZFQ1RfRkxBR19WT0xVTUVfQ1RSTCBpcyBub3Qgc2V0IGluIGVmZmVjdCBkZXNjcmlwdG9yOgotLy8gICAgICAgICAgICAgIE4vQQotLy8gIEl0IGlzIGxlZ2FsIHRvIHJlY2VpdmUgYSBudWxsIHBvaW50ZXIgYXMgcFJlcGx5RGF0YSBpbiB3aGljaCBjYXNlIHRoZSBlZmZlY3QgZnJhbWV3b3JrIGhhcwotLy8gIGRlbGVnYXRlZCB2b2x1bWUgY29udHJvbCB0byBhbm90aGVyIGVmZmVjdAotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gY29tbWFuZDogRUZGRUNUX0NNRF9TRVRfQVVESU9fTU9ERQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGVzY3JpcHRpb246Ci0vLyAgU2V0IHRoZSBhdWRpbyBtb2RlLiBUaGUgZWZmZWN0IGltcGxlbWVudGF0aW9uIG11c3Qgc2V0IEVGRkVDVF9GTEFHX0FVRElPX01PREVfSU5EIGZsYWcgaW4gaXRzCi0vLyAgZGVzY3JpcHRvciB0byByZWNlaXZlIHRoaXMgY29tbWFuZCB3aGVuIHRoZSBhdWRpbyBtb2RlIGNoYW5nZXMuCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiBzaXplb2YodWludDMyX3QpCi0vLyAgZGF0YTogYXVkaW9fbW9kZV90Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyByZXBseSBmb3JtYXQ6Ci0vLyAgc2l6ZTogMAotLy8gIGRhdGE6IE4vQQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gY29tbWFuZDogRUZGRUNUX0NNRF9TRVRfQ09ORklHX1JFVkVSU0UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGRlc2NyaXB0aW9uOgotLy8gIEFwcGx5IG5ldyBhdWRpbyBwYXJhbWV0ZXJzIGNvbmZpZ3VyYXRpb25zIGZvciBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgb2YgcmV2ZXJzZSBzdHJlYW0uCi0vLyAgQW4gZXhhbXBsZSBvZiByZXZlcnNlIHN0cmVhbSBpcyB0aGUgZWNobyByZWZlcmVuY2Ugc3VwcGxpZWQgdG8gYW4gQWNvdXN0aWMgRWNobyBDYW5jZWxlci4KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbW1hbmQgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZihlZmZlY3RfY29uZmlnX3QpCi0vLyAgZGF0YTogZWZmZWN0X2NvbmZpZ190Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyByZXBseSBmb3JtYXQ6Ci0vLyAgc2l6ZTogc2l6ZW9mKGludCkKLS8vICBkYXRhOiBzdGF0dXMKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGNvbW1hbmQ6IEVGRkVDVF9DTURfU0VUX0lOUFVUX0RFVklDRQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGVzY3JpcHRpb246Ci0vLyAgU2V0IHRoZSBjYXB0dXJlIGRldmljZSB0aGUgYXVkaW8gaW5wdXQgcGF0aCBpcyBjb25uZWN0ZWQgdG8uIFNlZSBhdWRpby5oLCBhdWRpb19kZXZpY2VzX3QKLS8vICBmb3IgZGV2aWNlIHZhbHVlcy4KLS8vICBUaGUgZWZmZWN0IGltcGxlbWVudGF0aW9uIG11c3Qgc2V0IEVGRkVDVF9GTEFHX0RFVklDRV9JTkQgZmxhZyBpbiBpdHMgZGVzY3JpcHRvciB0byByZWNlaXZlIHRoaXMKLS8vICBjb21tYW5kIHdoZW4gdGhlIGRldmljZSBjaGFuZ2VzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiBzaXplb2YodWludDMyX3QpCi0vLyAgZGF0YTogdWludDMyX3QKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHJlcGx5IGZvcm1hdDoKLS8vICBzaXplOiAwCi0vLyAgZGF0YTogTi9BCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBjb21tYW5kOiBFRkZFQ1RfQ01EX0dFVF9DT05GSUcKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGRlc2NyaXB0aW9uOgotLy8gIFJlYWQgYXVkaW8gcGFyYW1ldGVycyBjb25maWd1cmF0aW9ucyBmb3IgaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiAwCi0vLyAgZGF0YTogTi9BCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyByZXBseSBmb3JtYXQ6Ci0vLyAgc2l6ZTogc2l6ZW9mKGVmZmVjdF9jb25maWdfdCkKLS8vICBkYXRhOiBlZmZlY3RfY29uZmlnX3QKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGNvbW1hbmQ6IEVGRkVDVF9DTURfR0VUX0NPTkZJR19SRVZFUlNFCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBkZXNjcmlwdGlvbjoKLS8vICBSZWFkIGF1ZGlvIHBhcmFtZXRlcnMgY29uZmlndXJhdGlvbnMgZm9yIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycyBvZiByZXZlcnNlIHN0cmVhbQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29tbWFuZCBmb3JtYXQ6Ci0vLyAgc2l6ZTogMAotLy8gIGRhdGE6IE4vQQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gcmVwbHkgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZihlZmZlY3RfY29uZmlnX3QpCi0vLyAgZGF0YTogZWZmZWN0X2NvbmZpZ190Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBjb21tYW5kOiBFRkZFQ1RfQ01EX0dFVF9GRUFUVVJFX1NVUFBPUlRFRF9DT05GSUdTCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBkZXNjcmlwdGlvbjoKLS8vICBRdWVyaWVzIGZvciBzdXBwb3J0ZWQgY29uZmlndXJhdGlvbnMgZm9yIGEgcGFydGljdWxhciBmZWF0dXJlIChlLmcuIGdldCB0aGUgc3VwcG9ydGVkCi0vLyBjb21iaW5hdGlvbnMgb2YgbWFpbiBhbmQgYXV4aWxpYXJ5IGNoYW5uZWxzIGZvciBhIG5vaXNlIHN1cHByZXNzb3IpLgotLy8gVGhlIGNvbW1hbmQgcGFyYW1ldGVyIGlzIHRoZSBmZWF0dXJlIGlkZW50aWZpZXIgKFNlZSBlZmZlY3RfZmVhdHVyZV9lIGZvciBhIGxpc3Qgb2YgZGVmaW5lZAotLy8gZmVhdHVyZXMpIGZvbGxvd2VkIGJ5IHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3IgdG8gcmV0dXJuLgotLy8gVGhlIHJlcGx5IGlzIGNvbXBvc2VkIG9mOgotLy8gIC0gc3RhdHVzICh1aW50MzJfdCk6Ci0vLyAgICAgICAgICAtIDAgaWYgZmVhdHVyZSBpcyBzdXBwb3J0ZWQKLS8vICAgICAgICAgIC0gLUVOT1NZUyBpZiB0aGUgZmVhdHVyZSBpcyBub3Qgc3VwcG9ydGVkLAotLy8gICAgICAgICAgLSAtRU5PTUVNIGlmIHRoZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBidXQgdGhlIHRvdGFsIG51bWJlciBvZiBzdXBwb3J0ZWQgY29uZmlndXJhdGlvbnMKLS8vICAgICAgICAgIGV4Y2VlZHMgdGhlIG1heGltdW0gbnVtYmVyIGluZGljYXRlZCBieSB0aGUgY2FsbGVyLgotLy8gIC0gdG90YWwgbnVtYmVyIG9mIHN1cHBvcnRlZCBjb25maWd1cmF0aW9ucyAodWludDMyX3QpCi0vLyAgLSBhbiBhcnJheSBvZiBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3JzLgotLy8gVGhlIGFjdHVhbCBudW1iZXIgb2YgZGVzY3JpcHRvcnMgcmV0dXJuZWQgbXVzdCBub3QgZXhjZWVkIHRoZSBtYXhpbXVtIG51bWJlciBpbmRpY2F0ZWQgYnkKLS8vIHRoZSBjYWxsZXIuCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiAyIHggc2l6ZW9mKHVpbnQzMl90KQotLy8gIGRhdGE6IGVmZmVjdF9mZWF0dXJlX2UgKyBtYXhpbXVtIG51bWJlciBvZiBjb25maWd1cmF0aW9ucyB0byByZXR1cm4KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHJlcGx5IGZvcm1hdDoKLS8vICBzaXplOiAyIHggc2l6ZW9mKHVpbnQzMl90KSArIG4geCBzaXplb2YgKDxjb25maWcgZGVzY3JpcHRvcj4pCi0vLyAgZGF0YTogc3RhdHVzICsgdG90YWwgbnVtYmVyIG9mIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCArIGFycmF5IG9mIG4gY29uZmlnIGRlc2NyaXB0b3JzCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBjb21tYW5kOiBFRkZFQ1RfQ01EX0dFVF9GRUFUVVJFX0NPTkZJRwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGVzY3JpcHRpb246Ci0vLyAgUmV0cmlldmVzIGN1cnJlbnQgY29uZmlndXJhdGlvbiBmb3IgYSBnaXZlbiBmZWF0dXJlLgotLy8gVGhlIHJlcGx5IHN0YXR1cyBpczoKLS8vICAgICAgLSAwIGlmIGZlYXR1cmUgaXMgc3VwcG9ydGVkCi0vLyAgICAgIC0gLUVOT1NZUyBpZiB0aGUgZmVhdHVyZSBpcyBub3Qgc3VwcG9ydGVkLAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29tbWFuZCBmb3JtYXQ6Ci0vLyAgc2l6ZTogc2l6ZW9mKHVpbnQzMl90KQotLy8gIGRhdGE6IGVmZmVjdF9mZWF0dXJlX2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHJlcGx5IGZvcm1hdDoKLS8vICBzaXplOiBzaXplb2YodWludDMyX3QpICsgc2l6ZW9mICg8Y29uZmlnIGRlc2NyaXB0b3I+KQotLy8gIGRhdGE6IHN0YXR1cyArIGNvbmZpZyBkZXNjcmlwdG9yCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBjb21tYW5kOiBFRkZFQ1RfQ01EX1NFVF9GRUFUVVJFX0NPTkZJRwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGVzY3JpcHRpb246Ci0vLyAgU2V0cyBjdXJyZW50IGNvbmZpZ3VyYXRpb24gZm9yIGEgZ2l2ZW4gZmVhdHVyZS4KLS8vIFRoZSByZXBseSBzdGF0dXMgaXM6Ci0vLyAgICAgIC0gMCBpZiBmZWF0dXJlIGlzIHN1cHBvcnRlZAotLy8gICAgICAtIC1FTk9TWVMgaWYgdGhlIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCwKLS8vICAgICAgLSAtRUlOVkFMIGlmIHRoZSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbW1hbmQgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZih1aW50MzJfdCkgKyBzaXplb2YgKDxjb25maWcgZGVzY3JpcHRvcj4pCi0vLyAgZGF0YTogZWZmZWN0X2ZlYXR1cmVfZSArIGNvbmZpZyBkZXNjcmlwdG9yCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyByZXBseSBmb3JtYXQ6Ci0vLyAgc2l6ZTogc2l6ZW9mKHVpbnQzMl90KQotLy8gIGRhdGE6IHN0YXR1cwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gY29tbWFuZDogRUZGRUNUX0NNRF9TRVRfQVVESU9fU09VUkNFCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBkZXNjcmlwdGlvbjoKLS8vICBTZXQgdGhlIGF1ZGlvIHNvdXJjZSB0aGUgY2FwdHVyZSBwYXRoIGlzIGNvbmZpZ3VyZWQgZm9yIChDYW1jb3JkZXIsIHZvaWNlIHJlY29nbml0aW9uLi4uKS4KLS8vICBTZWUgYXVkaW8uaCwgYXVkaW9fc291cmNlX3QgZm9yIHZhbHVlcy4KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbW1hbmQgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZih1aW50MzJfdCkKLS8vICBkYXRhOiB1aW50MzJfdAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gcmVwbHkgZm9ybWF0OgotLy8gIHNpemU6IDAKLS8vICBkYXRhOiBOL0EKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGNvbW1hbmQ6IEVGRkVDVF9DTURfT0ZGTE9BRAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGVzY3JpcHRpb246Ci0vLyAgMS5pbmRpY2F0ZSBpZiB0aGUgcGxheWJhY2sgdGhyZWFkIHRoZSBlZmZlY3QgaXMgYXR0YWNoZWQgdG8gaXMgb2ZmbG9hZGVkIG9yIG5vdAotLy8gIDIudXBkYXRlIHRoZSBpbyBoYW5kbGUgb2YgdGhlIHBsYXliYWNrIHRocmVhZCB0aGUgZWZmZWN0IGlzIGF0dGFjaGVkIHRvCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiBzaXplb2YoZWZmZWN0X29mZmxvYWRfcGFyYW1fdCkKLS8vICBkYXRhOiBlZmZlY3Rfb2ZmbG9hZF9wYXJhbV90Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyByZXBseSBmb3JtYXQ6Ci0vLyAgc2l6ZTogc2l6ZW9mKHVpbnQzMl90KQotLy8gIGRhdGE6IHVpbnQzMl90Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kOiBFRkZFQ1RfQ01EX0ZJUlNUX1BST1BSSUVUQVJZCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBkZXNjcmlwdGlvbjoKLS8vICBBbGwgcHJvcHJpZXRhcnkgZWZmZWN0IGNvbW1hbmRzIG11c3QgdXNlIGNvbW1hbmQgY29kZXMgYWJvdmUgdGhpcyB2YWx1ZS4gVGhlIHNpemUgYW5kIGZvcm1hdCBvZgotLy8gIGNvbW1hbmQgYW5kIHJlc3BvbnNlIGZpZWxkcyBpcyBmcmVlIGluIHRoaXMgY2FzZQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0KLS8vIEF1ZGlvIGJ1ZmZlciBkZXNjcmlwdG9yIHVzZWQgYnkgcHJvY2VzcygpLCBidWZmZXJQcm92aWRlcigpIGZ1bmN0aW9ucyBhbmQgYnVmZmVyX2NvbmZpZ190Ci0vLyBzdHJ1Y3R1cmUuIE11bHRpLWNoYW5uZWwgYXVkaW8gaXMgYWx3YXlzIGludGVybGVhdmVkLiBUaGUgY2hhbm5lbCBvcmRlciBpcyBmcm9tIExTQiB0byBNU0Igd2l0aAotLy8gcmVnYXJkIHRvIHRoZSBjaGFubmVsIG1hc2sgZGVmaW5pdGlvbiBpbiBhdWRpby5oLCBhdWRpb19jaGFubmVsX21hc2tfdCBlLmcgOgotLy8gU3RlcmVvOiBsZWZ0LCByaWdodAotLy8gNSBwb2ludCAxOiBmcm9udCBsZWZ0LCBmcm9udCByaWdodCwgZnJvbnQgY2VudGVyLCBsb3cgZnJlcXVlbmN5LCBiYWNrIGxlZnQsIGJhY2sgcmlnaHQKLS8vIFRoZSBidWZmZXIgc2l6ZSBpcyBleHByZXNzZWQgaW4gZnJhbWUgY291bnQsIGEgZnJhbWUgYmVpbmcgY29tcG9zZWQgb2Ygc2FtcGxlcyBmb3IgYWxsCi0vLyBjaGFubmVscyBhdCBhIGdpdmVuIHRpbWUuIEZyYW1lIHNpemUgZm9yIHVuc3BlY2lmaWVkIGZvcm1hdCAoQVVESU9fRk9STUFUX09USEVSKSBpcyA4IGJpdCBieQotLy8gZGVmaW5pdGlvbgotc3RydWN0IGF1ZGlvX2J1ZmZlcl9zIHsKLSAgICBzaXplX3QgICBmcmFtZUNvdW50OyAgICAgICAgLy8gbnVtYmVyIG9mIGZyYW1lcyBpbiBidWZmZXIKLSAgICB1bmlvbiB7Ci0gICAgICAgIHZvaWQqICAgICAgIHJhdzsgICAgICAgIC8vIHJhdyBwb2ludGVyIHRvIHN0YXJ0IG9mIGJ1ZmZlcgotICAgICAgICBpbnQzMl90KiAgICBzMzI7ICAgICAgICAvLyBwb2ludGVyIHRvIHNpZ25lZCAzMiBiaXQgZGF0YSBhdCBzdGFydCBvZiBidWZmZXIKLSAgICAgICAgaW50MTZfdCogICAgczE2OyAgICAgICAgLy8gcG9pbnRlciB0byBzaWduZWQgMTYgYml0IGRhdGEgYXQgc3RhcnQgb2YgYnVmZmVyCi0gICAgICAgIHVpbnQ4X3QqICAgIHU4OyAgICAgICAgIC8vIHBvaW50ZXIgdG8gdW5zaWduZWQgOCBiaXQgZGF0YSBhdCBzdGFydCBvZiBidWZmZXIKLSAgICB9OwotfTsKLQotLy8gVGhlIGJ1ZmZlcl9wcm92aWRlcl9zIHN0cnVjdHVyZSBjb250YWlucyBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZAotLy8gYnkgdGhlIGVmZmVjdCBlbmdpbmUgcHJvY2VzcygpIGZ1bmN0aW9uIHRvIHF1ZXJ5IGFuZCByZWxlYXNlIGlucHV0Ci0vLyBvciBvdXRwdXQgYXVkaW8gYnVmZmVyLgotLy8gVGhlIGdldEJ1ZmZlcigpIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byByZXRyaWV2ZSBhIGJ1ZmZlciB3aGVyZSBkYXRhCi0vLyBzaG91bGQgcmVhZCBmcm9tIG9yIHdyaXR0ZW4gdG8gYnkgcHJvY2VzcygpIGZ1bmN0aW9uLgotLy8gVGhlIHJlbGVhc2VCdWZmZXIoKSBmdW5jdGlvbiBNVVNUIGJlIGNhbGxlZCB3aGVuIHRoZSBidWZmZXIgcmV0cmlldmVkCi0vLyB3aXRoIGdldEJ1ZmZlcigpIGlzIG5vdCBuZWVkZWQgYW55bW9yZS4KLS8vIFRoZSBwcm9jZXNzIGZ1bmN0aW9uIHNob3VsZCB1c2UgdGhlIGJ1ZmZlciBwcm92aWRlciBtZWNoYW5pc20gdG8gcmV0cmlldmUKLS8vIGlucHV0IG9yIG91dHB1dCBidWZmZXIgaWYgdGhlIGluQnVmZmVyIG9yIG91dEJ1ZmZlciBwYXNzZWQgYXMgYXJndW1lbnQgaXMgTlVMTAotLy8gYW5kIHRoZSBidWZmZXIgY29uZmlndXJhdGlvbiAoYnVmZmVyX2NvbmZpZ190KSBnaXZlbiBieSB0aGUgRUZGRUNUX0NNRF9TRVRfQ09ORklHCi0vLyBjb21tYW5kIGRpZCBub3Qgc3BlY2lmeSBhbiBhdWRpbyBidWZmZXIuCi0KLXR5cGVkZWYgaW50MzJfdCAoKiBidWZmZXJfZnVuY3Rpb25fdCkodm9pZCAqY29va2llLCBhdWRpb19idWZmZXJfdCAqYnVmZmVyKTsKLQotdHlwZWRlZiBzdHJ1Y3QgYnVmZmVyX3Byb3ZpZGVyX3MgewotICAgIGJ1ZmZlcl9mdW5jdGlvbl90IGdldEJ1ZmZlcjsgICAgICAgLy8gcmV0cmlldmUgbmV4dCBidWZmZXIKLSAgICBidWZmZXJfZnVuY3Rpb25fdCByZWxlYXNlQnVmZmVyOyAgIC8vIHJlbGVhc2UgdXNlZCBidWZmZXIKLSAgICB2b2lkICAgICAgICpjb29raWU7ICAgICAgICAgICAgICAgIC8vIGZvciB1c2UgYnkgY2xpZW50IG9mIGJ1ZmZlciBwcm92aWRlciBmdW5jdGlvbnMKLX0gYnVmZmVyX3Byb3ZpZGVyX3Q7Ci0KLQotLy8gVGhlIGJ1ZmZlcl9jb25maWdfcyBzdHJ1Y3R1cmUgc3BlY2lmaWVzIHRoZSBpbnB1dCBvciBvdXRwdXQgYXVkaW8gZm9ybWF0Ci0vLyB0byBiZSB1c2VkIGJ5IHRoZSBlZmZlY3QgZW5naW5lLiBJdCBpcyBwYXJ0IG9mIHRoZSBlZmZlY3RfY29uZmlnX3QKLS8vIHN0cnVjdHVyZSB0aGF0IGRlZmluZXMgYm90aCBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlciBjb25maWd1cmF0aW9ucyBhbmQgaXMKLS8vIHBhc3NlZCBieSB0aGUgRUZGRUNUX0NNRF9TRVRfQ09ORklHIG9yIEVGRkVDVF9DTURfU0VUX0NPTkZJR19SRVZFUlNFIGNvbW1hbmQuCi10eXBlZGVmIHN0cnVjdCBidWZmZXJfY29uZmlnX3MgewotICAgIGF1ZGlvX2J1ZmZlcl90ICBidWZmZXI7ICAgICAvLyBidWZmZXIgZm9yIHVzZSBieSBwcm9jZXNzKCkgZnVuY3Rpb24gaWYgbm90IHBhc3NlZCBleHBsaWNpdGx5Ci0gICAgdWludDMyX3QgICBzYW1wbGluZ1JhdGU7ICAgIC8vIHNhbXBsaW5nIHJhdGUKLSAgICB1aW50MzJfdCAgIGNoYW5uZWxzOyAgICAgICAgLy8gY2hhbm5lbCBtYXNrIChzZWUgYXVkaW9fY2hhbm5lbF9tYXNrX3QgaW4gYXVkaW8uaCkKLSAgICBidWZmZXJfcHJvdmlkZXJfdCBidWZmZXJQcm92aWRlcjsgICAvLyBidWZmZXIgcHJvdmlkZXIKLSAgICB1aW50OF90ICAgIGZvcm1hdDsgICAgICAgICAgLy8gQXVkaW8gZm9ybWF0IChzZWUgYXVkaW9fZm9ybWF0X3QgaW4gYXVkaW8uaCkKLSAgICB1aW50OF90ICAgIGFjY2Vzc01vZGU7ICAgICAgLy8gcmVhZC93cml0ZSBvciBhY2N1bXVsYXRlIGluIGJ1ZmZlciAoZWZmZWN0X2J1ZmZlcl9hY2Nlc3NfZSkKLSAgICB1aW50MTZfdCAgIG1hc2s7ICAgICAgICAgICAgLy8gaW5kaWNhdGVzIHdoaWNoIG9mIHRoZSBhYm92ZSBmaWVsZHMgaXMgdmFsaWQKLX0gYnVmZmVyX2NvbmZpZ190OwotCi0vLyBWYWx1ZXMgZm9yICJhY2Nlc3NNb2RlIiBmaWVsZCBvZiBidWZmZXJfY29uZmlnX3Q6Ci0vLyAgIG92ZXJ3cml0ZSwgcmVhZCBvbmx5LCBhY2N1bXVsYXRlIChyZWFkL21vZGlmeS93cml0ZSkKLWVudW0gZWZmZWN0X2J1ZmZlcl9hY2Nlc3NfZSB7Ci0gICAgRUZGRUNUX0JVRkZFUl9BQ0NFU1NfV1JJVEUsCi0gICAgRUZGRUNUX0JVRkZFUl9BQ0NFU1NfUkVBRCwKLSAgICBFRkZFQ1RfQlVGRkVSX0FDQ0VTU19BQ0NVTVVMQVRFCi0KLX07Ci0KLS8vIGZlYXR1cmUgaWRlbnRpZmllcnMgZm9yIEVGRkVDVF9DTURfR0VUX0ZFQVRVUkVfU1VQUE9SVEVEX0NPTkZJR1MgY29tbWFuZAotZW51bSBlZmZlY3RfZmVhdHVyZV9lIHsKLSAgICBFRkZFQ1RfRkVBVFVSRV9BVVhfQ0hBTk5FTFMsIC8vIHN1cHBvcnRzIGF1eGlsaWFyeSBjaGFubmVscyAoZS5nLiBkdWFsIG1pYyBub2lzZSBzdXBwcmVzc29yKQotICAgIEVGRkVDVF9GRUFUVVJFX0NOVAotfTsKLQotLy8gRUZGRUNUX0ZFQVRVUkVfQVVYX0NIQU5ORUxTIGZlYXR1cmUgY29uZmlndXJhdGlvbiBkZXNjcmlwdG9yLiBEZXNjcmliZSBhIGNvbWJpbmF0aW9uCi0vLyBvZiBtYWluIGFuZCBhdXhpbGlhcnkgY2hhbm5lbHMgc3VwcG9ydGVkCi10eXBlZGVmIHN0cnVjdCBjaGFubmVsX2NvbmZpZ19zIHsKLSAgICBhdWRpb19jaGFubmVsX21hc2tfdCBtYWluX2NoYW5uZWxzOyAvLyBjaGFubmVsIG1hc2sgZm9yIG1haW4gY2hhbm5lbHMKLSAgICBhdWRpb19jaGFubmVsX21hc2tfdCBhdXhfY2hhbm5lbHM7ICAvLyBjaGFubmVsIG1hc2sgZm9yIGF1eGlsaWFyeSBjaGFubmVscwotfSBjaGFubmVsX2NvbmZpZ190OwotCi0KLS8vIFZhbHVlcyBmb3IgYml0IGZpZWxkICJtYXNrIiBpbiBidWZmZXJfY29uZmlnX3QuIElmIGEgYml0IGlzIHNldCwgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQKLS8vIGluIGJ1ZmZlcl9jb25maWdfdCBtdXN0IGJlIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGV4ZWN1dGluZyB0aGUgRUZGRUNUX0NNRF9TRVRfQ09ORklHIGNvbW1hbmQKLSNkZWZpbmUgRUZGRUNUX0NPTkZJR19CVUZGRVIgICAgMHgwMDAxICAvLyBidWZmZXIgZmllbGQgbXVzdCBiZSB0YWtlbiBpbnRvIGFjY291bnQKLSNkZWZpbmUgRUZGRUNUX0NPTkZJR19TTVBfUkFURSAgMHgwMDAyICAvLyBzYW1wbGluZ1JhdGUgZmllbGQgbXVzdCBiZSB0YWtlbiBpbnRvIGFjY291bnQKLSNkZWZpbmUgRUZGRUNUX0NPTkZJR19DSEFOTkVMUyAgMHgwMDA0ICAvLyBjaGFubmVscyBmaWVsZCBtdXN0IGJlIHRha2VuIGludG8gYWNjb3VudAotI2RlZmluZSBFRkZFQ1RfQ09ORklHX0ZPUk1BVCAgICAweDAwMDggIC8vIGZvcm1hdCBmaWVsZCBtdXN0IGJlIHRha2VuIGludG8gYWNjb3VudAotI2RlZmluZSBFRkZFQ1RfQ09ORklHX0FDQ19NT0RFICAweDAwMTAgIC8vIGFjY2Vzc01vZGUgZmllbGQgbXVzdCBiZSB0YWtlbiBpbnRvIGFjY291bnQKLSNkZWZpbmUgRUZGRUNUX0NPTkZJR19QUk9WSURFUiAgMHgwMDIwICAvLyBidWZmZXJQcm92aWRlciBmaWVsZCBtdXN0IGJlIHRha2VuIGludG8gYWNjb3VudAotI2RlZmluZSBFRkZFQ1RfQ09ORklHX0FMTCAoRUZGRUNUX0NPTkZJR19CVUZGRVIgfCBFRkZFQ1RfQ09ORklHX1NNUF9SQVRFIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZGRUNUX0NPTkZJR19DSEFOTkVMUyB8IEVGRkVDVF9DT05GSUdfRk9STUFUIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZGRUNUX0NPTkZJR19BQ0NfTU9ERSB8IEVGRkVDVF9DT05GSUdfUFJPVklERVIpCi0KLQotLy8gZWZmZWN0X2NvbmZpZ19zIHN0cnVjdHVyZSBkZXNjcmliZXMgdGhlIGZvcm1hdCBvZiB0aGUgcENtZERhdGEgYXJndW1lbnQgb2YgRUZGRUNUX0NNRF9TRVRfQ09ORklHCi0vLyBjb21tYW5kIHRvIGNvbmZpZ3VyZSBhdWRpbyBwYXJhbWV0ZXJzIGFuZCBidWZmZXJzIGZvciBlZmZlY3QgZW5naW5lIGlucHV0IGFuZCBvdXRwdXQuCi10eXBlZGVmIHN0cnVjdCBlZmZlY3RfY29uZmlnX3MgewotICAgIGJ1ZmZlcl9jb25maWdfdCAgIGlucHV0Q2ZnOwotICAgIGJ1ZmZlcl9jb25maWdfdCAgIG91dHB1dENmZzsKLX0gZWZmZWN0X2NvbmZpZ190OwotCi0KLS8vIGVmZmVjdF9wYXJhbV9zIHN0cnVjdHVyZSBkZXNjcmliZXMgdGhlIGZvcm1hdCBvZiB0aGUgcENtZERhdGEgYXJndW1lbnQgb2YgRUZGRUNUX0NNRF9TRVRfUEFSQU0KLS8vIGNvbW1hbmQgYW5kIHBDbWREYXRhIGFuZCBwUmVwbHlEYXRhIG9mIEVGRkVDVF9DTURfR0VUX1BBUkFNIGNvbW1hbmQuCi0vLyBwc2l6ZSBhbmQgdnNpemUgcmVwcmVzZW50IHRoZSBhY3R1YWwgc2l6ZSBvZiBwYXJhbWV0ZXIgYW5kIHZhbHVlLgotLy8KLS8vIE5PVEU6IHRoZSBzdGFydCBvZiB2YWx1ZSBmaWVsZCBpbnNpZGUgdGhlIGRhdGEgZmllbGQgaXMgYWx3YXlzIG9uIGEgMzIgYml0IGJvdW5kYXJ5OgotLy8KLS8vICArLS0tLS0tLS0tLS0rCi0vLyAgfCBzdGF0dXMgICAgfCBzaXplb2YoaW50KQotLy8gICstLS0tLS0tLS0tLSsKLS8vICB8IHBzaXplICAgICB8IHNpemVvZihpbnQpCi0vLyAgKy0tLS0tLS0tLS0tKwotLy8gIHwgdnNpemUgICAgIHwgc2l6ZW9mKGludCkKLS8vICArLS0tLS0tLS0tLS0rCi0vLyAgfCAgICAgICAgICAgfCAgIHwgICAgICAgICAgIHwKLS8vICB+IHBhcmFtZXRlciB+ICAgPiBwc2l6ZSAgICAgfAotLy8gIHwgICAgICAgICAgIHwgICB8ICAgICAgICAgICA+ICAoKHBzaXplIC0gMSkvc2l6ZW9mKGludCkgKyAxKSAqIHNpemVvZihpbnQpCi0vLyAgKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgIHwKLS8vICB8IHBhZGRpbmcgICB8ICAgICAgICAgICAgICAgfAotLy8gICstLS0tLS0tLS0tLSsKLS8vICB8ICAgICAgICAgICB8ICAgfAotLy8gIH4gdmFsdWUgICAgIH4gICA+IHZzaXplCi0vLyAgfCAgICAgICAgICAgfCAgIHwKLS8vICArLS0tLS0tLS0tLS0rCi0KLXR5cGVkZWYgc3RydWN0IGVmZmVjdF9wYXJhbV9zIHsKLSAgICBpbnQzMl90ICAgICBzdGF0dXM7ICAgICAvLyBUcmFuc2FjdGlvbiBzdGF0dXMgKHVudXNlZCBmb3IgY29tbWFuZCwgdXNlZCBmb3IgcmVwbHkpCi0gICAgdWludDMyX3QgICAgcHNpemU7ICAgICAgLy8gUGFyYW1ldGVyIHNpemUKLSAgICB1aW50MzJfdCAgICB2c2l6ZTsgICAgICAvLyBWYWx1ZSBzaXplCi0gICAgY2hhciAgICAgICAgZGF0YVtdOyAgICAgLy8gU3RhcnQgb2YgUGFyYW1ldGVyICsgVmFsdWUgZGF0YQotfSBlZmZlY3RfcGFyYW1fdDsKLQotLy8gTWF4aW11bSBlZmZlY3RfcGFyYW1fdCBzaXplCi0jZGVmaW5lIEVGRkVDVF9QQVJBTV9TSVpFX01BWCAgICAgICA2NTUzNgotCi0vLyBzdHJ1Y3R1cmUgdXNlZCBieSBFRkZFQ1RfQ01EX09GRkxPQUQgY29tbWFuZAotdHlwZWRlZiBzdHJ1Y3QgZWZmZWN0X29mZmxvYWRfcGFyYW1fcyB7Ci0gICAgYm9vbCBpc09mZmxvYWQ7ICAgICAgICAgLy8gdHJ1ZSBpZiB0aGUgcGxheWJhY2sgdGhyZWFkIHRoZSBlZmZlY3QgaXMgYXR0YWNoZWQgdG8gaXMgb2ZmbG9hZGVkCi0gICAgaW50IGlvSGFuZGxlOyAgICAgICAgICAgLy8gaW8gaGFuZGxlIG9mIHRoZSBwbGF5YmFjayB0aHJlYWQgdGhlIGVmZmVjdCBpcyBhdHRhY2hlZCB0bwotfSBlZmZlY3Rfb2ZmbG9hZF9wYXJhbV90OwotCi0KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vICAgICAgRWZmZWN0IGxpYnJhcnkgaW50ZXJmYWNlCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmRpZmYgLS1naXQgYS9pbmNsdWRlL2hhcmR3YXJlL2NhbWVyYTMuaCBiL2luY2x1ZGUvaGFyZHdhcmUvY2FtZXJhMy5oCmluZGV4IGE3ZGYwZWUuLmNlYzJhYjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaGFyZHdhcmUvY2FtZXJhMy5oCisrKyBiL2luY2x1ZGUvaGFyZHdhcmUvY2FtZXJhMy5oCkBAIC0xNDc5LDYgKzE0NzksMTMgQEAKICAgICAgKiAgICAgIGFuZHJvaWQubGVucy5vcHRpY2FsU3RhYmlsaXphdGlvbk1vZGUgKGlmIGl0IGlzIHN1cHBvcnRlZCkKICAgICAgKiAgICAgIGFuZHJvaWQuc2NhbGVyLmNyb3BSZWdpb24KICAgICAgKiAgICAgIGFuZHJvaWQuc3RhdGlzdGljcy5mYWNlRGV0ZWN0TW9kZSAoaWYgaXQgaXMgc3VwcG9ydGVkKQorICAgICAqICAgNi4gVG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgZGF0YSBwYXNzZWQgYWNyb3NzIHByb2Nlc3MgYm91bmRhcmllcyBhdAorICAgICAqICAgICAgaGlnaCBmcmFtZSByYXRlLCB3aXRoaW4gb25lIGJhdGNoLCBjYW1lcmEgZnJhbWV3b3JrIG9ubHkgcHJvcGFnYXRlcworICAgICAqICAgICAgdGhlIGxhc3Qgc2h1dHRlciBub3RpZnkgYW5kIHRoZSBsYXN0IGNhcHR1cmUgcmVzdWx0cyAoaW5jbHVkaW5nIHBhcnRpYWwKKyAgICAgKiAgICAgIHJlc3VsdHMgYW5kIGZpbmFsIHJlc3VsdCkgdG8gdGhlIGFwcC4gVGhlIHNodXR0ZXIgbm90aWZpZXMgYW5kIGNhcHR1cmUKKyAgICAgKiAgICAgIHJlc3VsdHMgZm9yIHRoZSBvdGhlciByZXF1ZXN0cyBpbiB0aGUgYmF0Y2ggYXJlIGRlcml2ZWQgYnkKKyAgICAgKiAgICAgIHRoZSBjYW1lcmEgZnJhbWV3b3JrLiBBcyBhIHJlc3VsdCwgdGhlIEhBTCBjYW4gcmV0dXJuIGVtcHR5IG1ldGFkYXRhCisgICAgICogICAgICBleGNlcHQgZm9yIHRoZSBsYXN0IHJlc3VsdCBpbiB0aGUgYmF0Y2guCiAgICAgICoKICAgICAgKiBGb3IgbW9yZSBkZXRhaWxzIGFib3V0IGhpZ2ggc3BlZWQgc3RyZWFtIHJlcXVpcmVtZW50cywgc2VlCiAgICAgICogYW5kcm9pZC5jb250cm9sLmF2YWlsYWJsZUhpZ2hTcGVlZFZpZGVvQ29uZmlndXJhdGlvbnMgYW5kIENPTlNUUkFJTkVEX0hJR0hfU1BFRURfVklERU8KQEAgLTE1OTcsNiArMTYwNCwxMyBAQAogICAgICAqICAgdmFsdWUgb2YgdGhpcyBpcyAwLgogICAgICAqICAgRm9yIGFsbCBzdHJlYW1zIHBhc3NlZCB2aWEgY29uZmlndXJlX3N0cmVhbXMoKSwgdGhlIEhBTCBtdXN0IHdyaXRlCiAgICAgICogICBvdmVyIHRoaXMgZmllbGQgd2l0aCBpdHMgdXNhZ2UgZmxhZ3MuCisgICAgICoKKyAgICAgKiAgIEZyb20gQW5kcm9pZCBPLCB0aGUgdXNhZ2UgZmxhZyBmb3IgYW4gb3V0cHV0IHN0cmVhbSBtYXkgYmUgYml0d2lzZQorICAgICAqICAgY29tYmluYXRpb24gb2YgdXNhZ2UgZmxhZ3MgZm9yIG11bHRpcGxlIGNvbnN1bWVycywgZm9yIHRoZSBwdXJwb3NlIG9mCisgICAgICogICBzaGFyaW5nIG9uZSBjYW1lcmEgc3RyZWFtIGJldHdlZW4gdGhvc2UgY29uc3VtZXJzLiBUaGUgSEFMIG11c3QgZmFpbAorICAgICAqICAgY29uZmlndXJlX3N0cmVhbXMgY2FsbCB3aXRoIC1FSU5WQUwgaWYgdGhlIGNvbWJpbmVkIGZsYWdzIGNhbm5vdCBiZQorICAgICAqICAgc3VwcG9ydGVkIGR1ZSB0byBpbWNvbXBhdGlibGUgYnVmZmVyIGZvcm1hdCwgZGF0YVNwYWNlLCBvciBvdGhlciBoYXJkd2FyZQorICAgICAqICAgbGltaXRhdGlvbnMuCiAgICAgICovCiAgICAgdWludDMyX3QgdXNhZ2U7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaGFyZHdhcmUvY2FtZXJhX2NvbW1vbi5oIGIvaW5jbHVkZS9oYXJkd2FyZS9jYW1lcmFfY29tbW9uLmgKaW5kZXggYzc0ZDdiYi4uN2JhZmE4OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9oYXJkd2FyZS9jYW1lcmFfY29tbW9uLmgKKysrIGIvaW5jbHVkZS9oYXJkd2FyZS9jYW1lcmFfY29tbW9uLmgKQEAgLTE0Myw4ICsxNDMsOCBAQAogI2RlZmluZSBDQU1FUkFfREVWSUNFX0FQSV9WRVJTSU9OXzFfMCBIQVJEV0FSRV9ERVZJQ0VfQVBJX1ZFUlNJT04oMSwgMCkgLy8gREVQUkVDQVRFRAogI2RlZmluZSBDQU1FUkFfREVWSUNFX0FQSV9WRVJTSU9OXzJfMCBIQVJEV0FSRV9ERVZJQ0VfQVBJX1ZFUlNJT04oMiwgMCkgLy8gTk8gTE9OR0VSIFNVUFBPUlRFRAogI2RlZmluZSBDQU1FUkFfREVWSUNFX0FQSV9WRVJTSU9OXzJfMSBIQVJEV0FSRV9ERVZJQ0VfQVBJX1ZFUlNJT04oMiwgMSkgLy8gTk8gTE9OR0VSIFNVUFBPUlRFRAotI2RlZmluZSBDQU1FUkFfREVWSUNFX0FQSV9WRVJTSU9OXzNfMCBIQVJEV0FSRV9ERVZJQ0VfQVBJX1ZFUlNJT04oMywgMCkKLSNkZWZpbmUgQ0FNRVJBX0RFVklDRV9BUElfVkVSU0lPTl8zXzEgSEFSRFdBUkVfREVWSUNFX0FQSV9WRVJTSU9OKDMsIDEpCisjZGVmaW5lIENBTUVSQV9ERVZJQ0VfQVBJX1ZFUlNJT05fM18wIEhBUkRXQVJFX0RFVklDRV9BUElfVkVSU0lPTigzLCAwKSAvLyBOTyBMT05HRVIgU1VQUE9SVEVECisjZGVmaW5lIENBTUVSQV9ERVZJQ0VfQVBJX1ZFUlNJT05fM18xIEhBUkRXQVJFX0RFVklDRV9BUElfVkVSU0lPTigzLCAxKSAvLyBOTyBMT05HRVIgU1VQUE9SVEVECiAjZGVmaW5lIENBTUVSQV9ERVZJQ0VfQVBJX1ZFUlNJT05fM18yIEhBUkRXQVJFX0RFVklDRV9BUElfVkVSU0lPTigzLCAyKQogI2RlZmluZSBDQU1FUkFfREVWSUNFX0FQSV9WRVJTSU9OXzNfMyBIQVJEV0FSRV9ERVZJQ0VfQVBJX1ZFUlNJT04oMywgMykKICNkZWZpbmUgQ0FNRVJBX0RFVklDRV9BUElfVkVSU0lPTl8zXzQgSEFSRFdBUkVfREVWSUNFX0FQSV9WRVJTSU9OKDMsIDQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2hhcmR3YXJlL2ZpbmdlcnByaW50LmggYi9pbmNsdWRlL2hhcmR3YXJlL2ZpbmdlcnByaW50LmgKaW5kZXggYjQ0NjViYS4uODZjZWQ5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9oYXJkd2FyZS9maW5nZXJwcmludC5oCisrKyBiL2luY2x1ZGUvaGFyZHdhcmUvZmluZ2VycHJpbnQuaApAQCAtMjMsNiArMjMsNyBAQAogI2RlZmluZSBGSU5HRVJQUklOVF9NT0RVTEVfQVBJX1ZFUlNJT05fMV8wIEhBUkRXQVJFX01PRFVMRV9BUElfVkVSU0lPTigxLCAwKQogI2RlZmluZSBGSU5HRVJQUklOVF9NT0RVTEVfQVBJX1ZFUlNJT05fMl8wIEhBUkRXQVJFX01PRFVMRV9BUElfVkVSU0lPTigyLCAwKQogI2RlZmluZSBGSU5HRVJQUklOVF9NT0RVTEVfQVBJX1ZFUlNJT05fMl8xIEhBUkRXQVJFX01PRFVMRV9BUElfVkVSU0lPTigyLCAxKQorI2RlZmluZSBGSU5HRVJQUklOVF9NT0RVTEVfQVBJX1ZFUlNJT05fM18wIEhBUkRXQVJFX01PRFVMRV9BUElfVkVSU0lPTigzLCAwKQogI2RlZmluZSBGSU5HRVJQUklOVF9IQVJEV0FSRV9NT0RVTEVfSUQgImZpbmdlcnByaW50IgogCiB0eXBlZGVmIGVudW0gZmluZ2VycHJpbnRfbXNnX3R5cGUgewpAQCAtNTEsNiArNTIsNyBAQAogICAgIEZJTkdFUlBSSU5UX0VSUk9SX05PX1NQQUNFID0gNCwgLyogTm8gc3BhY2UgYXZhaWxhYmxlIHRvIHN0b3JlIGEgdGVtcGxhdGUgKi8KICAgICBGSU5HRVJQUklOVF9FUlJPUl9DQU5DRUxFRCA9IDUsIC8qIFRoZSBjdXJyZW50IG9wZXJhdGlvbiBjYW4ndCBwcm9jZWVkLiBTZWUgYWJvdmUuICovCiAgICAgRklOR0VSUFJJTlRfRVJST1JfVU5BQkxFX1RPX1JFTU9WRSA9IDYsIC8qIGZpbmdlcnByaW50IHdpdGggZ2l2ZW4gaWQgY2FuJ3QgYmUgcmVtb3ZlZCAqLworICAgIEZJTkdFUlBSSU5UX0VSUk9SX0xPQ0tPVVQgPSA3LCAvKiB0aGUgZmluZ2VycHJpbnQgaGFyZHdhcmUgaXMgaW4gbG9ja291dCBkdWUgdG8gdG9vIG1hbnkgYXR0ZW1wdHMgKi8KICAgICBGSU5HRVJQUklOVF9FUlJPUl9WRU5ET1JfQkFTRSA9IDEwMDAgLyogdmVuZG9yLXNwZWNpZmljIGVycm9yIG1lc3NhZ2VzIHN0YXJ0IGhlcmUgKi8KIH0gZmluZ2VycHJpbnRfZXJyb3JfdDsKIApAQCAtNjksNiArNzEsOCBAQAogICAgIEZJTkdFUlBSSU5UX0FDUVVJUkVEX0lNQUdFUl9ESVJUWSA9IDMsIC8qIHNlbnNvciBuZWVkcyB0byBiZSBjbGVhbmVkICovCiAgICAgRklOR0VSUFJJTlRfQUNRVUlSRURfVE9PX1NMT1cgPSA0LCAvKiBtb3N0bHkgc3dpcGUtdHlwZSBzZW5zb3JzOyBub3QgZW5vdWdoIGRhdGEgY29sbGVjdGVkICovCiAgICAgRklOR0VSUFJJTlRfQUNRVUlSRURfVE9PX0ZBU1QgPSA1LCAvKiBmb3Igc3dpcGUgYW5kIGFyZWEgc2Vuc29yczsgdGVsbCB1c2VyIHRvIHNsb3cgZG93biovCisgICAgRklOR0VSUFJJTlRfQUNRVUlSRURfREVURUNURUQgPSA2LCAvKiB3aGVuIHRoZSBmaW5nZXIgaXMgZmlyc3QgZGV0ZWN0ZWQuIFVzZWQgdG8gb3B0aW1pemUgd2FrZXVwLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvdWxkIGJlIGZvbGxvd2VkIGJ5IG9uZSBvZiB0aGUgYWJvdmUgbWVzc2FnZXMgKi8KICAgICBGSU5HRVJQUklOVF9BQ1FVSVJFRF9WRU5ET1JfQkFTRSA9IDEwMDAgLyogdmVuZG9yLXNwZWNpZmljIGFjcXVpc2l0aW9uIG1lc3NhZ2VzIHN0YXJ0IGhlcmUgKi8KIH0gZmluZ2VycHJpbnRfYWNxdWlyZWRfaW5mb190OwogCkBAIC04NSwxNCArODksMTMgQEAKICAgICB1aW50NjRfdCBtc2c7IC8qIFZlbmRvciBzcGVjaWZpYyBtZXNzYWdlLiBVc2VkIGZvciB1c2VyIGd1aWRhbmNlICovCiB9IGZpbmdlcnByaW50X2Vucm9sbF90OwogCi10eXBlZGVmIHN0cnVjdCBmaW5nZXJwcmludF9lbnVtZXJhdGVkIHsKK3R5cGVkZWYgc3RydWN0IGZpbmdlcnByaW50X2l0ZXJhdG9yIHsKICAgICBmaW5nZXJwcmludF9maW5nZXJfaWRfdCBmaW5nZXI7CiAgICAgdWludDMyX3QgcmVtYWluaW5nX3RlbXBsYXRlczsKLX0gZmluZ2VycHJpbnRfZW51bWVyYXRlZF90OworfSBmaW5nZXJwcmludF9pdGVyYXRvcl90OwogCi10eXBlZGVmIHN0cnVjdCBmaW5nZXJwcmludF9yZW1vdmVkIHsKLSAgICBmaW5nZXJwcmludF9maW5nZXJfaWRfdCBmaW5nZXI7Ci19IGZpbmdlcnByaW50X3JlbW92ZWRfdDsKK3R5cGVkZWYgZmluZ2VycHJpbnRfaXRlcmF0b3JfdCBmaW5nZXJwcmludF9lbnVtZXJhdGVkX3Q7Cit0eXBlZGVmIGZpbmdlcnByaW50X2l0ZXJhdG9yX3QgZmluZ2VycHJpbnRfcmVtb3ZlZF90OwogCiB0eXBlZGVmIHN0cnVjdCBmaW5nZXJwcmludF9hY3F1aXJlZCB7CiAgICAgZmluZ2VycHJpbnRfYWNxdWlyZWRfaW5mb190IGFjcXVpcmVkX2luZm87IC8qIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbWFnZSAqLwpAQCAtMjA3LDEyICsyMTAsMTMgQEAKICAgICAvKgogICAgICAqIEVudW1lcmF0ZSBhbGwgdGhlIGZpbmdlcnByaW50IHRlbXBsYXRlcyBmb3VuZCBpbiB0aGUgZGlyZWN0b3J5IHNldCBieQogICAgICAqIHNldF9hY3RpdmVfZ3JvdXAoKQotICAgICAqIEZvciBlYWNoIHRlbXBsYXRlIGZvdW5kIG5vdGlmeSgpIHdpbGwgYmUgY2FsbGVkIHdpdGg6CisgICAgICogRm9yIGVhY2ggdGVtcGxhdGUgZm91bmQgYSBub3RpZnkoKSB3aWxsIGJlIGNhbGxlZCB3aXRoOgogICAgICAqIGZpbmdlcnByaW50X21zZy50eXBlID09IEZJTkdFUlBSSU5UX1RFTVBMQVRFX0VOVU1FUkFURUQKICAgICAgKiBmaW5nZXJwcmludF9tc2cuZGF0YS5lbnVtZXJhdGVkLmZpbmdlciBpbmRpY2F0aW5nIGEgdGVtcGxhdGUgaWQKICAgICAgKiBmaW5nZXJwcmludF9tc2cuZGF0YS5lbnVtZXJhdGVkLnJlbWFpbmluZ190ZW1wbGF0ZXMgaW5kaWNhdGluZyBob3cgbWFueSBtb3JlCiAgICAgICogZW51bWVyYXRpb24gbWVzc2FnZXMgdG8gZXhwZWN0LgotICAgICAqCisgICAgICogTm90ZTogSWYgdGhlcmUgYXJlIG5vIGZpbmdlcnByaW50cywgdGhlbiB0aGlzIHNob3VsZCByZXR1cm4gMCBhbmQgdGhlIGZpcnN0IGZpbmdlcnByaW50CisgICAgICogICAgICAgICAgICAgICAgICBlbnVtZXJhdGVkIHNob3VsZCBoYXZlIGZpbmdlcmlkPTAgYW5kIHJlbWFpbmluZz0wCiAgICAgICogRnVuY3Rpb24gcmV0dXJuOiAwIGlmIGVudW1lcmF0ZSByZXF1ZXN0IGlzIGFjY2VwdGVkCiAgICAgICogICAgICAgICAgICAgICAgICBvciBhIG5lZ2F0aXZlIG51bWJlciBpbiBjYXNlIG9mIGVycm9yLCBnZW5lcmFsbHkgZnJvbSB0aGUgZXJybm8uaCBzZXQuCiAgICAgICovCkBAIC0yMjIsOSArMjI2LDE0IEBACiAgICAgICogRmluZ2VycHJpbnQgcmVtb3ZlIHJlcXVlc3Q6CiAgICAgICogRGVsZXRlcyBhIGZpbmdlcnByaW50IHRlbXBsYXRlLgogICAgICAqIFdvcmtzIG9ubHkgd2l0aGluIHRoZSBwYXRoIHNldCBieSBzZXRfYWN0aXZlX2dyb3VwKCkuCi0gICAgICogbm90aWZ5KCkgd2lsbCBiZSBjYWxsZWQgd2l0aCBkZXRhaWxzIG9uIHRoZSB0ZW1wbGF0ZSBkZWxldGVkLgotICAgICAqIGZpbmdlcnByaW50X21zZy50eXBlID09IEZJTkdFUlBSSU5UX1RFTVBMQVRFX1JFTU9WRUQgYW5kCi0gICAgICogZmluZ2VycHJpbnRfbXNnLmRhdGEucmVtb3ZlZC5maW5nZXIgaW5kaWNhdGluZyB0aGUgdGVtcGxhdGUgaWQgcmVtb3ZlZC4KKyAgICAgKiBUaGUgZmlkIHBhcmFtZXRlciBjYW4gYmUgdXNlZCBhcyBhIHdpZGNhcmQ6CisgICAgICogICAqIGZpZCA9PSAwIC0tIGRlbGV0ZSBhbGwgdGhlIHRlbXBsYXRlcyBpbiB0aGUgZ3JvdXAuCisgICAgICogICAqIGZpZCAhPSAwIC0tIGRlbGV0ZSB0aGlzIHNwZWNpZmljIHRlbXBsYXRlIGZyb20gdGhlIGdyb3VwLgorICAgICAqIEZvciBlYWNoIHRlbXBsYXRlIGZvdW5kIGEgbm90aWZ5KCkgd2lsbCBiZSBjYWxsZWQgd2l0aDoKKyAgICAgKiBmaW5nZXJwcmludF9tc2cudHlwZSA9PSBGSU5HRVJQUklOVF9URU1QTEFURV9SRU1PVkVECisgICAgICogZmluZ2VycHJpbnRfbXNnLmRhdGEucmVtb3ZlZC5maW5nZXIgaW5kaWNhdGluZyBhIHRlbXBsYXRlIGlkIGRlbGV0ZWQKKyAgICAgKiBmaW5nZXJwcmludF9tc2cuZGF0YS5yZW1vdmVkLnJlbWFpbmluZ190ZW1wbGF0ZXMgaW5kaWNhdGluZyBob3cgbWFueSBtb3JlCisgICAgICogdGVtcGxhdGVzIHdpbGwgYmUgZGVsZXRlZCBieSB0aGlzIG9wZXJhdGlvbi4KICAgICAgKgogICAgICAqIEZ1bmN0aW9uIHJldHVybjogMCBpZiBmaW5nZXJwcmludCB0ZW1wbGF0ZShzKSBjYW4gYmUgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQKICAgICAgKiAgICAgICAgICAgICAgICAgIG9yIGEgbmVnYXRpdmUgbnVtYmVyIGluIGNhc2Ugb2YgZXJyb3IsIGdlbmVyYWxseSBmcm9tIHRoZSBlcnJuby5oIHNldC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaGFyZHdhcmUvZnVzZWRfbG9jYXRpb24uaCBiL2luY2x1ZGUvaGFyZHdhcmUvZnVzZWRfbG9jYXRpb24uaAppbmRleCA3MzM2MGExLi41NTBlMTkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2hhcmR3YXJlL2Z1c2VkX2xvY2F0aW9uLmgKKysrIGIvaW5jbHVkZS9oYXJkd2FyZS9mdXNlZF9sb2NhdGlvbi5oCkBAIC0xOSw2ICsxOSw3IEBACiAKICNpbmNsdWRlIDxoYXJkd2FyZS9oYXJkd2FyZS5oPgogCisjaW5jbHVkZSAiZ25zcy1iYXNlLmgiCiAKIC8qKgogICogVGhpcyBoZWFkZXIgZmlsZSBkZWZpbmVzIHRoZSBpbnRlcmZhY2Ugb2YgdGhlIEZ1c2VkIExvY2F0aW9uIFByb3ZpZGVyLgpAQCAtMTAzLDE2ICsxMDQsNiBAQAogI2RlZmluZSBGTFBfU1RBVFVTX0xPQ0FUSU9OX1VOQVZBSUxBQkxFICAgICAgIDEKIAogLyoqCi0gKiBUaGlzIGNvbnN0YW50IGlzIHVzZWQgd2l0aCB0aGUgYmF0Y2hlZCBsb2NhdGlvbnMKLSAqIEFQSXMuIEJhdGNoaW5nIGlzIG1hbmRhdG9yeSB3aGVuIEZMUCBpbXBsZW1lbnRhdGlvbgotICogaXMgc3VwcG9ydGVkLiBJZiB0aGUgZmxhZyBpcyBzZXQsIHRoZSBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbgotICogd2lsbCB3YWtlIHVwIHRoZSBhcHBsaWNhdGlvbiBwcm9jZXNzb3Igd2hlbiB0aGUgRklGTyBpcyBmdWxsLAotICogSWYgdGhlIGZsYWcgaXMgbm90IHNldCwgdGhlIGhhcmR3YXJlIGltcGxlbWVudGF0aW9uIHdpbGwgZHJvcAotICogdGhlIG9sZGVzdCBkYXRhIHdoZW4gdGhlIEZJRk8gaXMgZnVsbC4KLSAqLwotI2RlZmluZSBGTFBfQkFUQ0hfV0FLRVVQX09OX0ZJRk9fRlVMTCAgICAgICAgMHgwMDAwMDAxCi0KLS8qKgogICogV2hpbGUgYmF0Y2hpbmcsIHRoZSBpbXBsZW1lbnRhdGlvbiBzaG91bGQgbm90IGNhbGwgdGhlCiAgKiBmbHBfbG9jYXRpb25fY2FsbGJhY2sgb24gZXZlcnkgbG9jYXRpb24gZml4LiBIb3dldmVyLAogICogc29tZXRpbWVzIGluIGhpZ2ggcG93ZXIgbW9kZSwgdGhlIHN5c3RlbSBtaWdodCBuZWVkCmRpZmYgLS1naXQgYS9pbmNsdWRlL2hhcmR3YXJlL2duc3MtYmFzZS5oIGIvaW5jbHVkZS9oYXJkd2FyZS9nbnNzLWJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTYwMjBkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9oYXJkd2FyZS9nbnNzLWJhc2UuaApAQCAtMCwwICsxLDI3NSBAQAorLy8gVGhpcyBmaWxlIGlzIGF1dG9nZW5lcmF0ZWQgYnkgaGlkbC1nZW4uIERvIG5vdCBlZGl0IG1hbnVhbGx5LgorLy8gU291cmNlOiBhbmRyb2lkLmhhcmR3YXJlLmduc3NAMS4wCisvLyBSb290OiBhbmRyb2lkLmhhcmR3YXJlOmhhcmR3YXJlL2ludGVyZmFjZXMKKworI2lmbmRlZiBISURMX0dFTkVSQVRFRF9BTkRST0lEX0hBUkRXQVJFX0dOU1NfVjFfMF9FWFBPUlRFRF9DT05TVEFOVFNfSF8KKyNkZWZpbmUgSElETF9HRU5FUkFURURfQU5EUk9JRF9IQVJEV0FSRV9HTlNTX1YxXzBfRVhQT1JURURfQ09OU1RBTlRTX0hfCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworZW51bSB7CisgICAgR05TU19NQVhfU1ZTX0NPVU5UID0gNjR1LCAvLyA2NAorfTsKKworZW51bSB7CisgICAgR05TU19DT05TVEVMTEFUSU9OX1VOS05PV04gPSAwLAorICAgIEdOU1NfQ09OU1RFTExBVElPTl9HUFMgPSAxLAorICAgIEdOU1NfQ09OU1RFTExBVElPTl9TQkFTID0gMiwKKyAgICBHTlNTX0NPTlNURUxMQVRJT05fR0xPTkFTUyA9IDMsCisgICAgR05TU19DT05TVEVMTEFUSU9OX1FaU1MgPSA0LAorICAgIEdOU1NfQ09OU1RFTExBVElPTl9CRUlET1UgPSA1LAorICAgIEdOU1NfQ09OU1RFTExBVElPTl9HQUxJTEVPID0gNiwKK307CisKK2VudW0geworICAgIEdQU19MT0NBVElPTl9IQVNfTEFUX0xPTkcgPSAxLCAvLyAweDAwMDEKKyAgICBHUFNfTE9DQVRJT05fSEFTX0FMVElUVURFID0gMiwgLy8gMHgwMDAyCisgICAgR1BTX0xPQ0FUSU9OX0hBU19TUEVFRCA9IDQsIC8vIDB4MDAwNAorICAgIEdQU19MT0NBVElPTl9IQVNfQkVBUklORyA9IDgsIC8vIDB4MDAwOAorICAgIEdQU19MT0NBVElPTl9IQVNfSE9SSVpPTlRBTF9BQ0NVUkFDWSA9IDE2LCAvLyAweDAwMTAKKyAgICBHUFNfTE9DQVRJT05fSEFTX1ZFUlRJQ0FMX0FDQ1VSQUNZID0gMzIsIC8vIDB4MDAyMAorICAgIEdQU19MT0NBVElPTl9IQVNfU1BFRURfQUNDVVJBQ1kgPSA2NCwgLy8gMHgwMDQwCisgICAgR1BTX0xPQ0FUSU9OX0hBU19CRUFSSU5HX0FDQ1VSQUNZID0gMTI4LCAvLyAweDAwODAKK307CisKK2VudW0geworICAgIEFQTl9JUF9JTlZBTElEID0gMCwKKyAgICBBUE5fSVBfSVBWNCA9IDEsCisgICAgQVBOX0lQX0lQVjYgPSAyLAorICAgIEFQTl9JUF9JUFY0VjYgPSAzLAorfTsKKworZW51bSB7CisgICAgQUdQU19UWVBFX1NVUEwgPSAxLAorICAgIEFHUFNfVFlQRV9DMksgPSAyLAorfTsKKworZW51bSB7CisgICAgR05TU19SRVFVRVNUX0FHTlNTX0RBVEFfQ09OTiA9IDEsCisgICAgR05TU19SRUxFQVNFX0FHTlNTX0RBVEFfQ09OTiA9IDIsCisgICAgR05TU19BR05TU19EQVRBX0NPTk5FQ1RFRCA9IDMsCisgICAgR05TU19BR05TU19EQVRBX0NPTk5fRE9ORSA9IDQsCisgICAgR05TU19BR05TU19EQVRBX0NPTk5fRkFJTEVEID0gNSwKK307CisKK2VudW0geworICAgIEFHUFNfU0VUSURfVFlQRV9OT05FID0gMCwKKyAgICBBR1BTX1NFVElEX1RZUEVfSU1TSSA9IDEsCisgICAgQUdQU19TRVRJRF9UWVBFX01TSVNETSA9IDIsCit9OworCitlbnVtIHsKKyAgICBBR1BTX1JJTF9ORVRXT1JLX1RZUEVfTU9CSUxFID0gMCwKKyAgICBBR1BTX1JJTF9ORVRXT1JLX1RZUEVfV0lGSSA9IDEsCisgICAgQUdQU19SSUxfTkVUV09SS19UWVBFX01NUyA9IDIsCisgICAgQUdQU19SSUxfTkVUV09SS19UWVBFX1NVUEwgPSAzLAorICAgIEFHUFNfUklMX05FVFdPUktfVFlQRV9EVU4gPSA0LAorICAgIEFHUFNfUklMX05FVFdPUktfVFlQRV9ISVBSSSA9IDUsCisgICAgQUdQU19SSUxfTkVUV09SS19UWVBFX1dJTUFYID0gNiwKK307CisKK2VudW0geworICAgIEFHUFNfUkVGX0xPQ0FUSU9OX1RZUEVfR1NNX0NFTExJRCA9IDEsCisgICAgQUdQU19SRUZfTE9DQVRJT05fVFlQRV9VTVRTX0NFTExJRCA9IDIsCisgICAgQUdQU19SRUZfTE9DQVRJT05fVFlQRV9MVEVfQ0VMTElEID0gNCwKK307CisKK2VudW0geworICAgIEFHUFNfUklMX1JFUVVFU1RfU0VUSURfSU1TSSA9IDF1LCAvLyAoMSA8PCAwTCkKKyAgICBBR1BTX1JJTF9SRVFVRVNUX1NFVElEX01TSVNETiA9IDJ1LCAvLyAoMSA8PCAxTCkKK307CisKK2VudW0geworICAgIEdQU19QT1NJVElPTl9NT0RFX1NUQU5EQUxPTkUgPSAwLAorICAgIEdQU19QT1NJVElPTl9NT0RFX01TX0JBU0VEID0gMSwKKyAgICBHUFNfUE9TSVRJT05fTU9ERV9NU19BU1NJU1RFRCA9IDIsCit9OworCitlbnVtIHsKKyAgICBHUFNfUE9TSVRJT05fUkVDVVJSRU5DRV9QRVJJT0RJQyA9IDB1LCAvLyAwCisgICAgR1BTX1BPU0lUSU9OX1JFQ1VSUkVOQ0VfU0lOR0xFID0gMXUsIC8vIDEKK307CisKK2VudW0geworICAgIEdQU19ERUxFVEVfRVBIRU1FUklTID0gMSwgLy8gMHgwMDAxCisgICAgR1BTX0RFTEVURV9BTE1BTkFDID0gMiwgLy8gMHgwMDAyCisgICAgR1BTX0RFTEVURV9QT1NJVElPTiA9IDQsIC8vIDB4MDAwNAorICAgIEdQU19ERUxFVEVfVElNRSA9IDgsIC8vIDB4MDAwOAorICAgIEdQU19ERUxFVEVfSU9OTyA9IDE2LCAvLyAweDAwMTAKKyAgICBHUFNfREVMRVRFX1VUQyA9IDMyLCAvLyAweDAwMjAKKyAgICBHUFNfREVMRVRFX0hFQUxUSCA9IDY0LCAvLyAweDAwNDAKKyAgICBHUFNfREVMRVRFX1NWRElSID0gMTI4LCAvLyAweDAwODAKKyAgICBHUFNfREVMRVRFX1NWU1RFRVIgPSAyNTYsIC8vIDB4MDEwMAorICAgIEdQU19ERUxFVEVfU0FEQVRBID0gNTEyLCAvLyAweDAyMDAKKyAgICBHUFNfREVMRVRFX1JUSSA9IDEwMjQsIC8vIDB4MDQwMAorICAgIEdQU19ERUxFVEVfQ0VMTERCX0lORk8gPSAzMjc2OCwgLy8gMHg4MDAwCisgICAgR1BTX0RFTEVURV9BTEwgPSA2NTUzNSwgLy8gMHhGRkZGCit9OworCitlbnVtIHsKKyAgICBGTFBfQkFUQ0hfV0FLRVVQX09OX0ZJRk9fRlVMTCA9IDEsIC8vIDB4MDEKK307CisKK2VudW0geworICAgIEdQU19DQVBBQklMSVRZX1NDSEVEVUxJTkcgPSAxdSwgLy8gKDEgPDwgMCkKKyAgICBHUFNfQ0FQQUJJTElUWV9NU0IgPSAydSwgLy8gKDEgPDwgMSkKKyAgICBHUFNfQ0FQQUJJTElUWV9NU0EgPSA0dSwgLy8gKDEgPDwgMikKKyAgICBHUFNfQ0FQQUJJTElUWV9TSU5HTEVfU0hPVCA9IDh1LCAvLyAoMSA8PCAzKQorICAgIEdQU19DQVBBQklMSVRZX09OX0RFTUFORF9USU1FID0gMTZ1LCAvLyAoMSA8PCA0KQorICAgIEdQU19DQVBBQklMSVRZX0dFT0ZFTkNJTkcgPSAzMnUsIC8vICgxIDw8IDUpCisgICAgR1BTX0NBUEFCSUxJVFlfTUVBU1VSRU1FTlRTID0gNjR1LCAvLyAoMSA8PCA2KQorICAgIEdQU19DQVBBQklMSVRZX05BVl9NRVNTQUdFUyA9IDEyOHUsIC8vICgxIDw8IDcpCit9OworCitlbnVtIHsKKyAgICBHUFNfU1RBVFVTX05PTkUgPSAwLAorICAgIEdQU19TVEFUVVNfU0VTU0lPTl9CRUdJTiA9IDEsCisgICAgR1BTX1NUQVRVU19TRVNTSU9OX0VORCA9IDIsCisgICAgR1BTX1NUQVRVU19FTkdJTkVfT04gPSAzLAorICAgIEdQU19TVEFUVVNfRU5HSU5FX09GRiA9IDQsCit9OworCitlbnVtIHsKKyAgICBHTlNTX1NWX0ZMQUdTX05PTkUgPSAwLAorICAgIEdOU1NfU1ZfRkxBR1NfSEFTX0VQSEVNRVJJU19EQVRBID0gMSwgLy8gKDEgPDwgMCkKKyAgICBHTlNTX1NWX0ZMQUdTX0hBU19BTE1BTkFDX0RBVEEgPSAyLCAvLyAoMSA8PCAxKQorICAgIEdOU1NfU1ZfRkxBR1NfVVNFRF9JTl9GSVggPSA0LCAvLyAoMSA8PCAyKQorICAgIEdOU1NfU1ZfRkxBR1NfSEFTX0NBUlJJRVJfRlJFUVVFTkNZID0gOCwgLy8gKDEgPDwgMykKK307CisKK2VudW0geworICAgIEdQU19HRU9GRU5DRV9FTlRFUkVEID0gMSwgLy8gKDEgPDwgMEwpCisgICAgR1BTX0dFT0ZFTkNFX0VYSVRFRCA9IDIsIC8vICgxIDw8IDFMKQorICAgIEdQU19HRU9GRU5DRV9VTkNFUlRBSU4gPSA0LCAvLyAoMSA8PCAyTCkKK307CisKK2VudW0geworICAgIEdQU19HRU9GRU5DRV9VTkFWQUlMQUJMRSA9IDEsIC8vICgxIDw8IDBMKQorICAgIEdQU19HRU9GRU5DRV9BVkFJTEFCTEUgPSAyLCAvLyAoMSA8PCAxTCkKK307CisKK2VudW0geworICAgIEdQU19HRU9GRU5DRV9PUEVSQVRJT05fU1VDQ0VTUyA9IDAsCisgICAgR1BTX0dFT0ZFTkNFX0VSUk9SX1RPT19NQU5ZX0dFT0ZFTkNFUyA9IC0xMDAsIC8vICgtMTAwKQorICAgIEdQU19HRU9GRU5DRV9FUlJPUl9JRF9FWElTVFMgPSAtMTAxLCAvLyAoLTEwMSkKKyAgICBHUFNfR0VPRkVOQ0VfRVJST1JfSURfVU5LTk9XTiA9IC0xMDIsIC8vICgtMTAyKQorICAgIEdQU19HRU9GRU5DRV9FUlJPUl9JTlZBTElEX1RSQU5TSVRJT04gPSAtMTAzLCAvLyAoLTEwMykKKyAgICBHUFNfR0VPRkVOQ0VfRVJST1JfR0VORVJJQyA9IC0xNDksIC8vICgtMTQ5KQorfTsKKworZW51bSB7CisgICAgR1BTX01FQVNVUkVNRU5UX1NVQ0NFU1MgPSAwLAorICAgIEdQU19NRUFTVVJFTUVOVF9FUlJPUl9BTFJFQURZX0lOSVQgPSAtMTAwLCAvLyAoLTEwMCkKKyAgICBHUFNfTUVBU1VSRU1FTlRfRVJST1JfR0VORVJJQyA9IC0xMDEsIC8vICgtMTAxKQorfTsKKworZW51bSB7CisgICAgR05TU19DTE9DS19IQVNfTEVBUF9TRUNPTkQgPSAxLCAvLyAoMSA8PCAwKQorICAgIEdOU1NfQ0xPQ0tfSEFTX1RJTUVfVU5DRVJUQUlOVFkgPSAyLCAvLyAoMSA8PCAxKQorICAgIEdOU1NfQ0xPQ0tfSEFTX0ZVTExfQklBUyA9IDQsIC8vICgxIDw8IDIpCisgICAgR05TU19DTE9DS19IQVNfQklBUyA9IDgsIC8vICgxIDw8IDMpCisgICAgR05TU19DTE9DS19IQVNfQklBU19VTkNFUlRBSU5UWSA9IDE2LCAvLyAoMSA8PCA0KQorICAgIEdOU1NfQ0xPQ0tfSEFTX0RSSUZUID0gMzIsIC8vICgxIDw8IDUpCisgICAgR05TU19DTE9DS19IQVNfRFJJRlRfVU5DRVJUQUlOVFkgPSA2NCwgLy8gKDEgPDwgNikKK307CisKK2VudW0geworICAgIEdOU1NfTUVBU1VSRU1FTlRfSEFTX1NOUiA9IDF1LCAvLyAoMSA8PCAwKQorICAgIEdOU1NfTUVBU1VSRU1FTlRfSEFTX0NBUlJJRVJfRlJFUVVFTkNZID0gNTEydSwgLy8gKDEgPDwgOSkKKyAgICBHTlNTX01FQVNVUkVNRU5UX0hBU19DQVJSSUVSX0NZQ0xFUyA9IDEwMjR1LCAvLyAoMSA8PCAxMCkKKyAgICBHTlNTX01FQVNVUkVNRU5UX0hBU19DQVJSSUVSX1BIQVNFID0gMjA0OHUsIC8vICgxIDw8IDExKQorICAgIEdOU1NfTUVBU1VSRU1FTlRfSEFTX0NBUlJJRVJfUEhBU0VfVU5DRVJUQUlOVFkgPSA0MDk2dSwgLy8gKDEgPDwgMTIpCisgICAgR05TU19NRUFTVVJFTUVOVF9IQVNfQVVUT01BVElDX0dBSU5fQ09OVFJPTCA9IDgxOTJ1LCAvLyAoMSA8PCAxMykKK307CisKK2VudW0geworICAgIEdOU1NfTVVMVElQQVRIX0lORElDQVRPUl9VTktOT1dOID0gMCwKKyAgICBHTlNTX01VTFRJUEFUSF9JTkRJQ0FUT1JfUFJFU0VOVCA9IDEsCisgICAgR05TU19NVUxUSVBBVEhfSU5ESUNBVElPUl9OT1RfUFJFU0VOVCA9IDIsCit9OworCitlbnVtIHsKKyAgICBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX1VOS05PV04gPSAwdSwgLy8gMAorICAgIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfQ09ERV9MT0NLID0gMXUsIC8vICgxIDw8IDApCisgICAgR05TU19NRUFTVVJFTUVOVF9TVEFURV9CSVRfU1lOQyA9IDJ1LCAvLyAoMSA8PCAxKQorICAgIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfU1VCRlJBTUVfU1lOQyA9IDR1LCAvLyAoMSA8PCAyKQorICAgIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfVE9XX0RFQ09ERUQgPSA4dSwgLy8gKDEgPDwgMykKKyAgICBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX01TRUNfQU1CSUdVT1VTID0gMTZ1LCAvLyAoMSA8PCA0KQorICAgIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfU1lNQk9MX1NZTkMgPSAzMnUsIC8vICgxIDw8IDUpCisgICAgR05TU19NRUFTVVJFTUVOVF9TVEFURV9HTE9fU1RSSU5HX1NZTkMgPSA2NHUsIC8vICgxIDw8IDYpCisgICAgR05TU19NRUFTVVJFTUVOVF9TVEFURV9HTE9fVE9EX0RFQ09ERUQgPSAxMjh1LCAvLyAoMSA8PCA3KQorICAgIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfQkRTX0QyX0JJVF9TWU5DID0gMjU2dSwgLy8gKDEgPDwgOCkKKyAgICBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX0JEU19EMl9TVUJGUkFNRV9TWU5DID0gNTEydSwgLy8gKDEgPDwgOSkKKyAgICBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX0dBTF9FMUJDX0NPREVfTE9DSyA9IDEwMjR1LCAvLyAoMSA8PCAxMCkKKyAgICBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX0dBTF9FMUNfMk5EX0NPREVfTE9DSyA9IDIwNDh1LCAvLyAoMSA8PCAxMSkKKyAgICBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX0dBTF9FMUJfUEFHRV9TWU5DID0gNDA5NnUsIC8vICgxIDw8IDEyKQorICAgIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfU0JBU19TWU5DID0gODE5MnUsIC8vICgxIDw8IDEzKQorICAgIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfVE9XX0tOT1dOID0gMTYzODR1LCAvLyAoMSA8PCAxNCkKKyAgICBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX0dMT19UT0RfS05PV04gPSAzMjc2OHUsIC8vICgxIDw8IDE1KQorfTsKKworZW51bSB7CisgICAgR05TU19BRFJfU1RBVEVfVU5LTk9XTiA9IDAsCisgICAgR05TU19BRFJfU1RBVEVfVkFMSUQgPSAxLCAvLyAoMSA8PCAwKQorICAgIEdOU1NfQURSX1NUQVRFX1JFU0VUID0gMiwgLy8gKDEgPDwgMSkKKyAgICBHTlNTX0FEUl9TVEFURV9DWUNMRV9TTElQID0gNCwgLy8gKDEgPDwgMikKK307CisKK2VudW0geworICAgIEdQU19OQVZJR0FUSU9OX01FU1NBR0VfU1VDQ0VTUyA9IDAsCisgICAgR1BTX05BVklHQVRJT05fTUVTU0FHRV9FUlJPUl9BTFJFQURZX0lOSVQgPSAtMTAwLCAvLyAoLTEwMCkKKyAgICBHUFNfTkFWSUdBVElPTl9NRVNTQUdFX0VSUk9SX0dFTkVSSUMgPSAtMTAxLCAvLyAoLTEwMSkKK307CisKK2VudW0geworICAgIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfVU5LTk9XTiA9IDAsCisgICAgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9HTlNTX0wxQ0EgPSAyNTcsIC8vIDB4MDEwMQorICAgIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR05TU19MMkNOQVYgPSAyNTgsIC8vIDB4MDEwMgorICAgIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR05TU19MNUNOQVYgPSAyNTksIC8vIDB4MDEwMworICAgIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR05TU19DTkFWMiA9IDI2MCwgLy8gMHgwMTA0CisgICAgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9HTE9fTDFDQSA9IDc2OSwgLy8gMHgwMzAxCisgICAgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9CRFNfRDEgPSAxMjgxLCAvLyAweDA1MDEKKyAgICBHTlNTX05BVklHQVRJT05fTUVTU0FHRV9UWVBFX0JEU19EMiA9IDEyODIsIC8vIDB4MDUwMgorICAgIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR0FMX0kgPSAxNTM3LCAvLyAweDA2MDEKKyAgICBHTlNTX05BVklHQVRJT05fTUVTU0FHRV9UWVBFX0dBTF9GID0gMTUzOCwgLy8gMHgwNjAyCit9OworCit0eXBlZGVmIGVudW0geworICAgIE5BVl9NRVNTQUdFX1NUQVRVU19QQVJJVFlfUEFTU0VEID0gMSwgLy8gKDEgPDwgMCkKKyAgICBOQVZfTUVTU0FHRV9TVEFUVVNfUEFSSVRZX1JFQlVJTFQgPSAyLCAvLyAoMSA8PCAxKQorICAgIE5BVl9NRVNTQUdFX1NUQVRVU19VTktOT1dOID0gMCwKK30gbmF2aWdhdGlvbl9tZXNzYWdlX3N0YXR1czsKKworZW51bSB7CisgICAgR1BTX05JX1RZUEVfVk9JQ0UgPSAxLAorICAgIEdQU19OSV9UWVBFX1VNVFNfU1VQTCA9IDIsCisgICAgR1BTX05JX1RZUEVfVU1UU19DVFJMX1BMQU5FID0gMywKK307CisKK2VudW0geworICAgIEdQU19OSV9ORUVEX05PVElGWSA9IDF1LCAvLyAweDAwMDEKKyAgICBHUFNfTklfTkVFRF9WRVJJRlkgPSAydSwgLy8gMHgwMDAyCisgICAgR1BTX05JX1BSSVZBQ1lfT1ZFUlJJREUgPSA0dSwgLy8gMHgwMDA0Cit9OworCitlbnVtIHsKKyAgICBHUFNfTklfUkVTUE9OU0VfQUNDRVBUID0gMSwKKyAgICBHUFNfTklfUkVTUE9OU0VfREVOWSA9IDIsCisgICAgR1BTX05JX1JFU1BPTlNFX05PUkVTUCA9IDMsCit9OworCitlbnVtIHsKKyAgICBHUFNfRU5DX05PTkUgPSAwLAorICAgIEdQU19FTkNfU1VQTF9HU01fREVGQVVMVCA9IDEsCisgICAgR1BTX0VOQ19TVVBMX1VURjggPSAyLAorICAgIEdQU19FTkNfU1VQTF9VQ1MyID0gMywKKyAgICBHUFNfRU5DX1VOS05PV04gPSAtMSwgLy8gKC0xKQorfTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmICAvLyBISURMX0dFTkVSQVRFRF9BTkRST0lEX0hBUkRXQVJFX0dOU1NfVjFfMF9FWFBPUlRFRF9DT05TVEFOVFNfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaGFyZHdhcmUvZ3BzLmggYi9pbmNsdWRlL2hhcmR3YXJlL2dwcy5oCmluZGV4IGFjZjYwMWIuLjRlMTA4YjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaGFyZHdhcmUvZ3BzLmgKKysrIGIvaW5jbHVkZS9oYXJkd2FyZS9ncHMuaApAQCAtMjYsOCArMjYsNDIgQEAKIAogI2luY2x1ZGUgPGhhcmR3YXJlL2hhcmR3YXJlLmg+CiAKKyNpbmNsdWRlICJnbnNzLWJhc2UuaCIKKwogX19CRUdJTl9ERUNMUwogCisvKgorICogRW51bXMgZGVmaW5lZCBpbiBISURMIGluIGhhcmR3YXJlL2ludGVyZmFjZXMgYXJlIGF1dG8tZ2VuZXJhdGVkIGFuZCBwcmVzZW50CisgKiBpbiBnbnNzLWJhc2UuaC4KKyAqLworCisvKiBmb3IgY29tcGF0aWJpbGl0eSAqLworCisvKiogTWF4aW11bSBudW1iZXIgb2YgU1ZzIGZvciBncHNfc3Zfc3RhdHVzX2NhbGxiYWNrKCkuICovCisjZGVmaW5lIEdOU1NfTUFYX1NWUyBHTlNTX01BWF9TVlNfQ09VTlQKKy8qKiBNYXhpbXVtIG51bWJlciBvZiBNZWFzdXJlbWVudHMgaW4gZ25zc19tZWFzdXJlbWVudF9jYWxsYmFjaygpLiAqLworI2RlZmluZSBHTlNTX01BWF9NRUFTVVJFTUVOVCBHTlNTX01BWF9TVlNfQ09VTlQKKworI2RlZmluZSBHUFNfUkVRVUVTVF9BR1BTX0RBVEFfQ09OTiBHTlNTX1JFUVVFU1RfQUdOU1NfREFUQV9DT05OCisjZGVmaW5lIEdQU19SRUxFQVNFX0FHUFNfREFUQV9DT05OIEdOU1NfUkVMRUFTRV9BR05TU19EQVRBX0NPTk4KKyNkZWZpbmUgR1BTX0FHUFNfREFUQV9DT05ORUNURUQgR05TU19BR05TU19EQVRBX0NPTk5FQ1RFRAorI2RlZmluZSBHUFNfQUdQU19EQVRBX0NPTk5fRE9ORSBHTlNTX0FHTlNTX0RBVEFfQ09OTl9ET05FCisjZGVmaW5lIEdQU19BR1BTX0RBVEFfQ09OTl9GQUlMRUQgR05TU19BR05TU19EQVRBX0NPTk5fRkFJTEVECisjZGVmaW5lIEFHUFNfUklMX05FVFdPUktfVFlQRV9NT0JJTEVfTU1TIEFHUFNfUklMX05FVFdPUktfVFlQRV9NTVMKKyNkZWZpbmUgQUdQU19SSUxfTkVUV09SS19UWVBFX01PQklMRV9TVVBMIEFHUFNfUklMX05FVFdPUktfVFlQRV9TVVBMCisjZGVmaW5lIEFHUFNfUklMX05FVFdPUktfVFRZUEVfTU9CSUxFX0RVTiBBR1BTX1JJTF9ORVRXT1JLX1RZUEVfRFVOCisjZGVmaW5lIEFHUFNfUklMX05FVFdPUktfVFRZUEVfTU9CSUxFX0hJUFJJIEFHUFNfUklMX05FVFdPUktfVFlQRV9ISVBSSQorI2RlZmluZSBBR1BTX1JJTF9ORVRXT1JLX1RUWVBFX1dJTUFYIEFHUFNfUklMX05FVFdPUktfVFlQRV9XSU1BWAorI2RlZmluZSBHTlNTX01VTFRJUEFUSF9JTkRJQ0FUT1JfTk9UX1BSRVNFTlQgR05TU19NVUxUSVBBVEhfSU5ESUNBVElPUl9OT1RfUFJFU0VOVAorI2RlZmluZSBBR1BTX1NFVElEX1RZUEVfTVNJU0ROIEFHUFNfU0VUSURfVFlQRV9NU0lTRE0KKyNkZWZpbmUgR1BTX01FQVNVUkVNRU5UX09QRVJBVElPTl9TVUNDRVNTIEdQU19NRUFTVVJFTUVOVF9TVUNDRVNTCisjZGVmaW5lIEdQU19OQVZJR0FUSU9OX01FU1NBR0VfT1BFUkFUSU9OX1NVQ0NFU1MgR1BTX05BVklHQVRJT05fTUVTU0FHRV9TVUNDRVNTCisjZGVmaW5lIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR1BTX0wxQ0EgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9HTlNTX0wxQ0EKKyNkZWZpbmUgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9HUFNfTDJDTkFWIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR05TU19MMkNOQVYKKyNkZWZpbmUgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9HUFNfTDVDTkFWIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR05TU19MNUNOQVYKKyNkZWZpbmUgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9HUFNfQ05BVjIgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9HTlNTX0NOQVYyCisjZGVmaW5lIEdQU19MT0NBVElPTl9IQVNfQUNDVVJBQ1kgR1BTX0xPQ0FUSU9OX0hBU19IT1JJWk9OVEFMX0FDQ1VSQUNZCisKIC8qKgogICogVGhlIGlkIG9mIHRoaXMgbW9kdWxlCiAgKi8KQEAgLTM5LDEyNyArNzMsMzQgQEAKIAogLyoqIE1heGltdW0gbnVtYmVyIG9mIFNWcyBmb3IgZ3BzX3N2X3N0YXR1c19jYWxsYmFjaygpLiAqLwogI2RlZmluZSBHUFNfTUFYX1NWUyAzMgotLyoqIE1heGltdW0gbnVtYmVyIG9mIFNWcyBmb3IgZ3BzX3N2X3N0YXR1c19jYWxsYmFjaygpLiAqLwotI2RlZmluZSBHTlNTX01BWF9TVlMgNjQKIAogLyoqIE1heGltdW0gbnVtYmVyIG9mIE1lYXN1cmVtZW50cyBpbiBncHNfbWVhc3VyZW1lbnRfY2FsbGJhY2soKS4gKi8KICNkZWZpbmUgR1BTX01BWF9NRUFTVVJFTUVOVCAgIDMyCiAKLS8qKiBNYXhpbXVtIG51bWJlciBvZiBNZWFzdXJlbWVudHMgaW4gZ25zc19tZWFzdXJlbWVudF9jYWxsYmFjaygpLiAqLwotI2RlZmluZSBHTlNTX01BWF9NRUFTVVJFTUVOVCAgIDY0Ci0KIC8qKiBSZXF1ZXN0ZWQgb3BlcmF0aW9uYWwgbW9kZSBmb3IgR1BTIG9wZXJhdGlvbi4gKi8KIHR5cGVkZWYgdWludDMyX3QgR3BzUG9zaXRpb25Nb2RlOwotLyogSU1QT1JUQU5UOiBOb3RlIHRoYXQgdGhlIGZvbGxvd2luZyB2YWx1ZXMgbXVzdCBtYXRjaAotICogY29uc3RhbnRzIGluIEdwc0xvY2F0aW9uUHJvdmlkZXIuamF2YS4gKi8KLS8qKiBNb2RlIGZvciBydW5uaW5nIEdQUyBzdGFuZGFsb25lIChubyBhc3Npc3RhbmNlKS4gKi8KLSNkZWZpbmUgR1BTX1BPU0lUSU9OX01PREVfU1RBTkRBTE9ORSAgICAwCi0vKiogQUdQUyBNUy1CYXNlZCBtb2RlLiAqLwotI2RlZmluZSBHUFNfUE9TSVRJT05fTU9ERV9NU19CQVNFRCAgICAgIDEKLS8qKgotICogQUdQUyBNUy1Bc3Npc3RlZCBtb2RlLiBUaGlzIG1vZGUgaXMgbm90IG1haW50YWluZWQgYnkgdGhlIHBsYXRmb3JtIGFueW1vcmUuCi0gKiBJdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0byB1c2UgR1BTX1BPU0lUSU9OX01PREVfTVNfQkFTRUQgaW5zdGVhZC4KLSAqLwotI2RlZmluZSBHUFNfUE9TSVRJT05fTU9ERV9NU19BU1NJU1RFRCAgIDIKIAogLyoqIFJlcXVlc3RlZCByZWN1cnJlbmNlIG1vZGUgZm9yIEdQUyBvcGVyYXRpb24uICovCiB0eXBlZGVmIHVpbnQzMl90IEdwc1Bvc2l0aW9uUmVjdXJyZW5jZTsKLS8qIElNUE9SVEFOVDogTm90ZSB0aGF0IHRoZSBmb2xsb3dpbmcgdmFsdWVzIG11c3QgbWF0Y2gKLSAqIGNvbnN0YW50cyBpbiBHcHNMb2NhdGlvblByb3ZpZGVyLmphdmEuICovCi0vKiogUmVjZWl2ZSBHUFMgZml4ZXMgb24gYSByZWN1cnJpbmcgYmFzaXMgYXQgYSBzcGVjaWZpZWQgcGVyaW9kLiAqLwotI2RlZmluZSBHUFNfUE9TSVRJT05fUkVDVVJSRU5DRV9QRVJJT0RJQyAgICAwCi0vKiogUmVxdWVzdCBhIHNpbmdsZSBzaG90IEdQUyBmaXguICovCi0jZGVmaW5lIEdQU19QT1NJVElPTl9SRUNVUlJFTkNFX1NJTkdMRSAgICAgIDEKIAogLyoqIEdQUyBzdGF0dXMgZXZlbnQgdmFsdWVzLiAqLwogdHlwZWRlZiB1aW50MTZfdCBHcHNTdGF0dXNWYWx1ZTsKLS8qIElNUE9SVEFOVDogTm90ZSB0aGF0IHRoZSBmb2xsb3dpbmcgdmFsdWVzIG11c3QgbWF0Y2gKLSAqIGNvbnN0YW50cyBpbiBHcHNMb2NhdGlvblByb3ZpZGVyLmphdmEuICovCi0vKiogR1BTIHN0YXR1cyB1bmtub3duLiAqLwotI2RlZmluZSBHUFNfU1RBVFVTX05PTkUgICAgICAgICAgICAgMAotLyoqIEdQUyBoYXMgYmVndW4gbmF2aWdhdGluZy4gKi8KLSNkZWZpbmUgR1BTX1NUQVRVU19TRVNTSU9OX0JFR0lOICAgIDEKLS8qKiBHUFMgaGFzIHN0b3BwZWQgbmF2aWdhdGluZy4gKi8KLSNkZWZpbmUgR1BTX1NUQVRVU19TRVNTSU9OX0VORCAgICAgIDIKLS8qKiBHUFMgaGFzIHBvd2VyZWQgb24gYnV0IGlzIG5vdCBuYXZpZ2F0aW5nLiAqLwotI2RlZmluZSBHUFNfU1RBVFVTX0VOR0lORV9PTiAgICAgICAgMwotLyoqIEdQUyBpcyBwb3dlcmVkIG9mZi4gKi8KLSNkZWZpbmUgR1BTX1NUQVRVU19FTkdJTkVfT0ZGICAgICAgIDQKIAogLyoqIEZsYWdzIHRvIGluZGljYXRlIHdoaWNoIHZhbHVlcyBhcmUgdmFsaWQgaW4gYSBHcHNMb2NhdGlvbi4gKi8KIHR5cGVkZWYgdWludDE2X3QgR3BzTG9jYXRpb25GbGFnczsKLS8qIElNUE9SVEFOVDogTm90ZSB0aGF0IHRoZSBmb2xsb3dpbmcgdmFsdWVzIG11c3QgbWF0Y2gKLSAqIGNvbnN0YW50cyBpbiBHcHNMb2NhdGlvblByb3ZpZGVyLmphdmEuICovCi0vKiogR3BzTG9jYXRpb24gaGFzIHZhbGlkIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUuICovCi0jZGVmaW5lIEdQU19MT0NBVElPTl9IQVNfTEFUX0xPTkcgICAweDAwMDEKLS8qKiBHcHNMb2NhdGlvbiBoYXMgdmFsaWQgYWx0aXR1ZGUuICovCi0jZGVmaW5lIEdQU19MT0NBVElPTl9IQVNfQUxUSVRVREUgICAweDAwMDIKLS8qKiBHcHNMb2NhdGlvbiBoYXMgdmFsaWQgc3BlZWQuICovCi0jZGVmaW5lIEdQU19MT0NBVElPTl9IQVNfU1BFRUQgICAgICAweDAwMDQKLS8qKiBHcHNMb2NhdGlvbiBoYXMgdmFsaWQgYmVhcmluZy4gKi8KLSNkZWZpbmUgR1BTX0xPQ0FUSU9OX0hBU19CRUFSSU5HICAgIDB4MDAwOAotLyoqIEdwc0xvY2F0aW9uIGhhcyB2YWxpZCBhY2N1cmFjeS4gKi8KLSNkZWZpbmUgR1BTX0xPQ0FUSU9OX0hBU19BQ0NVUkFDWSAgIDB4MDAxMAotCi0vKiogRmxhZ3MgZm9yIHRoZSBncHNfc2V0X2NhcGFiaWxpdGllcyBjYWxsYmFjay4gKi8KLQotLyoqCi0gKiBHUFMgSEFMIHNjaGVkdWxlcyBmaXhlcyBmb3IgR1BTX1BPU0lUSU9OX1JFQ1VSUkVOQ0VfUEVSSU9ESUMgbW9kZS4gSWYgdGhpcyBpcwotICogbm90IHNldCwgdGhlbiB0aGUgZnJhbWV3b3JrIHdpbGwgdXNlIDEwMDBtcyBmb3IgbWluX2ludGVydmFsIGFuZCB3aWxsIHN0YXJ0Ci0gKiBhbmQgY2FsbCBzdGFydCgpIGFuZCBzdG9wKCkgdG8gc2NoZWR1bGUgdGhlIEdQUy4KLSAqLwotI2RlZmluZSBHUFNfQ0FQQUJJTElUWV9TQ0hFRFVMSU5HICAgICAgICgxIDw8IDApCi0vKiogR1BTIHN1cHBvcnRzIE1TLUJhc2VkIEFHUFMgbW9kZSAqLwotI2RlZmluZSBHUFNfQ0FQQUJJTElUWV9NU0IgICAgICAgICAgICAgICgxIDw8IDEpCi0vKiogR1BTIHN1cHBvcnRzIE1TLUFzc2lzdGVkIEFHUFMgbW9kZSAqLwotI2RlZmluZSBHUFNfQ0FQQUJJTElUWV9NU0EgICAgICAgICAgICAgICgxIDw8IDIpCi0vKiogR1BTIHN1cHBvcnRzIHNpbmdsZS1zaG90IGZpeGVzICovCi0jZGVmaW5lIEdQU19DQVBBQklMSVRZX1NJTkdMRV9TSE9UICAgICAgKDEgPDwgMykKLS8qKiBHUFMgc3VwcG9ydHMgb24gZGVtYW5kIHRpbWUgaW5qZWN0aW9uICovCi0jZGVmaW5lIEdQU19DQVBBQklMSVRZX09OX0RFTUFORF9USU1FICAgKDEgPDwgNCkKLS8qKiBHUFMgc3VwcG9ydHMgR2VvZmVuY2luZyAgKi8KLSNkZWZpbmUgR1BTX0NBUEFCSUxJVFlfR0VPRkVOQ0lORyAgICAgICAoMSA8PCA1KQotLyoqIEdQUyBzdXBwb3J0cyBNZWFzdXJlbWVudHMuICovCi0jZGVmaW5lIEdQU19DQVBBQklMSVRZX01FQVNVUkVNRU5UUyAgICAgKDEgPDwgNikKLS8qKiBHUFMgc3VwcG9ydHMgTmF2aWdhdGlvbiBNZXNzYWdlcyAqLwotI2RlZmluZSBHUFNfQ0FQQUJJTElUWV9OQVZfTUVTU0FHRVMgICAgICgxIDw8IDcpCiAKIC8qKgogICogRmxhZ3MgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIGFpZGluZyBkYXRhIHRvIGRlbGV0ZSB3aGVuIGNhbGxpbmcKICAqIGRlbGV0ZV9haWRpbmdfZGF0YSgpLgogICovCiB0eXBlZGVmIHVpbnQxNl90IEdwc0FpZGluZ0RhdGE7Ci0vKiBJTVBPUlRBTlQ6IE5vdGUgdGhhdCB0aGUgZm9sbG93aW5nIHZhbHVlcyBtdXN0IG1hdGNoCi0gKiBjb25zdGFudHMgaW4gR3BzTG9jYXRpb25Qcm92aWRlci5qYXZhLiAqLwotI2RlZmluZSBHUFNfREVMRVRFX0VQSEVNRVJJUyAgICAgICAgMHgwMDAxCi0jZGVmaW5lIEdQU19ERUxFVEVfQUxNQU5BQyAgICAgICAgICAweDAwMDIKLSNkZWZpbmUgR1BTX0RFTEVURV9QT1NJVElPTiAgICAgICAgIDB4MDAwNAotI2RlZmluZSBHUFNfREVMRVRFX1RJTUUgICAgICAgICAgICAgMHgwMDA4Ci0jZGVmaW5lIEdQU19ERUxFVEVfSU9OTyAgICAgICAgICAgICAweDAwMTAKLSNkZWZpbmUgR1BTX0RFTEVURV9VVEMgICAgICAgICAgICAgIDB4MDAyMAotI2RlZmluZSBHUFNfREVMRVRFX0hFQUxUSCAgICAgICAgICAgMHgwMDQwCi0jZGVmaW5lIEdQU19ERUxFVEVfU1ZESVIgICAgICAgICAgICAweDAwODAKLSNkZWZpbmUgR1BTX0RFTEVURV9TVlNURUVSICAgICAgICAgIDB4MDEwMAotI2RlZmluZSBHUFNfREVMRVRFX1NBREFUQSAgICAgICAgICAgMHgwMjAwCi0jZGVmaW5lIEdQU19ERUxFVEVfUlRJICAgICAgICAgICAgICAweDA0MDAKLSNkZWZpbmUgR1BTX0RFTEVURV9DRUxMREJfSU5GTyAgICAgIDB4ODAwMAotI2RlZmluZSBHUFNfREVMRVRFX0FMTCAgICAgICAgICAgICAgMHhGRkZGCiAKIC8qKiBBR1BTIHR5cGUgKi8KIHR5cGVkZWYgdWludDE2X3QgQUdwc1R5cGU7Ci0jZGVmaW5lIEFHUFNfVFlQRV9TVVBMICAgICAgICAgIDEKLSNkZWZpbmUgQUdQU19UWVBFX0MySyAgICAgICAgICAgMgogCiB0eXBlZGVmIHVpbnQxNl90IEFHcHNTZXRJRFR5cGU7Ci0jZGVmaW5lIEFHUFNfU0VUSURfVFlQRV9OT05FICAgIDAKLSNkZWZpbmUgQUdQU19TRVRJRF9UWVBFX0lNU0kgICAgMQotI2RlZmluZSBBR1BTX1NFVElEX1RZUEVfTVNJU0ROICAyCiAKIHR5cGVkZWYgdWludDE2X3QgQXBuSXBUeXBlOwotI2RlZmluZSBBUE5fSVBfSU5WQUxJRCAgICAgICAgICAwCi0jZGVmaW5lIEFQTl9JUF9JUFY0ICAgICAgICAgICAgIDEKLSNkZWZpbmUgQVBOX0lQX0lQVjYgICAgICAgICAgICAgMgotI2RlZmluZSBBUE5fSVBfSVBWNFY2ICAgICAgICAgICAzCiAKIC8qKgogICogU3RyaW5nIGxlbmd0aCBjb25zdGFudHMKQEAgLTE3MSw3MSArMTEyLDMxIEBACiAgKiBHcHNOaVR5cGUgY29uc3RhbnRzCiAgKi8KIHR5cGVkZWYgdWludDMyX3QgR3BzTmlUeXBlOwotI2RlZmluZSBHUFNfTklfVFlQRV9WT0lDRSAgICAgICAgICAgICAgMQotI2RlZmluZSBHUFNfTklfVFlQRV9VTVRTX1NVUEwgICAgICAgICAgMgotI2RlZmluZSBHUFNfTklfVFlQRV9VTVRTX0NUUkxfUExBTkUgICAgMwogCiAvKioKICAqIEdwc05pTm90aWZ5RmxhZ3MgY29uc3RhbnRzCiAgKi8KIHR5cGVkZWYgdWludDMyX3QgR3BzTmlOb3RpZnlGbGFnczsKLS8qKiBOSSByZXF1aXJlcyBub3RpZmljYXRpb24gKi8KLSNkZWZpbmUgR1BTX05JX05FRURfTk9USUZZICAgICAgICAgIDB4MDAwMQotLyoqIE5JIHJlcXVpcmVzIHZlcmlmaWNhdGlvbiAqLwotI2RlZmluZSBHUFNfTklfTkVFRF9WRVJJRlkgICAgICAgICAgMHgwMDAyCi0vKiogTkkgcmVxdWlyZXMgcHJpdmFjeSBvdmVycmlkZSwgbm8gbm90aWZpY2F0aW9uL21pbmltYWwgdHJhY2UgKi8KLSNkZWZpbmUgR1BTX05JX1BSSVZBQ1lfT1ZFUlJJREUgICAgIDB4MDAwNAogCiAvKioKICAqIEdQUyBOSSByZXNwb25zZXMsIHVzZWQgdG8gZGVmaW5lIHRoZSByZXNwb25zZSBpbgogICogTkkgc3RydWN0dXJlcwogICovCiB0eXBlZGVmIGludCBHcHNVc2VyUmVzcG9uc2VUeXBlOwotI2RlZmluZSBHUFNfTklfUkVTUE9OU0VfQUNDRVBUICAgICAgICAgMQotI2RlZmluZSBHUFNfTklfUkVTUE9OU0VfREVOWSAgICAgICAgICAgMgotI2RlZmluZSBHUFNfTklfUkVTUE9OU0VfTk9SRVNQICAgICAgICAgMwogCiAvKioKICAqIE5JIGRhdGEgZW5jb2Rpbmcgc2NoZW1lCiAgKi8KIHR5cGVkZWYgaW50IEdwc05pRW5jb2RpbmdUeXBlOwotI2RlZmluZSBHUFNfRU5DX05PTkUgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHUFNfRU5DX1NVUExfR1NNX0RFRkFVTFQgICAgICAgMQotI2RlZmluZSBHUFNfRU5DX1NVUExfVVRGOCAgICAgICAgICAgICAgMgotI2RlZmluZSBHUFNfRU5DX1NVUExfVUNTMiAgICAgICAgICAgICAgMwotI2RlZmluZSBHUFNfRU5DX1VOS05PV04gICAgICAgICAgICAgICAgLTEKIAogLyoqIEFHUFMgc3RhdHVzIGV2ZW50IHZhbHVlcy4gKi8KIHR5cGVkZWYgdWludDE2X3QgQUdwc1N0YXR1c1ZhbHVlOwotLyoqIEdQUyByZXF1ZXN0cyBkYXRhIGNvbm5lY3Rpb24gZm9yIEFHUFMuICovCi0jZGVmaW5lIEdQU19SRVFVRVNUX0FHUFNfREFUQV9DT05OICAxCi0vKiogR1BTIHJlbGVhc2VzIHRoZSBBR1BTIGRhdGEgY29ubmVjdGlvbi4gKi8KLSNkZWZpbmUgR1BTX1JFTEVBU0VfQUdQU19EQVRBX0NPTk4gIDIKLS8qKiBBR1BTIGRhdGEgY29ubmVjdGlvbiBpbml0aWF0ZWQgKi8KLSNkZWZpbmUgR1BTX0FHUFNfREFUQV9DT05ORUNURUQgICAgIDMKLS8qKiBBR1BTIGRhdGEgY29ubmVjdGlvbiBjb21wbGV0ZWQgKi8KLSNkZWZpbmUgR1BTX0FHUFNfREFUQV9DT05OX0RPTkUgICAgIDQKLS8qKiBBR1BTIGRhdGEgY29ubmVjdGlvbiBmYWlsZWQgKi8KLSNkZWZpbmUgR1BTX0FHUFNfREFUQV9DT05OX0ZBSUxFRCAgIDUKIAogdHlwZWRlZiB1aW50MTZfdCBBR3BzUmVmTG9jYXRpb25UeXBlOwotI2RlZmluZSBBR1BTX1JFRl9MT0NBVElPTl9UWVBFX0dTTV9DRUxMSUQgICAxCi0jZGVmaW5lIEFHUFNfUkVGX0xPQ0FUSU9OX1RZUEVfVU1UU19DRUxMSUQgIDIKLSNkZWZpbmUgQUdQU19SRUZfTE9DQVRJT05fVFlQRV9NQUMgICAgICAgICAgMwotI2RlZmluZSBBR1BTX1JFRl9MT0NBVElPTl9UWVBFX0xURV9DRUxMSUQgICA0CiAKIC8qIERlcHJlY2F0ZWQsIHRvIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgQW5kcm9pZCByZWxlYXNlLiAqLwogI2RlZmluZSBBR1BTX1JFR19MT0NBVElPTl9UWVBFX01BQyAgICAgICAgICAzCiAKLS8qKiBOZXR3b3JrIHR5cGVzIGZvciB1cGRhdGVfbmV0d29ya19zdGF0ZSAidHlwZSIgcGFyYW1ldGVyICovCi0jZGVmaW5lIEFHUFNfUklMX05FVFdPUktfVFlQRV9NT0JJTEUgICAgICAgIDAKLSNkZWZpbmUgQUdQU19SSUxfTkVUV09SS19UWVBFX1dJRkkgICAgICAgICAgMQotI2RlZmluZSBBR1BTX1JJTF9ORVRXT1JLX1RZUEVfTU9CSUxFX01NUyAgICAyCi0jZGVmaW5lIEFHUFNfUklMX05FVFdPUktfVFlQRV9NT0JJTEVfU1VQTCAgIDMKLSNkZWZpbmUgQUdQU19SSUxfTkVUV09SS19UVFlQRV9NT0JJTEVfRFVOICAgNAotI2RlZmluZSBBR1BTX1JJTF9ORVRXT1JLX1RUWVBFX01PQklMRV9ISVBSSSA1Ci0jZGVmaW5lIEFHUFNfUklMX05FVFdPUktfVFRZUEVfV0lNQVggICAgICAgIDYKLQogLyogVGhlIGZvbGxvd2luZyB0eXBlZGVmIHRvZ2V0aGVyIHdpdGggaXRzIGNvbnN0YW50cyBiZWxvdyBhcmUgZGVwcmVjYXRlZCwgYW5kCiAgKiB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgcmVsZWFzZS4gKi8KIHR5cGVkZWYgdWludDE2X3QgR3BzQ2xvY2tGbGFnczsKQEAgLTI1MSwyMCArMTUyLDYgQEAKICAqIEZsYWdzIHRvIGluZGljYXRlIHdoYXQgZmllbGRzIGluIEduc3NDbG9jayBhcmUgdmFsaWQuCiAgKi8KIHR5cGVkZWYgdWludDE2X3QgR25zc0Nsb2NrRmxhZ3M7Ci0vKiogQSB2YWxpZCAnbGVhcCBzZWNvbmQnIGlzIHN0b3JlZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUuICovCi0jZGVmaW5lIEdOU1NfQ0xPQ0tfSEFTX0xFQVBfU0VDT05EICAgICAgICAgICAgICAgKDE8PDApCi0vKiogQSB2YWxpZCAndGltZSB1bmNlcnRhaW50eScgaXMgc3RvcmVkIGluIHRoZSBkYXRhIHN0cnVjdHVyZS4gKi8KLSNkZWZpbmUgR05TU19DTE9DS19IQVNfVElNRV9VTkNFUlRBSU5UWSAgICAgICAgICAoMTw8MSkKLS8qKiBBIHZhbGlkICdmdWxsIGJpYXMnIGlzIHN0b3JlZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUuICovCi0jZGVmaW5lIEdOU1NfQ0xPQ0tfSEFTX0ZVTExfQklBUyAgICAgICAgICAgICAgICAgKDE8PDIpCi0vKiogQSB2YWxpZCAnYmlhcycgaXMgc3RvcmVkIGluIHRoZSBkYXRhIHN0cnVjdHVyZS4gKi8KLSNkZWZpbmUgR05TU19DTE9DS19IQVNfQklBUyAgICAgICAgICAgICAgICAgICAgICAoMTw8MykKLS8qKiBBIHZhbGlkICdiaWFzIHVuY2VydGFpbnR5JyBpcyBzdG9yZWQgaW4gdGhlIGRhdGEgc3RydWN0dXJlLiAqLwotI2RlZmluZSBHTlNTX0NMT0NLX0hBU19CSUFTX1VOQ0VSVEFJTlRZICAgICAgICAgICgxPDw0KQotLyoqIEEgdmFsaWQgJ2RyaWZ0JyBpcyBzdG9yZWQgaW4gdGhlIGRhdGEgc3RydWN0dXJlLiAqLwotI2RlZmluZSBHTlNTX0NMT0NLX0hBU19EUklGVCAgICAgICAgICAgICAgICAgICAgICgxPDw1KQotLyoqIEEgdmFsaWQgJ2RyaWZ0IHVuY2VydGFpbnR5JyBpcyBzdG9yZWQgaW4gdGhlIGRhdGEgc3RydWN0dXJlLiAqLwotI2RlZmluZSBHTlNTX0NMT0NLX0hBU19EUklGVF9VTkNFUlRBSU5UWSAgICAgICAgICgxPDw2KQogCiAvKiBUaGUgZm9sbG93aW5nIHR5cGVkZWYgdG9nZXRoZXIgd2l0aCBpdHMgY29uc3RhbnRzIGJlbG93IGFyZSBkZXByZWNhdGVkLCBhbmQKICAqIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCByZWxlYXNlLiAqLwpAQCAtMzAwLDE2ICsxODcsNiBAQAogICogRmxhZ3MgdG8gaW5kaWNhdGUgd2hhdCBmaWVsZHMgaW4gR25zc01lYXN1cmVtZW50IGFyZSB2YWxpZC4KICAqLwogdHlwZWRlZiB1aW50MzJfdCBHbnNzTWVhc3VyZW1lbnRGbGFnczsKLS8qKiBBIHZhbGlkICdzbnInIGlzIHN0b3JlZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUuICovCi0jZGVmaW5lIEdOU1NfTUVBU1VSRU1FTlRfSEFTX1NOUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTw8MCkKLS8qKiBBIHZhbGlkICdjYXJyaWVyIGZyZXF1ZW5jeScgaXMgc3RvcmVkIGluIHRoZSBkYXRhIHN0cnVjdHVyZS4gKi8KLSNkZWZpbmUgR05TU19NRUFTVVJFTUVOVF9IQVNfQ0FSUklFUl9GUkVRVUVOQ1kgICAgICAgICAgICAgICAgICgxPDw5KQotLyoqIEEgdmFsaWQgJ2NhcnJpZXIgY3ljbGVzJyBpcyBzdG9yZWQgaW4gdGhlIGRhdGEgc3RydWN0dXJlLiAqLwotI2RlZmluZSBHTlNTX01FQVNVUkVNRU5UX0hBU19DQVJSSUVSX0NZQ0xFUyAgICAgICAgICAgICAgICAgICAgKDE8PDEwKQotLyoqIEEgdmFsaWQgJ2NhcnJpZXIgcGhhc2UnIGlzIHN0b3JlZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUuICovCi0jZGVmaW5lIEdOU1NfTUVBU1VSRU1FTlRfSEFTX0NBUlJJRVJfUEhBU0UgICAgICAgICAgICAgICAgICAgICAoMTw8MTEpCi0vKiogQSB2YWxpZCAnY2FycmllciBwaGFzZSB1bmNlcnRhaW50eScgaXMgc3RvcmVkIGluIHRoZSBkYXRhIHN0cnVjdHVyZS4gKi8KLSNkZWZpbmUgR05TU19NRUFTVVJFTUVOVF9IQVNfQ0FSUklFUl9QSEFTRV9VTkNFUlRBSU5UWSAgICAgICAgICgxPDwxMikKIAogLyogVGhlIGZvbGxvd2luZyB0eXBlZGVmIHRvZ2V0aGVyIHdpdGggaXRzIGNvbnN0YW50cyBiZWxvdyBhcmUgZGVwcmVjYXRlZCwgYW5kCiAgKiB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgcmVsZWFzZS4gKi8KQEAgLTMzMSwxMiArMjA4LDYgQEAKICAqIGluZGljYXRvci4KICAqLwogdHlwZWRlZiB1aW50OF90IEduc3NNdWx0aXBhdGhJbmRpY2F0b3I7Ci0vKiogVGhlIGluZGljYXRvciBpcyBub3QgYXZhaWxhYmxlIG9yIHVua25vd24uICovCi0jZGVmaW5lIEdOU1NfTVVMVElQQVRIX0lORElDQVRPUl9VTktOT1dOICAgICAgICAgICAgICAgICAwCi0vKiogVGhlIG1lYXN1cmVtZW50IGlzIGluZGljYXRlZCB0byBiZSBhZmZlY3RlZCBieSBtdWx0aXBhdGguICovCi0jZGVmaW5lIEdOU1NfTVVMVElQQVRIX0lORElDQVRPUl9QUkVTRU5UICAgICAgICAgICAgICAgICAxCi0vKiogVGhlIG1lYXN1cmVtZW50IGlzIGluZGljYXRlZCB0byBiZSBub3QgYWZmZWN0ZWQgYnkgbXVsdGlwYXRoLiAqLwotI2RlZmluZSBHTlNTX01VTFRJUEFUSF9JTkRJQ0FUT1JfTk9UX1BSRVNFTlQgICAgICAgICAgICAgMgogCiAvKiBUaGUgZm9sbG93aW5nIHR5cGVkZWYgdG9nZXRoZXIgd2l0aCBpdHMgY29uc3RhbnRzIGJlbG93IGFyZSBkZXByZWNhdGVkLCBhbmQKICAqIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCByZWxlYXNlLiAqLwpAQCAtMzYzLDIxICsyMzQsNiBAQAogICogc2V0IHRvIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfVU5LTk9XTigwKS4KICAqLwogdHlwZWRlZiB1aW50MzJfdCBHbnNzTWVhc3VyZW1lbnRTdGF0ZTsKLSNkZWZpbmUgR05TU19NRUFTVVJFTUVOVF9TVEFURV9VTktOT1dOICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgR05TU19NRUFTVVJFTUVOVF9TVEFURV9DT0RFX0xPQ0sgICAgICAgICAgICAgKDE8PDApCi0jZGVmaW5lIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfQklUX1NZTkMgICAgICAgICAgICAgICgxPDwxKQotI2RlZmluZSBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX1NVQkZSQU1FX1NZTkMgICAgICAgICAoMTw8MikKLSNkZWZpbmUgR05TU19NRUFTVVJFTUVOVF9TVEFURV9UT1dfREVDT0RFRCAgICAgICAgICAgKDE8PDMpCi0jZGVmaW5lIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfTVNFQ19BTUJJR1VPVVMgICAgICAgICgxPDw0KQotI2RlZmluZSBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX1NZTUJPTF9TWU5DICAgICAgICAgICAoMTw8NSkKLSNkZWZpbmUgR05TU19NRUFTVVJFTUVOVF9TVEFURV9HTE9fU1RSSU5HX1NZTkMgICAgICAgKDE8PDYpCi0jZGVmaW5lIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfR0xPX1RPRF9ERUNPREVEICAgICAgICgxPDw3KQotI2RlZmluZSBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX0JEU19EMl9CSVRfU1lOQyAgICAgICAoMTw8OCkKLSNkZWZpbmUgR05TU19NRUFTVVJFTUVOVF9TVEFURV9CRFNfRDJfU1VCRlJBTUVfU1lOQyAgKDE8PDkpCi0jZGVmaW5lIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfR0FMX0UxQkNfQ09ERV9MT0NLICAgICgxPDwxMCkKLSNkZWZpbmUgR05TU19NRUFTVVJFTUVOVF9TVEFURV9HQUxfRTFDXzJORF9DT0RFX0xPQ0sgKDE8PDExKQotI2RlZmluZSBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX0dBTF9FMUJfUEFHRV9TWU5DICAgICAoMTw8MTIpCi0jZGVmaW5lIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfU0JBU19TWU5DICAgICAgICAgICAgICgxPDwxMykKIAogLyogVGhlIGZvbGxvd2luZyB0eXBlZGVmIHRvZ2V0aGVyIHdpdGggaXRzIGNvbnN0YW50cyBiZWxvdyBhcmUgZGVwcmVjYXRlZCwgYW5kCiAgKiB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgcmVsZWFzZS4gKi8KQEAgLTM5MSwxMCArMjQ3LDYgQEAKICAqIEZsYWdzIGluZGljYXRpbmcgdGhlIEFjY3VtdWxhdGVkIERlbHRhIFJhbmdlJ3Mgc3RhdGVzLgogICovCiB0eXBlZGVmIHVpbnQxNl90IEduc3NBY2N1bXVsYXRlZERlbHRhUmFuZ2VTdGF0ZTsKLSNkZWZpbmUgR05TU19BRFJfU1RBVEVfVU5LTk9XTiAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHTlNTX0FEUl9TVEFURV9WQUxJRCAgICAgICAgICAgICAgICAgICAgICgxPDwwKQotI2RlZmluZSBHTlNTX0FEUl9TVEFURV9SRVNFVCAgICAgICAgICAgICAgICAgICAgICgxPDwxKQotI2RlZmluZSBHTlNTX0FEUl9TVEFURV9DWUNMRV9TTElQICAgICAgICAgICAgICAgICgxPDwyKQogCiAvKiBUaGUgZm9sbG93aW5nIHR5cGVkZWYgdG9nZXRoZXIgd2l0aCBpdHMgY29uc3RhbnRzIGJlbG93IGFyZSBkZXByZWNhdGVkLCBhbmQKICAqIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCByZWxlYXNlLiAqLwpAQCAtNDE0LDI2ICsyNjYsNiBAQAogICovCiB0eXBlZGVmIGludDE2X3QgR25zc05hdmlnYXRpb25NZXNzYWdlVHlwZTsKIAotI2RlZmluZSBHTlNTX05BVklHQVRJT05fTUVTU0FHRV9UWVBFX1VOS05PV04gICAgICAgMAotLyoqIEdQUyBMMSBDL0EgbWVzc2FnZSBjb250YWluZWQgaW4gdGhlIHN0cnVjdHVyZS4gICovCi0jZGVmaW5lIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR1BTX0wxQ0EgICAgICAweDAxMDEKLS8qKiBHUFMgTDItQ05BViBtZXNzYWdlIGNvbnRhaW5lZCBpbiB0aGUgc3RydWN0dXJlLiAqLwotI2RlZmluZSBHTlNTX05BVklHQVRJT05fTUVTU0FHRV9UWVBFX0dQU19MMkNOQVYgICAgMHgwMTAyCi0vKiogR1BTIEw1LUNOQVYgbWVzc2FnZSBjb250YWluZWQgaW4gdGhlIHN0cnVjdHVyZS4gKi8KLSNkZWZpbmUgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9HUFNfTDVDTkFWICAgIDB4MDEwMwotLyoqIEdQUyBDTkFWLTIgbWVzc2FnZSBjb250YWluZWQgaW4gdGhlIHN0cnVjdHVyZS4gKi8KLSNkZWZpbmUgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9HUFNfQ05BVjIgICAgIDB4MDEwNAotLyoqIEdsb25hc3MgTDEgQ0EgbWVzc2FnZSBjb250YWluZWQgaW4gdGhlIHN0cnVjdHVyZS4gKi8KLSNkZWZpbmUgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9HTE9fTDFDQSAgICAgIDB4MDMwMQotLyoqIEJlaWRvdSBEMSBtZXNzYWdlIGNvbnRhaW5lZCBpbiB0aGUgc3RydWN0dXJlLiAqLwotI2RlZmluZSBHTlNTX05BVklHQVRJT05fTUVTU0FHRV9UWVBFX0JEU19EMSAgICAgICAgMHgwNTAxCi0vKiogQmVpZG91IEQyIG1lc3NhZ2UgY29udGFpbmVkIGluIHRoZSBzdHJ1Y3R1cmUuICovCi0jZGVmaW5lIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfQkRTX0QyICAgICAgICAweDA1MDIKLS8qKiBHYWxpbGVvIEkvTkFWIG1lc3NhZ2UgY29udGFpbmVkIGluIHRoZSBzdHJ1Y3R1cmUuICovCi0jZGVmaW5lIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR0FMX0kgICAgICAgICAweDA2MDEKLS8qKiBHYWxpbGVvIEYvTkFWIG1lc3NhZ2UgY29udGFpbmVkIGluIHRoZSBzdHJ1Y3R1cmUuICovCi0jZGVmaW5lIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR0FMX0YgICAgICAgICAweDA2MDIKLQogLyoqCiAgKiBTdGF0dXMgb2YgTmF2aWdhdGlvbiBNZXNzYWdlCiAgKiBXaGVuIGEgbWVzc2FnZSBpcyByZWNlaXZlZCBwcm9wZXJseSB3aXRob3V0IGFueSBwYXJpdHkgZXJyb3IgaW4gaXRzIG5hdmlnYXRpb24gd29yZHMsIHRoZQpAQCAtNDQ0LDkgKzI3Niw2IEBACiAgKiBjb3JyZWN0ZWQuCiAgKi8KIHR5cGVkZWYgdWludDE2X3QgTmF2aWdhdGlvbk1lc3NhZ2VTdGF0dXM7Ci0jZGVmaW5lIE5BVl9NRVNTQUdFX1NUQVRVU19VTktOT1dOICAgICAgICAgICAgICAwCi0jZGVmaW5lIE5BVl9NRVNTQUdFX1NUQVRVU19QQVJJVFlfUEFTU0VEICAgKDE8PDApCi0jZGVmaW5lIE5BVl9NRVNTQUdFX1NUQVRVU19QQVJJVFlfUkVCVUlMVCAgKDE8PDEpCiAKIC8qIFRoaXMgY29uc3RhbnQgaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCByZWxlYXNlLiAqLwogI2RlZmluZSBOQVZfTUVTU0FHRV9TVEFUVVNfVU5LT05XICAgICAgICAgICAgICAwCkBAIC00NTUsMjIgKzI4NCwxMSBAQAogICogRmxhZ3MgdGhhdCBpbmRpY2F0ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2F0ZWxsaXRlCiAgKi8KIHR5cGVkZWYgdWludDhfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEduc3NTdkZsYWdzOwotI2RlZmluZSBHTlNTX1NWX0ZMQUdTX05PTkUgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHTlNTX1NWX0ZMQUdTX0hBU19FUEhFTUVSSVNfREFUQSAgICAgICAgKDEgPDwgMCkKLSNkZWZpbmUgR05TU19TVl9GTEFHU19IQVNfQUxNQU5BQ19EQVRBICAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIEdOU1NfU1ZfRkxBR1NfVVNFRF9JTl9GSVggICAgICAgICAgICAgICAoMSA8PCAyKQogCiAvKioKICAqIENvbnN0ZWxsYXRpb24gdHlwZSBvZiBHbnNzU3ZJbmZvCiAgKi8KIHR5cGVkZWYgdWludDhfdCAgICAgICAgICAgICAgICAgICAgICAgICBHbnNzQ29uc3RlbGxhdGlvblR5cGU7Ci0jZGVmaW5lIEdOU1NfQ09OU1RFTExBVElPTl9VTktOT1dOICAgICAgMAotI2RlZmluZSBHTlNTX0NPTlNURUxMQVRJT05fR1BTICAgICAgICAgIDEKLSNkZWZpbmUgR05TU19DT05TVEVMTEFUSU9OX1NCQVMgICAgICAgICAyCi0jZGVmaW5lIEdOU1NfQ09OU1RFTExBVElPTl9HTE9OQVNTICAgICAgMwotI2RlZmluZSBHTlNTX0NPTlNURUxMQVRJT05fUVpTUyAgICAgICAgIDQKLSNkZWZpbmUgR05TU19DT05TVEVMTEFUSU9OX0JFSURPVSAgICAgICA1Ci0jZGVmaW5lIEdOU1NfQ09OU1RFTExBVElPTl9HQUxJTEVPICAgICAgNgogCiAvKioKICAqIE5hbWUgZm9yIHRoZSBHUFMgWFRSQSBpbnRlcmZhY2UuCkBAIC01MjIsNyArMzQwLDYgQEAKICAqLwogI2RlZmluZSBHTlNTX0NPTkZJR1VSQVRJT05fSU5URVJGQUNFICAgICAiZ25zc19jb25maWd1cmF0aW9uIgogCi0KIC8qKiBSZXByZXNlbnRzIGEgbG9jYXRpb24uICovCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgLyoqIHNldCB0byBzaXplb2YoR3BzTG9jYXRpb24pICovCkBAIC0xMTI2LDkgKzk0Myw2IEBACiAgICAgY29uc3QgR3BzSW50ZXJmYWNlKiAoKmdldF9ncHNfaW50ZXJmYWNlKShzdHJ1Y3QgZ3BzX2RldmljZV90KiBkZXYpOwogfTsKIAotI2RlZmluZSBBR1BTX1JJTF9SRVFVRVNUX1NFVElEX0lNU0kgICAgICgxPDwwTCkKLSNkZWZpbmUgQUdQU19SSUxfUkVRVUVTVF9TRVRJRF9NU0lTRE4gICAoMTw8MUwpCi0KICNkZWZpbmUgQUdQU19SSUxfUkVRVUVTVF9SRUZMT0NfQ0VMTElEICAoMTw8MEwpCiAjZGVmaW5lIEFHUFNfUklMX1JFUVVFU1RfUkVGTE9DX01BQyAgICAgKDE8PDFMKQogCkBAIC0xMjUxLDE5ICsxMDY1LDYgQEAKICAqIHN1YnN5c3RlbSBrbm93cyBhYm91dCB0aGUgR2VvZmVuY2UuCiAgKgogICovCi0jZGVmaW5lIEdQU19HRU9GRU5DRV9FTlRFUkVEICAgICAoMTw8MEwpCi0jZGVmaW5lIEdQU19HRU9GRU5DRV9FWElURUQgICAgICAoMTw8MUwpCi0jZGVmaW5lIEdQU19HRU9GRU5DRV9VTkNFUlRBSU4gICAoMTw8MkwpCi0KLSNkZWZpbmUgR1BTX0dFT0ZFTkNFX1VOQVZBSUxBQkxFICgxPDwwTCkKLSNkZWZpbmUgR1BTX0dFT0ZFTkNFX0FWQUlMQUJMRSAgICgxPDwxTCkKLQotI2RlZmluZSBHUFNfR0VPRkVOQ0VfT1BFUkFUSU9OX1NVQ0NFU1MgICAgICAgICAgIDAKLSNkZWZpbmUgR1BTX0dFT0ZFTkNFX0VSUk9SX1RPT19NQU5ZX0dFT0ZFTkNFUyAtMTAwCi0jZGVmaW5lIEdQU19HRU9GRU5DRV9FUlJPUl9JRF9FWElTVFMgICAgICAgICAgLTEwMQotI2RlZmluZSBHUFNfR0VPRkVOQ0VfRVJST1JfSURfVU5LTk9XTiAgICAgICAgIC0xMDIKLSNkZWZpbmUgR1BTX0dFT0ZFTkNFX0VSUk9SX0lOVkFMSURfVFJBTlNJVElPTiAtMTAzCi0jZGVmaW5lIEdQU19HRU9GRU5DRV9FUlJPUl9HRU5FUklDICAgICAgICAgICAgLTE0OQogCiAvKioKICAqIFRoZSBjYWxsYmFjayBhc3NvY2lhdGVkIHdpdGggdGhlIGdlb2ZlbmNlLgpAQCAtMTk3MiwxMCArMTc3Myw2IEBACiAgICAgZ25zc19tZWFzdXJlbWVudF9jYWxsYmFjayBnbnNzX21lYXN1cmVtZW50X2NhbGxiYWNrOwogfSBHcHNNZWFzdXJlbWVudENhbGxiYWNrczsKIAotI2RlZmluZSBHUFNfTUVBU1VSRU1FTlRfT1BFUkFUSU9OX1NVQ0NFU1MgICAgICAgICAgMAotI2RlZmluZSBHUFNfTUVBU1VSRU1FTlRfRVJST1JfQUxSRUFEWV9JTklUICAgICAgLTEwMAotI2RlZmluZSBHUFNfTUVBU1VSRU1FTlRfRVJST1JfR0VORVJJQyAgICAgICAgICAgLTEwMQotCiAvKioKICAqIEV4dGVuZGVkIGludGVyZmFjZSBmb3IgR1BTIE1lYXN1cmVtZW50cyBzdXBwb3J0LgogICovCkBAIC0yMTQ3LDEwICsxOTQ0LDYgQEAKICAgICBnbnNzX25hdmlnYXRpb25fbWVzc2FnZV9jYWxsYmFjayBnbnNzX25hdmlnYXRpb25fbWVzc2FnZV9jYWxsYmFjazsKIH0gR3BzTmF2aWdhdGlvbk1lc3NhZ2VDYWxsYmFja3M7CiAKLSNkZWZpbmUgR1BTX05BVklHQVRJT05fTUVTU0FHRV9PUEVSQVRJT05fU1VDQ0VTUyAgICAgICAgICAgICAwCi0jZGVmaW5lIEdQU19OQVZJR0FUSU9OX01FU1NBR0VfRVJST1JfQUxSRUFEWV9JTklUICAgICAgICAgLTEwMAotI2RlZmluZSBHUFNfTkFWSUdBVElPTl9NRVNTQUdFX0VSUk9SX0dFTkVSSUMgICAgICAgICAgICAgIC0xMDEKLQogLyoqCiAgKiBFeHRlbmRlZCBpbnRlcmZhY2UgZm9yIEdQUyBuYXZpZ2F0aW9uIG1lc3NhZ2UgcmVwb3J0aW5nIHN1cHBvcnQuCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaGFyZHdhcmUvZ3JhbGxvYzEuaCBiL2luY2x1ZGUvaGFyZHdhcmUvZ3JhbGxvYzEuaAppbmRleCBhMWEyZDY5Li40ODQ1MDEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2hhcmR3YXJlL2dyYWxsb2MxLmgKKysrIGIvaW5jbHVkZS9oYXJkd2FyZS9ncmFsbG9jMS5oCkBAIC0zNiw3ICszNiwxOSBAQAogICAgICAqIGFsbG9jYXRlIG1heSBiZSBOVUxMLCB3aGljaCBpbnN0cnVjdHMgdGhlIGRldmljZSB0byByZXBvcnQgd2hldGhlciB0aGUKICAgICAgKiBnaXZlbiBhbGxvY2F0aW9uIGlzIHBvc3NpYmxlIG9yIG5vdC4gKi8KICAgICBHUkFMTE9DMV9DQVBBQklMSVRZX1RFU1RfQUxMT0NBVEUgPSAxLAotICAgIEdSQUxMT0MxX0xBU1RfQ0FQQUJJTElUWSA9IDEsCisKKyAgICAvKiBJZiB0aGlzIGNhcGFiaWxpdHkgaXMgc3VwcG9ydGVkLCB0aGVuIHRoZSBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cworICAgICAqIGFsbG9jYXRpbmcgYnVmZmVycyB3aXRoIG1vcmUgdGhhbiBvbmUgaW1hZ2UgbGF5ZXIuICovCisgICAgR1JBTExPQzFfQ0FQQUJJTElUWV9MQVlFUkVEX0JVRkZFUlMgPSAyLAorCisgICAgLyogSWYgdGhpcyBjYXBhYmlsaXR5IGlzIHN1cHBvcnRlZCwgdGhlbiB0aGUgaW1wbGVtZW50YXRpb24gYWx3YXlzIGNsb3NlcworICAgICAqIGFuZCBkZWxldGVzIGEgYnVmZmVyIGhhbmRsZSB3aGVuZXZlciB0aGUgbGFzdCByZWZlcmVuY2UgaXMgcmVtb3ZlZC4KKyAgICAgKgorICAgICAqIFN1cHBvcnRpbmcgdGhpcyBjYXBhYmlsaXR5IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkLiAgSXQgd2lsbCBiZWNvbWUKKyAgICAgKiBtYW5kYXRvcnkgaW4gZnV0dXJlIHJlbGVhc2VzLiAqLworICAgIEdSQUxMT0MxX0NBUEFCSUxJVFlfUkVMRUFTRV9JTVBMWV9ERUxFVEUgPSAzLAorCisgICAgR1JBTExPQzFfTEFTVF9DQVBBQklMSVRZID0gMywKIH0gZ3JhbGxvYzFfY2FwYWJpbGl0eV90OwogCiB0eXBlZGVmIGVudW0gewpAQCAtNzEsNyArODMsNyBAQAogICAgIEdSQUxMT0MxX0NPTlNVTUVSX1VTQUdFX0ZPUkVJR05fQlVGRkVSUyA9IDFVTEwgPDwgMjEsCiAKICAgICAvKiAxVUxMIDw8IDIyICovCi0gICAgLyogMVVMTCA8PCAyMyAqLworICAgIEdSQUxMT0MxX0NPTlNVTUVSX1VTQUdFX0dQVV9EQVRBX0JVRkZFUiA9IDFVTEwgPDwgMjMsCiAgICAgLyogMVVMTCA8PCAyNCAqLwogICAgIC8qIDFVTEwgPDwgMjUgKi8KICAgICAvKiAxVUxMIDw8IDI2ICovCkBAIC0xNDEsNyArMTUzLDkgQEAKICAgICBHUkFMTE9DMV9GVU5DVElPTl9MT0NLID0gMTgsCiAgICAgR1JBTExPQzFfRlVOQ1RJT05fTE9DS19GTEVYID0gMTksCiAgICAgR1JBTExPQzFfRlVOQ1RJT05fVU5MT0NLID0gMjAsCi0gICAgR1JBTExPQzFfTEFTVF9GVU5DVElPTiA9IDIwLAorICAgIEdSQUxMT0MxX0ZVTkNUSU9OX1NFVF9MQVlFUl9DT1VOVCA9IDIxLAorICAgIEdSQUxMT0MxX0ZVTkNUSU9OX0dFVF9MQVlFUl9DT1VOVCA9IDIyLAorICAgIEdSQUxMT0MxX0xBU1RfRlVOQ1RJT04gPSAyMiwKIH0gZ3JhbGxvYzFfZnVuY3Rpb25fZGVzY3JpcHRvcl90OwogCiB0eXBlZGVmIGVudW0gewpAQCAtMTg4LDcgKzIwMiw3IEBACiAgICAgLyogMVVMTCA8PCAyMCAqLwogICAgIC8qIDFVTEwgPDwgMjEgKi8KICAgICBHUkFMTE9DMV9QUk9EVUNFUl9VU0FHRV9WSURFT19ERUNPREVSID0gMVVMTCA8PCAyMiwKLSAgICAvKiAxVUxMIDw8IDIzICovCisgICAgR1JBTExPQzFfUFJPRFVDRVJfVVNBR0VfU0VOU09SX0RJUkVDVF9EQVRBID0gMVVMTCA8PCAyMywKICAgICAvKiAxVUxMIDw8IDI0ICovCiAgICAgLyogMVVMTCA8PCAyNSAqLwogICAgIC8qIDFVTEwgPDwgMjYgKi8KQEAgLTQ0MCw2ICs0NTQsMzAgQEAKICAgICAgICAgZ3JhbGxvYzFfZGV2aWNlX3QqIGRldmljZSwgZ3JhbGxvYzFfYnVmZmVyX2Rlc2NyaXB0b3JfdCBkZXNjcmlwdG9yLAogICAgICAgICBpbnQzMl90IC8qYW5kcm9pZF9waXhlbF9mb3JtYXRfdCovIGZvcm1hdCk7CiAKKy8qIHNldExheWVyQ291bnQoLi4uLCBsYXllckNvdW50KQorICogRnVuY3Rpb24gZGVzY3JpcHRvcjogR1JBTExPQzFfRlVOQ1RJT05fU0VUX0xBWUVSX0NPVU5UCisgKiBNdXN0IGJlIHByb3ZpZGVkIGJ5IGFsbCBncmFsbG9jMSBkZXZpY2VzIHRoYXQgcHJvdmlkZSB0aGUKKyAqIEdSQUxMT0MxX0NBUEFCSUxJVFlfTEFZRVJFRF9CVUZGRVJTIGNhcGFiaWxpdHkuCisgKgorICogU2V0cyB0aGUgbnVtYmVyIG9mIGxheWVycyBpbiB0aGUgYnVmZmVyLgorICoKKyAqIEEgYnVmZmVyIHdpdGggbXVsdGlwbGUgbGF5ZXJzIG1heSBiZSB1c2VkIGFzIHRoZSBiYWNraW5nIHN0b3JlIG9mIGFuIGFycmF5CisgKiB0ZXh0dXJlLiBBbGwgbGF5ZXJzIG9mIGEgYnVmZmVyIHNoYXJlIHRoZSBzYW1lIGNoYXJhY3RlcmlzdGljcyAoZS5nLiwKKyAqIGRpbWVuc2lvbnMsIGZvcm1hdCwgdXNhZ2UpLiBEZXZpY2VzIHRoYXQgZG8gbm90IHN1cHBvcnQKKyAqIEdSQUxMT0MxX0NBUEFCSUxJVFlfTEFZRVJFRF9CVUZGRVJTIG11c3QgYWxsb2NhdGUgb25seSBidWZmZXJzIHdpdGggYSBzaW5nbGUKKyAqIGxheWVyLgorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgIGxheWVyQ291bnQgLSB0aGUgZGVzaXJlZCBudW1iZXIgb2YgbGF5ZXJzLCBtdXN0IGJlIG5vbi16ZXJvCisgKgorICogUmV0dXJucyBHUkFMTE9DMV9FUlJPUl9OT05FIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVycm9yczoKKyAqICAgR1JBTExPQzFfRVJST1JfQkFEX0RFU0NSSVBUT1IgLSB0aGUgYnVmZmVyIGRlc2NyaXB0b3IgaXMgaW52YWxpZAorICogICBHUkFMTE9DMV9FUlJPUl9CQURfVkFMVUUgLSB0aGUgbGF5ZXIgY291bnQgaXMgaW52YWxpZAorICovCit0eXBlZGVmIGludDMyX3QgLypncmFsbG9jMV9lcnJvcl90Ki8gKCpHUkFMTE9DMV9QRk5fU0VUX0xBWUVSX0NPVU5UKSgKKyAgICAgICAgZ3JhbGxvYzFfZGV2aWNlX3QqIGRldmljZSwgZ3JhbGxvYzFfYnVmZmVyX2Rlc2NyaXB0b3JfdCBkZXNjcmlwdG9yLAorICAgICAgICB1aW50MzJfdCBsYXllckNvdW50KTsKKwogLyogc2V0UHJvZHVjZXJVc2FnZSguLi4sIHVzYWdlKQogICogRnVuY3Rpb24gZGVzY3JpcHRvcjogR1JBTExPQzFfRlVOQ1RJT05fU0VUX1BST0RVQ0VSX1VTQUdFCiAgKiBNdXN0IGJlIHByb3ZpZGVkIGJ5IGFsbCBncmFsbG9jMSBkZXZpY2VzCkBAIC01NjQsNiArNjAyLDI4IEBACiAgICAgICAgIGdyYWxsb2MxX2RldmljZV90KiBkZXZpY2UsIGJ1ZmZlcl9oYW5kbGVfdCBkZXNjcmlwdG9yLAogICAgICAgICBpbnQzMl90KiBvdXRGb3JtYXQpOwogCisvKiBnZXRMYXllckNvdW50KC4uLiwgb3V0TGF5ZXJDb3VudCkKKyAqIEZ1bmN0aW9uIGRlc2NyaXB0b3I6IEdSQUxMT0MxX0ZVTkNUSU9OX0dFVF9MQVlFUl9DT1VOVAorICogTXVzdCBiZSBwcm92aWRlZCBieSBhbGwgZ3JhbGxvYzEgZGV2aWNlcyB0aGF0IHByb3ZpZGUgdGhlCisgKiBHUkFMTE9DMV9DQVBBQklMSVRZX0xBWUVSRURfQlVGRkVSUyBjYXBhYmlsaXR5LgorICoKKyAqIEdldHMgdGhlIG51bWJlciBvZiBsYXllcnMgb2YgdGhlIGJ1ZmZlci4KKyAqCisgKiBTZWUgc2V0TGF5ZXJDb3VudCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHZhbHVlLgorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgIG91dExheWVyQ291bnQgLSB0aGUgbnVtYmVyIG9mIGxheWVycyBpbiB0aGUgaW1hZ2UsIG11c3QgYmUgbm9uLU5VTEwKKyAqCisgKiBSZXR1cm5zIEdSQUxMT0MxX0VSUk9SX05PTkUgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgZXJyb3JzOgorICogICBHUkFMTE9DMV9FUlJPUl9CQURfSEFORExFIC0gdGhlIGJ1ZmZlciBoYW5kbGUgaXMgaW52YWxpZAorICogICBHUkFMTE9DMV9FUlJPUl9VTlNVUFBPUlRFRCAtIHRoZSBkZXZpY2UgaXMgdW5hYmxlIHRvIHJldHJpZXZlIHRoZQorICogICAgICAgbGF5ZXIgY291bnQgZnJvbSB0aGUgYnVmZmVyOyBzZWUgbm90ZSBbMV0gaW4gdGhpcyBzZWN0aW9uJ3MgaGVhZGVyIGZvcgorICogICAgICAgbW9yZSBpbmZvcm1hdGlvbgorICovCit0eXBlZGVmIGludDMyX3QgLypncmFsbG9jMV9lcnJvcl90Ki8gKCpHUkFMTE9DMV9QRk5fR0VUX0xBWUVSX0NPVU5UKSgKKyAgICAgICAgZ3JhbGxvYzFfZGV2aWNlX3QqIGRldmljZSwgYnVmZmVyX2hhbmRsZV90IGJ1ZmZlciwKKyAgICAgICAgdWludDMyX3QqIG91dExheWVyQ291bnQpOworCiAvKiBnZXRQcm9kdWNlclVzYWdlKC4uLiwgb3V0VXNhZ2UpCiAgKiBGdW5jdGlvbiBkZXNjcmlwdG9yOiBHUkFMTE9DMV9GVU5DVElPTl9HRVRfUFJPRFVDRVJfVVNBR0UKICAqIE11c3QgYmUgcHJvdmlkZWQgYnkgYWxsIGdyYWxsb2MxIGRldmljZXMKQEAgLTY5Niw2ICs3NTYsMTIgQEAKICAqIHJlZmVycmluZyB0byBhIHBhcnRpY3VsYXIgYmFja2luZyBzdG9yZSBpcyBmcmVlZCwgdGhhdCBiYWNraW5nIHN0b3JlIHNob3VsZAogICogYWxzbyBiZSBmcmVlZC4KICAqCisgKiBXaGVuIEdSQUxMT0MxX0NBUEFCSUxJVFlfUkVMRUFTRV9JTVBMWV9ERUxFVEUgaXMgc3VwcG9ydGVkLAorICogbmF0aXZlX2hhbmRsZV9jbG9zZSBhbmQgbmF0aXZlX2hhbmRsZV9kZWxldGUgbXVzdCBhbHdheXMgYmUgY2FsbGVkIGJ5IHRoZQorICogaW1wbGVtZW50YXRpb24gd2hlbmV2ZXIgdGhlIGxhc3QgcmVmZXJlbmNlIGlzIHJlbW92ZWQuICBPdGhlcndpc2UsIGEgY2FsbAorICogdG8gcmVsZWFzZSgpIHdpbGwgYmUgZm9sbG93ZWQgYnkgbmF0aXZlX2hhbmRsZV9jbG9zZSBhbmQgbmF0aXZlX2hhbmRsZV9kZWxldGUKKyAqIGJ5IHRoZSBjYWxsZXIgd2hlbiB0aGUgYnVmZmVyIGlzIG5vdCBhbGxvY2F0ZWQgbG9jYWxseSB0aHJvdWdoIGFsbG9jYXRlKCkuCisgKgogICogUGFyYW1ldGVyczoKICAqICAgYnVmZmVyIC0gdGhlIGJ1ZmZlciBmcm9tIHdoaWNoIGEgcmVmZXJlbmNlIHNob3VsZCBiZSByZW1vdmVkCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9oYXJkd2FyZS9od2NvbXBvc2VyLmggYi9pbmNsdWRlL2hhcmR3YXJlL2h3Y29tcG9zZXIuaAppbmRleCA3ZWNhN2MxLi45ZWIxYWFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2hhcmR3YXJlL2h3Y29tcG9zZXIuaAorKysgYi9pbmNsdWRlL2hhcmR3YXJlL2h3Y29tcG9zZXIuaApAQCAtNDgxLDYgKzQ4MSw3IEBACiAgICAgc3RydWN0IGh3X21vZHVsZV90IGNvbW1vbjsKIH0gaHdjX21vZHVsZV90OwogCisjZGVmaW5lIEhXQ19FUlJPUiAoLTEpCiB0eXBlZGVmIHN0cnVjdCBod2NfY29tcG9zZXJfZGV2aWNlXzEgewogICAgIC8qKgogICAgICAqIENvbW1vbiBtZXRob2RzIG9mIHRoZSBoYXJkd2FyZSBjb21wb3NlciBkZXZpY2UuICBUaGlzICptdXN0KiBiZSB0aGUgZmlyc3QgbWVtYmVyIG9mCkBAIC03MTQsOSArNzE1LDkgQEAKICAgICAgKiAoKmdldEFjdGl2ZUNvbmZpZykoKSByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgY29uZmlndXJhdGlvbiB0aGF0IGlzCiAgICAgICogY3VycmVudGx5IGFjdGl2ZSBvbiB0aGUgY29ubmVjdGVkIGRpc3BsYXkuIFRoZSBpbmRleCBpcyByZWxhdGl2ZSB0bwogICAgICAqIHRoZSBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gaGFuZGxlcyByZXR1cm5lZCBieSBnZXREaXNwbGF5Q29uZmlncy4gSWYgdGhlcmUKLSAgICAgKiBpcyBubyBhY3RpdmUgY29uZmlndXJhdGlvbiwgLTEgc2hhbGwgYmUgcmV0dXJuZWQuCisgICAgICogaXMgbm8gYWN0aXZlIGNvbmZpZ3VyYXRpb24sIEhXQ19FUlJPUiBzaGFsbCBiZSByZXR1cm5lZC4KICAgICAgKgotICAgICAqIFJldHVybnMgdGhlIGNvbmZpZ3VyYXRpb24gaW5kZXggb24gc3VjY2VzcyBvciAtMSBvbiBlcnJvci4KKyAgICAgKiBSZXR1cm5zIHRoZSBjb25maWd1cmF0aW9uIGluZGV4IG9uIHN1Y2Nlc3Mgb3IgSFdDX0VSUk9SIG9uIGVycm9yLgogICAgICAqCiAgICAgICogVGhpcyBmaWVsZCBpcyBSRVFVSVJFRCBmb3IgSFdDX0RFVklDRV9BUElfVkVSU0lPTl8xXzQgYW5kIGxhdGVyLgogICAgICAqIEl0IHNoYWxsIGJlIE5VTEwgZm9yIHByZXZpb3VzIHZlcnNpb25zLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9oYXJkd2FyZS9od2NvbXBvc2VyMi5oIGIvaW5jbHVkZS9oYXJkd2FyZS9od2NvbXBvc2VyMi5oCmluZGV4IDM1ZWVkYjAuLmQ1YTBkNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaGFyZHdhcmUvaHdjb21wb3NlcjIuaAorKysgYi9pbmNsdWRlL2hhcmR3YXJlL2h3Y29tcG9zZXIyLmgKQEAgLTk0LDYgKzk0LDE2IEBACiAgICAgICogdGhlIGNsaWVudC4gVGhpcyB3aWxsIHByZXZlbnQgdGhlIGNsaWVudCBmcm9tIGFwcGx5aW5nIHRoZSBjb2xvcgogICAgICAqIHRyYW5zZm9ybSBkdXJpbmcgaXRzIGNvbXBvc2l0aW9uIHN0ZXAuICovCiAgICAgSFdDMl9DQVBBQklMSVRZX1NLSVBfQ0xJRU5UX0NPTE9SX1RSQU5TRk9STSA9IDIsCisKKyAgICAvKiBTcGVjaWZpZXMgdGhhdCB0aGUgcHJlc2VudCBmZW5jZSBtdXN0IG5vdCBiZSB1c2VkIGFzIGFuIGFjY3VyYXRlCisgICAgICogcmVwcmVzZW50YXRpb24gb2YgdGhlIGFjdHVhbCBwcmVzZW50IHRpbWUgb2YgYSBmcmFtZS4KKyAgICAgKiBUaGlzIGNhcGFiaWxpdHkgbXVzdCBuZXZlciBiZSBzZXQgYnkgSFdDMiBkZXZpY2VzLgorICAgICAqIFRoaXMgY2FwYWJpbGl0eSBtYXkgYmUgc2V0IGZvciBIV0MxIGRldmljZXMgdGhhdCB1c2UgdGhlCisgICAgICogSFdDMk9uMUFkYXB0ZXIgd2hlcmUgZW11bGF0aW9uIG9mIHRoZSBwcmVzZW50IGZlbmNlIHVzaW5nIHRoZSByZXRpcmUKKyAgICAgKiBmZW5jZSBpcyBub3QgZmVhc2libGUuCisgICAgICogSW4gdGhlIGZ1dHVyZSwgQ1RTIHRlc3RzIHdpbGwgcmVxdWlyZSBwcmVzZW50IHRpbWUgdG8gYmUgcmVsaWFibGUuCisgICAgICovCisgICAgSFdDMl9DQVBBQklMSVRZX1BSRVNFTlRfRkVOQ0VfSVNfTk9UX1JFTElBQkxFID0gMywKIH0gaHdjMl9jYXBhYmlsaXR5X3Q7CiAKIC8qIFBvc3NpYmxlIGNvbXBvc2l0aW9uIHR5cGVzIGZvciBhIGdpdmVuIGxheWVyICovCkBAIC0zMzUsNiArMzQ1LDggQEAKICAgICAgICAgY2FzZSBIV0MyX0NBUEFCSUxJVFlfU0lERUJBTkRfU1RSRUFNOiByZXR1cm4gIlNpZGViYW5kU3RyZWFtIjsKICAgICAgICAgY2FzZSBIV0MyX0NBUEFCSUxJVFlfU0tJUF9DTElFTlRfQ09MT1JfVFJBTlNGT1JNOgogICAgICAgICAgICAgICAgIHJldHVybiAiU2tpcENsaWVudENvbG9yVHJhbnNmb3JtIjsKKyAgICAgICAgY2FzZSBIV0MyX0NBUEFCSUxJVFlfUFJFU0VOVF9GRU5DRV9JU19OT1RfUkVMSUFCTEU6CisgICAgICAgICAgICAgICAgcmV0dXJuICJQcmVzZW50RmVuY2VJc05vdFJlbGlhYmxlIjsKICAgICAgICAgZGVmYXVsdDogcmV0dXJuICJVbmtub3duIjsKICAgICB9CiB9CkBAIC01NTEsNiArNTYzLDcgQEAKICAgICBJbnZhbGlkID0gSFdDMl9DQVBBQklMSVRZX0lOVkFMSUQsCiAgICAgU2lkZWJhbmRTdHJlYW0gPSBIV0MyX0NBUEFCSUxJVFlfU0lERUJBTkRfU1RSRUFNLAogICAgIFNraXBDbGllbnRDb2xvclRyYW5zZm9ybSA9IEhXQzJfQ0FQQUJJTElUWV9TS0lQX0NMSUVOVF9DT0xPUl9UUkFOU0ZPUk0sCisgICAgUHJlc2VudEZlbmNlSXNOb3RSZWxpYWJsZSA9IEhXQzJfQ0FQQUJJTElUWV9QUkVTRU5UX0ZFTkNFX0lTX05PVF9SRUxJQUJMRSwKIH07CiBUT19TVFJJTkcoaHdjMl9jYXBhYmlsaXR5X3QsIENhcGFiaWxpdHksIGdldENhcGFiaWxpdHlOYW1lKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2hhcmR3YXJlL2h3Y29tcG9zZXJfZGVmcy5oIGIvaW5jbHVkZS9oYXJkd2FyZS9od2NvbXBvc2VyX2RlZnMuaAppbmRleCAxOGIzMGJjLi4xZTgxZTZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2hhcmR3YXJlL2h3Y29tcG9zZXJfZGVmcy5oCisrKyBiL2luY2x1ZGUvaGFyZHdhcmUvaHdjb21wb3Nlcl9kZWZzLmgKQEAgLTEzNiw5ICsxMzYsOSBAQAogICovCiBlbnVtIHsKICAgICAvKgotICAgICAqIEhXQ19TS0lQX0xBWUVSIGlzIHNldCBieSBTdXJmYWNlRmxuZ2VyIHRvIGluZGljYXRlIHRoYXQgdGhlIEhBTAorICAgICAqIEhXQ19TS0lQX0xBWUVSIGlzIHNldCBieSBTdXJmYWNlRmxpbmdlciB0byBpbmRpY2F0ZSB0aGF0IHRoZSBIQUwKICAgICAgKiBzaGFsbCBub3QgY29uc2lkZXIgdGhpcyBsYXllciBmb3IgY29tcG9zaXRpb24gYXMgaXQgd2lsbCBiZSBoYW5kbGVkCi0gICAgICogYnkgU3VyZmFjZUZsaW5nZXIgKGp1c3QgYXMgaWYgY29tcG9zaXRpb25UeXBlIHdhcyBzZXQgdG8gSFdDX09WRVJMQVkpLgorICAgICAqIGJ5IFN1cmZhY2VGbGluZ2VyIChqdXN0IGFzIGlmIGNvbXBvc2l0aW9uVHlwZSB3YXMgc2V0IHRvIEhXQ19GUkFNRUJVRkZFUikuCiAgICAgICovCiAgICAgSFdDX1NLSVBfTEFZRVIgPSAweDAwMDAwMDAxLAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2hhcmR3YXJlL2tleW1hc3Rlcl9kZWZzLmggYi9pbmNsdWRlL2hhcmR3YXJlL2tleW1hc3Rlcl9kZWZzLmgKaW5kZXggMGY5YmMyNy4uN2QxYjM0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9oYXJkd2FyZS9rZXltYXN0ZXJfZGVmcy5oCisrKyBiL2luY2x1ZGUvaGFyZHdhcmUva2V5bWFzdGVyX2RlZnMuaApAQCAtMTM1LDYgKzEzNSwyNiBAQAogICAgIEtNX1RBR19PU19QQVRDSExFVkVMID0gS01fVUlOVCB8IDcwNiwgICAgICAgICAgLyogUGF0Y2ggbGV2ZWwgb2Ygc3lzdGVtIChrZXltYXN0ZXIyKSAqLwogICAgIEtNX1RBR19VTklRVUVfSUQgPSBLTV9CWVRFUyB8IDcwNywgICAgICAgICAgICAgLyogVXNlZCB0byBwcm92aWRlIHVuaXF1ZSBJRCBpbiBhdHRlc3RhdGlvbiAqLwogICAgIEtNX1RBR19BVFRFU1RBVElPTl9DSEFMTEVOR0UgPSBLTV9CWVRFUyB8IDcwOCwgLyogVXNlZCB0byBwcm92aWRlIGNoYWxsZW5nZSBpbiBhdHRlc3RhdGlvbiAqLworICAgIEtNX1RBR19BVFRFU1RBVElPTl9BUFBMSUNBVElPTl9JRCA9IEtNX0JZVEVTIHwgNzA5LCAvKiBVc2VkIHRvIGlkZW50aWZ5IHRoZSBzZXQgb2YgcG9zc2libGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYXBwbGljYXRpb25zIG9mIHdoaWNoIG9uZSBoYXMgaW5pdGlhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGEga2V5IGF0dGVzdGF0aW9uICovCisgICAgS01fVEFHX0FUVEVTVEFUSU9OX0lEX0JSQU5EID0gS01fQllURVMgfCA3MTAsICAvKiBVc2VkIHRvIHByb3ZpZGUgdGhlIGRldmljZSdzIGJyYW5kIG5hbWUgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVkIGluIGF0dGVzdGF0aW9uICovCisgICAgS01fVEFHX0FUVEVTVEFUSU9OX0lEX0RFVklDRSA9IEtNX0JZVEVTIHwgNzExLCAvKiBVc2VkIHRvIHByb3ZpZGUgdGhlIGRldmljZSdzIGRldmljZSBuYW1lIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlZCBpbiBhdHRlc3RhdGlvbiAqLworICAgIEtNX1RBR19BVFRFU1RBVElPTl9JRF9QUk9EVUNUID0gS01fQllURVMgfCA3MTIsIC8qIFVzZWQgdG8gcHJvdmlkZSB0aGUgZGV2aWNlJ3MgcHJvZHVjdCBuYW1lIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgaW5jbHVkZWQgaW4gYXR0ZXN0YXRpb24gKi8KKyAgICBLTV9UQUdfQVRURVNUQVRJT05fSURfU0VSSUFMID0gS01fQllURVMgfCA3MTMsIC8qIFVzZWQgdG8gcHJvdmlkZSB0aGUgZGV2aWNlJ3Mgc2VyaWFsIG51bWJlciB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgaW5jbHVkZWQgaW4gYXR0ZXN0YXRpb24gKi8KKyAgICBLTV9UQUdfQVRURVNUQVRJT05fSURfSU1FSSA9IEtNX0JZVEVTIHwgNzE0LCAgIC8qIFVzZWQgdG8gcHJvdmlkZSB0aGUgZGV2aWNlJ3MgSU1FSSB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZWQgaW4gYXR0ZXN0YXRpb24gKi8KKyAgICBLTV9UQUdfQVRURVNUQVRJT05fSURfTUVJRCA9IEtNX0JZVEVTIHwgNzE1LCAgIC8qIFVzZWQgdG8gcHJvdmlkZSB0aGUgZGV2aWNlJ3MgTUVJRCB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZWQgaW4gYXR0ZXN0YXRpb24gKi8KKyAgICBLTV9UQUdfQVRURVNUQVRJT05fSURfTUFOVUZBQ1RVUkVSID0gS01fQllURVMgfCA3MTYsIC8qIFVzZWQgdG8gcHJvdmlkZSB0aGUgZGV2aWNlJ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbnVmYWN0dXJlciBuYW1lIHRvIGJlIGluY2x1ZGVkIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRlc3RhdGlvbiAqLworICAgIEtNX1RBR19BVFRFU1RBVElPTl9JRF9NT0RFTCA9IEtNX0JZVEVTIHwgNzE3LCAgLyogVXNlZCB0byBwcm92aWRlIHRoZSBkZXZpY2UncyBtb2RlbCBuYW1lIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlZCBpbiBhdHRlc3RhdGlvbiAqLwogCiAgICAgLyogVGFncyB1c2VkIG9ubHkgdG8gcHJvdmlkZSBkYXRhIHRvIG9yIHJlY2VpdmUgZGF0YSBmcm9tIG9wZXJhdGlvbnMgKi8KICAgICBLTV9UQUdfQVNTT0NJQVRFRF9EQVRBID0gS01fQllURVMgfCAxMDAwLCAvKiBVc2VkIHRvIHByb3ZpZGUgYXNzb2NpYXRlZCBkYXRhIGZvciBBRUFEIG1vZGVzLiAqLwpAQCAtNDI3LDYgKzQ0Nyw4IEBACiAgICAgS01fRVJST1JfS0VZX1JFUVVJUkVTX1VQR1JBREUgPSAtNjIsCiAgICAgS01fRVJST1JfQVRURVNUQVRJT05fQ0hBTExFTkdFX01JU1NJTkcgPSAtNjMsCiAgICAgS01fRVJST1JfS0VZTUFTVEVSX05PVF9DT05GSUdVUkVEID0gLTY0LAorICAgIEtNX0VSUk9SX0FUVEVTVEFUSU9OX0FQUExJQ0FUSU9OX0lEX01JU1NJTkcgPSAtNjUsCisgICAgS01fRVJST1JfQ0FOTk9UX0FUVEVTVF9JRFMgPSAtNjYsCiAKICAgICBLTV9FUlJPUl9VTklNUExFTUVOVEVEID0gLTEwMCwKICAgICBLTV9FUlJPUl9WRVJTSU9OX01JU01BVENIID0gLTEwMSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaGFyZHdhcmUvc2Vuc29ycy1iYXNlLmggYi9pbmNsdWRlL2hhcmR3YXJlL3NlbnNvcnMtYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZjYyMjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2hhcmR3YXJlL3NlbnNvcnMtYmFzZS5oCkBAIC0wLDAgKzEsMTM3IEBACisvLyBUaGlzIGZpbGUgaXMgYXV0b2dlbmVyYXRlZCBieSBoaWRsLWdlbi4gRG8gbm90IGVkaXQgbWFudWFsbHkuCisvLyBTb3VyY2U6IGFuZHJvaWQuaGFyZHdhcmUuc2Vuc29yc0AxLjAKKy8vIFJvb3Q6IGFuZHJvaWQuaGFyZHdhcmU6aGFyZHdhcmUvaW50ZXJmYWNlcworCisjaWZuZGVmIEhJRExfR0VORVJBVEVEX0FORFJPSURfSEFSRFdBUkVfU0VOU09SU19WMV8wX0VYUE9SVEVEX0NPTlNUQU5UU19IXworI2RlZmluZSBISURMX0dFTkVSQVRFRF9BTkRST0lEX0hBUkRXQVJFX1NFTlNPUlNfVjFfMF9FWFBPUlRFRF9DT05TVEFOVFNfSF8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitlbnVtIHsKKyAgICBTRU5TT1JfSEFMX05PUk1BTF9NT0RFID0gMCwKKyAgICBTRU5TT1JfSEFMX0RBVEFfSU5KRUNUSU9OX01PREUgPSAxLAorfTsKKworZW51bSB7CisgICAgU0VOU09SX1RZUEVfTUVUQV9EQVRBID0gMCwKKyAgICBTRU5TT1JfVFlQRV9BQ0NFTEVST01FVEVSID0gMSwKKyAgICBTRU5TT1JfVFlQRV9NQUdORVRJQ19GSUVMRCA9IDIsCisgICAgU0VOU09SX1RZUEVfT1JJRU5UQVRJT04gPSAzLAorICAgIFNFTlNPUl9UWVBFX0dZUk9TQ09QRSA9IDQsCisgICAgU0VOU09SX1RZUEVfTElHSFQgPSA1LAorICAgIFNFTlNPUl9UWVBFX1BSRVNTVVJFID0gNiwKKyAgICBTRU5TT1JfVFlQRV9URU1QRVJBVFVSRSA9IDcsCisgICAgU0VOU09SX1RZUEVfUFJPWElNSVRZID0gOCwKKyAgICBTRU5TT1JfVFlQRV9HUkFWSVRZID0gOSwKKyAgICBTRU5TT1JfVFlQRV9MSU5FQVJfQUNDRUxFUkFUSU9OID0gMTAsCisgICAgU0VOU09SX1RZUEVfUk9UQVRJT05fVkVDVE9SID0gMTEsCisgICAgU0VOU09SX1RZUEVfUkVMQVRJVkVfSFVNSURJVFkgPSAxMiwKKyAgICBTRU5TT1JfVFlQRV9BTUJJRU5UX1RFTVBFUkFUVVJFID0gMTMsCisgICAgU0VOU09SX1RZUEVfTUFHTkVUSUNfRklFTERfVU5DQUxJQlJBVEVEID0gMTQsCisgICAgU0VOU09SX1RZUEVfR0FNRV9ST1RBVElPTl9WRUNUT1IgPSAxNSwKKyAgICBTRU5TT1JfVFlQRV9HWVJPU0NPUEVfVU5DQUxJQlJBVEVEID0gMTYsCisgICAgU0VOU09SX1RZUEVfU0lHTklGSUNBTlRfTU9USU9OID0gMTcsCisgICAgU0VOU09SX1RZUEVfU1RFUF9ERVRFQ1RPUiA9IDE4LAorICAgIFNFTlNPUl9UWVBFX1NURVBfQ09VTlRFUiA9IDE5LAorICAgIFNFTlNPUl9UWVBFX0dFT01BR05FVElDX1JPVEFUSU9OX1ZFQ1RPUiA9IDIwLAorICAgIFNFTlNPUl9UWVBFX0hFQVJUX1JBVEUgPSAyMSwKKyAgICBTRU5TT1JfVFlQRV9USUxUX0RFVEVDVE9SID0gMjIsCisgICAgU0VOU09SX1RZUEVfV0FLRV9HRVNUVVJFID0gMjMsCisgICAgU0VOU09SX1RZUEVfR0xBTkNFX0dFU1RVUkUgPSAyNCwKKyAgICBTRU5TT1JfVFlQRV9QSUNLX1VQX0dFU1RVUkUgPSAyNSwKKyAgICBTRU5TT1JfVFlQRV9XUklTVF9USUxUX0dFU1RVUkUgPSAyNiwKKyAgICBTRU5TT1JfVFlQRV9ERVZJQ0VfT1JJRU5UQVRJT04gPSAyNywKKyAgICBTRU5TT1JfVFlQRV9QT1NFXzZET0YgPSAyOCwKKyAgICBTRU5TT1JfVFlQRV9TVEFUSU9OQVJZX0RFVEVDVCA9IDI5LAorICAgIFNFTlNPUl9UWVBFX01PVElPTl9ERVRFQ1QgPSAzMCwKKyAgICBTRU5TT1JfVFlQRV9IRUFSVF9CRUFUID0gMzEsCisgICAgU0VOU09SX1RZUEVfRFlOQU1JQ19TRU5TT1JfTUVUQSA9IDMyLAorICAgIFNFTlNPUl9UWVBFX0FERElUSU9OQUxfSU5GTyA9IDMzLAorICAgIFNFTlNPUl9UWVBFX0xPV19MQVRFTkNZX09GRkJPRFlfREVURUNUID0gMzQsCisgICAgU0VOU09SX1RZUEVfQUNDRUxFUk9NRVRFUl9VTkNBTElCUkFURUQgPSAzNSwKKyAgICBTRU5TT1JfVFlQRV9ERVZJQ0VfUFJJVkFURV9CQVNFID0gNjU1MzYsIC8vIDB4MTAwMDAKK307CisKK2VudW0geworICAgIFNFTlNPUl9GTEFHX1dBS0VfVVAgPSAxdSwgLy8gMQorICAgIFNFTlNPUl9GTEFHX0NPTlRJTlVPVVNfTU9ERSA9IDB1LCAvLyAwCisgICAgU0VOU09SX0ZMQUdfT05fQ0hBTkdFX01PREUgPSAydSwgLy8gMgorICAgIFNFTlNPUl9GTEFHX09ORV9TSE9UX01PREUgPSA0dSwgLy8gNAorICAgIFNFTlNPUl9GTEFHX1NQRUNJQUxfUkVQT1JUSU5HX01PREUgPSA2dSwgLy8gNgorICAgIFNFTlNPUl9GTEFHX0RBVEFfSU5KRUNUSU9OID0gMTZ1LCAvLyAweDEwCisgICAgU0VOU09SX0ZMQUdfRFlOQU1JQ19TRU5TT1IgPSAzMnUsIC8vIDB4MjAKKyAgICBTRU5TT1JfRkxBR19BRERJVElPTkFMX0lORk8gPSA2NHUsIC8vIDB4NDAKKyAgICBTRU5TT1JfRkxBR19ESVJFQ1RfQ0hBTk5FTF9BU0hNRU0gPSAxMDI0dSwgLy8gMHg0MDAKKyAgICBTRU5TT1JfRkxBR19ESVJFQ1RfQ0hBTk5FTF9HUkFMTE9DID0gMjA0OHUsIC8vIDB4ODAwCisgICAgU0VOU09SX0ZMQUdfTUFTS19SRVBPUlRJTkdfTU9ERSA9IDE0dSwgLy8gMHhFCisgICAgU0VOU09SX0ZMQUdfTUFTS19ESVJFQ1RfUkVQT1JUID0gODk2dSwgLy8gMHgzODAKKyAgICBTRU5TT1JfRkxBR19NQVNLX0RJUkVDVF9DSEFOTkVMID0gMzA3MnUsIC8vIDB4QzAwCit9OworCit0eXBlZGVmIGVudW0geworICAgIFNFTlNPUl9GTEFHX1NISUZUX1JFUE9SVElOR19NT0RFID0gMSwKKyAgICBTRU5TT1JfRkxBR19TSElGVF9EQVRBX0lOSkVDVElPTiA9IDQsCisgICAgU0VOU09SX0ZMQUdfU0hJRlRfRFlOQU1JQ19TRU5TT1IgPSA1LAorICAgIFNFTlNPUl9GTEFHX1NISUZUX0FERElUSU9OQUxfSU5GTyA9IDYsCisgICAgU0VOU09SX0ZMQUdfU0hJRlRfRElSRUNUX1JFUE9SVCA9IDcsCisgICAgU0VOU09SX0ZMQUdfU0hJRlRfRElSRUNUX0NIQU5ORUwgPSAxMCwKK30gc2Vuc29yX2ZsYWdfc2hpZnRfdDsKKworZW51bSB7CisgICAgU0VOU09SX1NUQVRVU19OT19DT05UQUNUID0gLTEsIC8vICgtMSkKKyAgICBTRU5TT1JfU1RBVFVTX1VOUkVMSUFCTEUgPSAwLAorICAgIFNFTlNPUl9TVEFUVVNfQUNDVVJBQ1lfTE9XID0gMSwKKyAgICBTRU5TT1JfU1RBVFVTX0FDQ1VSQUNZX01FRElVTSA9IDIsCisgICAgU0VOU09SX1NUQVRVU19BQ0NVUkFDWV9ISUdIID0gMywKK307CisKK2VudW0geworICAgIE1FVEFfREFUQV9GTFVTSF9DT01QTEVURSA9IDF1LCAvLyAxCit9OworCit0eXBlZGVmIGVudW0geworICAgIEFJTkZPX0JFR0lOID0gMHUsIC8vIDAKKyAgICBBSU5GT19FTkQgPSAxdSwgLy8gMQorICAgIEFJTkZPX1VOVFJBQ0tFRF9ERUxBWSA9IDY1NTM2dSwgLy8gMHgxMDAwMAorICAgIEFJTkZPX0lOVEVSTkFMX1RFTVBFUkFUVVJFID0gNjU1Mzd1LCAvLyA2NTUzNworICAgIEFJTkZPX1ZFQzNfQ0FMSUJSQVRJT04gPSA2NTUzOHUsIC8vIDY1NTM4CisgICAgQUlORk9fU0VOU09SX1BMQUNFTUVOVCA9IDY1NTM5dSwgLy8gNjU1MzkKKyAgICBBSU5GT19TQU1QTElORyA9IDY1NTQwdSwgLy8gNjU1NDAKKyAgICBBSU5GT19DSEFOTkVMX05PSVNFID0gMTMxMDcydSwgLy8gMHgyMDAwMAorICAgIEFJTkZPX0NIQU5ORUxfU0FNUExFUiA9IDEzMTA3M3UsIC8vIDEzMTA3MworICAgIEFJTkZPX0NIQU5ORUxfRklMVEVSID0gMTMxMDc0dSwgLy8gMTMxMDc0CisgICAgQUlORk9fQ0hBTk5FTF9MSU5FQVJfVFJBTlNGT1JNID0gMTMxMDc1dSwgLy8gMTMxMDc1CisgICAgQUlORk9fQ0hBTk5FTF9OT05MSU5FQVJfTUFQID0gMTMxMDc2dSwgLy8gMTMxMDc2CisgICAgQUlORk9fQ0hBTk5FTF9SRVNBTVBMRVIgPSAxMzEwNzd1LCAvLyAxMzEwNzcKKyAgICBBSU5GT19MT0NBTF9HRU9NQUdORVRJQ19GSUVMRCA9IDE5NjYwOHUsIC8vIDB4MzAwMDAKKyAgICBBSU5GT19MT0NBTF9HUkFWSVRZID0gMTk2NjA5dSwgLy8gMTk2NjA5CisgICAgQUlORk9fRE9DS19TVEFURSA9IDE5NjYxMHUsIC8vIDE5NjYxMAorICAgIEFJTkZPX0hJR0hfUEVSRk9STUFOQ0VfTU9ERSA9IDE5NjYxMXUsIC8vIDE5NjYxMQorICAgIEFJTkZPX01BR05FVElDX0ZJRUxEX0NBTElCUkFUSU9OID0gMTk2NjEydSwgLy8gMTk2NjEyCisgICAgQUlORk9fQ1VTVE9NX1NUQVJUID0gMjY4NDM1NDU2dSwgLy8gMHgxMDAwMDAwMAorICAgIEFJTkZPX0RFQlVHR0lOR19TVEFSVCA9IDEwNzM3NDE4MjR1LCAvLyAweDQwMDAwMDAwCit9IGFkZGl0aW9uYWxfaW5mb190eXBlX3Q7CisKK3R5cGVkZWYgZW51bSB7CisgICAgU0VOU09SX0RJUkVDVF9SQVRFX1NUT1AgPSAwLAorICAgIFNFTlNPUl9ESVJFQ1RfUkFURV9OT1JNQUwgPSAxLAorICAgIFNFTlNPUl9ESVJFQ1RfUkFURV9GQVNUID0gMiwKKyAgICBTRU5TT1JfRElSRUNUX1JBVEVfVkVSWV9GQVNUID0gMywKK30gZGlyZWN0X3JhdGVfbGV2ZWxfdDsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBTRU5TT1JfRElSRUNUX01FTV9UWVBFX0FTSE1FTSA9IDEsCisgICAgU0VOU09SX0RJUkVDVF9NRU1fVFlQRV9HUkFMTE9DID0gMiwKK30gZGlyZWN0X21lbV90eXBlX3Q7CisKK3R5cGVkZWYgZW51bSB7CisgICAgU0VOU09SX0RJUkVDVF9GTVRfU0VOU09SU19FVkVOVCA9IDEsCit9IGRpcmVjdF9mb3JtYXRfdDsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmICAvLyBISURMX0dFTkVSQVRFRF9BTkRST0lEX0hBUkRXQVJFX1NFTlNPUlNfVjFfMF9FWFBPUlRFRF9DT05TVEFOVFNfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaGFyZHdhcmUvc2Vuc29ycy5oIGIvaW5jbHVkZS9oYXJkd2FyZS9zZW5zb3JzLmgKaW5kZXggMzIyYWJlNi4uZGRlOTk3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9oYXJkd2FyZS9zZW5zb3JzLmgKKysrIGIvaW5jbHVkZS9oYXJkd2FyZS9zZW5zb3JzLmgKQEAgLTI0LDYgKzI0LDggQEAKICNpbmNsdWRlIDxoYXJkd2FyZS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGN1dGlscy9uYXRpdmVfaGFuZGxlLmg+CiAKKyNpbmNsdWRlICJzZW5zb3JzLWJhc2UuaCIKKwogX19CRUdJTl9ERUNMUwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC01NCwxNCArNTYsMTUgQEAKICNkZWZpbmUgU0VOU09SU19IQVJEV0FSRV9QT0xMICAgICAgICJwb2xsIgogCiAvKioKLSAqIEhhbmRsZXMgbXVzdCBiZSBoaWdoZXIgdGhhbiBTRU5TT1JTX0hBTkRMRV9CQVNFIGFuZCBtdXN0IGJlIHVuaXF1ZS4KLSAqIEEgSGFuZGxlIGlkZW50aWZpZXMgYSBnaXZlbiBzZW5zb3JzLiBUaGUgaGFuZGxlIGlzIHVzZWQgdG8gYWN0aXZhdGUKLSAqIGFuZC9vciBkZWFjdGl2YXRlIHNlbnNvcnMuCi0gKiBJbiB0aGlzIHZlcnNpb24gb2YgdGhlIEFQSSB0aGVyZSBjYW4gb25seSBiZSAyNTYgaGFuZGxlcy4KKyAqIFNlbnNvciBoYW5kbGUgaXMgZ3JlYXRlciB0aGFuIDAgYW5kIGxlc3MgdGhhbiBJTlQzMl9NQVguCisgKgorICogKioqKiBEZXByZWNhdGVkICoqKioKKyAqIERlZmluZWQgdmFsdWVzIGJlbG93IGFyZSBrZXB0IGZvciBjb2RlIGNvbXBhdGliaWxpdHkuIE5vdGUgc2Vuc29yIGhhbmRsZSBjYW4gYmUgYXMgbGFyZ2UgYXMKKyAqIElOVDMyX01BWC4KICAqLwogI2RlZmluZSBTRU5TT1JTX0hBTkRMRV9CQVNFICAgICAgICAgICAgIDAKLSNkZWZpbmUgU0VOU09SU19IQU5ETEVfQklUUyAgICAgICAgICAgICA4Ci0jZGVmaW5lIFNFTlNPUlNfSEFORExFX0NPVU5UICAgICAgICAgICAgKDE8PFNFTlNPUlNfSEFORExFX0JJVFMpCisjZGVmaW5lIFNFTlNPUlNfSEFORExFX0JJVFMgICAgICAgICAgICAgMzEKKyNkZWZpbmUgU0VOU09SU19IQU5ETEVfQ09VTlQgICAgICAgICAgICAoMXVsbDw8U0VOU09SU19IQU5ETEVfQklUUykKIAogCiAvKgpAQCAtODIsNyArODUsNyBAQAogICovCiBlbnVtIHsKICAgICAvKiBhIHByZXZpb3VzIGZsdXNoIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkICovCi0gICAgTUVUQV9EQVRBX0ZMVVNIX0NPTVBMRVRFID0gMSwKKyAgICAvLyBNRVRBX0RBVEFfRkxVU0hfQ09NUExFVEUgPSAxLAogICAgIE1FVEFfREFUQV9WRVJTSU9OICAgLyogYWx3YXlzIGxhc3QsIGxlYXZlIGF1dG8tYXNzaWduZWQgKi8KIH07CiAKQEAgLTk0LDI3ICs5NywxMSBAQAogI2RlZmluZSBTRU5TT1JfUEVSTUlTU0lPTl9CT0RZX1NFTlNPUlMgImFuZHJvaWQucGVybWlzc2lvbi5CT0RZX1NFTlNPUlMiCiAKIC8qCi0gKiBBdmFpbGFiaWxpdHk6IFNFTlNPUlNfREVWSUNFX0FQSV9WRVJTSU9OXzFfNAotICogU2Vuc29yIEhBTCBtb2RlcyB1c2VkIGluIHNldF9vcGVyYXRpb25fbW9kZSBtZXRob2QKKyAqIHNlbnNvciBmbGFncyBsZWdhY3kgbmFtZXMKKyAqCisgKiBwbGVhc2UgdXNlIFNFTlNPUl9GTEFHXyogZGlyZWN0bHkgZm9yIG5ldyBpbXBsZW1lbnRhdGlvbi4KKyAqIEBzZWUgc2Vuc29yX3QKICAqLwotZW51bSB7Ci0gICAgLyoKLSAgICAgKiBPcGVyYXRpbmcgbW9kZXMgZm9yIHRoZSBIQUwuCi0gICAgICovCi0KLSAgICAvKgotICAgICAqIE5vcm1hbCBtb2RlIG9wZXJhdGlvbi4gVGhpcyBpcyB0aGUgZGVmYXVsdCBzdGF0ZSBvZiBvcGVyYXRpb24uCi0gICAgICogVGhlIEhBTCBzaGFsbCBpbml0aWFsaXplIGludG8gdGhpcyBtb2RlIG9uIGRldmljZSBzdGFydHVwLgotICAgICAqLwotICAgIFNFTlNPUl9IQUxfTk9STUFMX01PREUgICAgICAgID0gMCwKLQotICAgIC8qCi0gICAgICogRGF0YSBJbmplY3Rpb24gbW9kZS4gSW4gdGhpcyBtb2RlLCB0aGUgZGV2aWNlIHNoYWxsIG5vdCBzb3VyY2UgZGF0YSBmcm9tIHRoZQotICAgICAqIHBoeXNpY2FsIHNlbnNvcnMgYXMgaXQgd291bGQgaW4gbm9ybWFsIG1vZGUuIEluc3RlYWQgc2Vuc29yIGRhdGEgaXMKLSAgICAgKiBpbmplY3RlZCBieSB0aGUgc2Vuc29yIHNlcnZpY2UuCi0gICAgICovCi0gICAgU0VOU09SX0hBTF9EQVRBX0lOSkVDVElPTl9NT0RFICAgICAgPSAweDEKLX07CiAKICNkZWZpbmUgU0VOU09SX0ZMQUdfTUFTSyhuYml0LCBzaGlmdCkgICAoKCgxPDwobmJpdCkpLTEpPDwoc2hpZnQpKQogI2RlZmluZSBTRU5TT1JfRkxBR19NQVNLXzEoc2hpZnQpICAgICAgIFNFTlNPUl9GTEFHX01BU0soMSwgc2hpZnQpCkBAIC0xMjIsNzQ5ICsxMDksODIgQEAKIC8qCiAgKiBNYXNrIGFuZCBzaGlmdCBmb3IgcmVwb3J0aW5nIG1vZGUgc2Vuc29yIGZsYWdzIGRlZmluZWQgYWJvdmUuCiAgKi8KLSNkZWZpbmUgUkVQT1JUSU5HX01PREVfU0hJRlQgICAgICAgICAgICAoMSkKKyNkZWZpbmUgUkVQT1JUSU5HX01PREVfU0hJRlQgICAgICAgICAgICBTRU5TT1JfRkxBR19TSElGVF9SRVBPUlRJTkdfTU9ERQogI2RlZmluZSBSRVBPUlRJTkdfTU9ERV9OQklUICAgICAgICAgICAgICgzKQotI2RlZmluZSBSRVBPUlRJTkdfTU9ERV9NQVNLICAgICAgICAgICAgIFNFTlNPUl9GTEFHX01BU0soUkVQT1JUSU5HX01PREVfTkJJVCwgUkVQT1JUSU5HX01PREVfU0hJRlQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMHhFCisjZGVmaW5lIFJFUE9SVElOR19NT0RFX01BU0sgICAgICAgICAgICAgU0VOU09SX0ZMQUdfTUFTS19SRVBPUlRJTkdfTU9ERQogCiAvKgogICogTWFzayBhbmQgc2hpZnQgZm9yIGRhdGFfaW5qZWN0aW9uIG1vZGUgc2Vuc29yIGZsYWdzIGRlZmluZWQgYWJvdmUuCiAgKi8KLSNkZWZpbmUgREFUQV9JTkpFQ1RJT05fU0hJRlQgICAgICAgICAgICAoNCkKLSNkZWZpbmUgREFUQV9JTkpFQ1RJT05fTUFTSyAgICAgICAgICAgICBTRU5TT1JfRkxBR19NQVNLXzEoREFUQV9JTkpFQ1RJT05fU0hJRlQpIC8vMHgxMAorI2RlZmluZSBEQVRBX0lOSkVDVElPTl9TSElGVCAgICAgICAgICAgIFNFTlNPUl9GTEFHX1NISUZUX0RBVEFfSU5KRUNUSU9OCisjZGVmaW5lIERBVEFfSU5KRUNUSU9OX01BU0sgICAgICAgICAgICAgU0VOU09SX0ZMQUdfREFUQV9JTkpFQ1RJT04KIAogLyoKICAqIE1hc2sgYW5kIHNoaWZ0IGZvciBkeW5hbWljIHNlbnNvciBmbGFnLgogICovCi0jZGVmaW5lIERZTkFNSUNfU0VOU09SX1NISUZUICAgICAgICAgICAgKDUpCi0jZGVmaW5lIERZTkFNSUNfU0VOU09SX01BU0sgICAgICAgICAgICAgU0VOU09SX0ZMQUdfTUFTS18xKERZTkFNSUNfU0VOU09SX1NISUZUKSAvLzB4MjAKKyNkZWZpbmUgRFlOQU1JQ19TRU5TT1JfU0hJRlQgICAgICAgICAgICBTRU5TT1JfRkxBR19TSElGVF9EWU5BTUlDX1NFTlNPUgorI2RlZmluZSBEWU5BTUlDX1NFTlNPUl9NQVNLICAgICAgICAgICAgIFNFTlNPUl9GTEFHX0RZTkFNSUNfU0VOU09SCiAKIC8qCiAgKiBNYXNrIGFuZCBzaGlmdCBmb3Igc2Vuc29yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gc3VwcG9ydC4KICAqLwotI2RlZmluZSBBRERJVElPTkFMX0lORk9fU0hJRlQgICAgICAgICAgICg2KQotI2RlZmluZSBBRERJVElPTkFMX0lORk9fTUFTSyAgICAgICAgICAgIFNFTlNPUl9GTEFHX01BU0tfMShBRERJVElPTkFMX0lORk9fU0hJRlQpIC8vMHg0MAorI2RlZmluZSBBRERJVElPTkFMX0lORk9fU0hJRlQgICAgICAgICAgIFNFTlNPUl9GTEFHX1NISUZUX0FERElUSU9OQUxfSU5GTworI2RlZmluZSBBRERJVElPTkFMX0lORk9fTUFTSyAgICAgICAgICAgIFNFTlNPUl9GTEFHX0FERElUSU9OQUxfSU5GTwogCiAvKgotICogQXZhaWxhYmlsaXR5OiBTRU5TT1JTX0RFVklDRV9BUElfVkVSU0lPTl8xXzMKLSAqIFNlbnNvciBmbGFncyB1c2VkIGluIHNlbnNvcl90LmZsYWdzLgorICogTGVnYWN5IGFsaWFzIG9mIFNFTlNPUl9UWVBFX01BR05FVElDX0ZJRUxELgorICoKKyAqIFByZXZpb3VzbHksIHRoZSB0eXBlIG9mIGEgc2Vuc29yIG1lYXN1cmluZyBsb2NhbCBtYWduZXRpYyBmaWVsZCBpcyBuYW1lZAorICogU0VOU09SX1RZUEVfR0VPTUFHTkVUSUNfRklFTEQgYW5kIFNFTlNPUl9UWVBFX01BR05FVElDX0ZJRUxEIGlzIGl0cyBhbGlhcy4KKyAqIFNFTlNPUl9UWVBFX01BR05FVElDX0ZJRUxEIGlzIHJlZGVmaW5lZCBhcyBwcmltYXJ5IG5hbWUgdG8gYXZvaWQgY29uZnVzaW9uLgorICogU0VOU09SX1RZUEVfR0VPTUFHTkVUSUNfRklFTEQgaXMgdGhlIGFsaWFzIGFuZCBpcyBkZXByZWNhdGluZy4gTmV3IGltcGxlbWVudGF0aW9uIG11c3Qgbm90IHVzZQorICogU0VOU09SX1RZUEVfR0VPTUFHTkVUSUNfRklFTEQuCiAgKi8KLWVudW0gewotICAgIC8qCi0gICAgICogV2hldGhlciB0aGlzIHNlbnNvciB3YWtlcyB1cCB0aGUgQVAgZnJvbSBzdXNwZW5kIG1vZGUgd2hlbiBkYXRhIGlzIGF2YWlsYWJsZS4gIFdoZW5ldmVyCi0gICAgICogc2Vuc29yIGV2ZW50cyBhcmUgZGVsaXZlcmVkIGZyb20gYSB3YWtlX3VwIHNlbnNvciwgdGhlIGRyaXZlciBuZWVkcyB0byBob2xkIGEgd2FrZV9sb2NrIHRpbGwKLSAgICAgKiB0aGUgZXZlbnRzIGFyZSByZWFkIGJ5IHRoZSBTZW5zb3JTZXJ2aWNlIGkuZSB0aWxsIHNlbnNvcnNfcG9sbF9kZXZpY2VfdC5wb2xsKCkgaXMgY2FsbGVkIHRoZQotICAgICAqIG5leHQgdGltZS4gT25jZSBwb2xsIGlzIGNhbGxlZCBhZ2FpbiBpdCBtZWFucyBldmVudHMgaGF2ZSBiZWVuIHJlYWQgYnkgdGhlIFNlbnNvclNlcnZpY2UsIHRoZQotICAgICAqIGRyaXZlciBjYW4gc2FmZWx5IHJlbGVhc2UgdGhlIHdha2VfbG9jay4gU2Vuc29yU2VydmljZSB3aWxsIGNvbnRpbnVlIHRvIGhvbGQgYSB3YWtlX2xvY2sgdGlsbAotICAgICAqIHRoZSBhcHAgYWN0dWFsbHkgcmVhZHMgdGhlIGV2ZW50cy4KLSAgICAgKi8KLSAgICBTRU5TT1JfRkxBR19XQUtFX1VQID0gMVUgPDwgMCwKLSAgICAvKgotICAgICAqIFJlcG9ydGluZyBtb2RlcyBmb3IgdmFyaW91cyBzZW5zb3JzLiBFYWNoIHNlbnNvciB3aWxsIGhhdmUgZXhhY3RseSBvbmUgb2YgdGhlc2UgbW9kZXMgc2V0LgotICAgICAqIFRoZSBsZWFzdCBzaWduaWZpY2FudCAybmQsIDNyZCBhbmQgNHRoIGJpdHMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IGZvdXIgcG9zc2libGUgcmVwb3J0aW5nCi0gICAgICogbW9kZXMuCi0gICAgICovCi0gICAgU0VOU09SX0ZMQUdfQ09OVElOVU9VU19NT0RFICAgICAgICA9IDAsICAgIC8vIDAwMDAKLSAgICBTRU5TT1JfRkxBR19PTl9DSEFOR0VfTU9ERSAgICAgICAgID0gMHgyLCAgLy8gMDAxMAotICAgIFNFTlNPUl9GTEFHX09ORV9TSE9UX01PREUgICAgICAgICAgPSAweDQsICAvLyAwMTAwCi0gICAgU0VOU09SX0ZMQUdfU1BFQ0lBTF9SRVBPUlRJTkdfTU9ERSA9IDB4NiwgIC8vIDAxMTAKLQotICAgIC8qCi0gICAgICogU2V0IHRoaXMgZmxhZyBpZiB0aGUgc2Vuc29yIHN1cHBvcnRzIGRhdGFfaW5qZWN0aW9uIG1vZGUgYW5kIGFsbG93cyBkYXRhIHRvIGJlIGluamVjdGVkCi0gICAgICogZnJvbSB0aGUgU2Vuc29yU2VydmljZS4gV2hlbiBpbiBkYXRhX2luamVjdGlvbiBPTkxZIHNlbnNvcnMgd2l0aCB0aGlzIGZsYWcgc2V0IGFyZSBpbmplY3RlZAotICAgICAqIHNlbnNvciBkYXRhIGFuZCBvbmx5IHNlbnNvcnMgd2l0aCB0aGlzIGZsYWcgc2V0IGFyZSBhY3RpdmF0ZWQuIEVnOiBBY2NlbGVyb21ldGVyIGFuZCBTdGVwCi0gICAgICogQ291bnRlciBzZW5zb3JzIGNhbiBiZSBzZXQgd2l0aCB0aGlzIGZsYWcgYW5kIFNlbnNvclNlcnZpY2Ugd2lsbCBpbmplY3QgYWNjZWxlcm9tZXRlciBkYXRhCi0gICAgICogYW5kIHJlYWQgdGhlIGNvcnJlc3BvbmRpbmcgc3RlcCBjb3VudHMuCi0gICAgICovCi0gICAgU0VOU09SX0ZMQUdfU1VQUE9SVFNfREFUQV9JTkpFQ1RJT04gPSBEQVRBX0lOSkVDVElPTl9NQVNLLCAvLyAxIDAwMDAKLQotICAgIC8qCi0gICAgICogU2V0IHRoaXMgZmxhZyBpZiB0aGUgc2Vuc29yIGlzIGEgZHluYW1pY2FsbHkgY29ubmVjdGVkIHNlbnNvci4gU2VlCi0gICAgICogZHluYW1pY19zZW5zb3JfbWV0YV9ldmVudF90IGFuZCBTRU5TT1JfVFlQRV9EWU5BTUlDX1NFTlNPUl9NRVRBIGZvciBkZXRhaWxzLgotICAgICAqLwotICAgIFNFTlNPUl9GTEFHX0RZTkFNSUNfU0VOU09SID0gRFlOQU1JQ19TRU5TT1JfTUFTSywKLQotICAgIC8qCi0gICAgICogU2V0IHRoaXMgZmxhZyBpZiBzZW5zb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpcyBzdXBwb3J0ZWQuIFNlZSBTRU5TT1JfVFlQRV9BRERJVElPTkFMX0lORk8KLSAgICAgKiBhbmQgYWRkaXRpb25hbF9pbmZvX2V2ZW50X3QgZm9yIGRldGFpbHMuCi0gICAgICovCi0gICAgU0VOU09SX0ZMQUdfQURESVRJT05BTF9JTkZPID0gQURESVRJT05BTF9JTkZPX01BU0sKLX07Ci0KKyNkZWZpbmUgU0VOU09SX1RZUEVfR0VPTUFHTkVUSUNfRklFTEQgICBTRU5TT1JfVFlQRV9NQUdORVRJQ19GSUVMRAogCiAvKgotICogU2Vuc29yIHR5cGUKKyAqIFNlbnNvciBzdHJpbmcgdHlwZXMgZm9yIEFuZHJvaWQgZGVmaW5lZCBzZW5zb3IgdHlwZXMuCiAgKgotICogRWFjaCBzZW5zb3IgaGFzIGEgdHlwZSB3aGljaCBkZWZpbmVzIHdoYXQgdGhpcyBzZW5zb3IgbWVhc3VyZXMgYW5kIGhvdwotICogbWVhc3VyZXMgYXJlIHJlcG9ydGVkLiBTZWUgdGhlIEJhc2Ugc2Vuc29ycyBhbmQgQ29tcG9zaXRlIHNlbnNvcnMgbGlzdHMKLSAqIGZvciBjb21wbGV0ZSBkZXNjcmlwdGlvbnM6Ci0gKiBodHRwOi8vc291cmNlLmFuZHJvaWQuY29tL2RldmljZXMvc2Vuc29ycy9iYXNlX3RyaWdnZXJzLmh0bWwKLSAqIGh0dHA6Ly9zb3VyY2UuYW5kcm9pZC5jb20vZGV2aWNlcy9zZW5zb3JzL2NvbXBvc2l0ZV9zZW5zb3JzLmh0bWwKKyAqIEZvciBBbmRyb2lkIGRlZmluZWQgc2Vuc29yIHR5cGVzLCBzdHJpbmcgdHlwZSB3aWxsIGJlIG92ZXJyaWRlIGluIHNlbnNvciBzZXJ2aWNlIGFuZCB0aHVzIG5vCisgKiBsb25nZXIgbmVlZGVkIHRvIGJlIGFkZGVkIHRvIHNlbnNvcl90IGRhdGEgc3RydWN0dXJlLgogICoKLSAqIERldmljZSBtYW51ZmFjdHVyZXJzIChPRU1zKSBjYW4gZGVmaW5lIHRoZWlyIG93biBzZW5zb3IgdHlwZXMsIGZvcgotICogdGhlaXIgcHJpdmF0ZSB1c2UgYnkgYXBwbGljYXRpb25zIG9yIHNlcnZpY2VzIHByb3ZpZGVkIGJ5IHRoZW0uIFN1Y2gKLSAqIHNlbnNvciB0eXBlcyBhcmUgc3BlY2lmaWMgdG8gYW4gT0VNIGFuZCBjYW4ndCBiZSBleHBvc2VkIGluIHRoZSBTREsuCi0gKiBUaGVzZSB0eXBlcyBtdXN0IHN0YXJ0IGF0IFNFTlNPUl9UWVBFX0RFVklDRV9QUklWQVRFX0JBU0UuCi0gKgotICogQWxsIHNlbnNvcnMgZGVmaW5lZCBvdXRzaWRlIG9mIHRoZSBkZXZpY2UgcHJpdmF0ZSByYW5nZSBtdXN0IGNvcnJlc3BvbmQgdG8KLSAqIGEgdHlwZSBkZWZpbmVkIGluIHRoaXMgZmlsZSwgYW5kIG11c3Qgc2F0aXNmeSB0aGUgY2hhcmFjdGVyaXN0aWNzIGxpc3RlZCBpbgotICogdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBzZW5zb3IgdHlwZS4KLSAqCi0gKiBTdGFydGluZyB3aXRoIHZlcnNpb24gU0VOU09SU19ERVZJQ0VfQVBJX1ZFUlNJT05fMV8yLCBlYWNoIHNlbnNvciBhbHNvCi0gKiBoYXMgYSBzdHJpbmdUeXBlLgotICogIC0gU3RyaW5nVHlwZSBvZiBzZW5zb3JzIGluc2lkZSBvZiB0aGUgZGV2aWNlIHByaXZhdGUgcmFuZ2UgTVVTVCBiZSBwcmVmaXhlZAotICogICAgYnkgdGhlIHNlbnNvciBwcm92aWRlcidzIG9yIE9FTSByZXZlcnNlIGRvbWFpbiBuYW1lLiBJbiBwYXJ0aWN1bGFyLCB0aGV5Ci0gKiAgICBjYW5ub3QgdXNlIHRoZSAiYW5kcm9pZC5zZW5zb3IiIHByZWZpeC4KLSAqICAtIFN0cmluZ1R5cGUgb2Ygc2Vuc29ycyBvdXRzaWRlIG9mIHRoZSBkZXZpY2UgcHJpdmF0ZSByYW5nZSBNVVNUIGNvcnJlc3BvbmQKLSAqICAgIHRvIHRoZSBvbmUgZGVmaW5lZCBpbiB0aGlzIGZpbGUgKHN0YXJ0aW5nIHdpdGggImFuZHJvaWQuc2Vuc29yIikuCi0gKiAgICBGb3IgZXhhbXBsZSwgYWNjZWxlcm9tZXRlcnMgbXVzdCBoYXZlCi0gKiAgICAgIHR5cGU9U0VOU09SX1RZUEVfQUNDRUxFUk9NRVRFUiBhbmQKLSAqICAgICAgc3RyaW5nVHlwZT1TRU5TT1JfU1RSSU5HX1RZUEVfQUNDRUxFUk9NRVRFUgotICoKLSAqIFdoZW4gYW5kcm9pZCBpbnRyb2R1Y2VzIGEgbmV3IHNlbnNvciB0eXBlIHRoYXQgY2FuIHJlcGxhY2UgYW4gT0VNLWRlZmluZWQKLSAqIHNlbnNvciB0eXBlLCB0aGUgT0VNIG11c3QgdXNlIHRoZSBvZmZpY2lhbCBzZW5zb3IgdHlwZSBhbmQgc3RyaW5nVHlwZSBvbgotICogdmVyc2lvbnMgb2YgdGhlIEhBTCB0aGF0IHN1cHBvcnQgdGhpcyBuZXcgb2ZmaWNpYWwgc2Vuc29yIHR5cGUuCi0gKgotICogRXhhbXBsZSAobWFkZSB1cCk6IFN1cHBvc2UgR29vZ2xlJ3MgR2xhc3MgdGVhbSB3YW50cyB0byBzdXJmYWNlIGEgc2Vuc29yCi0gKiBkZXRlY3RpbmcgdGhhdCBHbGFzcyBpcyBvbiBhIGhlYWQuCi0gKiAgLSBTdWNoIGEgc2Vuc29yIGlzIG5vdCBvZmZpY2lhbGx5IHN1cHBvcnRlZCBpbiBhbmRyb2lkIEtpdEthdAotICogIC0gR2xhc3MgZGV2aWNlcyBsYXVuY2hpbmcgb24gS2l0S2F0IGNhbiBpbXBsZW1lbnQgYSBzZW5zb3Igd2l0aAotICogICAgdHlwZSA9IDB4MTAwMDEgYW5kIHN0cmluZ1R5cGUgPSAiY29tLmdvb2dsZS5nbGFzcy5vbmhlYWRkZXRlY3RvciIKLSAqICAtIEluIEwgYW5kcm9pZCByZWxlYXNlLCBpZiBhbmRyb2lkIGRlY2lkZXMgdG8gZGVmaW5lCi0gKiAgICBTRU5TT1JfVFlQRV9PTl9IRUFEX0RFVEVDVE9SIGFuZCBTVFJJTkdfU0VOU09SX1RZUEVfT05fSEVBRF9ERVRFQ1RPUiwKLSAqICAgIHRob3NlIHR5cGVzIHNob3VsZCByZXBsYWNlIHRoZSBHbGFzcy10ZWFtLXNwZWNpZmljIHR5cGVzIGluIGFsbCBmdXR1cmUKLSAqICAgIGxhdW5jaGVzLgotICogIC0gV2hlbiBsYXVuY2hpbmcgR2xhc3Mgb24gdGhlIEwgcmVsZWFzZSwgR29vZ2xlIHNob3VsZCBub3cgdXNlIHRoZSBvZmZpY2lhbAotICogICAgdHlwZSAoU0VOU09SX1RZUEVfT05fSEVBRF9ERVRFQ1RPUikgYW5kIHN0cmluZ1R5cGUuCi0gKiAgLSBUaGlzIHdheSwgYWxsIGFwcGxpY2F0aW9ucyBjYW4gbm93IHVzZSB0aGlzIHNlbnNvci4KKyAqIFRoZXNlIGRlZmluaXRpb25zIGFyZSBnb2luZyB0byBiZSByZW1vdmVkIHNvb24uCiAgKi8KLQotLyoKLSAqIEJhc2UgZm9yIGRldmljZSBtYW51ZmFjdHVyZXJzIHByaXZhdGUgc2Vuc29yIHR5cGVzLgotICogVGhlc2Ugc2Vuc29yIHR5cGVzIGNhbid0IGJlIGV4cG9zZWQgaW4gdGhlIFNESy4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9ERVZJQ0VfUFJJVkFURV9CQVNFICAgICAweDEwMDAwCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9NRVRBX0RBVEEKLSAqIHJlcG9ydGluZy1tb2RlOiBuL2EKLSAqIHdha2UtdXAgc2Vuc29yOiBuL2EKLSAqCi0gKiBOTyBTRU5TT1IgT0YgVEhBVCBUWVBFIE1VU1QgQkUgUkVUVVJORUQgKCpnZXRfc2Vuc29yc19saXN0KSgpCi0gKgotICogU0VOU09SX1RZUEVfTUVUQV9EQVRBIGlzIGEgc3BlY2lhbCB0b2tlbiB1c2VkIHRvIHBvcHVsYXRlIHRoZQotICogc2Vuc29yc19tZXRhX2RhdGFfZXZlbnQgc3RydWN0dXJlLiBJdCBkb2Vzbid0IGNvcnJlc3BvbmQgdG8gYSBwaHlzaWNhbAotICogc2Vuc29yLiBzZW5zb3JzX21ldGFfZGF0YV9ldmVudCBhcmUgc3BlY2lhbCwgdGhleSBleGlzdCBvbmx5IGluc2lkZQotICogdGhlIEhBTCBhbmQgYXJlIGdlbmVyYXRlZCBzcG9udGFuZW91c2x5LCBhcyBvcHBvc2VkIHRvIGJlIHJlbGF0ZWQgdG8KLSAqIGEgcGh5c2ljYWwgc2Vuc29yLgotICoKLSAqICAgc2Vuc29yc19tZXRhX2RhdGFfZXZlbnRfdC52ZXJzaW9uIG11c3QgYmUgTUVUQV9EQVRBX1ZFUlNJT04KLSAqICAgc2Vuc29yc19tZXRhX2RhdGFfZXZlbnRfdC5zZW5zb3IgbXVzdCBiZSAwCi0gKiAgIHNlbnNvcnNfbWV0YV9kYXRhX2V2ZW50X3QudHlwZSBtdXN0IGJlIFNFTlNPUl9UWVBFX01FVEFfREFUQQotICogICBzZW5zb3JzX21ldGFfZGF0YV9ldmVudF90LnJlc2VydmVkIG11c3QgYmUgMAotICogICBzZW5zb3JzX21ldGFfZGF0YV9ldmVudF90LnRpbWVzdGFtcCBtdXN0IGJlIDAKLSAqCi0gKiBUaGUgcGF5bG9hZCBpcyBhIG1ldGFfZGF0YV9ldmVudF90LCB3aGVyZToKLSAqIG1ldGFfZGF0YV9ldmVudF90LndoYXQgY2FuIHRha2UgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gKgotICogTUVUQV9EQVRBX0ZMVVNIX0NPTVBMRVRFCi0gKiAgIFRoaXMgZXZlbnQgaW5kaWNhdGVzIHRoYXQgYSBwcmV2aW91cyAoKmZsdXNoKSgpIGNhbGwgaGFzIGNvbXBsZXRlZCBmb3IgdGhlIHNlbnNvcgotICogICBoYW5kbGUgc3BlY2lmaWVkIGluIG1ldGFfZGF0YV9ldmVudF90LnNlbnNvci4KLSAqICAgc2VlICgqZmx1c2gpKCkgZm9yIG1vcmUgZGV0YWlscwotICoKLSAqIEFsbCBvdGhlciB2YWx1ZXMgZm9yIG1ldGFfZGF0YV9ldmVudF90LndoYXQgYXJlIHJlc2VydmVkIGFuZAotICogbXVzdCBub3QgYmUgdXNlZC4KLSAqCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfTUVUQV9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgKDApCi0KLS8qCi0gICogV2FrZSB1cCBzZW5zb3JzLgotICAqIEVhY2ggc2Vuc29yIG1heSBoYXZlIGVpdGhlciBvciBib3RoIGEgd2FrZS11cCBhbmQgYSBub24td2FrZSB2YXJpYW50LgotICAqIFdoZW4gcmVnaXN0ZXJlZCBpbiBiYXRjaCBtb2RlLCB3YWtlLXVwIHNlbnNvcnMgd2lsbCB3YWtlIHVwIHRoZSBBUCB3aGVuCi0gICogdGhlaXIgRklGT3MgYXJlIGZ1bGwgb3Igd2hlbiB0aGUgYmF0Y2ggdGltZW91dCBleHBpcmVzLiBBIHNlcGFyYXRlIEZJRk8gaGFzCi0gICogdG8gYmUgbWFpbnRhaW5lZCBmb3Igd2FrZSB1cCBzZW5zb3JzIGFuZCBub24gd2FrZSB1cCBzZW5zb3JzLiBUaGUgbm9uIHdha2UtdXAKLSAgKiBzZW5zb3JzIG5lZWQgdG8gb3ZlcndyaXRlIHRoZWlyIEZJRk9zIHdoZW4gdGhleSBhcmUgZnVsbCB0aWxsIHRoZSBBUCB3YWtlcyB1cAotICAqIGFuZCB0aGUgd2FrZS11cCBzZW5zb3JzIHdpbGwgd2FrZS11cCB0aGUgQVAgd2hlbiB0aGVpciBGSUZPcyBhcmUgZnVsbCBvciB3aGVuCi0gICogdGhlIGJhdGNoIHRpbWVvdXQgZXhwaXJlcyB3aXRob3V0IGxvc2luZyBldmVudHMuIFdha2UtdXAgYW5kIG5vbiB3YWtlLXVwIHZhcmlhbnRzCi0gICogb2YgZWFjaCBzZW5zb3IgY2FuIGJlIGFjdGl2YXRlZCBhdCBkaWZmZXJlbnQgcmF0ZXMgaW5kZXBlbmRlbnRseSBvZiBlYWNoIG90aGVyLgotICAqCi0gICogTm90ZTogUHJveGltaXR5IHNlbnNvciBhbmQgc2lnbmlmaWNhbnQgbW90aW9uIHNlbnNvciB3aGljaCB3ZXJlIGRlZmluZWQgaW4gcHJldmlvdXMKLSAgKiByZWxlYXNlcyBhcmUgYWxzbyB3YWtlLXVwIHNlbnNvcnMgYW5kIHNob3VsZCBiZSB0cmVhdGVkIGFzIHN1Y2guIFdha2UtdXAgb25lLXNob3QKLSAgKiBzZW5zb3JzIGxpa2UgU0lHTklGSUNBTlRfTU9USU9OIGNhbm5vdCBiZSBiYXRjaGVkLCBoZW5jZSB0aGUgdGV4dCBhYm91dCBiYXRjaCBhYm92ZQotICAqIGRvZXNuJ3QgYXBwbHkgdG8gdGhlbS4gU2VlIHRoZSBkZWZpbml0aW9ucyBvZiBTRU5TT1JfVFlQRV9QUk9YSU1JVFkgYW5kCi0gICogU0VOU09SX1RZUEVfU0lHTklGSUNBTlRfTU9USU9OIGZvciBtb3JlIGluZm8uCi0gICoKLSAgKiBTZXQgU0VOU09SX0ZMQUdfV0FLRV9VUCBmbGFnIGZvciBhbGwgd2FrZS11cCBzZW5zb3JzLgotICAqCi0gICogRm9yIGV4YW1wbGUsIEEgZGV2aWNlIGNhbiBoYXZlIHR3byBzZW5zb3JzIGJvdGggb2YgU0VOU09SX1RZUEVfQUNDRUxFUk9NRVRFUiBhbmQKLSAgKiBvbmUgb2YgdGhlbSBjYW4gYmUgYSB3YWtlX3VwIHNlbnNvciAod2l0aCBTRU5TT1JfRkxBR19XQUtFX1VQIGZsYWcgc2V0KSBhbmQgdGhlIG90aGVyCi0gICogY2FuIGJlIGEgcmVndWxhciBub24gd2FrZV91cCBzZW5zb3IuIEJvdGggb2YgdGhlc2Ugc2Vuc29ycyBtdXN0IGJlIGFjdGl2YXRlZC9kZWFjdGl2YXRlZAotICAqIGluZGVwZW5kZW50bHkgb2YgdGhlIG90aGVyLgotICAqLwotCi0vKgotICogU0VOU09SX1RZUEVfQUNDRUxFUk9NRVRFUgotICogcmVwb3J0aW5nLW1vZGU6IGNvbnRpbnVvdXMKLSAqCi0gKiAgQWxsIHZhbHVlcyBhcmUgaW4gU0kgdW5pdHMgKG0vc14yKSBhbmQgbWVhc3VyZSB0aGUgYWNjZWxlcmF0aW9uIG9mIHRoZQotICogIGRldmljZSBtaW51cyB0aGUgZm9yY2Ugb2YgZ3Jhdml0eS4KLSAqCi0gKiAgSW1wbGVtZW50IHRoZSBub24td2FrZS11cCB2ZXJzaW9uIG9mIHRoaXMgc2Vuc29yIGFuZCBpbXBsZW1lbnQgdGhlIHdha2UtdXAKLSAqICB2ZXJzaW9uIGlmIHRoZSBzeXN0ZW0gcG9zc2Vzc2VzIGEgd2FrZSB1cCBmaWZvLgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX0FDQ0VMRVJPTUVURVIgICAgICAgICAgICAgICAgICAgICgxKQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfQUNDRUxFUk9NRVRFUiAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IuYWNjZWxlcm9tZXRlciIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX0dFT01BR05FVElDX0ZJRUxECi0gKiByZXBvcnRpbmctbW9kZTogY29udGludW91cwotICoKLSAqICBBbGwgdmFsdWVzIGFyZSBpbiBtaWNyby1UZXNsYSAodVQpIGFuZCBtZWFzdXJlIHRoZSBnZW9tYWduZXRpYwotICogIGZpZWxkIGluIHRoZSBYLCBZIGFuZCBaIGF4aXMuCi0gKgotICogIEltcGxlbWVudCB0aGUgbm9uLXdha2UtdXAgdmVyc2lvbiBvZiB0aGlzIHNlbnNvciBhbmQgaW1wbGVtZW50IHRoZSB3YWtlLXVwCi0gKiAgdmVyc2lvbiBpZiB0aGUgc3lzdGVtIHBvc3Nlc3NlcyBhIHdha2UgdXAgZmlmby4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9HRU9NQUdORVRJQ19GSUVMRCAgICAgICAgICAgICAgICAoMikKLSNkZWZpbmUgU0VOU09SX1RZUEVfTUFHTkVUSUNfRklFTEQgIFNFTlNPUl9UWVBFX0dFT01BR05FVElDX0ZJRUxECi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9NQUdORVRJQ19GSUVMRCAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5tYWduZXRpY19maWVsZCIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX09SSUVOVEFUSU9OCi0gKiByZXBvcnRpbmctbW9kZTogY29udGludW91cwotICoKLSAqIEFsbCB2YWx1ZXMgYXJlIGFuZ2xlcyBpbiBkZWdyZWVzLgotICoKLSAqIE9yaWVudGF0aW9uIHNlbnNvcnMgcmV0dXJuIHNlbnNvciBldmVudHMgZm9yIGFsbCAzIGF4ZXMgYXQgYSBjb25zdGFudAotICogcmF0ZSBkZWZpbmVkIGJ5IHNldERlbGF5KCkuCi0gKgotICogSW1wbGVtZW50IHRoZSBub24td2FrZS11cCB2ZXJzaW9uIG9mIHRoaXMgc2Vuc29yIGFuZCBpbXBsZW1lbnQgdGhlIHdha2UtdXAKLSAqIHZlcnNpb24gaWYgdGhlIHN5c3RlbSBwb3NzZXNzZXMgYSB3YWtlIHVwIGZpZm8uCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfT1JJRU5UQVRJT04gICAgICAgICAgICAgICAgICAgICAgKDMpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9PUklFTlRBVElPTiAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5vcmllbnRhdGlvbiIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX0dZUk9TQ09QRQotICogcmVwb3J0aW5nLW1vZGU6IGNvbnRpbnVvdXMKLSAqCi0gKiAgQWxsIHZhbHVlcyBhcmUgaW4gcmFkaWFucy9zZWNvbmQgYW5kIG1lYXN1cmUgdGhlIHJhdGUgb2Ygcm90YXRpb24KLSAqICBhcm91bmQgdGhlIFgsIFkgYW5kIFogYXhpcy4KLSAqCi0gKiAgSW1wbGVtZW50IHRoZSBub24td2FrZS11cCB2ZXJzaW9uIG9mIHRoaXMgc2Vuc29yIGFuZCBpbXBsZW1lbnQgdGhlIHdha2UtdXAKLSAqICB2ZXJzaW9uIGlmIHRoZSBzeXN0ZW0gcG9zc2Vzc2VzIGEgd2FrZSB1cCBmaWZvLgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX0dZUk9TQ09QRSAgICAgICAgICAgICAgICAgICAgICAgICg0KQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfR1lST1NDT1BFICAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IuZ3lyb3Njb3BlIgotCi0vKgotICogU0VOU09SX1RZUEVfTElHSFQKLSAqIHJlcG9ydGluZy1tb2RlOiBvbi1jaGFuZ2UKLSAqCi0gKiBUaGUgbGlnaHQgc2Vuc29yIHZhbHVlIGlzIHJldHVybmVkIGluIFNJIGx1eCB1bml0cy4KLSAqCi0gKiBCb3RoIHdha2UtdXAgYW5kIG5vbiB3YWtlLXVwIHZlcnNpb25zIGFyZSB1c2VmdWwuCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfTElHSFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9MSUdIVCAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5saWdodCIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX1BSRVNTVVJFCi0gKiByZXBvcnRpbmctbW9kZTogY29udGludW91cwotICoKLSAqIFRoZSBwcmVzc3VyZSBzZW5zb3IgcmV0dXJuIHRoZSBhdGhtb3NwaGVyaWMgcHJlc3N1cmUgaW4gaGVjdG9wYXNjYWwgKGhQYSkKLSAqCi0gKiBJbXBsZW1lbnQgdGhlIG5vbi13YWtlLXVwIHZlcnNpb24gb2YgdGhpcyBzZW5zb3IgYW5kIGltcGxlbWVudCB0aGUgd2FrZS11cAotICogdmVyc2lvbiBpZiB0aGUgc3lzdGVtIHBvc3Nlc3NlcyBhIHdha2UgdXAgZmlmby4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9QUkVTU1VSRSAgICAgICAgICAgICAgICAgICAgICAgICAoNikKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX1BSRVNTVVJFICAgICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLnByZXNzdXJlIgotCi0vKiBTRU5TT1JfVFlQRV9URU1QRVJBVFVSRSBpcyBkZXByZWNhdGVkIGluIHRoZSBIQUwgKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfVEVNUEVSQVRVUkUgICAgICAgICAgICAgICAgICAgICAgKDcpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9URU1QRVJBVFVSRSAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci50ZW1wZXJhdHVyZSIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX1BST1hJTUlUWQotICogcmVwb3J0aW5nLW1vZGU6IG9uLWNoYW5nZQotICoKLSAqIFRoZSBwcm94aW1pdHkgc2Vuc29yIHdoaWNoIHR1cm5zIHRoZSBzY3JlZW4gb2ZmIGFuZCBiYWNrIG9uIGR1cmluZyBjYWxscyBpcyB0aGUKLSAqIHdha2UtdXAgcHJveGltaXR5IHNlbnNvci4gSW1wbGVtZW50IHdha2UtdXAgcHJveGltaXR5IHNlbnNvciBiZWZvcmUgaW1wbGVtZW50aW5nCi0gKiBhIG5vbiB3YWtlLXVwIHByb3hpbWl0eSBzZW5zb3IuIEZvciB0aGUgd2FrZS11cCBwcm94aW1pdHkgc2Vuc29yIHNldCB0aGUgZmxhZwotICogU0VOU09SX0ZMQUdfV0FLRV9VUC4KLSAqIFRoZSB2YWx1ZSBjb3JyZXNwb25kcyB0byB0aGUgZGlzdGFuY2UgdG8gdGhlIG5lYXJlc3Qgb2JqZWN0IGluIGNlbnRpbWV0ZXJzLgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX1BST1hJTUlUWSAgICAgICAgICAgICAgICAgICAgICAgICg4KQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfUFJPWElNSVRZICAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IucHJveGltaXR5IgotCi0vKgotICogU0VOU09SX1RZUEVfR1JBVklUWQotICogcmVwb3J0aW5nLW1vZGU6IGNvbnRpbnVvdXMKLSAqCi0gKiBBIGdyYXZpdHkgb3V0cHV0IGluZGljYXRlcyB0aGUgZGlyZWN0aW9uIG9mIGFuZCBtYWduaXR1ZGUgb2YgZ3Jhdml0eSBpbgotICogdGhlIGRldmljZXMncyBjb29yZGluYXRlcy4KLSAqCi0gKiBJbXBsZW1lbnQgdGhlIG5vbi13YWtlLXVwIHZlcnNpb24gb2YgdGhpcyBzZW5zb3IgYW5kIGltcGxlbWVudCB0aGUgd2FrZS11cAotICogdmVyc2lvbiBpZiB0aGUgc3lzdGVtIHBvc3Nlc3NlcyBhIHdha2UgdXAgZmlmby4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9HUkFWSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAoOSkKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0dSQVZJVFkgICAgICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLmdyYXZpdHkiCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9MSU5FQVJfQUNDRUxFUkFUSU9OCi0gKiByZXBvcnRpbmctbW9kZTogY29udGludW91cwotICoKLSAqIEluZGljYXRlcyB0aGUgbGluZWFyIGFjY2VsZXJhdGlvbiBvZiB0aGUgZGV2aWNlIGluIGRldmljZSBjb29yZGluYXRlcywKLSAqIG5vdCBpbmNsdWRpbmcgZ3Jhdml0eS4KLSAqCi0gKiBJbXBsZW1lbnQgdGhlIG5vbi13YWtlLXVwIHZlcnNpb24gb2YgdGhpcyBzZW5zb3IgYW5kIGltcGxlbWVudCB0aGUgd2FrZS11cAotICogdmVyc2lvbiBpZiB0aGUgc3lzdGVtIHBvc3Nlc3NlcyBhIHdha2UgdXAgZmlmby4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9MSU5FQVJfQUNDRUxFUkFUSU9OICAgICAgICAgICAgICgxMCkKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0xJTkVBUl9BQ0NFTEVSQVRJT04gICAgICAiYW5kcm9pZC5zZW5zb3IubGluZWFyX2FjY2VsZXJhdGlvbiIKLQotCi0vKgotICogU0VOU09SX1RZUEVfUk9UQVRJT05fVkVDVE9SCi0gKiByZXBvcnRpbmctbW9kZTogY29udGludW91cwotICoKLSAqIFRoZSByb3RhdGlvbiB2ZWN0b3Igc3ltYm9saXplcyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIGRldmljZSByZWxhdGl2ZSB0byB0aGUKLSAqIEVhc3QtTm9ydGgtVXAgY29vcmRpbmF0ZXMgZnJhbWUuCi0gKgotICogSW1wbGVtZW50IHRoZSBub24td2FrZS11cCB2ZXJzaW9uIG9mIHRoaXMgc2Vuc29yIGFuZCBpbXBsZW1lbnQgdGhlIHdha2UtdXAKLSAqIHZlcnNpb24gaWYgdGhlIHN5c3RlbSBwb3NzZXNzZXMgYSB3YWtlIHVwIGZpZm8uCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfUk9UQVRJT05fVkVDVE9SICAgICAgICAgICAgICAgICAoMTEpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9ST1RBVElPTl9WRUNUT1IgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLnJvdGF0aW9uX3ZlY3RvciIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX1JFTEFUSVZFX0hVTUlESVRZCi0gKiByZXBvcnRpbmctbW9kZTogb24tY2hhbmdlCi0gKgotICogQSByZWxhdGl2ZSBodW1pZGl0eSBzZW5zb3IgbWVhc3VyZXMgcmVsYXRpdmUgYW1iaWVudCBhaXIgaHVtaWRpdHkgYW5kCi0gKiByZXR1cm5zIGEgdmFsdWUgaW4gcGVyY2VudC4KLSAqCi0gKiBCb3RoIHdha2UtdXAgYW5kIG5vbiB3YWtlLXVwIHZlcnNpb25zIGFyZSB1c2VmdWwuCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfUkVMQVRJVkVfSFVNSURJVFkgICAgICAgICAgICAgICAoMTIpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9SRUxBVElWRV9IVU1JRElUWSAgICAgICAgImFuZHJvaWQuc2Vuc29yLnJlbGF0aXZlX2h1bWlkaXR5IgotCi0vKgotICogU0VOU09SX1RZUEVfQU1CSUVOVF9URU1QRVJBVFVSRQotICogcmVwb3J0aW5nLW1vZGU6IG9uLWNoYW5nZQotICoKLSAqIFRoZSBhbWJpZW50IChyb29tKSB0ZW1wZXJhdHVyZSBpbiBkZWdyZWUgQ2Vsc2l1cy4KLSAqCi0gKiBCb3RoIHdha2UtdXAgYW5kIG5vbiB3YWtlLXVwIHZlcnNpb25zIGFyZSB1c2VmdWwuCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfQU1CSUVOVF9URU1QRVJBVFVSRSAgICAgICAgICAgICAoMTMpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9BTUJJRU5UX1RFTVBFUkFUVVJFICAgICAgImFuZHJvaWQuc2Vuc29yLmFtYmllbnRfdGVtcGVyYXR1cmUiCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9NQUdORVRJQ19GSUVMRF9VTkNBTElCUkFURUQKLSAqIHJlcG9ydGluZy1tb2RlOiBjb250aW51b3VzCi0gKgotICogIFNpbWlsYXIgdG8gU0VOU09SX1RZUEVfTUFHTkVUSUNfRklFTEQsIGJ1dCB0aGUgaGFyZCBpcm9uIGNhbGlicmF0aW9uIGlzCi0gKiAgcmVwb3J0ZWQgc2VwYXJhdGVseSBpbnN0ZWFkIG9mIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBtZWFzdXJlbWVudC4KLSAqCi0gKiAgSW1wbGVtZW50IHRoZSBub24td2FrZS11cCB2ZXJzaW9uIG9mIHRoaXMgc2Vuc29yIGFuZCBpbXBsZW1lbnQgdGhlIHdha2UtdXAKLSAqICB2ZXJzaW9uIGlmIHRoZSBzeXN0ZW0gcG9zc2Vzc2VzIGEgd2FrZSB1cCBmaWZvLgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX01BR05FVElDX0ZJRUxEX1VOQ0FMSUJSQVRFRCAgICAgKDE0KQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfTUFHTkVUSUNfRklFTERfVU5DQUxJQlJBVEVEICJhbmRyb2lkLnNlbnNvci5tYWduZXRpY19maWVsZF91bmNhbGlicmF0ZWQiCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9HQU1FX1JPVEFUSU9OX1ZFQ1RPUgotICogcmVwb3J0aW5nLW1vZGU6IGNvbnRpbnVvdXMKLSAqCi0gKiAgU2ltaWxhciB0byBTRU5TT1JfVFlQRV9ST1RBVElPTl9WRUNUT1IsIGJ1dCBub3QgdXNpbmcgdGhlIGdlb21hZ25ldGljCi0gKiAgZmllbGQuCi0gKgotICogIEltcGxlbWVudCB0aGUgbm9uLXdha2UtdXAgdmVyc2lvbiBvZiB0aGlzIHNlbnNvciBhbmQgaW1wbGVtZW50IHRoZSB3YWtlLXVwCi0gKiAgdmVyc2lvbiBpZiB0aGUgc3lzdGVtIHBvc3Nlc3NlcyBhIHdha2UgdXAgZmlmby4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9HQU1FX1JPVEFUSU9OX1ZFQ1RPUiAgICAgICAgICAgICgxNSkKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0dBTUVfUk9UQVRJT05fVkVDVE9SICAgICAiYW5kcm9pZC5zZW5zb3IuZ2FtZV9yb3RhdGlvbl92ZWN0b3IiCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9HWVJPU0NPUEVfVU5DQUxJQlJBVEVECi0gKiByZXBvcnRpbmctbW9kZTogY29udGludW91cwotICoKLSAqICBBbGwgdmFsdWVzIGFyZSBpbiByYWRpYW5zL3NlY29uZCBhbmQgbWVhc3VyZSB0aGUgcmF0ZSBvZiByb3RhdGlvbgotICogIGFyb3VuZCB0aGUgWCwgWSBhbmQgWiBheGlzLgotICoKLSAqICBJbXBsZW1lbnQgdGhlIG5vbi13YWtlLXVwIHZlcnNpb24gb2YgdGhpcyBzZW5zb3IgYW5kIGltcGxlbWVudCB0aGUgd2FrZS11cAotICogIHZlcnNpb24gaWYgdGhlIHN5c3RlbSBwb3NzZXNzZXMgYSB3YWtlIHVwIGZpZm8uCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfR1lST1NDT1BFX1VOQ0FMSUJSQVRFRCAgICAgICAgICAoMTYpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9HWVJPU0NPUEVfVU5DQUxJQlJBVEVEICAgImFuZHJvaWQuc2Vuc29yLmd5cm9zY29wZV91bmNhbGlicmF0ZWQiCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9TSUdOSUZJQ0FOVF9NT1RJT04KLSAqIHJlcG9ydGluZy1tb2RlOiBvbmUtc2hvdAotICoKLSAqIEEgc2Vuc29yIG9mIHRoaXMgdHlwZSB0cmlnZ2VycyBhbiBldmVudCBlYWNoIHRpbWUgc2lnbmlmaWNhbnQgbW90aW9uCi0gKiBpcyBkZXRlY3RlZCBhbmQgYXV0b21hdGljYWxseSBkaXNhYmxlcyBpdHNlbGYuCi0gKiBGb3IgU2lnbmlmaWNhbnQgTW90aW9uIHNlbnNvciB0byBiZSB1c2VmdWwsIGl0IG11c3QgYmUgZGVmaW5lZCBhcyBhCi0gKiB3YWtlLXVwIHNlbnNvci4gKHNldCBTRU5TT1JfRkxBR19XQUtFX1VQKS4gSW1wbGVtZW50IHRoZSB3YWtlLXVwIHNpZ25pZmljYW50IG1vdGlvbgotICogc2Vuc29yLiBBIG5vbiB3YWtlLXVwIHZlcnNpb24gaXMgbm90IHVzZWZ1bC4KLSAqIFRoZSBvbmx5IGFsbG93ZWQgdmFsdWUgdG8gcmV0dXJuIGlzIDEuMC4KLSAqLwotCi0jZGVmaW5lIFNFTlNPUl9UWVBFX1NJR05JRklDQU5UX01PVElPTiAgICAgICAgICAgICAgKDE3KQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfU0lHTklGSUNBTlRfTU9USU9OICAgICAgICJhbmRyb2lkLnNlbnNvci5zaWduaWZpY2FudF9tb3Rpb24iCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9TVEVQX0RFVEVDVE9SCi0gKiByZXBvcnRpbmctbW9kZTogc3BlY2lhbAotICoKLSAqIEEgc2Vuc29yIG9mIHRoaXMgdHlwZSB0cmlnZ2VycyBhbiBldmVudCBlYWNoIHRpbWUgYSBzdGVwIGlzIHRha2VuCi0gKiBieSB0aGUgdXNlci4gVGhlIG9ubHkgYWxsb3dlZCB2YWx1ZSB0byByZXR1cm4gaXMgMS4wIGFuZCBhbiBldmVudAotICogaXMgZ2VuZXJhdGVkIGZvciBlYWNoIHN0ZXAuCi0gKgotICogQm90aCB3YWtlLXVwIGFuZCBub24gd2FrZS11cCB2ZXJzaW9ucyBhcmUgdXNlZnVsLgotICovCi0KLSNkZWZpbmUgU0VOU09SX1RZUEVfU1RFUF9ERVRFQ1RPUiAgICAgICAgICAgICAgICAgICAoMTgpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9TVEVQX0RFVEVDVE9SICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLnN0ZXBfZGV0ZWN0b3IiCi0KLQotLyoKLSAqIFNFTlNPUl9UWVBFX1NURVBfQ09VTlRFUgotICogcmVwb3J0aW5nLW1vZGU6IG9uLWNoYW5nZQotICoKLSAqIEEgc2Vuc29yIG9mIHRoaXMgdHlwZSByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3RlcHMgdGFrZW4gYnkgdGhlIHVzZXIgc2luY2UKLSAqIHRoZSBsYXN0IHJlYm9vdCB3aGlsZSBhY3RpdmF0ZWQuIFRoZSB2YWx1ZSBpcyByZXR1cm5lZCBhcyBhIHVpbnQ2NF90IGFuZCBpcwotICogcmVzZXQgdG8gemVybyBvbmx5IG9uIGEgc3lzdGVtIC8gYW5kcm9pZCByZWJvb3QuCi0gKgotICogSW1wbGVtZW50IHRoZSBub24td2FrZS11cCB2ZXJzaW9uIG9mIHRoaXMgc2Vuc29yIGFuZCBpbXBsZW1lbnQgdGhlIHdha2UtdXAKLSAqIHZlcnNpb24gaWYgdGhlIHN5c3RlbSBwb3NzZXNzZXMgYSB3YWtlIHVwIGZpZm8uCi0gKi8KLQotI2RlZmluZSBTRU5TT1JfVFlQRV9TVEVQX0NPVU5URVIgICAgICAgICAgICAgICAgICAgICgxOSkKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX1NURVBfQ09VTlRFUiAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3Iuc3RlcF9jb3VudGVyIgotCi0vKgotICogU0VOU09SX1RZUEVfR0VPTUFHTkVUSUNfUk9UQVRJT05fVkVDVE9SCi0gKiByZXBvcnRpbmctbW9kZTogY29udGludW91cwotICoKLSAqICBTaW1pbGFyIHRvIFNFTlNPUl9UWVBFX1JPVEFUSU9OX1ZFQ1RPUiwgYnV0IHVzaW5nIGEgbWFnbmV0b21ldGVyIGluc3RlYWQKLSAqICBvZiB1c2luZyBhIGd5cm9zY29wZS4KLSAqCi0gKiBJbXBsZW1lbnQgdGhlIG5vbi13YWtlLXVwIHZlcnNpb24gb2YgdGhpcyBzZW5zb3IgYW5kIGltcGxlbWVudCB0aGUgd2FrZS11cAotICogdmVyc2lvbiBpZiB0aGUgc3lzdGVtIHBvc3Nlc3NlcyBhIHdha2UgdXAgZmlmby4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9HRU9NQUdORVRJQ19ST1RBVElPTl9WRUNUT1IgICAgICgyMCkKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0dFT01BR05FVElDX1JPVEFUSU9OX1ZFQ1RPUiAiYW5kcm9pZC5zZW5zb3IuZ2VvbWFnbmV0aWNfcm90YXRpb25fdmVjdG9yIgotCi0vKgotICogU0VOU09SX1RZUEVfSEVBUlRfUkFURQotICogcmVwb3J0aW5nLW1vZGU6IG9uLWNoYW5nZQotICoKLSAqICBBIHNlbnNvciBvZiB0aGlzIHR5cGUgcmV0dXJucyB0aGUgY3VycmVudCBoZWFydCByYXRlLgotICogIFRoZSBldmVudHMgY29udGFpbiB0aGUgY3VycmVudCBoZWFydCByYXRlIGluIGJlYXRzIHBlciBtaW51dGUgKEJQTSkgYW5kIHRoZQotICogIHN0YXR1cyBvZiB0aGUgc2Vuc29yIGR1cmluZyB0aGUgbWVhc3VyZW1lbnQuIFNlZSBoZWFydF9yYXRlX2V2ZW50X3QgZm9yIG1vcmUKLSAqICBkZXRhaWxzLgotICoKLSAqICBCZWNhdXNlIHRoaXMgc2Vuc29yIGlzIG9uLWNoYW5nZSwgZXZlbnRzIG11c3QgYmUgZ2VuZXJhdGVkIHdoZW4gYW5kIG9ubHkKLSAqICB3aGVuIGhlYXJ0X3JhdGUuYnBtIG9yIGhlYXJ0X3JhdGUuc3RhdHVzIGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdAotICogIGV2ZW50LiBJbiBwYXJ0aWN1bGFyLCB1cG9uIHRoZSBmaXJzdCBhY3RpdmF0aW9uLCB1bmxlc3MgdGhlIGRldmljZSBpcyBrbm93bgotICogIHRvIG5vdCBiZSBvbiB0aGUgYm9keSwgdGhlIHN0YXR1cyBmaWVsZCBvZiB0aGUgZmlyc3QgZXZlbnQgbXVzdCBiZSBzZXQgdG8KLSAqICBTRU5TT1JfU1RBVFVTX1VOUkVMSUFCTEUuIFRoZSBldmVudCBzaG91bGQgYmUgZ2VuZXJhdGVkIG5vIGZhc3RlciB0aGFuIGV2ZXJ5Ci0gKiAgcGVyaW9kX25zIHBhc3NlZCB0byBzZXREZWxheSgpIG9yIHRvIGJhdGNoKCkuCi0gKiAgU2VlIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBvbi1jaGFuZ2UgcmVwb3J0aW5nIG1vZGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKgotICogIHNlbnNvcl90LnJlcXVpcmVkUGVybWlzc2lvbiBtdXN0IGJlIHNldCB0byBTRU5TT1JfUEVSTUlTU0lPTl9CT0RZX1NFTlNPUlMuCi0gKgotICogIEJvdGggd2FrZS11cCBhbmQgbm9uIHdha2UtdXAgdmVyc2lvbnMgYXJlIHVzZWZ1bC4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9IRUFSVF9SQVRFICAgICAgICAgICAgICAgICAgICAgICgyMSkKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0hFQVJUX1JBVEUgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IuaGVhcnRfcmF0ZSIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX1dBS0VfVVBfVElMVF9ERVRFQ1RPUgotICogcmVwb3J0aW5nLW1vZGU6IHNwZWNpYWwgKHNldERlbGF5IGhhcyBubyBpbXBhY3QpCi0gKgotICogQSBzZW5zb3Igb2YgdGhpcyB0eXBlIGdlbmVyYXRlcyBhbiBldmVudCBlYWNoIHRpbWUgYSB0aWx0IGV2ZW50IGlzIGRldGVjdGVkLiBBIHRpbHQgZXZlbnQKLSAqIHNob3VsZCBiZSBnZW5lcmF0ZWQgaWYgdGhlIGRpcmVjdGlvbiBvZiB0aGUgMi1zZWNvbmRzIHdpbmRvdyBhdmVyYWdlIGdyYXZpdHkgY2hhbmdlZCBieSBhdCBsZWFzdAotICogMzUgZGVncmVlcyBzaW5jZSB0aGUgYWN0aXZhdGlvbiBvciB0aGUgbGFzdCB0cmlnZ2VyIG9mIHRoZSBzZW5zb3IuCi0gKiAgICAgcmVmZXJlbmNlX2VzdGltYXRlZF9ncmF2aXR5ID0gYXZlcmFnZSBvZiBhY2NlbGVyb21ldGVyIG1lYXN1cmVtZW50cyBvdmVyIHRoZSBmaXJzdAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIHNlY29uZCBhZnRlciBhY3RpdmF0aW9uIG9yIHRoZSBlc3RpbWF0ZWQgZ3Jhdml0eSBhdCB0aGUgbGFzdAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyLgotICogICAgIGN1cnJlbnRfZXN0aW1hdGVkX2dyYXZpdHkgPSBhdmVyYWdlIG9mIGFjY2VsZXJvbWV0ZXIgbWVhc3VyZW1lbnRzIG92ZXIgdGhlIGxhc3QgMiBzZWNvbmRzLgotICogICAgIHRyaWdnZXIgd2hlbiBhbmdsZSAocmVmZXJlbmNlX2VzdGltYXRlZF9ncmF2aXR5LCBjdXJyZW50X2VzdGltYXRlZF9ncmF2aXR5KSA+IDM1IGRlZ3JlZXMKLSAqCi0gKiBMYXJnZSBhY2NlbGVyYXRpb25zIHdpdGhvdXQgYSBjaGFuZ2UgaW4gcGhvbmUgb3JpZW50YXRpb24gc2hvdWxkIG5vdCB0cmlnZ2VyIGEgdGlsdCBldmVudC4KLSAqIEZvciBleGFtcGxlLCBhIHNoYXJwIHR1cm4gb3Igc3Ryb25nIGFjY2VsZXJhdGlvbiB3aGlsZSBkcml2aW5nIGEgY2FyIHNob3VsZCBub3QgdHJpZ2dlciBhIHRpbHQKLSAqIGV2ZW50LCBldmVuIHRob3VnaCB0aGUgYW5nbGUgb2YgdGhlIGF2ZXJhZ2UgYWNjZWxlcmF0aW9uIG1pZ2h0IHZhcnkgYnkgbW9yZSB0aGFuIDM1IGRlZ3JlZXMuCi0gKgotICogVHlwaWNhbGx5LCB0aGlzIHNlbnNvciBpcyBpbXBsZW1lbnRlZCB3aXRoIHRoZSBoZWxwIG9mIG9ubHkgYW4gYWNjZWxlcm9tZXRlci4gT3RoZXIgc2Vuc29ycyBjYW4KLSAqIGJlIHVzZWQgYXMgd2VsbCBpZiB0aGV5IGRvIG5vdCBpbmNyZWFzZSB0aGUgcG93ZXIgY29uc3VtcHRpb24gc2lnbmlmaWNhbnRseS4gVGhpcyBpcyBhIGxvdyBwb3dlcgotICogc2Vuc29yIHRoYXQgc2hvdWxkIGFsbG93IHRoZSBBUCB0byBnbyBpbnRvIHN1c3BlbmQgbW9kZS4gRG8gbm90IGVtdWxhdGUgdGhpcyBzZW5zb3IgaW4gdGhlIEhBTC4KLSAqIExpa2Ugb3RoZXIgd2FrZSB1cCBzZW5zb3JzLCB0aGUgZHJpdmVyIGlzIGV4cGVjdGVkIHRvIGEgaG9sZCBhIHdha2VfbG9jayB3aXRoIGEgdGltZW91dCBvZiAyMDAgbXMKLSAqIHdoaWxlIHJlcG9ydGluZyB0aGlzIGV2ZW50LiBUaGUgb25seSBhbGxvd2VkIHJldHVybiB2YWx1ZSBpcyAxLjAuCi0gKgotICogSW1wbGVtZW50IG9ubHkgdGhlIHdha2UtdXAgdmVyc2lvbiBvZiB0aGlzIHNlbnNvci4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9USUxUX0RFVEVDVE9SICAgICAgICAgICAgICAgICAgICAgICgyMikKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX1RJTFRfREVURUNUT1IgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IudGlsdF9kZXRlY3RvciIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX1dBS0VfR0VTVFVSRQotICogcmVwb3J0aW5nLW1vZGU6IG9uZS1zaG90Ci0gKgotICogQSBzZW5zb3IgZW5hYmxpbmcgd2FraW5nIHVwIHRoZSBkZXZpY2UgYmFzZWQgb24gYSBkZXZpY2Ugc3BlY2lmaWMgbW90aW9uLgotICoKLSAqIFdoZW4gdGhpcyBzZW5zb3IgdHJpZ2dlcnMsIHRoZSBkZXZpY2UgYmVoYXZlcyBhcyBpZiB0aGUgcG93ZXIgYnV0dG9uIHdhcwotICogcHJlc3NlZCwgdHVybmluZyB0aGUgc2NyZWVuIG9uLiBUaGlzIGJlaGF2aW9yICh0dXJuaW5nIG9uIHRoZSBzY3JlZW4gd2hlbgotICogdGhpcyBzZW5zb3IgdHJpZ2dlcnMpIG1pZ2h0IGJlIGRlYWN0aXZhdGVkIGJ5IHRoZSB1c2VyIGluIHRoZSBkZXZpY2UKLSAqIHNldHRpbmdzLiBDaGFuZ2VzIGluIHNldHRpbmdzIGRvIG5vdCBpbXBhY3QgdGhlIGJlaGF2aW9yIG9mIHRoZSBzZW5zb3I6Ci0gKiBvbmx5IHdoZXRoZXIgdGhlIGZyYW1ld29yayB0dXJucyB0aGUgc2NyZWVuIG9uIHdoZW4gaXQgdHJpZ2dlcnMuCi0gKgotICogVGhlIGFjdHVhbCBnZXN0dXJlIHRvIGJlIGRldGVjdGVkIGlzIG5vdCBzcGVjaWZpZWQsIGFuZCBjYW4gYmUgY2hvc2VuIGJ5Ci0gKiB0aGUgbWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UuCi0gKiBUaGlzIHNlbnNvciBtdXN0IGJlIGxvdyBwb3dlciwgYXMgaXQgaXMgbGlrZWx5IHRvIGJlIGFjdGl2YXRlZCAyNC83LgotICogVGhlIG9ubHkgYWxsb3dlZCB2YWx1ZSB0byByZXR1cm4gaXMgMS4wLgotICoKLSAqIEltcGxlbWVudCBvbmx5IHRoZSB3YWtlLXVwIHZlcnNpb24gb2YgdGhpcyBzZW5zb3IuCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfV0FLRV9HRVNUVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyMykKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX1dBS0VfR0VTVFVSRSAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci53YWtlX2dlc3R1cmUiCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9HTEFOQ0VfR0VTVFVSRQotICogcmVwb3J0aW5nLW1vZGU6IG9uZS1zaG90Ci0gKgotICogQSBzZW5zb3IgZW5hYmxpbmcgYnJpZWZseSB0dXJuaW5nIHRoZSBzY3JlZW4gb24gdG8gZW5hYmxlIHRoZSB1c2VyIHRvCi0gKiBnbGFuY2UgY29udGVudCBvbiBzY3JlZW4gYmFzZWQgb24gYSBzcGVjaWZpYyBtb3Rpb24uICBUaGUgZGV2aWNlIHNob3VsZAotICogdHVybiB0aGUgc2NyZWVuIG9mZiBhZnRlciBhIGZldyBtb21lbnRzLgotICoKLSAqIFdoZW4gdGhpcyBzZW5zb3IgdHJpZ2dlcnMsIHRoZSBkZXZpY2UgdHVybnMgdGhlIHNjcmVlbiBvbiBtb21lbnRhcmlseQotICogdG8gYWxsb3cgdGhlIHVzZXIgdG8gZ2xhbmNlIG5vdGlmaWNhdGlvbnMgb3Igb3RoZXIgY29udGVudCB3aGlsZSB0aGUKLSAqIGRldmljZSByZW1haW5zIGxvY2tlZCBpbiBhIG5vbi1pbnRlcmFjdGl2ZSBzdGF0ZSAoZG96aW5nKS4gVGhpcyBiZWhhdmlvcgotICogKGJyaWVmbHkgdHVybmluZyBvbiB0aGUgc2NyZWVuIHdoZW4gdGhpcyBzZW5zb3IgdHJpZ2dlcnMpIG1pZ2h0IGJlIGRlYWN0aXZhdGVkCi0gKiBieSB0aGUgdXNlciBpbiB0aGUgZGV2aWNlIHNldHRpbmdzLiBDaGFuZ2VzIGluIHNldHRpbmdzIGRvIG5vdCBpbXBhY3QgdGhlCi0gKiBiZWhhdmlvciBvZiB0aGUgc2Vuc29yOiBvbmx5IHdoZXRoZXIgdGhlIGZyYW1ld29yayBicmllZmx5IHR1cm5zIHRoZSBzY3JlZW4gb24KLSAqIHdoZW4gaXQgdHJpZ2dlcnMuCi0gKgotICogVGhlIGFjdHVhbCBnZXN0dXJlIHRvIGJlIGRldGVjdGVkIGlzIG5vdCBzcGVjaWZpZWQsIGFuZCBjYW4gYmUgY2hvc2VuIGJ5Ci0gKiB0aGUgbWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UuCi0gKiBUaGlzIHNlbnNvciBtdXN0IGJlIGxvdyBwb3dlciwgYXMgaXQgaXMgbGlrZWx5IHRvIGJlIGFjdGl2YXRlZCAyNC83LgotICogVGhlIG9ubHkgYWxsb3dlZCB2YWx1ZSB0byByZXR1cm4gaXMgMS4wLgotICoKLSAqIEltcGxlbWVudCBvbmx5IHRoZSB3YWtlLXVwIHZlcnNpb24gb2YgdGhpcyBzZW5zb3IuCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfR0xBTkNFX0dFU1RVUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyNCkKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0dMQU5DRV9HRVNUVVJFICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5nbGFuY2VfZ2VzdHVyZSIKLQotLyoqCi0gKiBTRU5TT1JfVFlQRV9QSUNLX1VQX0dFU1RVUkUKLSAqIHJlcG9ydGluZy1tb2RlOiBvbmUtc2hvdAotICoKLSAqIEEgc2Vuc29yIG9mIHRoaXMgdHlwZSB0cmlnZ2VycyB3aGVuIHRoZSBkZXZpY2UgaXMgcGlja2VkIHVwIHJlZ2FyZGxlc3Mgb2Ygd2hlcmV2ZXIgaXMgd2FzCi0gKiBiZWZvcmUgKGRlc2ssIHBvY2tldCwgYmFnKS4gVGhlIG9ubHkgYWxsb3dlZCByZXR1cm4gdmFsdWUgaXMgMS4wLgotICogVGhpcyBzZW5zb3IgZGUtYWN0aXZhdGVzIGl0c2VsZiBpbW1lZGlhdGVseSBhZnRlciBpdCB0cmlnZ2Vycy4KLSAqCi0gKiBJbXBsZW1lbnQgb25seSB0aGUgd2FrZS11cCB2ZXJzaW9uIG9mIHRoaXMgc2Vuc29yLgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX1BJQ0tfVVBfR0VTVFVSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMjUpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9QSUNLX1VQX0dFU1RVUkUgICAgICAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IucGlja191cF9nZXN0dXJlIgotCi0vKgotICogU0VOU09SX1RZUEVfV1JJU1RfVElMVF9HRVNUVVJFCi0gKiB0cmlnZ2VyLW1vZGU6IHNwZWNpYWwKLSAqIHdha2UtdXAgc2Vuc29yOiB5ZXMKLSAqCi0gKiBBIHNlbnNvciBvZiB0aGlzIHR5cGUgdHJpZ2dlcnMgYW4gZXZlbnQgZWFjaCB0aW1lIGEgdGlsdCBvZiB0aGUgd3Jpc3Qtd29ybgotICogZGV2aWNlIGlzIGRldGVjdGVkLgotICoKLSAqIFRoaXMgc2Vuc29yIG11c3QgYmUgbG93IHBvd2VyLCBhcyBpdCBpcyBsaWtlbHkgdG8gYmUgYWN0aXZhdGVkIDI0LzcuCi0gKiBUaGUgb25seSBhbGxvd2VkIHZhbHVlIHRvIHJldHVybiBpcyAxLjAuCi0gKgotICogSW1wbGVtZW50IG9ubHkgdGhlIHdha2UtdXAgdmVyc2lvbiBvZiB0aGlzIHNlbnNvci4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9XUklTVF9USUxUX0dFU1RVUkUgICAgICAgICAgICAgICAgICAgICAgICAgKDI2KQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfV1JJU1RfVElMVF9HRVNUVVJFICAgICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLndyaXN0X3RpbHRfZ2VzdHVyZSIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX0RFVklDRV9PUklFTlRBVElPTgotICogcmVwb3J0aW5nLW1vZGU6IG9uLWNoYW5nZQotICoKLSAqIFRoZSBjdXJyZW50IG9yaWVudGF0aW9uIG9mIHRoZSBkZXZpY2UuIFRoZSB2YWx1ZSBzaG91bGQgYmUgcmVwb3J0ZWQgaW4gdGhlCi0gKiBmaXJzdCBlbGVtZW50IG9mIHRoZSAnZGF0YScgbWVtYmVyIHZhcmlhYmxlIGluIHNlbnNvcnNfZXZlbnRfdC4gVGhlIG9ubHkKLSAqIHZhbHVlcyB0aGF0IGNhbiBiZSByZXBvcnRlZCBhcmUgKHBsZWFzZSByZWZlciB0byBBbmRyb2lkIFNlbnNvciBDb29yZGluYXRlCi0gKiBTeXN0ZW0gdG8gdW5kZXJzdGFuZCB0aGUgWCBhbmQgWSBheGlzIGRpcmVjdGlvbiB3aXRoIHJlc3BlY3QgdG8gZGVmYXVsdAotICogb3JpZW50YXRpb24pOgotICogIC0gMDogZGV2aWNlIGlzIGluIGRlZmF1bHQgb3JpZW50YXRpb24gKFkgYXhpcyBpcyB2ZXJ0aWNhbCBhbmQgcG9pbnRzIHVwKQotICogIC0gMTogZGV2aWNlIGlzIHJvdGF0ZWQgOTAgZGVncmVlcyBjb3VudGVyLWNsb2Nrd2lzZSBmcm9tIGRlZmF1bHQKLSAqICAgICAgIG9yaWVudGF0aW9uIChYIGF4aXMgaXMgdmVydGljYWwgYW5kIHBvaW50cyB1cCkKLSAqICAtIDI6IGRldmljZSBpcyByb3RhdGVkIDE4MCBkZWdyZWVzIGZyb20gZGVmYXVsdCBvcmllbnRhdGlvbiAoWSBheGlzIGlzCi0gKiAgICAgICB2ZXJ0aWNhbCBhbmQgcG9pbnRzIGRvd24pCi0gKiAgLSAzOiBkZXZpY2UgaXMgcm90YXRlZCA5MCBkZWdyZWVzIGNsb2Nrd2lzZSBmcm9tIGRlZmF1bHQgb3JpZW50YXRpb24gKFggYXhpcwotICogICAgICAgaXMgdmVydGljYWwgYW5kIHBvaW50cyBkb3duKQotICoKLSAqIE1vdmluZyB0aGUgZGV2aWNlIHRvIGFuIG9yaWVudGF0aW9uIHdoZXJlIHRoZSBaIGF4aXMgaXMgdmVydGljYWwgKGVpdGhlciB1cAotICogb3IgZG93bikgc2hvdWxkIG5vdCBjYXVzZSBhIG5ldyBldmVudCB0byBiZSByZXBvcnRlZC4KLSAqCi0gKiBUbyBpbXByb3ZlIHRoZSB1c2VyIGV4cGVyaWVuY2Ugb2YgdGhpcyBzZW5zb3IsIGl0IGlzIHJlY29tbWVuZGVkIHRvIGltcGxlbWVudAotICogc29tZSBwaHlzaWNhbCAoaS5lLiwgcm90YXRpb24gYW5nbGUpIGFuZCB0ZW1wb3JhbCAoaS5lLiwgZGVsYXkpIGh5c3RlcmVzaXMuCi0gKiBJbiBvdGhlciB3b3JkcywgbWlub3Igb3IgdHJhbnNpZW50IHJvdGF0aW9ucyBzaG91bGQgbm90IGNhdXNlIGEgbmV3IGV2ZW50IHRvCi0gKiBiZSByZXBvcnRlZC4KLSAqCi0gKiBUaGlzIHNlbnNvciBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCB3aXRoIHRoZSBoZWxwIG9mIGFuIGFjY2VsZXJvbWV0ZXIuCi0gKiBUaGlzIGlzIGEgbG93IHBvd2VyIHNlbnNvciB0aGF0IHNob3VsZCByZWR1Y2UgdGhlIG51bWJlciBvZiBpbnRlcnJ1cHRzIG9mIHRoZQotICogQVAuIERvIG5vdCBlbXVsYXRlIHRoaXMgc2Vuc29yIGluIHRoZSBIQUwuCi0gKgotICogQm90aCB3YWtlLXVwIGFuZCBub24gd2FrZS11cCB2ZXJzaW9ucyBhcmUgdXNlZnVsLgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX0RFVklDRV9PUklFTlRBVElPTiAgICAgICAgICAgICAgICAgKDI3KQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfREVWSUNFX09SSUVOVEFUSU9OICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5kZXZpY2Vfb3JpZW50YXRpb24iCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9QT1NFXzZET0YKLSAqIHRyaWdnZXItbW9kZTogY29udGludW91cwotICoKLSAqIEEgc2Vuc29yIG9mIHRoaXMgdHlwZSByZXR1cm5zIHRoZSBwb3NlIG9mIHRoZSBkZXZpY2UuCi0gKiBQb3NlIG9mIHRoZSBkZXZpY2UgaXMgZGVmaW5lZCBhcyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIGRldmljZSBmcm9tIGEKLSAqIEVhcnRoIENlbnRlcmVkIEVhcnRoIEZpeGVkIGZyYW1lIGFuZCB0aGUgdHJhbnNsYXRpb24gZnJvbSBhbiBhcmJpdHJhcnkKLSAqIHBvaW50IGF0IHN1YnNjcmlwdGlvbi4KLSAqCi0gKiBUaGlzIHNlbnNvciBjYW4gYmUgaGlnaCBwb3dlci4gSXQgY2FuIHVzZSBhbnkgYW5kIGFsbCBvZiB0aGUgZm9sbG93aW5nCi0gKiAgICAgICAgICAgLiBBY2NlbGVyb21ldGVyCi0gKiAgICAgICAgICAgLiBHeXJvc2NvcGUKLSAqICAgICAgICAgICAuIENhbWVyYQotICogICAgICAgICAgIC4gRGVwdGggQ2FtZXJhCi0gKgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX1BPU0VfNkRPRiAgICAgICAgICAgICAgICAgICAgICAgICAoMjgpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9QT1NFXzZET0YgICAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IucG9zZV82ZG9mIgotCi0vKgotICogU0VOU09SX1RZUEVfU1RBVElPTkFSWV9ERVRFQ1QKLSAqIHRyaWdnZXIgbW9kZTogb25lIHNob3QKLSAqCi0gKiBBIHNlbnNvciBvZiB0aGlzIHR5cGUgcmV0dXJucyBhbiBldmVudCBpZiB0aGUgZGV2aWNlIGlzIHN0aWxsL3N0YXRpb25hcnkgZm9yCi0gKiBhIHdoaWxlLiBUaGUgcGVyaW9kIG9mIHRpbWUgdG8gbW9uaXRvciBmb3Igc3RhdGluYXJpdHkgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbgotICogNSBzZWNvbmRzLCBhbmQgbGVzcyB0aGFuIDEwIHNlY29uZHMuCi0gKgotICogU3RhdGlvbmFyaXR5IGhlcmUgcmVmZXJzIHRvIGFic29sdXRlIHN0YXRpb25hcml0eS4gZWc6IGRldmljZSBvbiBkZXNrLgotICoKLSAqIFRoZSBvbmx5IGFsbG93ZWQgdmFsdWUgdG8gcmV0dXJuIGlzIDEuMC4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9TVEFUSU9OQVJZX0RFVEVDVCAgICAgICAgICAgICAgICAgICAoMjkpCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9BQ0NFTEVST01FVEVSICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5hY2NlbGVyb21ldGVyIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfTUFHTkVUSUNfRklFTEQgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IubWFnbmV0aWNfZmllbGQiCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9PUklFTlRBVElPTiAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5vcmllbnRhdGlvbiIKKyNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0dZUk9TQ09QRSAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLmd5cm9zY29wZSIKKyNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0xJR0hUICAgICAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLmxpZ2h0IgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfUFJFU1NVUkUgICAgICAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IucHJlc3N1cmUiCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9URU1QRVJBVFVSRSAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci50ZW1wZXJhdHVyZSIKKyNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX1BST1hJTUlUWSAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLnByb3hpbWl0eSIKKyNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0dSQVZJVFkgICAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLmdyYXZpdHkiCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9MSU5FQVJfQUNDRUxFUkFUSU9OICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5saW5lYXJfYWNjZWxlcmF0aW9uIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfUk9UQVRJT05fVkVDVE9SICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3Iucm90YXRpb25fdmVjdG9yIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfUkVMQVRJVkVfSFVNSURJVFkgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IucmVsYXRpdmVfaHVtaWRpdHkiCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9BTUJJRU5UX1RFTVBFUkFUVVJFICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5hbWJpZW50X3RlbXBlcmF0dXJlIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfTUFHTkVUSUNfRklFTERfVU5DQUxJQlJBVEVEICAiYW5kcm9pZC5zZW5zb3IubWFnbmV0aWNfZmllbGRfdW5jYWxpYnJhdGVkIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfR0FNRV9ST1RBVElPTl9WRUNUT1IgICAgICAgICAiYW5kcm9pZC5zZW5zb3IuZ2FtZV9yb3RhdGlvbl92ZWN0b3IiCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9HWVJPU0NPUEVfVU5DQUxJQlJBVEVEICAgICAgICJhbmRyb2lkLnNlbnNvci5neXJvc2NvcGVfdW5jYWxpYnJhdGVkIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfU0lHTklGSUNBTlRfTU9USU9OICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3Iuc2lnbmlmaWNhbnRfbW90aW9uIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfU1RFUF9ERVRFQ1RPUiAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3Iuc3RlcF9kZXRlY3RvciIKKyNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX1NURVBfQ09VTlRFUiAgICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLnN0ZXBfY291bnRlciIKKyNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0dFT01BR05FVElDX1JPVEFUSU9OX1ZFQ1RPUiAgImFuZHJvaWQuc2Vuc29yLmdlb21hZ25ldGljX3JvdGF0aW9uX3ZlY3RvciIKKyNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0hFQVJUX1JBVEUgICAgICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLmhlYXJ0X3JhdGUiCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9USUxUX0RFVEVDVE9SICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci50aWx0X2RldGVjdG9yIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfV0FLRV9HRVNUVVJFICAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3Iud2FrZV9nZXN0dXJlIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfR0xBTkNFX0dFU1RVUkUgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IuZ2xhbmNlX2dlc3R1cmUiCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9QSUNLX1VQX0dFU1RVUkUgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5waWNrX3VwX2dlc3R1cmUiCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9XUklTVF9USUxUX0dFU1RVUkUgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci53cmlzdF90aWx0X2dlc3R1cmUiCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9ERVZJQ0VfT1JJRU5UQVRJT04gICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5kZXZpY2Vfb3JpZW50YXRpb24iCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9QT1NFXzZET0YgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5wb3NlXzZkb2YiCiAjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9TVEFUSU9OQVJZX0RFVEVDVCAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5zdGF0aW9uYXJ5X2RldGVjdCIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX01PVElPTl9ERVRFQ1QKLSAqIHRyaWdnZXIgbW9kZTogb25lIHNob3QKLSAqCi0gKiBBIHNlbnNvciBvZiB0aGlzIHR5cGUgcmV0dXJucyBhbiBldmVudCBpZiB0aGUgZGV2aWNlIGlzIG5vdCBzdGlsbCBmb3IKLSAqIGEgd2hpbGUuIFRoZSBwZXJpb2Qgb2YgdGltZSB0byBtb25pdG9yIGZvciBzdGF0aW5hcml0eSBzaG91bGQgYmUgZ3JlYXRlciB0aGFuCi0gKiA1IHNlY29uZHMsIGFuZCBsZXNzIHRoYW4gMTAgc2Vjb25kcy4KLSAqCi0gKiBNb3Rpb24gaGVyZSByZWZlcnMgdG8gYW55IG1lY2hhbmlzbSBpbiB3aGljaCB0aGUgZGV2aWNlIGlzIGNhdXNlcyB0byBiZQotICogbW92ZWQgaW4gaXRzIGluZXJ0aWFsIGZyYW1lLiBlZzogUGlja2luIHVwIHRoZSBkZXZpY2UgYW5kIHdhbGtpbmcgd2l0aCBpdAotICogdG8gYSBuZWFyYnkgcm9vbSBtYXkgdHJpZ2dlciBtb3Rpb24gd2hlcmV3YXMga2VlcGluZyB0aGUgZGV2aWNlIG9uIGEgdGFibGUKLSAqIG9uIGEgc21vb3RoIHRyYWluIG1vdmluZyBhdCBjb25zdGFudCB2ZWxvY2l0eSBtYXkgbm90IHRyaWdnZXIgbW90aW9uLgotICoKLSAqIFRoZSBvbmx5IGFsbG93ZWQgdmFsdWUgdG8gcmV0dXJuIGlzIDEuMC4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9NT1RJT05fREVURUNUICAgICAgICAgICAgICAgICAgICAgICAoMzApCiAjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9NT1RJT05fREVURUNUICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5tb3Rpb25fZGV0ZWN0IgotCi0vKgotICogU0VOU09SX1RZUEVfSEVBUlRfQkVBVAotICogdHJpZ2dlciBtb2RlOiBjb250aW51b3VzCi0gKgotICogQSBzZW5zb3Igb2YgdGhpcyB0eXBlIHJldHVybnMgYW4gZXZlbnQgZXZlcnl0aW1lIGEgaGVhciBiZWF0IHBlYWsgaXMKLSAqIGRldGVjdGVkLgotICoKLSAqIFBlYWsgaGVyZSBpZGVhbGx5IGNvcnJlc3BvbmRzIHRvIHRoZSBwb3NpdGl2ZSBwZWFrIGluIHRoZSBRUlMgY29tcGxleCBvZgotICogYW5kIEVDRyBzaWduYWwuCi0gKgotICogVGhlIHNlbnNvciBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgb3B0aW1pemVkIGZvciBsYXRlbmN5LiBBcyBhIGd1aWRlLCBhCi0gKiBsYXRlbmN5IG9mIHVwIHRvIDEwIHNlY29uZHMgaXMgYWNjZXB0YWJsZS4gSG93ZXZlciB0aGUgdGltZXN0YW1wIGF0dGFjaGVkCi0gKiB0byB0aGUgZXZlbnQgc2hvdWxkIGJlIGFjY3VyYXRlIGFuZCBzaG91bGQgY29ycmVzcG9uZCB0byB0aGUgdGltZSB0aGUgcGVhawotICogb2NjdXJlZC4KLSAqCi0gKiBUaGUgc2Vuc29yIGV2ZW50IGNvbnRhaW5zIGEgcGFyYW1ldGVyIGZvciB0aGUgY29uZmlkZW5jZSBpbiB0aGUgZGV0ZWN0aW9uCi0gKiBvZiB0aGUgcGVhayB3aGVyZSAwLjAgcmVwcmVzZW50IG5vIGluZm9ybWF0aW9uIGF0IGFsbCwgYW5kIDEuMCByZXByZXNlbnRzCi0gKiBjZXJ0YWludHkuCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfSEVBUlRfQkVBVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDMxKQogI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfSEVBUlRfQkVBVCAgICAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IuaGVhcnRfYmVhdCIKLQotLyoqCi0gKiBTRU5TT1JfVFlQRV9EWU5BTUlDX1NFTlNPUl9NRVRBCi0gKiB0cmlnZ2VyLW1vZGU6IHNwZWNpYWwKLSAqIHdha2UtdXAgc2Vuc29yOiB5ZXMKLSAqCi0gKiBBIHNlbnNvciBldmVudCBvZiB0aGlzIHR5cGUgaXMgcmVjZWl2ZWQgd2hlbiBhIGR5bmFtaWMgc2Vuc29yIGlzIGFkZGVkIHRvIG9yIHJlbW92ZWQgZnJvbSB0aGUKLSAqIHN5c3RlbS4gQXQgbW9zdCBvbmUgc2Vuc29yIG9mIHRoaXMgdHlwZSBjYW4gYmUgcHJlc2VudCBpbiBvbmUgc2Vuc29yIEhBTCBpbXBsZW1lbnRhdGlvbiBhbmQKLSAqIHByZXNlbmNlIG9mIGEgc2Vuc29yIG9mIHRoaXMgdHlwZSBpbiBzZW5zb3IgSEFMIGltcGxlbWVudGF0aW9uIGluZGljYXRlcyB0aGF0IHRoaXMgc2Vuc29yIEhBTAotICogc3VwcG9ydHMgZHluYW1pYyBzZW5zb3IgZmVhdHVyZS4gT3BlcmF0aW9ucywgc3VjaCBhcyBiYXRjaCwgYWN0aXZhdGUgYW5kIHNldERlbGF5LCB0byB0aGlzCi0gKiBzcGVjaWFsIHB1cnBvc2Ugc2Vuc29yIHNob3VsZCBiZSB0cmVhdGVkIGFzIG5vLW9wIGFuZCByZXR1cm4gc3VjY2Vzc2Z1bC4KLSAqCi0gKiBBIGR5bmFtaWMgc2Vuc29yIGNvbm5lY3Rpb24gaW5kaWNhdGVzIGNvbm5lY3Rpb24gb2YgYSBwaHlzaWNhbCBkZXZpY2Ugb3IgaW5zdGFudGlhdGlvbiBvZiBhCi0gKiB2aXJ0dWFsIHNlbnNvciBiYWNrZWQgYnkgYWxnb3JpdGhtOyBhbmQgYSBkeW5hbWljIHNlbnNvciBkaXNjb25uZWN0aW9uIGluZGljYXRlcyB0aGUgdGhlCi0gKiBvcHBvc2l0ZS4gQSBzZW5zb3IgZXZlbnQgb2YgU0VOU09SX1RZUEVfRFlOQU1JQ19TRU5TT1JfTUVUQSB0eXBlIHNob3VsZCBiZSBkZWxpdmVyZWQgcmVnYXJkbGVzcwotICogb2YgdGhlIGFjdGl2YXRpb24gc3RhdHVzIG9mIHRoZSBzZW5zb3IgaW4gdGhlIGV2ZW50IG9mIGR5bmFtaWMgc2Vuc29yIGNvbm5lY3Rpb24gYW5kCi0gKiBkaXNjb25uZWN0aW9uLiBJbiB0aGUgc2Vuc29yIGV2ZW50LCBiZXNpZGVzIHRoZSBjb21tb24gZGF0YSBlbnRyaWVzLCAiZHluYW1pY19zZW5zb3JfbWV0YSIsIHdoaWNoCi0gKiBpbmNsdWRlcyBmaWVsZHMgZm9yIGNvbm5lY3Rpb24gc3RhdHVzLCBoYW5kbGUgb2YgdGhlIHNlbnNvciBpbnZvbHZlZCwgcG9pbnRlciB0byBzZW5zb3JfdAotICogc3RydWN0dXJlIGFuZCBhIHV1aWQgZmllbGQsIHNob3VsZCBiZSBwb3B1bGF0ZWQuCi0gKgotICogQXQgYSBkeW5hbWljIHNlbnNvciBjb25uZWN0aW9uIGV2ZW50LCBmaWVsZHMgb2Ygc2Vuc29yX3Qgc3RydWN0dXJlIHJlZmVyZW5jZWQgYnkgYSBwb2ludGVyIGluCi0gKiBkeW5hbWljX3NlbnNvcl9tZXRhIHNob3VsZCBiZSBmaWxsZWQgYXMgaWYgaXQgd2FzIHJlZ3VsYXIgc2Vuc29ycy4gU2Vuc29yIEhBTCBpcyByZXNwb25zaWJsZSBmb3IKLSAqIHJlY292ZXJ5IG9mIG1lbW9yeSBpZiB0aGUgY29ycmVzcG9uZGluZyBkYXRhIGlzIGR5bmFtaWNpYWxseSBhbGxvY2F0ZWQuIEhvd2V2ZXIsIHRoZSB0aGUgcG9pbnRlcgotICogbXVzdCBiZSB2YWxpZCB1bnRpbCB0aGUgZmlyc3QgYWN0aXZhdGUgY2FsbCB0byB0aGUgc2Vuc29yIHJlcG9ydGVkIGluIHRoaXMgY29ubmVjdGlvbiBldmVudC4gQXQgYQotICogZHluYW1pYyBzZW5zb3IgZGlzY29ubmVjdGlvbiwgdGhlIHNlbnNvcl90IHBvaW50ZXIgc2hvdWxkIGJlIE5VTEwuCi0gKgotICogVGhlIHNlbnNvciBoYW5kbGUgYXNzaWduZWQgdG8gZHluYW1pYyBzZW5zb3JzIHNob3VsZCBuZXZlciBiZSB0aGUgc2FtZSBhcyB0aGF0IG9mIGFueSByZWd1bGFyCi0gKiBzdGF0aWMgc2Vuc29ycywgYW5kIHNob3VsZCBiZSB1bmlxdWUgdW50aWwgbmV4dCBib290LiBJbiBhbm90aGVyIHdvcmQsIGlmIGEgaGFuZGxlIGggaXMgdXNlZCBmb3IKLSAqIGEgZHluYW1pYyBzZW5zb3IgQSwgdGhhdCBzYW1lIG51bWJlciBjYW5ub3QgYmUgdXNlZCBmb3IgdGhlIHNhbWUgZHluYW1pYyBzZW5zb3IgQSBvciBhbm90aGVyCi0gKiBkeW5hbWljIHNlbnNvciBCIGV2ZW4gYWZ0ZXIgZGlzY29ubmVjdGlvbiBvZiBBIHVudGlsIHJlYm9vdC4KLSAqCi0gKiBUaGUgVVVJRCBmaWVsZCB3aWxsIGJlIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHRoZSBzZW5zb3IgaW4gYWRkaXRpb24gdG8gbmFtZSwgdmVuZG9yIGFuZCB2ZXJzaW9uCi0gKiBhbmQgdHlwZS4gRm9yIHBoeXNpY2FsIHNlbnNvcnMgb2YgdGhlIHNhbWUgbW9kZWwsIGFsbCBzZW5zb3JzIHdpbGwgaGF2ZSB0aGUgc2FtZSB2YWx1ZXMgaW4KLSAqIHNlbnNvcl90LCBidXQgdGhlIFVVSUQgc2hvdWxkIGJlIHVuaXF1ZSBhbmQgcGVyc2lzdGVudCBmb3IgZWFjaCBpbmRpdmlkdWFsIHVuaXQuIEFuIGFsbCB6ZXJvIFVVSUQKLSAqIGluZGljYXRlcyBpdCBpcyBub3QgcG9zc2libGUgdG8gZGlmZmVyZW50aWF0ZSBpbmRpdmlkdWFsIHNlbnNvciB1bml0LgotICoKLSAqIEl0IGlzIHJlY29tbWVuZGVkIHRvIGltcGxlbWVudCB0aGlzIHR5cGUgYXMgd2FrZSB1cCBzZW5zb3IuCi0gKgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX0RZTkFNSUNfU0VOU09SX01FVEEgICAgICAgICAgICAgICAgICAgICAgICAgKDMyKQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfRFlOQU1JQ19TRU5TT1JfTUVUQSAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5keW5hbWljX3NlbnNvcl9tZXRhIgotCi0vKioKLSAqIFNFTlNPUl9UWVBFX0FERElUSU9OQUxfSU5GTwotICogcmVwb3J0aW5nLW1vZGU6IE4vQQotICoKLSAqIFRoaXMgc2Vuc29yIHR5cGUgaXMgZm9yIGRlbGl2ZXJpbmcgYWRkaXRpb25hbCBzZW5zb3IgaW5mb3JtYXRpb24gYXNpZGUgZnJvbSBzZW5zb3IgZXZlbnQgZGF0YS4KLSAqIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gbWF5IGluY2x1ZGUgc2Vuc29yIGZyb250LWVuZCBncm91cCBkZWxheSwgaW50ZXJuYWwgY2FsaWJyYXRpb24gcGFyYW1ldGVycywKLSAqIG5vaXNlIGxldmVsIG1ldHJpY3MsIGRldmljZSBpbnRlcm5hbCB0ZW1wZXJhdHVyZSwgZXRjLgotICoKLSAqIFRoaXMgdHlwZSB3aWxsIG5ldmVyIGJpbmQgdG8gYSBzZW5zb3IuIEluIG90aGVyIHdvcmRzLCBubyBzZW5zb3IgaW4gdGhlIHNlbnNvciBsaXN0IHNob3VsZCBiZSBvZgotICogdGhlIHR5cGUgU0VOU09SX1RZUEVfQURESVRJT05BTF9JTkZPLiBJZiBhIHNlbnNvciBIQUwgc3VwcG9ydHMgc2Vuc29yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIGZlYXR1cmUsIGl0IHJlcG9ydHMgc2Vuc29yX2V2ZW50X3Qgd2l0aCAic2Vuc29yIiBmaWVsZCBzZXQgdG8gaGFuZGxlIG9mIHRoZSByZXBvcnRpbmcgc2Vuc29yIGFuZAotICogInR5cGUiIGZpZWxkIHNldCB0byBTRU5TT1JfVFlQRV9BRERJVElPTkFMX0lORk8uIERlbGl2ZXJ5IG9mIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZXZlbnRzIGlzCi0gKiB0cmlnZ2VyZWQgdW5kZXIgdHdvIGNvbmRpdGlvbnM6IGFuIGVuYWJsZSBhY3RpdmF0ZSgpIGNhbGwgb3IgYSBmbHVzaCgpIGNhbGwgdG8gdGhlIGNvcnJlc3BvbmRpbmcKLSAqIHNlbnNvci4KLSAqCi0gKiBBIHNpbmdsZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlcG9ydCBjb25zaXN0cyBvZiBtdWx0aXBsZSBmcmFtZXMuIFNlcXVlbmNlcyBvZiB0aGVzZSBmcmFtZXMgYXJlCi0gKiBvcmRlcmVkIHVzaW5nIHRpbWVzdGFtcHMsIHdoaWNoIG1lYW5zIHRoZSB0aW1lc3RhbXBzIG9mIHNlcXVlbnRpYWwgZnJhbWVzIGhhdmUgdG8gYmUgYXQgbGVhc3QgMQotICogbmFub3NlY29uZCBhcGFydCBmcm9tIGVhY2ggb3RoZXIuIEVhY2ggZnJhbWUgaXMgYSBzZW5zb3JfZXZlbnRfdCBkZWxpdmVyZWQgdGhyb3VnaCB0aGUgSEFMCi0gKiBpbnRlcmZhY2UsIHdpdGggcmVsYXRlZCBkYXRhIHN0b3JlZCBpbiB0aGUgImFkZGl0aW9uYWxfaW5mbyIgZmllbGQsIHdoaWNoIGlzIG9mIHR5cGUKLSAqIGFkZGl0aW9uYWxfaW5mb19ldmVudF90LiAgVGhlICJ0eXBlIiBmaWVsZCBvZiBhZGRpdGlvbmFsX2luZm9fZXZlbnRfdCBkZW5vdGVzIHRoZSBuYXR1cmUgb2YgdGhlCi0gKiBwYXlsb2FkIGRhdGEgKHNlZSBhZGRpdGlvbmFsX2luZm9fdHlwZV90KS4gIFRoZSAic2VyaWFsIiBmaWVsZCBpcyB1c2VkIHRvIGtlZXAgdGhlIHNlcXVlbmNlIG9mCi0gKiBwYXlsb2FkIGRhdGEgdGhhdCBzcGFucyBtdWx0aXBsZSBmcmFtZXMuIFRoZSBmaXJzdCBmcmFtZSBvZiB0aGUgZW50aXJlIHJlcG9ydCBpcyBhbHdheXMgb2YgdHlwZQotICogQUlORk9fQkVHSU4sIGFuZCB0aGUgbGFzdCBmcmFtZSBpcyBhbHdheXMgQUlORk9fRU5ELgotICoKLSAqIEFsbCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZyYW1lcyBoYXZlIHRvIGJlIGRlbGl2ZXJlZCBhZnRlciBmbHVzaCBjb21wbGV0ZSBldmVudCBpZiBmbHVzaCgpIHdhcwotICogdHJpZ2dlcmluZyB0aGUgcmVwb3J0LgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX0FERElUSU9OQUxfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgKDMzKQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfQURESVRJT05BTF9JTkZPICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5hZGRpdGlvbmFsX2luZm8iCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9EWU5BTUlDX1NFTlNPUl9NRVRBICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5keW5hbWljX3NlbnNvcl9tZXRhIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfQURESVRJT05BTF9JTkZPICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IuYWRkaXRpb25hbF9pbmZvIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfTE9XX0xBVEVOQ1lfT0ZGQk9EWV9ERVRFQ1QgICAiYW5kcm9pZC5zZW5zb3IubG93X2xhdGVuY3lfb2ZmYm9keV9kZXRlY3QiCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9BQ0NFTEVST01FVEVSX1VOQ0FMSUJSQVRFRCAgICJhbmRyb2lkLnNlbnNvci5hY2NlbGVyb21ldGVyX3VuY2FsaWJyYXRlZCIKIAogLyoqCiAgKiBWYWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGFjY2VsZXJvbWV0ZXIgaW4gdmFyaW91cyBsb2NhdGlvbnMgaW4gdGhlIHVuaXZlcnNlLgpAQCAtODc5LDE2ICsxOTksNiBAQAogLyoqIE1pbmltdW0gbWFnbmV0aWMgZmllbGQgb24gRWFydGgncyBzdXJmYWNlICovCiAjZGVmaW5lIE1BR05FVElDX0ZJRUxEX0VBUlRIX01JTiAgICAoMzAuMGYpCiAKLS8qKgotICogUG9zc2libGUgdmFsdWVzIG9mIHRoZSBzdGF0dXMgZmllbGQgb2Ygc2Vuc29yIGV2ZW50cy4KLSAqLwotI2RlZmluZSBTRU5TT1JfU1RBVFVTX05PX0NPTlRBQ1QgICAgICAgIC0xCi0jZGVmaW5lIFNFTlNPUl9TVEFUVVNfVU5SRUxJQUJMRSAgICAgICAgMAotI2RlZmluZSBTRU5TT1JfU1RBVFVTX0FDQ1VSQUNZX0xPVyAgICAgIDEKLSNkZWZpbmUgU0VOU09SX1NUQVRVU19BQ0NVUkFDWV9NRURJVU0gICAyCi0jZGVmaW5lIFNFTlNPUl9TVEFUVVNfQUNDVVJBQ1lfSElHSCAgICAgMwotCi0KIHN0cnVjdCBzZW5zb3JfdDsKIAogLyoqCkBAIC05MTMsNyArMjIzLDcgQEAKIH0gc2Vuc29yc192ZWNfdDsKIAogLyoqCi0gKiB1bmNhbGlicmF0ZWQgZ3lyb3Njb3BlIGFuZCBtYWduZXRvbWV0ZXIgZXZlbnQgZGF0YQorICogdW5jYWxpYnJhdGVkIGFjY2VsZXJvbWV0ZXIsIGd5cm9zY29wZSBhbmQgbWFnbmV0b21ldGVyIGV2ZW50IGRhdGEKICAqLwogdHlwZWRlZiBzdHJ1Y3QgewogICB1bmlvbiB7CkBAIC05ODAsNzUgKzI5MCw2IEBACiAgICAgfTsKIH0gYWRkaXRpb25hbF9pbmZvX2V2ZW50X3Q7CiAKLXR5cGVkZWYgZW51bSBhZGRpdGlvbmFsX2luZm9fdHlwZSB7Ci0gICAgLy8KLSAgICBBSU5GT19CRUdJTiA9IDB4MCwgICAgICAgICAgICAgICAgICAgICAgLy8gTWFya3MgdGhlIGJlZ2lubmluZyBvZiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZyYW1lcwotICAgIEFJTkZPX0VORCAgID0gMHgxLCAgICAgICAgICAgICAgICAgICAgICAvLyBNYXJrcyB0aGUgZW5kIG9mIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZnJhbWVzCi0gICAgLy8gQmFzaWMgaW5mb3JtYXRpb24KLSAgICBBSU5GT19VTlRSQUNLRURfREVMQVkgPSAgMHgxMDAwMCwgICAgICAgLy8gRXN0aW1hdGlvbiBvZiB0aGUgZGVsYXkgdGhhdCBpcyBub3QgdHJhY2tlZCBieSBzZW5zb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGltZXN0YW1wcy4gVGhpcyBpbmNsdWRlcyBkZWxheSBpbnRyb2R1Y2VkIGJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbnNvciBmcm9udC1lbmQgZmlsdGVyaW5nLCBkYXRhIHRyYW5zcG9ydCwgZXRjLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmbG9hdFsyXTogZGVsYXkgaW4gc2Vjb25kcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGVzdGltYXRlZCB2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotICAgIEFJTkZPX0lOVEVSTkFMX1RFTVBFUkFUVVJFLCAgICAgICAgICAgICAvLyBmbG9hdDogQ2Vsc2l1cyB0ZW1wZXJhdHVyZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLSAgICBBSU5GT19WRUMzX0NBTElCUkFUSU9OLCAgICAgICAgICAgICAgICAgLy8gRmlyc3QgdGhyZWUgcm93cyBvZiBhIGhvbW9nZW5lb3VzIG1hdHJpeCwgd2hpY2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVwcmVzZW50cyBjYWxpYnJhdGlvbiB0byBhIHRocmVlLWVsZW1lbnQgdmVjdG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJhdyBzZW5zb3IgcmVhZGluZy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXRbMTJdOiAzeDQgbWF0cml4IGluIHJvdyBtYWpvciBvcmRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotICAgIEFJTkZPX1NFTlNPUl9QTEFDRU1FTlQsICAgICAgICAgICAgICAgICAvLyBMb2NhdGlvbiBhbmQgb3JpZW50YXRpb24gb2Ygc2Vuc29yIGVsZW1lbnQgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRldmljZSBmcmFtZTogb3JpZ2luIGlzIHRoZSBnZW9tZXRyaWMgY2VudGVyIG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb2JpbGUgZGV2aWNlIHNjcmVlbiBzdXJmYWNlOyB0aGUgYXhpcyBkZWZpbml0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcnJlc3BvbmRzIHRvIEFuZHJvaWQgc2Vuc29yIGRlZmluaXRpb25zLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmbG9hdFsxMl06IDN4NCBtYXRyaXggaW4gcm93IG1ham9yIG9yZGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgQUlORk9fU0FNUExJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0WzJdOiByYXcgc2FtcGxlIHBlcmlvZCBpbiBzZWNvbmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHNhbXBsaW5nIHBlcmlvZAotCi0gICAgLy8gU2FtcGxpbmcgY2hhbm5lbCBtb2RlbGluZyBpbmZvcm1hdGlvbgotICAgIEFJTkZPX0NIQU5ORUxfTk9JU0UgPSAweDIwMDAwLCAgICAgICAgICAvLyBpbnQzMl90OiBub2lzZSB0eXBlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0W25dOiBwYXJhbWV0ZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgQUlORk9fQ0hBTk5FTF9TQU1QTEVSLCAgICAgICAgICAgICAgICAgIC8vIGZsb2F0WzNdOiBzYW1wbGUgcGVyaW9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICBzdGFuZGFyZCBkZXZpYXRpb24gb2Ygc2FtcGxlIHBlcmlvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgIHF1YW50aXphdGlvbiB1bml0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgQUlORk9fQ0hBTk5FTF9GSUxURVIsICAgICAgICAgICAgICAgICAgIC8vIFJlcHJlc2VudHMgYSBmaWx0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgXHN1bV9qIGFfaiB5W24tal0gPT0gXHN1bV9pIGJfaSB4W24taV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50MzJfdFszXTogbnVtYmVyIG9mIGZlZWRmb3J3YXJkIGNvZWZmaWNpZW50cywgTSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgbnVtYmVyIG9mIGZlZWRiYWNrIGNvZWZmaWNpZW50cywgTiwgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgRklSIGZpbHRlciwgTj0xLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBiaXQgbWFzayB0aGF0IHJlcHJlc2VudHMgd2hpY2ggZWxlbWVudCB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIHdoaWNoIHRoZSBmaWx0ZXIgaXMgYXBwbGllZCwgYml0IDAgPT0gMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIG1lYW5zIHRoaXMgZmlsdGVyIGFwcGxpZXMgdG8gdmVjdG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgZWxlbWVudCAwLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmbG9hdFtNK05dOiBmaWx0ZXIgY29lZmZpY2llbnRzIChiMCwgYjEsIC4uLiwgQk0tMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIHRoZW4gKGEwLCBhMSwgLi4uLCBhTi0xKSwgYTAgaXMgYWx3YXlzIDEuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIE11bHRpcGxlIGZyYW1lcyBtYXkgYmUgbmVlZGVkIGZvciBoaWdoZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgbnVtYmVyIG9mIHRhcHMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgQUlORk9fQ0hBTk5FTF9MSU5FQVJfVFJBTlNGT1JNLCAgICAgICAgIC8vIGludDMyX3RbMl06IHNpemUgaW4gKHJvdywgY29sdW1uKSAuLi4gMXN0IGZyYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0W25dOiBtYXRyaXggZWxlbWVudCB2YWx1ZXMgaW4gcm93IG1ham9yIG9yZGVyLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotICAgIEFJTkZPX0NIQU5ORUxfTk9OTElORUFSX01BUCwgICAgICAgICAgICAvLyBpbnQzMl90WzJdOiBleHRyYXBvbGF0ZSBtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgaW50ZXJwb2xhdGUgbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0W25dOiBtYXBwaW5nIGtleSBwb2ludHMgaW4gcGFpcnMsIChpbiwgb3V0KS4uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgKG1heSBiZSB1c2VkIHRvIG1vZGVsIHNhdHVyYXRpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgQUlORk9fQ0hBTk5FTF9SRVNBTVBMRVIsICAgICAgICAgICAgICAgIC8vIGludDMyX3Q6ICByZXNhbXBsZSBtZXRob2QgKDAtdGggb3JkZXIsIDFzdCBvcmRlci4uLikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXRbMV06IHJlc2FtcGxlIHJhdGlvICh1cHNhbXBsaW5nIGlmIDwgMS4wOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgZG93bnNhbXBsaW5nIGlmID4gMS4wKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLQotICAgIC8vIEN1c3RvbSBpbmZvcm1hdGlvbgotICAgIEFJTkZPX0NVU1RPTV9TVEFSVCA9ICAgIDB4MTAwMDAwMDAsICAgICAvLwotICAgIC8vIERlYnVnZ2luZwotICAgIEFJTkZPX0RFQlVHR0lOR19TVEFSVCA9IDB4NDAwMDAwMDAsICAgICAvLwotfSBhZGRpdGlvbmFsX2luZm9fdHlwZV90OwotCiAvKioKICAqIFVuaW9uIG9mIHRoZSB2YXJpb3VzIHR5cGVzIG9mIHNlbnNvciBkYXRhCiAgKiB0aGF0IGNhbiBiZSByZXR1cm5lZC4KQEAgLTExMDYsNiArMzQ3LDkgQEAKICAgICAgICAgICAgIC8qIHVuY2FsaWJyYXRlZCBtYWduZXRvbWV0ZXIgdmFsdWVzIGFyZSBpbiBtaWNyby1UZXNsYXMgKi8KICAgICAgICAgICAgIHVuY2FsaWJyYXRlZF9ldmVudF90IHVuY2FsaWJyYXRlZF9tYWduZXRpYzsKIAorICAgICAgICAgICAgLyogdW5jYWxpYnJhdGVkIGFjY2VsZXJvbWV0ZXIgdmFsdWVzIGFyZSBpbiAgbWV0ZXIgcGVyIHNlY29uZCBwZXIgc2Vjb25kIChtL3NeMikgKi8KKyAgICAgICAgICAgIHVuY2FsaWJyYXRlZF9ldmVudF90IHVuY2FsaWJyYXRlZF9hY2NlbGVyb21ldGVyOworCiAgICAgICAgICAgICAvKiBoZWFydCByYXRlIGRhdGEgY29udGFpbmluZyB2YWx1ZSBpbiBicG0gYW5kIHN0YXR1cyAqLwogICAgICAgICAgICAgaGVhcnRfcmF0ZV9ldmVudF90IGhlYXJ0X3JhdGU7CiAKQEAgLTEyMjgsMTMgKzQ3MiwxNCBAQAogICAgICAqLwogICAgIHVpbnQzMl90ICAgICAgICBmaWZvTWF4RXZlbnRDb3VudDsKIAotICAgIC8qIHR5cGUgb2YgdGhpcyBzZW5zb3IgYXMgYSBzdHJpbmcuIFNldCB0byBjb3JyZXNwb25kaW5nCi0gICAgICogU0VOU09SX1NUUklOR19UWVBFXyouCi0gICAgICogV2hlbiBkZWZpbmluZyBhbiBPRU0gc3BlY2lmaWMgc2Vuc29yIG9yIHNlbnNvciBtYW51ZmFjdHVyZXIgc3BlY2lmaWMKLSAgICAgKiBzZW5zb3IsIHVzZSB5b3VyIHJlc2VydmUgZG9tYWluIG5hbWUgYXMgYSBwcmVmaXguCi0gICAgICogZXg6IGNvbS5nb29nbGUuZ2xhc3Mub25oZWFkZGV0ZWN0b3IKLSAgICAgKiBGb3Igc2Vuc29ycyBvZiBrbm93biB0eXBlLCB0aGUgYW5kcm9pZCBmcmFtZXdvcmsgbWlnaHQgb3ZlcndyaXRlIHRoaXMKLSAgICAgKiBzdHJpbmcgYXV0b21hdGljYWxseS4KKyAgICAvKiB0eXBlIG9mIHRoaXMgc2Vuc29yIGFzIGEgc3RyaW5nLgorICAgICAqCisgICAgICogSWYgdHlwZSBpcyBPRU0gc3BlY2lmaWMgb3Igc2Vuc29yIG1hbnVmYWN0dXJlciBzcGVjaWZpYyB0eXBlCisgICAgICogKD49U0VOU09SX1RZUEVfREVWSUNFX1BSSVZBVEVfQkFTRSksIHRoaXMgc3RyaW5nIG11c3QgYmUgZGVmaW5lZCB3aXRoIHJlc2VydmVkIGRvbWFpbiBvZgorICAgICAqIHZlbmRvci9PRU0gYXMgYSBwcmVmaXgsIGUuZy4gY29tLmdvb2dsZS5nbGFzcy5vbmhlYWRkZXRlY3RvcgorICAgICAqCisgICAgICogRm9yIHNlbnNvcnMgb2YgQW5kcm9pZCBkZWZpbmVkIHR5cGVzLCBBbmRyb2lkIGZyYW1ld29yayB3aWxsIG92ZXJyaWRlIHRoaXMgdmFsdWUuIEl0IGlzIG9rIHRvCisgICAgICogbGVhdmUgaXQgcG9pbnRpbmcgdG8gYW4gZW1wdHkgc3RyaW5nLgogICAgICAqLwogICAgIGNvbnN0IGNoYXIqICAgIHN0cmluZ1R5cGU7CiAKQEAgLTEyODAsNiArNTI1LDIzIEBACiAgICAgdm9pZCogICAgICAgICAgIHJlc2VydmVkWzJdOwogfTsKIAorLyoqCisgKiBTaGFyZWQgbWVtb3J5IGluZm9ybWF0aW9uIGZvciBhIGRpcmVjdCBjaGFubmVsCisgKi8KK3N0cnVjdCBzZW5zb3JzX2RpcmVjdF9tZW1fdCB7CisgICAgaW50IHR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW51bSBTRU5TT1JfRElSRUNUX01FTV8uLi4KKyAgICBpbnQgZm9ybWF0OyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbnVtIFNFTlNPUl9ESVJFQ1RfRk1UXy4uLgorICAgIHNpemVfdCBzaXplOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpemUgb2YgdGhlIG1lbW9yeSByZWdpb24sIGluIGJ5dGVzCisgICAgY29uc3Qgc3RydWN0IG5hdGl2ZV9oYW5kbGUgKmhhbmRsZTsgLy8gc2hhcmVkIG1lbW9yeSBoYW5kbGUsIHdoaWNoIGlzIGludGVycHJldGVkIGRpZmZlcmVudGx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVwZW5kaW5nIG9uIHR5cGUKK307CisKKy8qKgorICogRGlyZWN0IGNoYW5uZWwgcmVwb3J0IGNvbmZpZ3VyYXRpb24KKyAqLworc3RydWN0IHNlbnNvcnNfZGlyZWN0X2NmZ190IHsKKyAgICBpbnQgcmF0ZV9sZXZlbDsgICAgICAgICAgICAgLy8gZW51bSBTRU5TT1JfRElSRUNUX1JBVEVfLi4uCit9OwogCiAvKgogICogc2Vuc29yc19wb2xsX2RldmljZV90IGlzIHVzZWQgd2l0aCBTRU5TT1JTX0RFVklDRV9BUElfVkVSU0lPTl8wXzEKQEAgLTEzMzYsNyArNTk4LDEzIEBACiAgICAgICAgICAgICAgICAgICAgIGludCBzZW5zb3JfaGFuZGxlLCBpbnQ2NF90IHNhbXBsaW5nX3BlcmlvZF9ucyk7CiAKICAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBzZW5zb3IgZGF0YS4KKyAgICAgICAgICAgICAqIFdyaXRlIGFuIGFycmF5IG9mIHNlbnNvcl9ldmVudF90IHRvIGRhdGEuIFRoZSBzaXplIG9mIHRoZQorICAgICAgICAgICAgICogYXZhaWxhYmxlIGJ1ZmZlciBpcyBzcGVjaWZpZWQgYnkgY291bnQuIFJldHVybnMgbnVtYmVyIG9mCisgICAgICAgICAgICAgKiB2YWxpZCBzZW5zb3JfZXZlbnRfdC4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBibG9jayBpZiB0aGVyZSBpcyBubyBzZW5zb3IgZXZlbnQKKyAgICAgICAgICAgICAqIGF2YWlsYWJsZSB3aGVuIGJlaW5nIGNhbGxlZC4gVGh1cywgcmV0dXJuIHZhbHVlIHNob3VsZCBhbHdheXMgYmUKKyAgICAgICAgICAgICAqIHBvc2l0aXZlLgogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBpbnQgKCpwb2xsKShzdHJ1Y3Qgc2Vuc29yc19wb2xsX2RldmljZV90ICpkZXYsCiAgICAgICAgICAgICAgICAgICAgIHNlbnNvcnNfZXZlbnRfdCogZGF0YSwgaW50IGNvdW50KTsKQEAgLTEzODEsNyArNjQ5LDYxIEBACiAgICAgICovCiAgICAgaW50ICgqaW5qZWN0X3NlbnNvcl9kYXRhKShzdHJ1Y3Qgc2Vuc29yc19wb2xsX2RldmljZV8xICpkZXYsIGNvbnN0IHNlbnNvcnNfZXZlbnRfdCAqZGF0YSk7CiAKLSAgICB2b2lkICgqcmVzZXJ2ZWRfcHJvY3NbN10pKHZvaWQpOworICAgIC8qCisgICAgICogUmVnaXN0ZXIvdW5yZWdpc3RlciBkaXJlY3QgcmVwb3J0IGNoYW5uZWwuCisgICAgICoKKyAgICAgKiBBIEhBTCBkZWNsYXJlcyBzdXBwb3J0IGZvciBkaXJlY3QgcmVwb3J0IGJ5IHNldHRpbmcgbm9uLU5VTEwgdmFsdWVzIGZvciBib3RoCisgICAgICogcmVnaXN0ZXJfZGlyZWN0X2NoYW5uZWwgYW5kIGNvbmZpZ19kaXJlY3RfcmVwb3J0LgorICAgICAqCisgICAgICogVGhpcyBmdW5jdGlvbiBoYXMgdHdvIG9wZXJhdGlvbiBtb2RlczoKKyAgICAgKgorICAgICAqIFJlZ2lzdGVyOiBtZW0gIT0gTlVMTCwgcmVnaXN0ZXIgYSBjaGFubmVsIHVzaW5nIHN1cHBsaWVkIHNoYXJlZCBtZW1vcnkgaW5mb3JtYXRpb24uIEJ5IHRoZQorICAgICAqIHRpbWUgdGhpcyBmdW5jdGlvbiByZXR1cm5zLCBzZW5zb3JzIG11c3QgZmluaXNoIGluaXRpYWxpemluZyBzaGFyZWQgbWVtb3J5IGNvbnRlbnQKKyAgICAgKiAoZm9ybWF0IGRlcGVuZGVudCwgc2VlIFNFTlNPUl9ESVJFQ1RfRk1UXyopLgorICAgICAqICAgICAgUGFyYW1ldGVyczoKKyAgICAgKiAgICAgICAgICBtZW0gICAgICAgICAgICAgcG9pbnRzIHRvIGEgdmFsaWQgc3RydWN0IHNlbnNvcnNfZGlyZWN0X21lbV90LgorICAgICAqICAgICAgICAgIGNoYW5uZWxfaGFuZGxlICBpcyBpZ25vcmVkLgorICAgICAqICAgICAgUmV0dXJuIHZhbHVlOgorICAgICAqICAgICAgICAgIEEgaGFuZGxlIG9mIGNoYW5uZWwgKD4wLCA8SU5UMzJfTUFYKSB3aGVuIHN1Y2Nlc3MsIHdoaWNoIGxhdGVyIGNhbiBiZSByZWZlcnJlZCBpbgorICAgICAqICAgICAgICAgIHVucmVnaXN0ZXIgb3IgY29uZmlnX2RpcmVjdF9yZXBvcnQgY2FsbCwgb3IgZXJyb3IgY29kZSAoPDApIHdoZW4gZmFpbGVkCisgICAgICogVW5yZWdpc3RlcjogbWVtID09IE5VTEwsIHVucmVnaXN0ZXIgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgY2hhbm5lbC4KKyAgICAgKiAgICAgIFBhcmFtZXRlcnM6CisgICAgICogICAgICAgICAgbWVtICAgICAgICAgICAgIHNldCB0byBOVUxMCisgICAgICogICAgICAgICAgY2hhbm5lbF9oYW5kbGUgIGNvbnRhaW5zIGhhbmRsZSBvZiBjaGFubmVsIHRvIGJlIHVucmVnaXN0ZXJlZAorICAgICAqICAgICAgUmV0dXJuIHZhbHVlOgorICAgICAqICAgICAgICAgIDAsIGV2ZW4gaWYgdGhlIGNoYW5uZWxfaGFuZGxlIGlzIGludmFsaWQsIGluIHdoaWNoIGNhc2UgaXQgd2lsbCBiZSBhIG5vLW9wLgorICAgICAqLworICAgIGludCAoKnJlZ2lzdGVyX2RpcmVjdF9jaGFubmVsKShzdHJ1Y3Qgc2Vuc29yc19wb2xsX2RldmljZV8xICpkZXYsCisgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc2Vuc29yc19kaXJlY3RfbWVtX3QqIG1lbSwgaW50IGNoYW5uZWxfaGFuZGxlKTsKKworICAgIC8qCisgICAgICogQ29uZmlndXJlIGRpcmVjdCBzZW5zb3IgZXZlbnQgcmVwb3J0IGluIGRpcmVjdCBjaGFubmVsLgorICAgICAqCisgICAgICogU3RhcnQsIG1vZGlmeSByYXRlIG9yIHN0b3AgZGlyZWN0IHJlcG9ydCBvZiBhIHNlbnNvciBpbiBhIGNlcnRhaW4gZGlyZWN0IGNoYW5uZWwuIEEgc3BlY2lhbAorICAgICAqIGNhc2UgaXMgc2V0dGluZyBzZW5zb3IgaGFuZGxlIC0xIHRvIHN0b3AgbWVhbnMgdG8gc3RvcCBhbGwgYWN0aXZlIHNlbnNvciByZXBvcnQgb24gdGhlCisgICAgICogY2hhbm5lbCBzcGVjaWZpZWQuCisgICAgICoKKyAgICAgKiBBIEhBTCBkZWNsYXJlcyBzdXBwb3J0IGZvciBkaXJlY3QgcmVwb3J0IGJ5IHNldHRpbmcgbm9uLU5VTEwgdmFsdWVzIGZvciBib3RoCisgICAgICogcmVnaXN0ZXJfZGlyZWN0X2NoYW5uZWwgYW5kIGNvbmZpZ19kaXJlY3RfcmVwb3J0LgorICAgICAqCisgICAgICogUGFyYW1ldGVyczoKKyAgICAgKiAgICAgIHNlbnNvcl9oYW5kbGUgICBzZW5zb3IgdG8gYmUgY29uZmlndXJlZC4gVGhlIHNlbnNvciBoYXMgdG8gc3VwcG9ydCBkaXJlY3QgcmVwb3J0CisgICAgICogICAgICAgICAgICAgICAgICAgICAgbW9kZSBieSBzZXR0aW5nIGZsYWdzIG9mIHNlbnNvcl90LiBBbHNvLCBkaXJlY3QgcmVwb3J0IG1vZGUgaXMgb25seQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgZm9yIGNvbnRpbnVvdXMgcmVwb3J0aW5nIG1vZGUgc2Vuc29ycy4KKyAgICAgKiAgICAgIGNoYW5uZWxfaGFuZGxlICBjaGFubmVsIGhhbmRsZSB0byBiZSBjb25maWd1cmVkLgorICAgICAqICAgICAgY29uZmlnICAgICAgICAgIGRpcmVjdCByZXBvcnQgcGFyYW1ldGVycywgc2VlIHNlbnNvcl9kaXJlY3RfY2ZnX3QuCisgICAgICogUmV0dXJuIHZhbHVlOgorICAgICAqICAgICAgLSB3aGVuIHNlbnNvciBpcyBzdGFydGVkIG9yIHNlbnNvciByYXRlIGxldmVsIGlzIGNoYW5nZWQ6IHJldHVybiBwb3NpdGl2ZSBpZGVudGlmaWVyIG9mCisgICAgICogICAgICAgIHNlbnNvciBpbiBzcGVjaWZpZWQgY2hhbm5lbCBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgcmV0dXJuIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgICAgICogICAgICAtIHdoZW4gc2Vuc29yIGlzIHN0b3BwZWQ6IHJldHVybiAwIGZvciBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgZm9yIGZhaWx1cmUuCisgICAgICovCisgICAgaW50ICgqY29uZmlnX2RpcmVjdF9yZXBvcnQpKHN0cnVjdCBzZW5zb3JzX3BvbGxfZGV2aWNlXzEgKmRldiwKKyAgICAgICAgICAgIGludCBzZW5zb3JfaGFuZGxlLCBpbnQgY2hhbm5lbF9oYW5kbGUsIGNvbnN0IHN0cnVjdCBzZW5zb3JzX2RpcmVjdF9jZmdfdCAqY29uZmlnKTsKKworICAgIC8qCisgICAgICogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UsIG11c3QgYmUgemVyby4KKyAgICAgKi8KKyAgICB2b2lkICgqcmVzZXJ2ZWRfcHJvY3NbNV0pKHZvaWQpOwogCiB9IHNlbnNvcnNfcG9sbF9kZXZpY2VfMV90OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2hhcmR3YXJlL3ZlaGljbGUuaCBiL2luY2x1ZGUvaGFyZHdhcmUvdmVoaWNsZS5oCmluZGV4IGE1OTBmYmQuLjhiMjhlN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaGFyZHdhcmUvdmVoaWNsZS5oCisrKyBiL2luY2x1ZGUvaGFyZHdhcmUvdmVoaWNsZS5oCkBAIC04Myw3ICs4Myw2IEBACiAKIC8qKgogICogSW52YWxpZCBwcm9wZXJ0eSB2YWx1ZSB1c2VkIGZvciBhcmd1bWVudCB3aGVyZSBpbnZhbGlkIHByb3BlcnR5IGdpdmVzIGRpZmZlcmVudCByZXN1bHQuCi0gKiBAcmFuZ2Vfc3RhcnQKICAqLwogI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0lOVkFMSUQgKDB4MCkKIApAQCAtMTIyLDcgKzEyMSw3IEBACiAgKiBAZGF0YV9tZW1iZXIgaW5mb19tb2RlbF95ZWFyCiAgKiBAdW5pdCBWRUhJQ0xFX1VOSVRfVFlQRV9ZRUFSCiAgKi8KLSNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9JTkZPX01PREVMX1lFQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDEwMykKKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9JTkZPX01PREVMX1lFQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAxMDMpCiAKIC8qKgogICogRnVlbCBjYXBhY2l0eSBvZiB0aGUgdmVoaWNsZQpAQCAtMjUzLDcgKzI1Miw3IEBACiAKIAogCi0gLy89PT09IEhWQUMgUHJvcGVydGllcyA9PT09CisvLz09PT0gSFZBQyBQcm9wZXJ0aWVzID09PT0KIAogLyoqCiAgKiBGYW4gc3BlZWQgc2V0dGluZwpAQCAtMjYxLDggKzI2MCw3IEBACiAgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQogICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKICAqIEBkYXRhX21lbWJlciBodmFjLmZhbl9zcGVlZAotICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkUKLSAqIEBkYXRhX2VudW0gVE9ETworICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9aT05FCiAgKiBAYWxsb3dfb3V0X29mX3JhbmdlX3ZhbHVlIDogT0ZGCiAgKi8KICNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9IVkFDX0ZBTl9TUEVFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA1MDApCkBAIC0yNzMsOCArMjcxLDggQEAKICAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCiAgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQogICogQGRhdGFfbWVtYmVyIGh2YWMuZmFuX2RpcmVjdGlvbgotICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkUKLSAqIEBkYXRhX2VudW0gVE9ETworICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9aT05FCisgKiBAZGF0YV9lbnVtIHZlaGljbGVfaHZhY19mYW5fZGlyZWN0aW9uCiAgKiBAYWxsb3dfb3V0X29mX3JhbmdlX3ZhbHVlIDogT0ZGCiAgKi8KICNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9IVkFDX0ZBTl9ESVJFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA1MDEpCkBAIC0yOTMsOSArMjkxLDkgQEAKIC8qKgogICogSFZBQyBjdXJyZW50IHRlbXBlcmF0dXJlLgogICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0ZMT0FUCi0gKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRXxWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfQ09OVElOVU9VUworICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKICAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCi0gKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9aT05FCiAgKiBAZGF0YV9tZW1iZXIgaHZhYy50ZW1wZXJhdHVyZV9jdXJyZW50CiAgKi8KICNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9IVkFDX1RFTVBFUkFUVVJFX0NVUlJFTlQgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA1MDIpCkBAIC0zMDMsOSArMzAxLDkgQEAKIC8qKgogICogSFZBQywgdGFyZ2V0IHRlbXBlcmF0dXJlIHNldC4KICAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9GTE9BVAotICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0V8VkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX0NPTlRJTlVPVVMKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCiAgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQotICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfWk9ORQogICogQGRhdGFfbWVtYmVyIGh2YWMudGVtcGVyYXR1cmVfc2V0CiAgKiBAYWxsb3dfb3V0X29mX3JhbmdlX3ZhbHVlIDogTUlOIC8gTUFYIC8gT0ZGCiAgKi8KQEAgLTMxNiw3ICszMTQsNyBAQAogICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0JPT0xFQU4KICAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCiAgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQotICogQHpvbmVfdHlwZSBWRUhJQ0xFX1dJTkRPVworICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9XSU5ET1cKICAqIEBkYXRhX21lbWJlciBodmFjLmRlZnJvc3Rfb24KICAqLwogI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0hWQUNfREVGUk9TVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDUwNCkKQEAgLTMyNyw3ICszMjUsNyBAQAogICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKICAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCiAgKiBAY29uZmlnX2ZsYWdzIFN1cHBvcnRlZCB6b25lcwotICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfWk9ORQogICogQGRhdGFfbWVtYmVyIGh2YWMuYWNfb24KICAqLwogI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0hWQUNfQUNfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDUwNSkKQEAgLTMzNyw3ICszMzUsNyBAQAogICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0JPT0xFQU4KICAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCiAgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQotICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfWk9ORQogICogQGRhdGFfbWVtYmVyIGh2YWMubWF4X2FjX29uCiAgKi8KICNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9IVkFDX01BWF9BQ19PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA1MDYpCkBAIC0zNDcsNyArMzQ1LDcgQEAKICAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9CT09MRUFOCiAgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQogICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKLSAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1pPTkUKICAqIEBkYXRhX21lbWJlciBodmFjLm1heF9kZWZyb3N0X29uCiAgKi8KICNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9IVkFDX01BWF9ERUZST1NUX09OICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA1MDcpCkBAIC0zNTcsNyArMzU1LDcgQEAKICAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9CT09MRUFOCiAgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQogICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKLSAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1pPTkUKICAqIEBkYXRhX21lbWJlciBodmFjLm1heF9yZWNpcmNfb24KICAqLwogI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0hWQUNfUkVDSVJDX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDUwOCkKQEAgLTM2NywxMiArMzY1LDk0IEBACiAgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfQk9PTEVBTgogICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKICAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCi0gKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9aT05FCiAgKiBAZGF0YV9tZW1iZXIgaHZhYy5kdWFsX29uCiAgKi8KICNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9IVkFDX0RVQUxfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA1MDkpCiAKIC8qKgorICogT24vb2ZmIGF1dG9tYXRpYyBtb2RlCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfQk9PTEVBTgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1pPTkUKKyAqIEBkYXRhX21lbWJlciBodmFjLmF1dG9fb24KKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0hWQUNfQVVUT19PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDUwQSkKKworLyoqCisgKiBTZWF0IHRlbXBlcmF0dXJlCisgKgorICogTmVnYXRpdmUgdmFsdWVzIGluZGljYXRlIGNvb2xpbmcuCisgKiAwIGluZGljYXRlcyBvZmYuCisgKiBQb3NpdGl2ZSB2YWx1ZXMgaW5kaWNhdGUgaGVhdGluZy4KKyAqCisgKiBTb21lIHZlaGljbGVzIG1heSBoYXZlIG11bHRpcGxlIGxldmVscyBvZiBoZWF0aW5nIGFuZCBjb29saW5nLiBUaGUgbWluL21heAorICogcmFuZ2UgZGVmaW5lcyB0aGUgYWxsb3dhYmxlIHJhbmdlIGFuZCBudW1iZXIgb2Ygc3RlcHMgaW4gZWFjaCBkaXJlY3Rpb24uCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfU0VBVAorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9IVkFDX1NFQVRfVEVNUEVSQVRVUkUgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA1MEIpCisKKy8qKgorICogU2lkZSBNaXJyb3IgSGVhdAorICoKKyAqIEluY3JlYXNlIHZhbHVlcyBkZW5vdGUgaGlnaGVyIGhlYXRpbmcgbGV2ZWxzIGZvciBzaWRlIG1pcnJvcnMuCisgKiAwIGluZGljYXRlcyBoZWF0aW5nIGlzIHR1cm5lZCBvZmYuCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfSFZBQ19TSURFX01JUlJPUl9IRUFUICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwNTBDKQorCisvKioKKyAqIFN0ZWVyaW5nIFdoZWVsIFRlbXBlcmF0dXJlCisgKgorICogU2V0cyB0aGUgdGVtcGVyYXR1cmUgZm9yIHRoZSBzdGVlcmluZyB3aGVlbAorICogUG9zaXRpdmUgdmFsdWUgaW5kaWNhdGVzIGhlYXRpbmcuCisgKiBOZWdhdGl2ZSB2YWx1ZSBpbmRpY2F0ZXMgY29vbGluZy4KKyAqIDAgaW5kaWNhdGVzIHRlbXByZWF0dXJlIGNvbnRyb2wgaXMgb2ZmLgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0hWQUNfU1RFRVJJTkdfV0hFRUxfVEVNUCAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDUwRCkKKworLyoqCisgKiBUZW1wZXJhdHVyZSB1bml0cworICoKKyAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZW1wZXJhdHVyZSBpcyBpbiBDZWxzaXVzLCBGYWhyZW5oZWl0LCBvciBhIGRpZmZlcmVudCB1bml0LgorICogVGhpcyBwYXJhbWV0ZXIgYWZmZWN0cyBhbGwgSFZBQyB0ZW1wZXJhdHVyZXMgaW4gdGhlIHN5c3RlbS4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRAorICogQGRhdGFfZW51bSB2ZWhpY2xlX3VuaXRfdHlwZQorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9IVkFDX1RFTVBFUkFUVVJFX1VOSVRTICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA1MEUpCisKKy8qKgorICogQWN0dWFsIGZhbiBzcGVlZAorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQUQKKyAqIEBkYXRhX21lbWJlciBodmFjLmZhbl9zcGVlZAorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9aT05FCisgKiBAYWxsb3dfb3V0X29mX3JhbmdlX3ZhbHVlIDogT0ZGCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9IVkFDX0FDVFVBTF9GQU5fU1BFRURfUlBNICAgICAgICAgICAgICAgICAgKDB4MDAwMDA1MEYpCisKKworLyoqCiAgKiBSZXByZXNlbnRzIHBvd2VyIHN0YXRlIGZvciBIVkFDLiBTb21lIEhWQUMgcHJvcGVydGllcyB3aWxsIHJlcXVpcmUgbWF0Y2hpbmcgcG93ZXIgdG8gYmUgdHVybmVkIG9uCiAgKiB0byBnZXQgb3V0IG9mIE9GRiBzdGF0ZS4gRm9yIG5vbi16b25lZCBIVkFDIHByb3BlcnRpZXMsIFZFSElDTEVfQUxMX1pPTkUgY29ycmVzcG9uZHMgdG8KICAqIGdsb2JhbCBwb3dlciBzdGF0ZS4KQEAgLTM4MywxMiArNDYzLDMxIEBACiAgKiBAY29uZmlnX3N0cmluZyBsaXN0IG9mIEhWQUMgcHJvcGVydGllcyB3aG9zZSBwb3dlciBpcyBjb250cm9sbGVkIGJ5IHRoaXMgcHJvcGVydHkuIEZvcm1hdCBpcwogICogICAgICAgICAgICAgICAgaGV4YS1kZWNpbWFsIG51bWJlciAoMHguLi4pIHNlcGFyYXRlZCBieSBjb21tYSBsaWtlICIweDUwMCwweDUwMyIuIEFsbCB6b25lcwogICogICAgICAgICAgICAgICAgZGVmaW5lZCBpbiB0aGVzZSBhZmZlY3RlZCBwcm9wZXJ0aWVzIHNob3VsZCBiZSBhdmFpbGFibGUgaW4gdGhlIHByb3BlcnR5LgotICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfWk9ORQogICogQGRhdGFfbWVtYmVyIGh2YWMucG93ZXJfb24KICAqLwogI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0hWQUNfUE9XRVJfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDUxMCkKIAogLyoqCisgKiBGYW4gUG9zaXRpb25zIEF2YWlsYWJsZQorICoKKyAqIFRoaXMgaXMgYSBiaXQgbWFzayBvZiBmYW4gcG9zaXRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHpvbmUuICBFYWNoIGVudHJ5IGluCisgKiB2ZWhpY2xlX2h2YWNfZmFuX2RpcmVjdGlvbiBpcyBzZWxlY3RlZCBieSBiaXQgcG9zaXRpb24uICBGb3IgaW5zdGFuY2UsIGlmCisgKiBvbmx5IHRoZSBGQU5fRElSRUNUSU9OX0ZBQ0UgKDB4MSkgYW5kIEZBTl9ESVJFQ1RJT05fREVGUk9TVCAoMHg0KSBhcmUgYXZhaWxhYmxlLAorICogdGhlbiB0aGlzIHZhbHVlIHNoYWxsIGJlIHNldCB0byAweDEyLgorICoKKyAqIDB4MTIgPSAoMSA8PCAxKSB8ICgxIDw8IDQpCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX1NUQVRJQworICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQUQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9aT05FCisgKiBAYWxsb3dfb3V0X29mX3JhbmdlX3ZhbHVlIDogT0ZGCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9IVkFDX0ZBTl9ESVJFQ1RJT05fQVZBSUxBQkxFICAgICAgICAgICAgICAgKDB4MDAwMDA1MTEpCisKKy8qKgogICogT3V0c2lkZSB0ZW1wZXJhdHVyZQogICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX0ZMT0FUCiAgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRXxWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfQ09OVElOVU9VUwpAQCAtMzk2LDggKzQ5NSw3IEBACiAgKiBAZGF0YV9tZW1iZXIgb3V0c2lkZV90ZW1wZXJhdHVyZQogICogQHVuaXQgVkVISUNMRV9VTklUX1RZUEVfQ0VMQ0lVUwogICovCi0KLSNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9FTlZfT1VUU0lERV9URU1QRVJBVFVSRSAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDcwMykKKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9FTlZfT1VUU0lERV9URU1QRVJBVFVSRSAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA3MDMpCiAKIAogLyoqCkBAIC00MDgsNyArNTA2LDcgQEAKICAqIEBkYXRhX21lbWJlciBjYWJpbl90ZW1wZXJhdHVyZQogICogQHVuaXQgVkVISUNMRV9VTklUX1RZUEVfQ0VMQ0lVUwogICovCi0jZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfRU5WX0NBQklOX1RFTVBFUkFUVVJFICAgICAgICAgICAgICAgICAgKDB4MDAwMDA3MDQpCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfRU5WX0NBQklOX1RFTVBFUkFUVVJFICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwNzA0KQogCiAKIC8qCkBAIC00MzQsNyArNTMyLDcgQEAKICAqIEBjb25maWdfZmxhZ3MgTnVtYmVyIG9mIHByZXNldHMgc3VwcG9ydGVkCiAgKiBAZGF0YV9tZW1iZXIgaW50MzJfYXJyYXkKICAqLwotI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1JBRElPX1BSRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwODAxKQorI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1JBRElPX1BSRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDgwMSkKIAogLyoqCiAgKiBDb25zdGFudHMgcmVsZXZhbnQgdG8gcmFkaW8uCkBAIC00OTIsNyArNTkwLDEzIEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgVkVISUNMRV9BVURJT19FWFRfRk9DVVNfQ0FSX1BFUk1BTkVOVCB3aGVuIGNhciBzaWRlIGlzIHBsYXlpbmcgc29tZXRoaW5nCiAgKiAgICAgICAgICAgICAgICAgICAgICAgcGVybWFuZW50LgogICogICAgICAgICAgICAgICAgICAgTE9TU19UUkFOU0lFTlQ6IGFsd2F5cyBzaG91bGQgYmUgVkVISUNMRV9BVURJT19FWFRfRk9DVVNfQ0FSX1RSQU5TSUVOVAotICogICBpbnQzMl9hcnJheVszXTogc2hvdWxkIGJlIHplcm8uCisgKiAgIGludDMyX2FycmF5WzNdOiBjb250ZXh0IHJlcXVlc3RlZCBieSBhbmRyb2lkIHNpZGUgd2hlbiByZXNwb25kaW5nIHRvIGZvY3VzIHJlcXVlc3QuCisgKiAgICAgICAgICAgICAgICAgICBXaGVuIGNhciBzaWRlIGlzIHRha2luZyBmb2N1cyBhd2F5LCB0aGlzIHNob3VsZCBiZSB6ZXJvLgorICoKKyAqIEEgZm9jdXMgcmVzcG9uc2Ugc2hvdWxkIGJlIHNlbnQgcGVyIGVhY2ggZm9jdXMgcmVxdWVzdCBldmVuIGlmIHRoZXJlIGlzIG5vIGNoYW5nZSBpbgorICogZm9jdXMgc3RhdGUuIFRoaXMgY2FuIGhhcHBlbiBpbiBjYXNlIGxpa2UgZm9jdXMgcmVxdWVzdCBvbmx5IGludm9sdmluZyBjb250ZXh0IGNoYW5nZQorICogd2hlcmUgYW5kcm9pZCBzaWRlIHN0aWxsIG5lZWRzIG1hdGNoaW5nIGZvY3VzIHJlc3BvbnNlIHRvIGNvbmZpcm0gdGhhdCBhdWRpbyBtb2R1bGUKKyAqIGhhcyBtYWRlIG5lY2Vzc2FyeSBjaGFuZ2VzLgogICoKICAqIElmIGNhciBkb2VzIG5vdCBzdXBwb3J0IFZFSElDTEVfUFJPUEVSVFlfQVVESU9fRk9DVVMsIGZvY3VzIGlzIGFzc3VtZWQgdG8gYmUgZ3JhbnRlZCBhbHdheXMuCiAgKgpAQCAtNTAxLDcgKzYwNSw3IEBACiAgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQogICogQGRhdGFfbWVtYmVyIGludDMyX2FycmF5CiAgKi8KLSNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BVURJT19GT0NVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDkwMCkKKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BVURJT19GT0NVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA5MDApCiAKIGVudW0gdmVoaWNsZV9hdWRpb19mb2N1c19yZXF1ZXN0IHsKICAgICBWRUhJQ0xFX0FVRElPX0ZPQ1VTX1JFUVVFU1RfR0FJTiA9IDB4MSwKQEAgLTYzOCwxMyArNzQyLDIzIEBACiAgICAgVkVISUNMRV9BVURJT19DT05URVhUX1NZU1RFTV9TT1VORF9GTEFHICAgICAgICAgICAgICAgPSAweDQwMCwKICAgICAvKiogUmFkaW8gaXMgcGxheWVkICovCiAgICAgVkVISUNMRV9BVURJT19DT05URVhUX1JBRElPX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgPSAweDgwMCwKKyAgICAvKiogRXh0IHNvdXJjZSBpcyBwbGF5ZWQuIFRoaXMgaXMgZm9yIHRhZ2dpbmcgZ2VuZXJpYyBleHQgc291cmNlcy4gKi8KKyAgICBWRUhJQ0xFX0FVRElPX0NPTlRFWFRfRVhUX1NPVVJDRV9GTEFHICAgICAgICAgICAgICAgICA9IDB4MTAwMCwKIH07CiAKIC8qKgogICogUHJvcGVydHkgdG8gY29udHJvbCBhdWRpbyB2b2x1bWUgb2YgZWFjaCBhdWRpbyBjb250ZXh0LgogICoKKyAqIHZlaGljbGVfcHJvcF9jb25maWdfdAorICogICBjb25maWdfYXJyYXlbMF0gOiBiaXQgZmxhZ3Mgb2YgYWxsIHN1cHBvcnRlZCBhdWRpbyBjb250ZXh0cy4gSWYgdGhpcyBpcyAwLAorICogICAgICAgICAgICAgICAgICAgICBhdWRpbyB2b2x1bWUgaXMgY29udHJvbGxlZCBwZXIgcGh5c2ljYWwgc3RyZWFtCisgKiAgIGNvbmZpZ19hcnJheVsxXSA6IGZsYWdzIGRlZmluZWQgaW4gdmVoaWNsZV9hdWRpb192b2x1bWVfY2FwYWJpbGl0eV9mbGFnIHRvCisgKiAgICAgICAgICAgICAgICAgICAgIHJlcHJlc2VudCBhdWRpbyBtb2R1bGUncyBjYXBhYmlsaXR5LgorICoKICAqIERhdGEgdHlwZSBsb29rcyBsaWtlOgotICogICBpbnQzMl9hcnJheVswXSA6IHN0cmVhbSBjb250ZXh0IGFzIGRlZmluZWQgaW4gdmVoaWNsZV9hdWRpb19jb250ZXh0X2ZsYWcuCisgKiAgIGludDMyX2FycmF5WzBdIDogc3RyZWFtIGNvbnRleHQgYXMgZGVmaW5lZCBpbiB2ZWhpY2xlX2F1ZGlvX2NvbnRleHRfZmxhZy4gSWYgb25seSBwaHlzaWNhbAorICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSBpcyBzdXBwb3J0ZWQgKGNvbmZpZ19hcnJheVswXSA9PSAwKSwgdGhpcyB3aWxsIHJlcHJlc2VudCBwaHlzaWNhbAorICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSBudW1iZXIuCiAgKiAgIGludDMyX2FycmF5WzFdIDogdm9sdW1lIGxldmVsLCB2YWxpZCByYW5nZSBpcyAwIHRvIGludDMyX21heF92YWx1ZSBkZWZpbmVkIGluIGNvbmZpZy4KICAqICAgICAgICAgICAgICAgICAgICAwIHdpbGwgYmUgbXV0ZSBzdGF0ZS4gaW50MzJfbWluX3ZhbHVlIGluIGNvbmZpZyBzaG91bGQgYmUgYWx3YXlzIDAuCiAgKiAgIGludDMyX2FycmF5WzJdIDogT25lIG9mIHZlaGljbGVfYXVkaW9fdm9sdW1lX3N0YXRlLgpAQCAtNjU4LDcgKzc3MiwzNCBAQAogICogQGNvbmZpZ19mbGFncyBhbGwgYXVkaW8gY29udGV4dHMgc3VwcG9ydGVkLgogICogQGRhdGFfbWVtYmVyIGludDMyX2FycmF5CiAgKi8KLSNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BVURJT19WT0xVTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDkwMSkKKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BVURJT19WT0xVTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA5MDEpCisKKworLyoqCisgKiBmbGFncyB0byByZXByZXNlbnQgY2FwYWJpbGl0eSBvZiBhdWRpbyB2b2x1bWUgcHJvcGVydHkuCisgKiB1c2VkIGluIGNvbmZpZ19hcnJheVsxXSBvZiB2ZWhpY2xlX3Byb3BfY29uZmlnX3QuCisgKi8KK2VudW0gdmVoaWNsZV9hdWRpb192b2x1bWVfY2FwYWJpbGl0eV9mbGFnIHsKKyAgICAvKioKKyAgICAgKiBFeHRlcm5hbCBhdWRpbyBtb2R1bGUgb3IgdmVoaWNsZSBoYWwgaGFzIHBlcnNpc3RlbnQgc3RvcmFnZQorICAgICAqIHRvIGtlZXAgdGhlIHZvbHVtZSBsZXZlbC4gVGhpcyBzaG91bGQgYmUgc2V0IG9ubHkgd2hlbiBwZXIgY29udGV4dAorICAgICAqIHZvbHVtZSBsZXZlbCBpcyBzdXBwcm90ZWQuIFdoZW4gdGhpcyBpcyBzZXQsIGF1ZGlvIHZvbHVtZSBsZXZlbCBwZXIKKyAgICAgKiBlYWNoIGNvbnRleHQgd2lsbCBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgcHJvcGVydHkgd2hlbiBzeXN0ZW4gc3RhcnRzIHVwLgorICAgICAqIEFuZCBleHRlcm5hbCBhdWRpbyBtb2R1bGUgaXMgYWxzbyBleHBlY3RlZCB0byBhZGp1c3Qgdm9sdW1lIGF1dG9tYXRpY2FsbHkKKyAgICAgKiB3aGVuZXZlciB0aGVyZSBpcyBhbiBhdWRpbyBjb250ZXh0IGNoYW5nZS4KKyAgICAgKiBXaGVuIHRoaXMgZmxhZyBpcyBub3Qgc2V0LCBhbmRyb2lkIHNpZGUgd2lsbCBhc3N1bWUgdGhhdCB0aGVyZSBpcyBubworICAgICAqIHBlcnNpc3RlbnQgc3RvcmFnZSBhbmQgc3RvcmVkIHZhbHVlIGluIGFuZHJvaWQgc2lkZSB3aWxsIGJlIHVzZWQgdG8KKyAgICAgKiBpbml0aWFsaXplIHRoZSB2b2x1bWUgbGV2ZWwuIEFuZCBhbmRyb2lkIHNpZGUgd2lsbCBzZXQgdm9sdW1lIGxldmVsCisgICAgICogb2YgZWFjaCBwaHlzaWNhbCBzdHJlYW1zIHdoZW5ldmVyIHRoZXJlIGlzIGFuIGF1ZGlvIGNvbnRleHQgY2hhbmdlLgorICAgICAqLworICAgIFZFSElDTEVfQVVESU9fVk9MVU1FX0NBUEFCSUxJVFlfUEVSU0lTVEVOVF9TVE9SQUdFID0gMHgxLAorICAgIC8qKgorICAgICAqIFdoZW4gdGhpcyBmbGFnIGlzIHNldCwgdGhlIEgvVyBjYW4gc3VwcG9ydCBvbmx5IHNpbmdsZSBtYXN0ZXIgdm9sdW1lIGZvciBhbGwgc3RyZWFtcy4KKyAgICAgKiBUaGVyZSBpcyBubyB3YXkgdG8gc2V0IHZvbHVtZSBsZXZlbCBkaWZmZXJlbnRseSBwZXIgZWFjaCBzdHJlYW0gb3IgY29udGV4dC4KKyAgICAgKi8KKyAgICBWRUhJQ0xFX0FVRElPX1ZPTFVNRV9DQVBBQklMSVRZX01BU1RFUl9WT0xVTUVfT05MWSA9IDB4MiwKK307CisKIAogLyoqCiAgKiBlbnVtIHRvIHJlcHJlc2VudCBhdWRpbyB2b2x1bWUgc3RhdGUuCkBAIC02ODMsOCArODI0LDE4IEBACiAKIC8qKgogICogUHJvcGVydHkgZm9yIGhhbmRsaW5nIHZvbHVtZSBsaW1pdCBzZXQgYnkgdXNlci4gVGhpcyBsaW1pdHMgbWF4aW11bSB2b2x1bWUgdGhhdCBjYW4gYmUgc2V0Ci0gKiBwZXIgZWFjaCBjb250ZXh0LgotICogICBpbnQzMl9hcnJheVswXSA6IHN0cmVhbSBjb250ZXh0IGFzIGRlZmluZWQgaW4gdmVoaWNsZV9hdWRpb19jb250ZXh0X2ZsYWcuCisgKiBwZXIgZWFjaCBjb250ZXh0IG9yIHBoeXNpY2FsIHN0cmVhbS4KKyAqCisgKiB2ZWhpY2xlX3Byb3BfY29uZmlnX3QKKyAqICAgY29uZmlnX2FycmF5WzBdIDogYml0IGZsYWdzIG9mIGFsbCBzdXBwb3J0ZWQgYXVkaW8gY29udGV4dHMuIElmIHRoaXMgaXMgMCwKKyAqICAgICAgICAgICAgICAgICAgICAgYXVkaW8gdm9sdW1lIGlzIGNvbnRyb2xsZWQgcGVyIHBoeXNpY2FsIHN0cmVhbQorICogICBjb25maWdfYXJyYXlbMV0gOiBmbGFncyBkZWZpbmVkIGluIHZlaGljbGVfYXVkaW9fdm9sdW1lX2NhcGFiaWxpdHlfZmxhZyB0bworICogICAgICAgICAgICAgICAgICAgICByZXByZXNlbnQgYXVkaW8gbW9kdWxlJ3MgY2FwYWJpbGl0eS4KKyAqCisgKiBEYXRhIHR5cGUgbG9va3MgbGlrZToKKyAqICAgaW50MzJfYXJyYXlbMF0gOiBzdHJlYW0gY29udGV4dCBhcyBkZWZpbmVkIGluIHZlaGljbGVfYXVkaW9fY29udGV4dF9mbGFnLiBJZiBvbmx5IHBoeXNpY2FsCisgKiAgICAgICAgICAgICAgICAgICAgc3RyZWFtIGlzIHN1cHBvcnRlZCAoY29uZmlnX2FycmF5WzBdID09IDApLCB0aGlzIHdpbGwgcmVwcmVzZW50IHBoeXNpY2FsCisgKiAgICAgICAgICAgICAgICAgICAgc3RyZWFtIG51bWJlci4KICAqICAgaW50MzJfYXJyYXlbMV0gOiBtYXhpbXVtIHZvbHVtZSBzZXQgdG8gdGhlIHN0cmVhbS4gSWYgdGhlcmUgaXMgbm8gcmVzdHJpY3Rpb24sIHRoaXMgdmFsdWUKICAqICAgICAgICAgICAgICAgICAgICB3aWxsIGJlICBiaWdnZXIgdGhhbiBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX1ZPTFVNRSdzIG1heCB2YWx1ZS4KICAqCkBAIC02OTgsNyArODQ5LDcgQEAKICAqIEBjb25maWdfZmxhZ3MgYWxsIGF1ZGlvIGNvbnRleHRzIHN1cHBvcnRlZC4KICAqIEBkYXRhX21lbWJlciBpbnQzMl9hcnJheQogICovCi0jZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQVVESU9fVk9MVU1FX0xJTUlUICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA5MDIpCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQVVESU9fVk9MVU1FX0xJTUlUICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwOTAyKQogCiAvKioKICAqIEluZGV4IGluIGludDMyX2FycmF5IGZvciBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX1ZPTFVNRV9MSU1JVCBwcm9wZXJ0eS4KQEAgLTcyNyw3ICs4NzgsNyBAQAogICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1dSSVRFCiAgKiBAZGF0YV9tZW1iZXIgaW50MzJfYXJyYXkKICAqLwotI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX1JPVVRJTkdfUE9MSUNZICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwOTAzKQorI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX1JPVVRJTkdfUE9MSUNZICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDkwMykKIAogLyoqCiAgKiBJbmRleCBpbiBpbnQzMl9hcnJheSBmb3IgVkVISUNMRV9QUk9QRVJUWV9BVURJT19ST1VUSU5HX1BPTElDWSBwcm9wZXJ0eS4KQEAgLTc1MCw3ICs5MDEsNyBAQAogKiAgICAgICAgICAgICAgIHRoaXMuCiAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQogKi8KLSNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BVURJT19IV19WQVJJQU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDkwNCkKKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BVURJT19IV19WQVJJQU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA5MDQpCiAKIC8qKgogICogRmxhZyB0byBiZSB1c2VkIGluIHZlaGljbGVfcHJvcF9jb25maWcuY29uZmlnX2ZsYWdzIGZvciBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX0hXX1ZBUklBTlQuCkBAIC03NjYsNiArOTE3LDcwIEBACiAgICAgVkVISUNMRV9BVURJT19IV19WQVJJQU5UX0ZMQUdfSU5URVJOQUxfUkFESU9fRkxBRyA9IDB4MSwKIH07CiAKKy8qKiBhdWRpbyByb3V0aW5nIGZvciBBTS9GTS4gVGhpcyBzaG91bGQgYmUgYWxzbyBiZSB0aGUgdmFsdWUgd2hlbiB0aGVyZSBpcyBvbmx5IG9uZQorICAgIHJhZGlvIG1vZHVsZSBpbiB0aGUgc3lzdGVtLiAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX0VYVF9ST1VUSU5HX1NPVVJDRV9SQURJT19BTV9GTSAiUkFESU9fQU1fRk0iCisvKiogU2hvdWxkIGJlIGFkZGVkIG9ubHkgd2hlbiB0aGVyZSBpcyBhIHNlcGFyYXRlIHJhZGlvIG1vZHVsZSB3aXRoIEhEIGNhcGFiaWxpdHkuICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQVVESU9fRVhUX1JPVVRJTkdfU09VUkNFX1JBRElPX0FNX0ZNX0hEICJSQURJT19BTV9GTV9IRCIKKy8qKiBGb3IgZGlnaWFsIGF1ZGlvIGJyb2FkY2FzdGluZyB0eXBlIG9mIHJhZGlvICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQVVESU9fRVhUX1JPVVRJTkdfU09VUkNFX1JBRElPX0RBQiAiUkFESU9fREFCIgorLyoqIEZvciBzYXRlbGxpdGUgdHlwZSBvZiByYWRpbyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX0VYVF9ST1VUSU5HX1NPVVJDRV9SQURJT19TQVRFTExJVEUgIlJBRElPX1NBVEVMTElURSIKKy8qKiBGb3IgQ0Qgb3IgRFZEICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQVVESU9fRVhUX1JPVVRJTkdfU09VUkNFX0NEX0RWRCAiQ0RfRFZEIgorLyoqIEZvciAxc3QgYXV4aWxpYXJ5IGlucHV0ICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQVVESU9fRVhUX1JPVVRJTkdfU09VUkNFX0FVWF9JTjAgIkFVWF9JTjAiCisvKiogRm9yIDJuZCBhdXhpbGlhcnkgaW5wdXQgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BVURJT19FWFRfUk9VVElOR19TT1VSQ0VfQVVYX0lOMSAiQVVYX0lOMSIKKy8qKiBGb3IgbmF2aWdhdGlvbiBndWlkYW5jZSBmcm9tIG91dHNpZGUgYW5kcm9pZCAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX0VYVF9ST1VUSU5HX1NPVVJDRV9FWFRfTkFWX0dVSURBTkNFICJFWFRfTkFWX0dVSURBTkNFIgorLyoqIEZvciB2b2ljZSBjb21tYW5kIGZyb20gb3V0c2lkZSBhbmRyb2lkICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQVVESU9fRVhUX1JPVVRJTkdfU09VUkNFX0VYVF9WT0lDRV9DT01NQU5EICJFWFRfVk9JQ0VfQ09NTUFORCIKKy8qKiBGb3Igdm9pY2UgY2FsbCBmcm9tIG91dHNpZGUgYW5kcm9pZCAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX0VYVF9ST1VUSU5HX1NPVVJDRV9FWFRfVk9JQ0VfQ0FMTCAiRVhUX1ZPSUNFX0NBTEwiCisvKiogRm9yIHNhZmV0eSBhbGVydCBmcm9tIG91dHNpZGUgYW5kcm9pZCAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX0VYVF9ST1VUSU5HX1NPVVJDRV9FWFRfU0FGRVRZX0FMRVJUICJFWFRfU0FGRVRZX0FMRVJUIgorCisvKioKKyogUHJvcGVydHkgdG8gcGFzcyBoaW50IG9uIGV4dGVybmFsIGF1ZGlvIHJvdXRpbmcuIFdoZW4gYW5kcm9pZCBzaWRlIHJlcXVlc3QgZm9jdXMKKyogd2l0aCBWRUhJQ0xFX0FVRElPX0VYVF9GT0NVU19DQVJfUExBWV9PTkxZX0ZMQUcgZmxhZywgdGhpcyBwcm9wZXJ0eSB3aWxsIGJlIHNldAorKiBiZWZvcmUgc2V0dGluZyBBVURJT19GT0NVUyBwcm9wZXJ0eSBhcyBhIGhpbnQgZm9yIGV4dGVybmFsIGF1ZGlvIHNvdXJjZSByb3V0aW5nLgorKiBOb3RlIHRoYXQgc2V0dGluZyB0aGlzIHByb3BlcnR5IGFsb25lIHNob3VsZCBub3QgdHJpZ2dlciBhbnkgY2hhbmdlLgorKiBBdWRpbyByb3V0aW5nIHNob3VsZCBiZSBjaGFuZ2VkIG9ubHkgd2hlbiBBVURJT19GT0NVUyBwcm9wZXJ0eSBpcyBzZXQuIE5vdGUgdGhhdAorKiB0aGlzIHByb3BlcnR5IGFsbG93cyBwYXNzaW5nIGN1c3RvbSB2YWx1ZSBhcyBsb25nIGFzIGl0IGlzIGRlZmluZWQgaW4gY29uZmlnX3N0cmluZy4KKyogVGhpcyBhbGxvd3Mgc3VwcG9ydGluZyBub24tc3RhbmRhcmQgcm91dGluZyBvcHRpb25zIHRocm91Z2ggdGhpcyBwcm9wZXJ0eS4KKyogSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHNlcGFyYXRlIG5hbWUgc3BhY2UgZm9yIGN1c3RvbSBwcm9wZXJ0eSB0byBwcmV2ZW50IGNvbmZsaWN0IGluIGZ1dHVyZQorKiBhbmRyb2lkIHJlbGVhc2VzLgorKiBFbmFibGluZyBlYWNoIGV4dGVybmFsIHJvdXRpbmcgb3B0aW9uIGlzIGRvbmUgYnkgZW5hYmxpbmcgZWFjaCBiaXQgZmxhZyBmb3IgdGhlIHJvdXRpbmcuCisqIFRoaXMgcHJvcGVydHkgY2FuIHN1cHBvcnQgdXAgdG8gMTI4IGV4dGVybmFsIHJvdXRpbmdzLgorKiBUbyBnaXZlIGZ1bGwgZmxleGliaWxpdHksIHRoZXJlIGlzIG5vIHN0YW5kYXJkIGRlZmluaXRpb24gZm9yIGVhY2ggYml0IGZsYWcgYW5kCisqIGFzc2lnbmluZyBlYWNoIGJpZyBmbGFnIHRvIHNwZWNpZmljIHJvdXRpbmcgdHlwZSBpcyBkZWNpZGVkIGJ5IGNvbmZpZ19zdHJpbmcuCisqIGNvbmZpZ19zdHJpbmcgaGFzIGZvcm1hdCBvZiBlYWNoIGVudHJ5IHNlcGFyYXRlZCBieSAnLCcKKyogYW5kIGVhY2ggZW50cnkgaGFzIGZvcm1hdCBvZiBiaXRGbGFnUG9zaXRvbjp0eXBlU3RyaW5nWzpwaHlzaWNhbFN0cmVhbU51bWJlcl0uCisqICBiaXRGbGFnUG9zaXRpb246IHJlcHJlc2VudHMgd2hpY2ggYmlnIGZsYWcgd2lsbCBiZSBzZXQgdG8gZW5hYmxlIHRoaXMgcm91dGluZy4gMCBtZWFucworKiAgICBMU0IgaW4gaW50MzJfYXJyYXlbMF0uIDMxIHdpbGwgYmUgTVNCIGluIGludDMyX2FycmF5WzBdLiAxMjcgd2lsbCBNU0IgaW4gaW50MzJfYXJyYXlbM10uCisqICB0eXBlU3RyaW5nOiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgZXh0ZXJuYWwgcm91dGluZy4gU29tZSB0eXBlcyBhcmUgYWxyZWFkeSBkZWZpbmVkCisqICAgIGluIFZFSElDTEVfUFJPUEVSVFlfQVVESU9fRVhUX1JPVVRJTkdfU09VUkNFXyogYW5kIHVzZSB0aGVtIGZpcnN0IGJlZm9yZSBhZGRpbmcgc29tZXRoaW5nCisqICAgIGN1c3RvbS4gQXBwbGljYXRpb25zIHdpbGwgZmluZCBlYWNoIHJvdXRpbmcgdXNpbmcgdGhpcyBzdHJpbmcuCisqICBwaHlzaWNhbFN0cmVhbU51bWJlcjogVGhpcyBwYXJ0IGlzIG9wdGlvbmFsIGFuZCByZXByZXNlbnRzIHBoeXNpY2FsIHN0cmVhbSB0byBhbmRyb2lkCisqICAgIHdoaWNoIHdpbGwgYmUgZGlzYWJsZWQgd2hlbiB0aGlzIHJvdXRpbmcgaXMgZW5hYmxlZC4gSWYgbm90IHNwZWNpZmllZCwgdGhpcyByb3V0aW5nCisqICAgIHNob3VsZCBub3QgYWZmZWN0IHBoeXNpY2FsIHN0cmVhbXMgdG8gYW5kcm9pZC4KKyogQXMgYW4gZXhhbXBsZSwgbGV0J3MgYXNzdW1lIGEgc3lzdGVtIHdpdGggdHdvIHBoeXNpY2FsIHN0cmVhbXMsIDAgZm9yIG1lZGlhIGFuZCAxIGZvcgorKiBuYXYgZ3VpZGFuY2UuIEFuZCBsZXQncyBhc3N1bWUgZXh0ZXJuYWwgcm91dGluZyBvcHRpb24gb2YgYW0gZm0gcmFkaW8sIGV4dGVybmFsIG5hdmlnYXRpb24KKyogZ3VpZGFuY2UsIHNhdGVsbGl0ZSByYWRpbywgYW5kIG9uZSBjdXN0b20uIExldCdzIGFzc3VtZSB0aGF0IHJhZGlvIGFuZCBzYXRlbGxpdGUgcmVwbGFjZXMKKyogcGh5c2ljYWwgc3RyZWFtIDAgYW5kIGV4dGVybmFsIG5hdmlnYXRpb24gcmVwbGFjZXMgcGh5c2ljYWwgc3RyZWFtIDEuIEFuZCBiaXQgZmxhZyB3aWxsIGJlCisqIGFzc2lnbmVkIGluIHRoZSBvcmRlciBsaXN0ZWQgYWJvdmUuIFRoaXMgY29uZmlndXJhdGlvbiB3aWxsIGxvb2sgbGlrZSB0aGlzIGluIGNvbmZpZ19zdHJpbmc6CisqICAiMDpSQURJT19BTV9GTTowLDE6RVhUX05BVl9HVUlEQU5DRToxLDI6UkFESU9fU0FURUxMSVRFOjAsMzpjb20udGVzdC5TT01FVEhJTkdfQ1VTVE9NIgorKiBXaGVuIGFuZHJvaWQgcmVxdWVzdHMgUkFESU9fQU1fRk0sIGludDMyX2FycmF5WzBdIHdpbGwgYmUgc2V0IHRvIDB4MS4KKyogV2hlbiBhbmRyb2lkIHJlcXVlc3RzIFJBRElPX1NBVEVMTElURSArIEVYVF9OQVZfR1VJREFOQ0UsIGludDMyX2FycmF5WzBdIHdpbGwgYmUgc2V0IHRvIDB4MnwweDQuCisqCisqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9JTlQzMl9WRUM0CisqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19XUklURXxWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKKyogQGNvbmZpZ19zdHJpbmcgTGlzdCBvZiBhbGwgYXZhaWFibGUgZXh0ZXJuYWwgc291cmNlIGluIHRoZSBzeXN0ZW0uCisqIEBkYXRhX21lbWJlciBpbnQzMl9hcnJheQorKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BVURJT19FWFRfUk9VVElOR19ISU5UICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA5MDUpCiAKIC8qKgogICogUHJvcGVydHkgdG8gY29udHJvbCBwb3dlciBzdGF0ZSBvZiBhcHBsaWNhdGlvbiBwcm9jZXNzb3IuCkBAIC03ODgsNyArMTAwMyw3IEBACiAgKiBAY29uZmlnX2ZsYWdzIEFkZGl0aW9uYWwgaW5mbyBvbiBwb3dlciBzdGF0ZS4gU2hvdWxkIHVzZSB2ZWhpY2xlX2FwX3Bvd2VyX3N0YXRlX2NvbmZpZ19mbGFnLgogICogQGRhdGFfbWVtYmVyIGludDMyX2FycmF5CiAgKi8KLSNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BUF9QT1dFUl9TVEFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEEwMCkKKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BUF9QT1dFUl9TVEFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBBMDApCiAKIGVudW0gdmVoaWNsZV9hcF9wb3dlcl9zdGF0ZV9jb25maWdfZmxhZyB7CiAgICAgLyoqCkBAIC04OTUsNyArMTExMCw3IEBACiAgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRHxWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKICAqIEBkYXRhX21lbWJlciBpbnQzMgogICovCi0jZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfRElTUExBWV9CUklHSFRORVNTICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBBMDEpCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfRElTUExBWV9CUklHSFRORVNTICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQTAxKQogCiAKIC8qKgpAQCAtOTk5LDcgKzEyMTQsNyBAQAogICogQGNvbmZpZ19hcnJheSAwOnZlaGljbGVfaW5zdHVtZW50X2NsdXN0ZXJfdHlwZSAxOmh3IHR5cGUKICAqIEBkYXRhX21lbWJlciBpbnQzMl9hcnJheQogICovCi0jZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfSU5TVFJVTUVOVF9DTFVTVEVSX0lORk8gICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEEyMCkKKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9JTlNUUlVNRU5UX0NMVVNURVJfSU5GTyAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBBMjApCiAKIC8qKgogICogUmVwcmVzZW50cyBpbnN0cnVtZW50IGNsdXN0ZXIgdHlwZSBhdmFpbGFibGUgaW4gc3lzdGVtCkBAIC0xMDE5LDYgKzEyMzQsNjI0IEBACiB9OwogCiAvKioKKyAqIEN1cnJlbnQgZGF0ZSBhbmQgdGltZSwgZW5jb2RlZCBhcyBVbml4IHRpbWUuCisgKiBUaGlzIHZhbHVlIGRlbm90ZXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHRoYXQgaGF2ZSBlbGFwc2VkIHNpbmNlIDEvMS8xOTcwLgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9JTlQ2NAorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9TRVQKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAZGF0YV9tZW1iZXIgaW50NjRfdmFsdWUKKyAqIEB1bml0IFZFSElDTEVfVU5JVF9UWVBFX1NFQ1MKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1VOSVhfVElNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEEzMCkKKworLyoqCisgKiBDdXJyZW50IHRpbWUgb25seS4KKyAqIFNvbWUgdmVoaWNsZXMgbWF5IG5vdCBrZWVwIHRyYWNrIG9mIGRhdGUuICBUaGlzIHByb3BlcnR5IG9ubHkgYWZmZWN0cyB0aGUgY3VycmVudCB0aW1lLCBpbgorICogc2Vjb25kcyBkdXJpbmcgdGhlIGRheS4gIFRodXMsIHRoZSBtYXggdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyIGlzIDg2LDQwMCAoMjQgKiA2MCAqIDYwKQorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9TRVQKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqIEB1bml0IFZFSElDTEVfVU5JVF9UWVBFX1NFQ1MKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0NVUlJFTlRfVElNRV9JTl9TRUNPTkRTICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEEzMSkKKworCisvLz09PT0gQ2FyIENhYmluIFByb3BlcnRpZXMgPT09PQorLyoqCisgKiBNb3N0IENhciBDYWJpbiBwcm9wZXJ0aWVzIGhhdmUgYm90aCBhIE1PVkUgYW5kIFBPU0lUSU9OIHBhcmFtZXRlciBhc3NvY2lhdGVkIHdpdGggdGhlbS4KKyAqCisgKiBUaGUgTU9WRSBwYXJhbWV0ZXIgd2lsbCBzdGFydCBtb3ZpbmcgdGhlIGRldmljZSBpbiB0aGUgaW5kaWNhdGVkIGRpcmVjdGlvbi4gIFRoZSBtYWduaXR1ZGUKKyAqIGluZGljYXRlcyB0aGUgcmVsYXRpdmUgc3BlZWQuICBGb3IgaW5zdGFuY2UsIHNldHRpbmcgdGhlIFdJTkRPV19NT1ZFIHBhcmFtZXRlciB0byArMSB3aWxsIHJvbGwKKyAqIHRoZSB3aW5kb3cgdXAuICBTZXR0aW5nIGl0IHRvICsyIChpZiBhdmFpbGFibGUpIHdpbGwgcm9sbCBpdCB1cCBmYXN0ZXIuCisgKgorICogVGhlIFBPU0lUSU9OIHBhcmFtZXRlciB3aWxsIG1vdmUgdGhlIGRldmljZSB0byB0aGUgZGVzaXJlZCBwb3NpdGlvbi4gIEZvciBpbnN0YW5jZSwgaWYgdGhlCisgKiBXSU5ET1dfUE9TIGhhcyBhIHJhbmdlIG9mIDAtMTAwLCB0aGVuIHNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8gNTAgd2lsbCBvcGVuIHRoZSB3aW5kb3cgaGFsZndheS4KKyAqIERlcGVuZGluZyB1cG9uIHRoZSBpbml0aWFsIHBvc2l0aW9uLCB0aGUgd2luZG93IG1heSBtb3ZlIHVwIG9yIGRvd24gdG8gdGhlIDUwJSB2YWx1ZS4KKyAqCisgKiBPRU1zIG1heSBjaG9vc2UgdG8gaW1wbGVtZW50IG9uZSBvciBib3RoIG9mIHRoZSBNT1ZFL1BPU0lUSU9OIHBhcmFtZXRlcnMgZGVwZW5kaW5nIHVwb24gdGhlCisgKiBjYXBhYmlsaXR5IG9mIHRoZSBoYXJkd2FyZS4KKyAqLworCisvLyBEb29ycworLyoqCisgKiBEb29yIHBvc2l0aW9uCisgKgorICogVGhpcyBpcyBhbiBpbnRlZ2VyIGluIGNhc2UgYSBkb29yIG1heSBiZSBzZXQgdG8gYSBwYXJ0aWN1bGFyIHBvc2l0aW9uLiAgTWF4CisgKiB2YWx1ZSBpbmRpY2F0ZXMgZnVsbHkgb3BlbiwgbWluIHZhbHVlICgwKSBpbmRpY2F0ZXMgZnVsbHkgY2xvc2VkLgorICoKKyAqIFNvbWUgdmVoaWNsZXMgKG1pbml2YW5zKSBjYW4gb3BlbiB0aGUgZG9vciBlbGVjdHJvbmljYWxseS4gIEhlbmNlLCB0aGUgYWJpbGl0eQorICogdG8gd3JpdGUgdGhpcyBwcm9wZXJ0eS4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRHxWRUhJQ0xFX1BST1BfQUNDRVNTX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX0RPT1IKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfRE9PUl9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQjAwKQorCisvKioKKyAqIERvb3IgbW92ZQorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFfFZFSElDTEVfUFJPUF9BQ0NFU1NfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfRE9PUgorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9ET09SX01PVkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCMDEpCisKKworLyoqCisgKiBEb29yIGxvY2sKKyAqCisgKiAndHJ1ZScgaW5kaWNhdGVzIGRvb3IgaXMgbG9ja2VkCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0JPT0xFQU4KKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9ET09SCisgKiBAZGF0YV9tZW1iZXIgYm9vbGVhbl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfRE9PUl9MT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQjAyKQorCisvLyBNaXJyb3JzCisvKioKKyAqIE1pcnJvciBaIFBvc2l0aW9uCisgKgorICogUG9zaXRpdmUgdmFsdWUgaW5kaWNhdGVzIHRpbHQgdXB3YXJkcywgbmVnYXRpdmUgdmFsdWUgaXMgZG93bndhcmRzCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfTUlSUk9SCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX01JUlJPUl9aX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI0MCkKKworLyoqCisgKiBNaXJyb3IgWiBNb3ZlCisgKgorICogUG9zaXRpdmUgdmFsdWUgaW5kaWNhdGVzIHRpbHQgdXB3YXJkcywgbmVnYXRpdmUgdmFsdWUgaXMgZG93bndhcmRzCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEV8VkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9NSVJST1IKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfTUlSUk9SX1pfTU9WRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQjQxKQorCisvKioKKyAqIE1pcnJvciBZIFBvc2l0aW9uCisgKgorICogUG9zaXRpdmUgdmFsdWUgaW5kaWNhdGUgdGlsdCByaWdodCwgbmVnYXRpdmUgdmFsdWUgaXMgbGVmdAorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX01JUlJPUgorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9NSVJST1JfWV9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCNDIpCisKKy8qKgorICogTWlycm9yIFkgTW92ZQorICoKKyAqIFBvc2l0aXZlIHZhbHVlIGluZGljYXRlIHRpbHQgcmlnaHQsIG5lZ2F0aXZlIHZhbHVlIGlzIGxlZnQKKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURXxWRUhJQ0xFX1BST1BfQUNDRVNTX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX01JUlJPUgorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9NSVJST1JfWV9NT1ZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCNDMpCisKKy8qKgorICogTWlycm9yIExvY2sKKyAqCisgKiBUcnVlIGluZGljYXRlcyBtaXJyb3IgcG9zaXRpb25zIGFyZSBsb2NrZWQgYW5kIG5vdCBjaGFuZ2VhYmxlCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX0JPT0xFQU4KKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQGRhdGFfbWVtYmVyIGJvb2xlYW5fdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX01JUlJPUl9MT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI0NCkKKworLyoqCisgKiBNaXJyb3IgRm9sZAorICoKKyAqIFRydWUgaW5kaWNhdGVzIG1pcnJvcnMgYXJlIGZvbGRlZAorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9CT09MRUFOCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKKyAqIEBkYXRhX21lbWJlciBib29sZWFuX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9NSVJST1JfRk9MRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCNDUpCisKKy8vIFNlYXRzCisvKioKKyAqIFNlYXQgbWVtb3J5IHNlbGVjdAorICoKKyAqIFRoaXMgcGFyYW1ldGVyIHNlbGVjdHMgdGhlIG1lbW9yeSBwcmVzZXQgdG8gdXNlIHRvIHNlbGVjdCB0aGUgc2VhdCBwb3NpdGlvbi4KKyAqIFRoZSBtaW5WYWx1ZSBpcyBhbHdheXMgMCwgYW5kIHRoZSBtYXhWYWx1ZSBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2Ygc2VhdAorICogcG9zaXRpb25zIGF2YWlsYWJsZS4KKyAqCisgKiBGb3IgaW5zdGFuY2UsIGlmIHRoZSBkcml2ZXIncyBzZWF0IGhhcyAzIG1lbW9yeSBwcmVzZXRzLCB0aGUgbWF4VmFsdWUgd2lsbCBiZSAzLgorICogV2hlbiB0aGUgdXNlciB3YW50cyB0byBzZWxlY3QgYSBwcmVzZXQsIHRoZSBkZXNpcmVkIHByZXNldCBudW1iZXIgKDEsIDIsIG9yIDMpCisgKiBpcyBzZXQuCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9NRU1PUllfU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQjgwKQorCisvKioKKyAqIFNlYXQgbWVtb3J5IHNldAorICoKKyAqIFRoaXMgc2V0dGluZyBhbGxvd3MgdGhlIHVzZXIgdG8gc2F2ZSB0aGUgY3VycmVudCBzZWF0IHBvc2l0aW9uIHNldHRpbmdzIGludG8KKyAqIHRoZSBzZWxlY3RlZCBwcmVzZXQgc2xvdC4gIFRoZSBtYXhWYWx1ZSBmb3IgZWFjaCBzZWF0IHBvc2l0aW9uIHNoYWxsIG1hdGNoCisgKiB0aGUgbWF4VmFsdWUgZm9yIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9NRU1PUllfU0VMRUNULgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfTUVNT1JZX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI4MSkKKworLyoqCisgKiBTZWF0YmVsdCBidWNrbGVkCisgKgorICogVHJ1ZSBpbmRpY2F0ZXMgYmVsdCBpcyBidWNrbGVkLgorICoKKyAqIFdyaXRlIGFjY2VzcyBpbmRpY2F0ZXMgYXV0b21hdGljIHNlYXQgYnVja2xpbmcgY2FwYWJpbGl0aWVzLiAgVGhlcmUgYXJlIG5vIGtub3duIGNhcnMgYXQgdGhpcworICogdGltZSwgYnV0IHlvdSBuZXZlciBrbm93Li4uCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0JPT0xFQU4KKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRHxWRUhJQ0xFX1BST1BfQUNDRVNTX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBib29sZWFuX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9TRUFUX0JFTFRfQlVDS0xFRCAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCODIpCisKKy8qKgorICogU2VhdGJlbHQgaGVpZ2h0IHBvc2l0aW9uCisgKgorICogQWRqdXN0cyB0aGUgc2hvdWxkZXIgYmVsdCBhbmNob3IgcG9pbnQuCisgKiBNYXggdmFsdWUgaW5kaWNhdGVzIGhpZ2hlc3QgcG9zaXRpb24KKyAqIE1pbiB2YWx1ZSBpbmRpY2F0ZXMgbG93ZXN0IHBvc2l0aW9uCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfU0VBVAorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9TRUFUX0JFTFRfSEVJR0hUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCODMpCisKKy8qKgorICogU2VhdGJlbHQgaGVpZ2h0IG1vdmUKKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURXxWRUhJQ0xFX1BST1BfQUNDRVNTX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9CRUxUX0hFSUdIVF9NT1ZFICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQjg0KQorCisvKioKKyAqIFNlYXQgZm9yZS9hZnQgcG9zaXRpb24KKyAqCisgKiBTZXRzIHRoZSBzZWF0IHBvc2l0aW9uIGZvcndhcmQgKGNsb3NlciB0byBzdGVlcmluZyB3aGVlbCkgYW5kIGJhY2t3YXJkcy4KKyAqIE1heCB2YWx1ZSBpbmRpY2F0ZXMgY2xvc2VzdCB0byB3aGVlbCwgbWluIHZhbHVlIGluZGljYXRlcyBtb3N0IHJlYXJ3YXJkCisgKiBwb3NpdGlvbi4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfRk9SRV9BRlRfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI4NSkKKworLyoqCisgKiBTZWF0IGZvcmUvYWZ0IG1vdmUKKyAqCisgKiBNb3ZlcyB0aGUgc2VhdCBwb3NpdGlvbiBmb3J3YXJkIGFuZCBhZnQuCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEV8VkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfRk9SRV9BRlRfTU9WRSAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI4NikKKworLyoqCisgKiBTZWF0IGJhY2tyZXN0IGFuZ2xlIDEgcG9zaXRpb24KKyAqCisgKiBCYWNrcmVzdCBhbmdsZSAxIGlzIHRoZSBhY3R1YXRvciBjbG9zZXN0IHRvIHRoZSBib3R0b20gb2YgdGhlIHNlYXQuCisgKiBNYXggdmFsdWUgaW5kaWNhdGVzIGFuZ2xpbmcgZm9yd2FyZCB0b3dhcmRzIHRoZSBzdGVlcmluZyB3aGVlbC4KKyAqIE1pbiB2YWx1ZSBpbmRpY2F0ZXMgZnVsbCByZWNsaW5lLgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9CQUNLUkVTVF9BTkdMRV8xX1BPUyAgICAgICAgICAgICAgICAgICgweDAwMDAwQjg3KQorCisvKioKKyAqIFNlYXQgYmFja3Jlc3QgYW5nbGUgMSBtb3ZlCisgKgorICogTW92ZXMgdGhlIGJhY2tyZXN0IGZvcndhcmQgb3IgcmVjbGluZS4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURXxWRUhJQ0xFX1BST1BfQUNDRVNTX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9CQUNLUkVTVF9BTkdMRV8xX01PVkUgICAgICAgICAgICAgICAgICgweDAwMDAwQjg4KQorCisvKioKKyAqIFNlYXQgYmFja3Jlc3QgYW5nbGUgMiBwb3NpdGlvbgorICoKKyAqIEJhY2tyZXN0IGFuZ2xlIDIgaXMgdGhlIG5leHQgYWN0dWF0b3IgdXAgZnJvbSB0aGUgYm90dG9tIG9mIHRoZSBzZWF0LgorICogTWF4IHZhbHVlIGluZGljYXRlcyBhbmdsaW5nIGZvcndhcmQgdG93YXJkcyB0aGUgc3RlZXJpbmcgd2hlZWwuCisgKiBNaW4gdmFsdWUgaW5kaWNhdGVzIGZ1bGwgcmVjbGluZS4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfQkFDS1JFU1RfQU5HTEVfMl9QT1MgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI4OSkKKworLyoqCisgKiBTZWF0IGJhY2tyZXN0IGFuZ2xlIDIgbW92ZQorICoKKyAqIE1vdmVzIHRoZSBiYWNrcmVzdCBmb3J3YXJkIG9yIHJlY2xpbmUuCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEV8VkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfQkFDS1JFU1RfQU5HTEVfMl9NT1ZFICAgICAgICAgICAgICAgICAoMHgwMDAwMEI4QSkKKworLyoqCisgKiBTZWF0IGhlaWdodCBwb3NpdGlvbgorICoKKyAqIFNldHMgdGhlIHNlYXQgaGVpZ2h0LgorICogTWF4IHZhbHVlIGluZGljYXRlcyBoaWdoZXN0IHBvc2l0aW9uLgorICogTWluIHZhbHVlIGluZGljYXRlcyBsb3dlc3QgcG9zaXRpb24uCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfU0VBVAorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9TRUFUX0hFSUdIVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCOEIpCisKKy8qKgorICogU2VhdCBoZWlnaHQgbW92ZQorICoKKyAqIE1vdmVzIHRoZSBzZWF0IGhlaWdodC4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURXxWRUhJQ0xFX1BST1BfQUNDRVNTX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9IRUlHSFRfTU9WRSAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQjhDKQorCisvKioKKyAqIFNlYXQgZGVwdGggcG9zaXRpb24KKyAqCisgKiBTZXRzIHRoZSBzZWF0IGRlcHRoLCBkaXN0YW5jZSBmcm9tIGJhY2sgcmVzdCB0byBmcm9udCBlZGdlIG9mIHNlYXQuCisgKiBNYXggdmFsdWUgaW5kaWNhdGVzIGxvbmdlc3QgZGVwdGggcG9zaXRpb24uCisgKiBNaW4gdmFsdWUgaW5kaWNhdGVzIHNob3J0ZXN0IHBvc2l0aW9uLgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9ERVBUSF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQjhEKQorCisvKioKKyAqIFNlYXQgZGVwdGggbW92ZQorICoKKyAqIEFkanVzdHMgdGhlIHNlYXQgZGVwdGguCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEV8VkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfREVQVEhfTU9WRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI4RSkKKworLyoqCisgKiBTZWF0IHRpbHQgcG9zaXRpb24KKyAqCisgKiBTZXRzIHRoZSBzZWF0IHRpbHQuCisgKiBNYXggdmFsdWUgaW5kaWNhdGVzIGZyb250IGVkZ2Ugb2Ygc2VhdCBoaWdoZXIgdGhhbiBiYWNrIGVkZ2UuCisgKiBNaW4gdmFsdWUgaW5kaWNhdGVzIGZyb250IGVkZ2Ugb2Ygc2VhdCBsb3dlciB0aGFuIGJhY2sgZWRnZS4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfVElMVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI4RikKKworLyoqCisgKiBTZWF0IHRpbHQgbW92ZQorICoKKyAqIFRpbHRzIHRoZSBzZWF0LgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFfFZFSElDTEVfUFJPUF9BQ0NFU1NfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfU0VBVAorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9TRUFUX1RJTFRfTU9WRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCOTApCisKKy8qKgorICogTHVtYmVyIGZvcmUvYWZ0IHBvc2l0aW9uCisgKgorICogUHVzaGVzIHRoZSBsdW1iYXIgc3VwcG9ydCBmb3J3YXJkIGFuZCBiYWNrd2FyZHMKKyAqIE1heCB2YWx1ZSBpbmRpY2F0ZXMgbW9zdCBmb3J3YXJkIHBvc2l0aW9uLgorICogTWluIHZhbHVlIGluZGljYXRlcyBtb3N0IHJlYXJ3YXJkIHBvc2l0aW9uLgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9MVU1CQVJfRk9SRV9BRlRfUE9TICAgICAgICAgICAgICAgICAgICgweDAwMDAwQjkxKQorCisvKioKKyAqIEx1bWJhciBmb3JlL2FmdCBtb3ZlCisgKgorICogQWRqdXN0cyB0aGUgbHVtYmFyIHN1cHBvcnQuCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEV8VkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfTFVNQkFSX0ZPUkVfQUZUX01PVkUgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI5MikKKworLyoqCisgKiBMdW1iYXIgc2lkZSBzdXBwb3J0IHBvc2l0aW9uCisgKgorICogU2V0cyB0aGUgYW1vdW50IG9mIGxhdGVyYWwgbHVtYmFyIHN1cHBvcnQuCisgKiBNYXggdmFsdWUgaW5kaWNhdGVzIHdpZGVzdCBsdW1iYXIgc2V0dGluZyAoaS5lLiBsZWFzdCBzdXBwb3J0KQorICogTWluIHZhbHVlIGluZGljYXRlcyB0aGlubmVzdCBsdW1iYXIgc2V0dGluZy4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfTFVNQkFSX1NJREVfU1VQUE9SVF9QT1MgICAgICAgICAgICAgICAoMHgwMDAwMEI5MykKKworLyoqCisgKiBMdW1iYXIgc2lkZSBzdXBwb3J0IG1vdmUKKyAqCisgKiBBZGp1c3RzIHRoZSBhbW91bnQgb2YgbGF0ZXJhbCBsdW1iYXIgc3VwcG9ydC4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURXxWRUhJQ0xFX1BST1BfQUNDRVNTX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9MVU1CQVJfU0lERV9TVVBQT1JUX01PVkUgICAgICAgICAgICAgICgweDAwMDAwQjk0KQorCisvKioKKyAqIEhlYWRyZXN0IGhlaWdodCBwb3NpdGlvbgorICoKKyAqIFNldHMgdGhlIGhlYWRyZXN0IGhlaWdodC4KKyAqIE1heCB2YWx1ZSBpbmRpY2F0ZXMgdGFsbGVzdCBzZXR0aW5nLgorICogTWluIHZhbHVlIGluZGljYXRlcyBzaG9ydGVzdCBzZXR0aW5nLgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9IRUFEUkVTVF9IRUlHSFRfUE9TICAgICAgICAgICAgICAgICAgICgweDAwMDAwQjk1KQorCisvKioKKyAqIEhlYWRyZXN0IGhlaWdodCBtb3ZlCisgKgorICogTW92ZXMgdGhlIGhlYWRyZXN0IHVwIGFuZCBkb3duLgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFfFZFSElDTEVfUFJPUF9BQ0NFU1NfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfU0VBVAorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9TRUFUX0hFQURSRVNUX0hFSUdIVF9NT1ZFICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCOTYpCisKKy8qKgorICogSGVhZHJlc3QgYW5nbGUgcG9zaXRpb24KKyAqCisgKiBTZXRzIHRoZSBhbmdsZSBvZiB0aGUgaGVhZHJlc3QuCisgKiBNYXggdmFsdWUgaW5kaWNhdGVzIG1vc3QgdXByaWdodCBhbmdsZS4KKyAqIE1pbiB2YWx1ZSBpbmRpY2F0ZXMgc2hhbGxvd2VzdCBoZWFkcmVzdCBhbmdsZS4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfSEVBRFJFU1RfQU5HTEVfUE9TICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI5NykKKworLyoqCisgKiBIZWFkcmVzdCBhbmdsZSBtb3ZlCisgKgorICogQWRqdXN0cyB0aGUgYW5nbGUgb2YgdGhlIGhlYWRyZXN0CisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEV8VkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfSEVBRFJFU1RfQU5HTEVfTU9WRSAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI5OCkKKworLyoqCisgKiBIZWFkcmVzdCBmb3JlL2FmdCBwb3NpdGlvbgorICoKKyAqIEFkanVzdHMgdGhlIGhlYWRyZXN0IGZvcndhcmRzIGFuZCBiYWNrd2FyZHMuCisgKiBNYXggdmFsdWUgaW5kaWNhdGVzIHBvc2l0aW9uIGNsb3Nlc3QgdG8gZnJvbnQgb2YgY2FyLgorICogTWluIHZhbHVlIGluZGljYXRlcyBwb3NpdGlvbiBjbG9zZXN0IHRvIHJlYXIgb2YgY2FyLgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9IRUFEUkVTVF9GT1JFX0FGVF9QT1MgICAgICAgICAgICAgICAgICgweDAwMDAwQjk5KQorCisvKioKKyAqIEhlYWRyZXN0IGZvcmUvYWZ0IG1vdmUKKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURXxWRUhJQ0xFX1BST1BfQUNDRVNTX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9IRUFEUkVTVF9GT1JFX0FGVF9NT1ZFICAgICAgICAgICAgICAgICgweDAwMDAwQjlBKQorCisKKy8vIFdpbmRvd3MKKy8qKgorICogV2luZG93IFBvc2l0aW9uCisgKgorICogTWF4ID0gd2luZG93IHVwIC8gY2xvc2VkCisgKiBNaW4gPSB3aW5kb3cgZG93biAvIG9wZW4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9XSU5ET1dfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCQzApCisKKy8qKgorICogV2luZG93IE1vdmUKKyAqCisgKiBNYXggPSB3aW5kb3cgdXAgLyBjbG9zZWQKKyAqIE1pbiA9IHdpbmRvdyBkb3duIC8gb3BlbgorICogTWFnbml0dWRlIGRlbm90ZXMgcmVsYXRpdmUgc3BlZWQuICBJLmUuICsyIGlzIGZhc3RlciB0aGFuICsxIGluIHJhaXNpbmcgdGhlIHdpbmRvdy4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURXxWRUhJQ0xFX1BST1BfQUNDRVNTX1dSSVRFCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1dJTkRPV19NT1ZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEJDMSkKKworLyoqCisgKiBXaW5kb3cgVmVudCBQb3NpdGlvbgorICoKKyAqIFRoaXMgZmVhdHVyZSBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIHZlbnQgZmVhdHVyZSBvbiBhIHN1bnJvb2YuCisgKgorICogTWF4ID0gdmVudCBvcGVuCisgKiBNaW4gPSB2ZW50IGNsb3NlZAorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1dJTkRPV19WRU5UX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEJDMikKKworLyoqCisgKiBXaW5kb3cgVmVudCBNb3ZlCisgKgorICogVGhpcyBmZWF0dXJlIGlzIHVzZWQgdG8gY29udHJvbCB0aGUgdmVudCBmZWF0dXJlIG9uIGEgc3Vucm9vZi4KKyAqCisgKiBNYXggPSB2ZW50IG9wZW4KKyAqIE1pbiA9IHZlbnQgY2xvc2VkCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEV8VkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9XSU5ET1dfVkVOVF9NT1ZFICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCQzMpCisKKy8qKgorICogV2luZG93IExvY2sKKyAqCisgKiBUcnVlIGluZGljYXRlcyB3aW5kb3dzIGFyZSBsb2NrZWQgYW5kIGNhbid0IGJlIG1vdmVkLgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9CT09MRUFOCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKKyAqIEBkYXRhX21lbWJlciBib29sZWFuX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9XSU5ET1dfTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCQzQpCisKKworCisvKioKICAqICBIL1cgc3BlY2lmaWMsIG5vbi1zdGFuZGFyZCBwcm9wZXJ0eSBjYW4gYmUgYWRkZWQgYXMgbmVjZXNzYXJ5LiBTdWNoIHByb3BlcnR5IHNob3VsZCB1c2UKICAqICBwcm9wZXJ0eSBudW1iZXIgaW4gcmFuZ2Ugb2YgW1ZFSElDTEVfUFJPUEVSVFlfQ1VTVE9NX1NUQVJULCBWRUhJQ0xFX1BST1BFUlRZX0NVU1RPTV9FTkRdLgogICogIERlZmluaXRpb24gb2YgcHJvcGVydHkgaW4gdGhpcyByYW5nZSBpcyBjb21wbGV0ZWx5IHVwIHRvIGVhY2ggSEFMIGltcGxlbWVudGF0aW9uLgpAQCAtMTAyNywyMCArMTg2MCwyMCBAQAogICogIGluY2x1ZGUgY29uZmlnX3N0cmluZyBvZiAiY29tLlhZWi5zb21lX2Z1cnRoZXJfZGV0YWlscyIuCiAgKiAgQHJhbmdlX3N0YXJ0CiAgKi8KLSNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9DVVNUT01fU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICgweDcwMDAwMDAwKQorI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0NVU1RPTV9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg3MDAwMDAwMCkKIC8qKiBAcmFuZ2VfZW5kICovCi0jZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQ1VTVE9NX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAoMHg3M2ZmZmZmZikKKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9DVVNUT01fRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NzNmZmZmZmYpCiAKIC8qKgogICogUHJvcGVydHkgcmFuZ2UgYWxsb2NhdGVkIGZvciBzeXN0ZW0ncyBpbnRlcm5hbCB1c2FnZSBsaWtlIHRlc3RpbmcuIEhBTCBzaG91bGQgbmV2ZXIgZGVjbGFyZQogICogcHJvcGVydHkgaW4gdGhpcyByYW5nZS4KICAqIEByYW5nZV9zdGFydAogICovCi0jZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfSU5URVJOQUxfU1RBUlQgICAgICAgICAgICAgICAgICAgICAoMHg3NDAwMDAwMCkKKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9JTlRFUk5BTF9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NzQwMDAwMDApCiAvKioKICAqIEByYW5nZV9lbmQKICAqLwotI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0lOVEVSTkFMX0VORCAgICAgICAgICAgICAgICAgICAgICAgKDB4NzRmZmZmZmYpCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfSU5URVJOQUxfRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDc0ZmZmZmZmKQogCiAvKioKICAqIFZhbHVlIHR5cGVzIGZvciB2YXJpb3VzIHByb3BlcnRpZXMuCkBAIC0xMDg2LDEyICsxOTE5LDE0IEBACiAgICAgVkVISUNMRV9VTklUX1RZUEVfTUVURVIgICAgICAgICAgICAgICAgID0gMHgwMDAwMDAyMSwKICAgICBWRUhJQ0xFX1VOSVRfVFlQRV9LSUxPTUVURVIgICAgICAgICAgICAgPSAweDAwMDAwMDIzLAogICAgIC8vIHRlbXBlcmF0dXJlCi0gICAgVkVISUNMRV9VTklUX1RZUEVfQ0VMQ0lVUyAgICAgICAgICAgICAgID0gMHgwMDAwMDAzMCwKKyAgICBWRUhJQ0xFX1VOSVRfVFlQRV9DRUxTSVVTICAgICAgICAgICAgICAgPSAweDAwMDAwMDMwLAorICAgIFZFSElDTEVfVU5JVF9UWVBFX0ZBSFJFTkhFSVQgICAgICAgICAgICA9IDB4MDAwMDAwMzEsCisgICAgVkVISUNMRV9VTklUX1RZUEVfS0VMVklOICAgICAgICAgICAgICAgID0gMHgwMDAwMDAzMiwKICAgICAvLyB2b2x1bWUKICAgICBWRUhJQ0xFX1VOSVRfVFlQRV9NSUxMSUxJVEVSICAgICAgICAgICAgPSAweDAwMDAwMDQwLAogICAgIC8vIHRpbWUKICAgICBWRUhJQ0xFX1VOSVRfVFlQRV9OQU5PX1NFQ1MgICAgICAgICAgICAgPSAweDAwMDAwMDUwLAotICAgIFZFSElDTEVfVU5PVF9UWVBFX1NFQ1MgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwNTMsCisgICAgVkVISUNMRV9VTklUX1RZUEVfU0VDUyAgICAgICAgICAgICAgICAgID0gMHgwMDAwMDA1MywKICAgICBWRUhJQ0xFX1VOSVRfVFlQRV9ZRUFSICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDU5LAogfTsKIApAQCAtMTEwNSw4ICsxOTQwLDEyIEBACiAgICAgICovCiAgICAgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX1NUQVRJQyAgICAgICAgID0gMHgwMCwKICAgICAvKioKLSAgICAgKiBQcm9wZXJ0eSBvZiB0aGlzIHR5cGUgd2lsbCBiZSByZXBvcnRlZCB3aGVuIHRoZXJlIGlzIGEgY2hhbmdlLiBnZXQgc2hvdWxkIHJldHVybiB0aGUKLSAgICAgKiBjdXJyZW50IHZhbHVlLgorICAgICAqIFByb3BlcnR5IG9mIHRoaXMgdHlwZSB3aWxsIGJlIHJlcG9ydGVkIHdoZW4gdGhlcmUgaXMgYSBjaGFuZ2UuCisgICAgICogZ2V0IGNhbGwgc2hvdWxkIHJldHVybiB0aGUgY3VycmVudCB2YWx1ZS4KKyAgICAgKiBTZXQgb3BlcmF0aW9uIGZvciB0aGlzIHByb3BlcnR5IGlzIGFzc3VtZWQgdG8gYmUgYXN5bmNocm9ub3VzLiBXaGVuIHRoZSBwcm9wZXJ0eSBpcyByZWFkCisgICAgICogKGdldCkgYWZ0ZXIgc2V0LCBpdCBtYXkgc3RpbGwgcmV0dXJuIG9sZCB2YWx1ZSB1bnRpbCB1bmRlcmx5aW5nIEgvVyBiYWNraW5nIHRoaXMgcHJvcGVydHkKKyAgICAgKiBoYXMgYWN0dWFsbHkgY2hhbmdlZCB0aGUgc3RhdGUuIE9uY2Ugc3RhdGUgaXMgY2hhbmdlZCwgdGhlIHByb3BlcnR5IHdpbGwgZGlzcGF0Y2ggY2hhbmdlZAorICAgICAqIHZhbHVlIGFzIGV2ZW50LgogICAgICAqLwogICAgIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UgICAgICA9IDB4MDEsCiAgICAgLyoqCkBAIC0xMTE0LDYgKzE5NTMsMTggQEAKICAgICAgKiB0aGUgZGF0YS4KICAgICAgKi8KICAgICBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfQ09OVElOVU9VUyAgICAgPSAweDAyLAorICAgIC8qKgorICAgICAqIFByb3BlcnR5IG9mIHRoaXMgdHlwZSBtYXkgYmUgcG9sbGVkIHRvIGdldCB0aGUgY3VycmVudCB2YWx1ZS4KKyAgICAgKi8KKyAgICBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfUE9MTCAgICAgICAgICAgPSAweDAzLAorICAgIC8qKgorICAgICAqIFRoaXMgaXMgZm9yIHByb3BlcnR5IHdoZXJlIGNoYW5nZSBldmVudCBzaG91bGQgYmUgc2VudCBvbmx5IHdoZW4gdGhlIHZhbHVlIGlzCisgICAgICogc2V0IGZyb20gZXh0ZXJuYWwgY29tcG9uZW50LiBOb3JtYWwgdmFsdWUgY2hhbmdlIHdpbGwgbm90IHRyaWdnZXIgZXZlbnQuCisgICAgICogRm9yIGV4YW1wbGUsIGNsb2NrIHByb3BlcnR5IGNhbiBzZW5kIGNoYW5nZSBldmVudCBvbmx5IHdoZW4gaXQgaXMgc2V0LCBvdXRzaWRlIGFuZHJvaWQsCisgICAgICogZm9yIGNhc2UgbGlrZSB1c2VyIHNldHRpbmcgdGltZSBvciB0aW1lIGdldHRpbmcgdXBkYXRlLiBUaGVyZSBpcyBubyBuZWVkIHRvIHNlbmQgaXQKKyAgICAgKiBwZXIgZXZlcnkgdmFsdWUgY2hhbmdlLgorICAgICAqLworICAgIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9TRVQgICAgICAgICA9IDB4MDQsCiB9OwogCiAvKioKQEAgLTEyMzgsMTcgKzIwODksMTUgQEAKICAqIFZhcmlvdXMgU2VhdHMgaW4gdGhlIGNhci4KICAqLwogZW51bSB2ZWhpY2xlX3NlYXQgewotICAgIFZFSElDTEVfU0VBVF9EUklWRVJfTEhEICAgICAgICAgICAgID0gMHgwMDAxLAotICAgIFZFSElDTEVfU0VBVF9EUklWRVJfUkhEICAgICAgICAgICAgID0gMHgwMDAyLAotICAgIFZFSElDTEVfU0VBVF9ST1dfMV9QQVNTRU5HRVJfTEVGVCAgID0gMHgwMDEwLAotICAgIFZFSElDTEVfU0VBVF9ST1dfMV9QQVNTRU5HRVJfQ0VOVEVSID0gMHgwMDIwLAotICAgIFZFSElDTEVfU0VBVF9ST1dfMV9QQVNTRU5HRVJfUklHSFQgID0gMHgwMDQwLAotICAgIFZFSElDTEVfU0VBVF9ST1dfMl9QQVNTRU5HRVJfTEVGVCAgID0gMHgwMTAwLAotICAgIFZFSElDTEVfU0VBVF9ST1dfMl9QQVNTRU5HRVJfQ0VOVEVSID0gMHgwMjAwLAotICAgIFZFSElDTEVfU0VBVF9ST1dfMl9QQVNTRU5HRVJfUklHSFQgID0gMHgwNDAwLAotICAgIFZFSElDTEVfU0VBVF9ST1dfM19QQVNTRU5HRVJfTEVGVCAgID0gMHgxMDAwLAotICAgIFZFSElDTEVfU0VBVF9ST1dfM19QQVNTRU5HRVJfQ0VOVEVSID0gMHgyMDAwLAotICAgIFZFSElDTEVfU0VBVF9ST1dfM19QQVNTRU5HRVJfUklHSFQgID0gMHg0MDAwCisgICAgVkVISUNMRV9TRUFUX1JPV18xX0xFRlQgICA9IDB4MDAwMSwKKyAgICBWRUhJQ0xFX1NFQVRfUk9XXzFfQ0VOVEVSID0gMHgwMDAyLAorICAgIFZFSElDTEVfU0VBVF9ST1dfMV9SSUdIVCAgPSAweDAwMDQsCisgICAgVkVISUNMRV9TRUFUX1JPV18yX0xFRlQgICA9IDB4MDAxMCwKKyAgICBWRUhJQ0xFX1NFQVRfUk9XXzJfQ0VOVEVSID0gMHgwMDIwLAorICAgIFZFSElDTEVfU0VBVF9ST1dfMl9SSUdIVCAgPSAweDAwNDAsCisgICAgVkVISUNMRV9TRUFUX1JPV18zX0xFRlQgICA9IDB4MDEwMCwKKyAgICBWRUhJQ0xFX1NFQVRfUk9XXzNfQ0VOVEVSID0gMHgwMjAwLAorICAgIFZFSElDTEVfU0VBVF9ST1dfM19SSUdIVCAgPSAweDA0MDAKIH07CiAKIC8qKgpAQCAtMTI4Miw2ICsyMTMxLDcgQEAKICAgICBWRUhJQ0xFX01JUlJPUl9EUklWRVJfUklHSFQgID0gMHgwMDAwMDAwMiwKICAgICBWRUhJQ0xFX01JUlJPUl9EUklWRVJfQ0VOVEVSID0gMHgwMDAwMDAwNCwKIH07CisKIGVudW0gdmVoaWNsZV90dXJuX3NpZ25hbCB7CiAgICAgVkVISUNMRV9TSUdOQUxfTk9ORSAgICAgICAgID0gMHgwMCwKICAgICBWRUhJQ0xFX1NJR05BTF9SSUdIVCAgICAgICAgPSAweDAxLApAQCAtMTI4OSw2ICsyMTM5LDE1IEBACiAgICAgVkVISUNMRV9TSUdOQUxfRU1FUkdFTkNZICAgID0gMHgwNAogfTsKIAorZW51bSB2ZWhpY2xlX3pvbmVfdHlwZSB7CisgICAgVkVISUNMRV9aT05FX1RZUEVfTk9ORSAgICAgID0gMHgwMCwKKyAgICBWRUhJQ0xFX1pPTkVfVFlQRV9aT05FICAgID0gMHgwMSwKKyAgICBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUICAgICAgPSAweDAyLAorICAgIFZFSElDTEVfWk9ORV9UWVBFX0RPT1IgICAgICA9IDB4MDQsCisgICAgVkVISUNMRV9aT05FX1RZUEVfV0lORE9XICAgID0gMHgxMCwKKyAgICBWRUhJQ0xFX1pPTkVfVFlQRV9NSVJST1IgICAgPSAweDIwLAorfTsKKwogLyoKICAqIEJvb2xlYW4gdHlwZS4KICAqLwpAQCAtMTQ2OCw2ICsyMzI3LDcgQEAKICAgICAgICAgdmVoaWNsZV9ib29sZWFuX3QgbWF4X2RlZnJvc3Rfb247CiAgICAgICAgIHZlaGljbGVfYm9vbGVhbl90IHJlY2lyY19vbjsKICAgICAgICAgdmVoaWNsZV9ib29sZWFuX3QgZHVhbF9vbjsKKyAgICAgICAgdmVoaWNsZV9ib29sZWFuX3QgYXV0b19vbjsKICAgICAgICAgdmVoaWNsZV9ib29sZWFuX3QgcG93ZXJfb247CiAKICAgICAgICAgZmxvYXQgdGVtcGVyYXR1cmVfY3VycmVudDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaGFyZHdhcmUvdmVoaWNsZV9jYW1lcmEuaCBiL2luY2x1ZGUvaGFyZHdhcmUvdmVoaWNsZV9jYW1lcmEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA3NWFlZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2hhcmR3YXJlL3ZlaGljbGVfY2FtZXJhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpZm5kZWYgQU5EUk9JRF9WRUhJQ0xFX0NBTUVSQV9JTlRFUkZBQ0VfSAotI2RlZmluZSBBTkRST0lEX1ZFSElDTEVfQ0FNRVJBX0lOVEVSRkFDRV9ICi0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi0jaW5jbHVkZSA8aGFyZHdhcmUvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxjdXRpbHMvbmF0aXZlX2hhbmRsZS5oPgotI2luY2x1ZGUgPHN5c3RlbS93aW5kb3cuaD4KLQotX19CRUdJTl9ERUNMUwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgVkVISUNMRV9DQU1FUkFfSEVBREVSX1ZFUlNJT04gICAgICAgICAgMQotI2RlZmluZSBWRUhJQ0xFX0NBTUVSQV9NT0RVTEVfQVBJX1ZFUlNJT05fMV8wICBIQVJEV0FSRV9NT0RVTEVfQVBJX1ZFUlNJT04oMSwgMCkKLSNkZWZpbmUgVkVISUNMRV9DQU1FUkFfREVWSUNFX0FQSV9WRVJTSU9OXzFfMCAgSEFSRFdBUkVfREVWSUNFX0FQSV9WRVJTSU9OXzIoMSwgMCwgVkVISUNMRV9DQU1FUkFfSEVBREVSX1ZFUlNJT04pCi0KLS8qKgotICogVmVoaWNsZSBDYW1lcmEgdG8gcHJvdmlkZSBpbnRlcmZhY2VzIGZvciBjb250cm9sbGluZyBjYW1lcmFzCi0gKi8KLQotLyoqCi0gKiBUaGUgaWQgb2YgdGhpcyBtb2R1bGUKLSAqLwotI2RlZmluZSBWRUhJQ0xFX0NBTUVSQV9IQVJEV0FSRV9NT0RVTEVfSUQgICJ2ZWhpY2xlX2NhbWVyYSIKLQotLyoqCi0gKiAgTmFtZSBvZiB0aGUgdmVoaWNsZSBkZXZpY2UgdG8gb3Blbi4gIEV4dGVuZCB0aGlzIGxpc3QgYXMKLSAqICBtb3JlIGNhbWVyYXMgYXJlIGFkZGVkLiAgRWFjaCBjYW1lcmEgZGVmaW5lZCBpbiB2ZWhpY2xlX2NhbWVyYV90eXBlX3QKLSAqICBzaGFsbCBoYXZlIGEgc3RyaW5nIGRlZmluZWQgZm9yIGl0LgotICovCi0jZGVmaW5lIFZFSElDTEVfQ0FNRVJBX1JWQ19ERVZJQ0UgICAgICAgInZlaGljbGVfY2FtZXJhX3J2Y19kZXZpY2UiCi0KLS8qKgotICogRWFjaCBjYW1lcmEgb24gdGhlIGNhciBzaGFsbCBiZSBlbnVtZXJhdGVkCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gICAgVkVISUNMRV9DQU1FUkFfUlZDID0gMSwKLX0gdmVoaWNsZV9jYW1lcmFfdHlwZV90OwotCi0vKioKLSAqIERlc2NyaWJlcyB0aGUgY3VycmVudCBzdGF0ZSBvZiBjYW1lcmEgZGV2aWNlCi0gKi8KLXR5cGVkZWYgc3RydWN0IHsKLSAgICB1aW50MzJfdCBvdmVybGF5X29uOwotICAgIHVpbnQzMl90IGNhbWVyYV9vbjsKLX0gdmVoaWNsZV9jYW1lcmFfc3RhdGVfdDsKLQotLyoqCi0gKiBCaXRtYXNrIG9mIGZlYXR1cmVzIHN1cHBvcnRlZCBieSBhIGNhbWVyYSBtb2R1bGUKLSAqLwotZW51bSB7Ci0gICAgVkVISUNMRV9DQU1FUkFfQ09ORklHX0ZMQUdfQU5EUk9JRF9PVkVSTEFZX1NVUFBPUlQgICAgICA9IDB4MSwKLSAgICBWRUhJQ0xFX0NBTUVSQV9DT05GSUdfRkxBR19DQU1FUkFfQ1JPUF9TVVBQT1JUICAgICAgICAgID0gMHgyLAotICAgIFZFSElDTEVfQ0FNRVJBX0NPTkZJR19GTEFHX0NBTUVSQV9QT1NJVElPTklOR19TVVBQT1JUICAgPSAweDQKLX0gdmVoaWNsZV9jYW1lcmFfY29uZmlnX2ZsYWc7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICB1aW50MzJfdCBjYXBhYmlsaXRlc19mbGFnczsKLSAgICB1aW50MzJfdCBjYW1lcmFfd2lkdGg7Ci0gICAgdWludDMyX3QgY2FtZXJhX2hlaWdodDsKLSAgICB1aW50MzJfdCBkaXNwbGF5X3dpZHRoOwotICAgIHVpbnQzMl90IGRpc3BsYXlfaGVpZ2h0OwotfSB2ZWhpY2xlX2NhbWVyYV9jYXBfdDsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqCi0gKiBFdmVyeSBoYXJkd2FyZSBtb2R1bGUgbXVzdCBoYXZlIGEgZGF0YSBzdHJ1Y3R1cmUgbmFtZWQgSEFMX01PRFVMRV9JTkZPX1NZTQotICogYW5kIHRoZSBmaWVsZHMgb2YgdGhpcyBkYXRhIHN0cnVjdHVyZSBtdXN0IGJlZ2luIHdpdGggaHdfbW9kdWxlX3QKLSAqIGZvbGxvd2VkIGJ5IG1vZHVsZSBzcGVjaWZpYyBpbmZvcm1hdGlvbi4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotICAgIHN0cnVjdCBod19tb2R1bGVfdCBjb21tb247Ci0gICAgLyoqCi0gICAgICogUXVlcmllcyB0aGUgSFcgZm9yIHRoZSBjYW1lcmFzIGluc3RhbGxlZCBvbiB0aGUgdmVoaWNsZQotICAgICAqIEBwYXJhbSBudW1fY2FtZXJhcyAtIG51bWJlciBvZiBjYW1lcmEgZGV2aWNlcyBhdmFpbGFibGUuICBJZgotICAgICAqICAgICAgICAgICAgICAgICAgICAwIGlzIHJldHVybmVkLCBhbiBlcnJvciBoYXMgb2NjdXJyZWQgYW5kCi0gICAgICogICAgICAgICAgICAgICAgICAgIHRoZSByZXR1cm4gcG9pbnRlciBzaGFsbCBiZSBOVUxMLgotICAgICAqIEByZXR1cm4gcG9pbnRlciB0byBhbiBhcnJheSBvZiB2ZWhpY2xlX2NhbWVyYV90eXBlX3QgdG8KLSAgICAgKiAgICAgICAgIGRlbm90ZSB3aGljaCBjYW1lcmFzIGFyZSBpbnN0YWxsZWQuICBUaGlzIHBvaW50ZXIgaXMKLSAgICAgKiAgICAgICAgIG9ubHkgdmFsaWQgd2hpbGUgdGhlIHZlaGljbGUgaGFsIGlzIGxvYWRlZC4gIElmIHRoZQotICAgICAqICAgICAgICAgcG9pbnRlciBpcyBOVUxMLCB0aGVuIGFuIGVycm9yIGhhcyBvY2N1cnJlZCBhbmQKLSAgICAgKiAgICAgICAgIG51bV9jYW1lcmFzIHNoYWxsIGJlIDAuCi0gICAgICovCi0gICAgY29uc3QgdWludDMyX3QgKiAoKmdldF9jYW1lcmFfZGV2aWNlX2xpc3QpKHVpbnQzMl90ICpudW1fY2FtZXJhcyk7Ci19IHZlaGljbGVfY2FtZXJhX21vZHVsZV90OwotCi0KLXR5cGVkZWYgc3RydWN0IHZlaGljbGVfY2FtZXJhX2RldmljZV90IHsKLSAgICBzdHJ1Y3QgaHdfZGV2aWNlX3QgY29tbW9uOwotCi0gICAgY29uc3QgdWludDMyX3QgY2FtZXJhX3R5cGU7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhpcyBjYW1lcmEuCi0gICAgICogQHBhcmFtIGRldmljZSAtIGRldmljZSBoYW5kbGUKLSAgICAgKiBAcGFyYW0gY2FwIC0gcG9pbnRlciB0byBjYXBhYmlsaXRpZXMgZmxhZ3MgYmVpbmcgcmV0dXJuZWQKLSAgICAgKiBAcmV0dXJuIDAgb24gc3VjY2VzcwotICAgICAqICAgICAgICAgIC1FUEVSTSBpZiBkZXZpY2UgaXMgaW52YWxpZCBvciBub3QgaW5pdGlhbGl6ZWQKLSAgICAgKi8KLSAgICBpbnQgKCpnZXRfY2FwYWJpbGl0aWVzKShzdHJ1Y3QgdmVoaWNsZV9jYW1lcmFfZGV2aWNlX3QgKmRldmljZSwgdmVoaWNsZV9jYW1lcmFfY2FwX3QgKmNhcCk7Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGNhbWVyYSBjcm9wIHNldHRpbmdzLgotICAgICAqIEBwYXJhbSBkZXZpY2UgLSBkZXZpY2UgaGFuZGxlCi0gICAgICogQHBhcmFtIHJlY3QgLSBjdXJyZW50IGNhbWVyYSBjcm9wIHNldHRpbmdzCi0gICAgICogQHJldHVybiAwIG9uIHN1Y2Nlc3MKLSAgICAgKiAgICAgICAgICAtRVBFUk0gaWYgZGV2aWNlIGlzIG5vdCBpbml0aWFsaXplZAotICAgICAqICAgICAgICAgIC1lcnJubyBvbiBlcnJvcgotICAgICAqLwotICAgIGludCAoKmdldF9jYW1lcmFfY3JvcCkoc3RydWN0IHZlaGljbGVfY2FtZXJhX2RldmljZV90ICpkZXZpY2UsIGFuZHJvaWRfbmF0aXZlX3JlY3RfdCAqcmVjdCk7Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBjYW1lcmEgY3JvcC4KLSAgICAgKiBAcGFyYW0gZGV2aWNlIC0gZGV2aWNlIGhhbmRsZQotICAgICAqIEBwYXJhbSByZWN0IC0gYXJlYSBvZiBjYW1lcmEgaW5wdXQgdG8gY3JvcC4gIE11c3QgZml0IHdpdGhpbgotICAgICAqICAgICAgICAgICAgIGNhbWVyYSB3aWR0aCBhbmQgaGVpZ2h0IGZyb20gY2FtZXJhIGNhcGFiaWxpdGllcy4KLSAgICAgKiBAcmV0dXJuIDAgb24gc3VjY2VzcwotICAgICAqICAgICAgICAgIC1FUEVSTSBpZiBkZXZpY2UgaXMgbm90IGluaXRpYWxpemVkCi0gICAgICogICAgICAgICAgLWVycm5vIG9uIGVycm9yCi0gICAgICovCi0gICAgaW50ICgqc2V0X2NhbWVyYV9jcm9wKShzdHJ1Y3QgdmVoaWNsZV9jYW1lcmFfZGV2aWNlX3QgKmRldmljZSwgY29uc3QgYW5kcm9pZF9uYXRpdmVfcmVjdF90ICpyZWN0KTsKLQotICAgIC8qKgotICAgICAqIEdldHMgcG9zaXRpb24gb2YgdGhlIGNhbWVyYSBvbiB0aGUgZGlzcGxheS4KLSAgICAgKiBAcGFyYW0gZGV2aWNlIC0gZGV2aWNlIGhhbmRsZQotICAgICAqIEBwYXJhbSByZWN0IC0gYXJlYSBvZiBkaXNwbGF5IHRoZSBjYW1lcmEgd2lsbCBhcHBlYXIgd2hlbiBvbgotICAgICAqIEByZXR1cm4gMCBvbiBzdWNjZXNzCi0gICAgICogICAgICAgICAgLUVQRVJNIGlmIGRldmljZSBpcyBub3QgaW5pdGlhbGl6ZWQKLSAgICAgKiAgICAgICAgICAtZXJybm8gb24gZXJyb3IKLSAgICAgKi8KLSAgICBpbnQgKCpnZXRfY2FtZXJhX3Bvc2l0aW9uKShzdHJ1Y3QgdmVoaWNsZV9jYW1lcmFfZGV2aWNlX3QgKmRldmljZSwgYW5kcm9pZF9uYXRpdmVfcmVjdF90ICpyZWN0KTsKLQotICAgIC8qKgotICAgICAqIFNldHMgcG9zaXRpb24gb2YgdGhlIGNhbWVyYSBvbiB0aGUgZGlzcGxheS4KLSAgICAgKiBAcGFyYW0gZGV2aWNlIC0gZGV2aWNlIGhhbmRsZQotICAgICAqIEBwYXJhbSByZWN0IC0gYXJlYSBvZiBkaXNwbGF5IHRoZSBjYW1lcmEgd2lsbCBhcHBlYXIgd2hlbiBvbi4KLSAgICAgKiAgICAgICAgICAgICBNdXN0IGZpdCB3aXRoaW4gZGlzcGxheSB3aWR0aCBhbmQgaGVpZ2h0IGZyb20KLSAgICAgKiAgICAgICAgICAgICBjYW1lcmEgY2FwYWJpbGl0aWVzLgotICAgICAqIEByZXR1cm4gMCBvbiBzdWNjZXNzCi0gICAgICogICAgICAgICAgLUVQRVJNIGlmIGRldmljZSBpcyBub3QgaW5pdGlhbGl6ZWQKLSAgICAgKiAgICAgICAgICAtZXJybm8gb24gZXJyb3IKLSAgICAgKi8KLSAgICBpbnQgKCpzZXRfY2FtZXJhX3Bvc2l0aW9uKShzdHJ1Y3QgdmVoaWNsZV9jYW1lcmFfZGV2aWNlX3QgKmRldmljZSwgY29uc3QgYW5kcm9pZF9uYXRpdmVfcmVjdF90ICpyZWN0KTsKLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIGN1cnJlbnQgY2FtZXJhIHN0YXRlLgotICAgICAqIEBwYXJhbSBkZXZpY2UgLSBkZXZpY2UgaGFuZGxlCi0gICAgICogQHBhcmFtIHN0YXRlIC0gbGFzdCBzZXR0aW5nIGZvciB0aGUgY2FtZXJhCi0gICAgICogQHJldHVybiAwIG9uIHN1Y2Nlc3MKLSAgICAgKiAgICAgICAgICAtRVBFUk0gaWYgZGV2aWNlIGlzIG5vdCBpbml0aWFsaXplZAotICAgICAqLwotICAgIGludCAoKmdldF9jYW1lcmFfc3RhdGUpKHN0cnVjdCB2ZWhpY2xlX2NhbWVyYV9kZXZpY2VfdCAqZGV2aWNlLCB2ZWhpY2xlX2NhbWVyYV9zdGF0ZV90ICpzdGF0ZSk7Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBjYW1lcmEgc3RhdGUuCi0gICAgICogQHBhcmFtIGRldmljZSAtIGRldmljZSBoYW5kbGUKLSAgICAgKiBAcGFyYW0gc3RhdGUgLSBkZXNpcmVkIHNldHRpbmcgZm9yIHRoZSBjYW1lcmEKLSAgICAgKiBAcmV0dXJuIDAgb24gc3VjY2VzcwotICAgICAqICAgICAgICAgIC1FUEVSTSBpZiBkZXZpY2UgaXMgbm90IGluaXRpYWxpemVkCi0gICAgICogICAgICAgICAgLWVycm5vIG9uIGVycm9yCi0gICAgICovCi0gICAgaW50ICgqc2V0X2NhbWVyYV9zdGF0ZSkoc3RydWN0IHZlaGljbGVfY2FtZXJhX2RldmljZV90ICpkZXZpY2UsIGNvbnN0IHZlaGljbGVfY2FtZXJhX3N0YXRlX3QgKnN0YXRlKTsKLX0gdmVoaWNsZV9jYW1lcmFfZGV2aWNlX3Q7Ci0KLV9fRU5EX0RFQ0xTCi0KLSNlbmRpZiAgLy8gQU5EUk9JRF9WRUhJQ0xFX0NBTUVSQV9JTlRFUkZBQ0VfSApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9SRUFETUUuYW5kcm9pZCBiL21vZHVsZXMvUkVBRE1FLmFuZHJvaWQKaW5kZXggNTdhYmI3Mi4uN2ZmYzBmNCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9SRUFETUUuYW5kcm9pZAorKysgYi9tb2R1bGVzL1JFQURNRS5hbmRyb2lkCkBAIC00LDEzICs0LDEzIEBACiBsaWJoYXJkd2FyZS5zbyBldmVudHVhbGx5IHNob3VsZCBjb250YWluICpqdXN0KiB0aGUgSEFMIGh1YgogKGhhcmR3YXJlLmMpLCBldmVyeXRoaW5nIGluIGl0IHNob3VsZCBiZSByZXdyaXR0ZW4gYXMgbW9kdWxlcy4KIAotTW9kdWxlcyBhcmUgLnNvIGluIC9zeXN0ZW0vbGlicy9ody8gYW5kIGhhdmUgYSB3ZWxsIGRlZmluZWQgbmFtaW5nCitNb2R1bGVzIGFyZSAuc28gaW4gL3ZlbmRvci9saWIvaHcvIGFuZCBoYXZlIGEgd2VsbCBkZWZpbmVkIG5hbWluZwogY29udmVudGlvbjoKIAotICAgIC9zeXN0ZW0vbGlicy9ody88Kl9IQVJEV0FSRV9NT0RVTEVfSUQ+Ljxyby5wcm9kdWN0LmJvYXJkPi5zbwotICAgIC9zeXN0ZW0vbGlicy9ody88Kl9IQVJEV0FSRV9NT0RVTEVfSUQ+Ljxyby5ib2FyZC5wbGF0Zm9ybT4uc28KLSAgICAvc3lzdGVtL2xpYnMvaHcvPCpfSEFSRFdBUkVfTU9EVUxFX0lEPi48cm8uYXJjaD4uc28KLSAgICAvc3lzdGVtL2xpYnMvaHcvPCpfSEFSRFdBUkVfTU9EVUxFX0lEPi5kZWZhdWx0LnNvCisgICAgL3ZlbmRvci9saWIvaHcvPCpfSEFSRFdBUkVfTU9EVUxFX0lEPi48cm8ucHJvZHVjdC5ib2FyZD4uc28KKyAgICAvdmVuZG9yL2xpYi9ody88Kl9IQVJEV0FSRV9NT0RVTEVfSUQ+Ljxyby5ib2FyZC5wbGF0Zm9ybT4uc28KKyAgICAvdmVuZG9yL2xpYi9ody88Kl9IQVJEV0FSRV9NT0RVTEVfSUQ+Ljxyby5hcmNoPi5zbworICAgIC92ZW5kb3IvbGliL2h3LzwqX0hBUkRXQVJFX01PRFVMRV9JRD4uZGVmYXVsdC5zbwogCiBUaGV5IGFsc28gaGF2ZSBhIHdlbGwgZGVmaW5lZCBpbnRlcmZhY2Ugd2hpY2ggbGl2ZXMgaW4gaW5jbHVkZS9oYXJkd2FyZS8uCiAKZGlmZiAtLWdpdCBhL21vZHVsZXMvYXVkaW8vQW5kcm9pZC5icCBiL21vZHVsZXMvYXVkaW8vQW5kcm9pZC5icAppbmRleCA4MGNhYjE5Li44NGRhZWFkIDEwMDY0NAotLS0gYS9tb2R1bGVzL2F1ZGlvL0FuZHJvaWQuYnAKKysrIGIvbW9kdWxlcy9hdWRpby9BbmRyb2lkLmJwCkBAIC0yMSwxMSArMjEsMTIgQEAKIGNjX2xpYnJhcnlfc2hhcmVkIHsKICAgICBuYW1lOiAiYXVkaW8ucHJpbWFyeS5kZWZhdWx0IiwKICAgICByZWxhdGl2ZV9pbnN0YWxsX3BhdGg6ICJodyIsCisgICAgcHJvcHJpZXRhcnk6IHRydWUsCiAgICAgc3JjczogWyJhdWRpb19ody5jIl0sCiAgICAgc2hhcmVkX2xpYnM6IFsKICAgICAgICAgImxpYmxvZyIsCiAgICAgXSwKLSAgICBjZmxhZ3M6IFsiLVduby11bnVzZWQtcGFyYW1ldGVyIl0sCisgICAgY2ZsYWdzOiBbIi1XYWxsIiwgIi1XZXJyb3IiLCAiLVduby11bnVzZWQtcGFyYW1ldGVyIl0sCiB9CiAKIC8vIFRoZSBzdHViIGF1ZGlvIEhBTCBtb2R1bGUsIGlkZW50aWNhbCB0byB0aGUgZGVmYXVsdCBhdWRpbyBoYWwsIGJ1dCB3aXRoCkBAIC0zNywxMSArMzgsMTIgQEAKIGNjX2xpYnJhcnlfc2hhcmVkIHsKICAgICBuYW1lOiAiYXVkaW8uc3R1Yi5kZWZhdWx0IiwKICAgICByZWxhdGl2ZV9pbnN0YWxsX3BhdGg6ICJodyIsCisgICAgcHJvcHJpZXRhcnk6IHRydWUsCiAgICAgc3JjczogWyJhdWRpb19ody5jIl0sCiAgICAgc2hhcmVkX2xpYnM6IFsKICAgICAgICAgImxpYmxvZyIsCiAgICAgXSwKLSAgICBjZmxhZ3M6IFsiLVduby11bnVzZWQtcGFyYW1ldGVyIl0sCisgICAgY2ZsYWdzOiBbIi1XYWxsIiwgIi1XZXJyb3IiLCAiLVduby11bnVzZWQtcGFyYW1ldGVyIl0sCiB9CiAKIC8vIFRoZSBzdHViIGF1ZGlvIHBvbGljeSBIQUwgbW9kdWxlIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBza2VsZXRvbiBmb3IKQEAgLTQ5LDkgKzUxLDEwIEBACiBjY19saWJyYXJ5X3NoYXJlZCB7CiAgICAgbmFtZTogImF1ZGlvX3BvbGljeS5zdHViIiwKICAgICByZWxhdGl2ZV9pbnN0YWxsX3BhdGg6ICJodyIsCisgICAgcHJvcHJpZXRhcnk6IHRydWUsCiAgICAgc3JjczogWyJhdWRpb19wb2xpY3kuYyJdLAogICAgIHNoYXJlZF9saWJzOiBbCiAgICAgICAgICJsaWJsb2ciLAogICAgIF0sCi0gICAgY2ZsYWdzOiBbIi1Xbm8tdW51c2VkLXBhcmFtZXRlciJdLAorICAgIGNmbGFnczogWyItV2FsbCIsICItV2Vycm9yIiwgIi1Xbm8tdW51c2VkLXBhcmFtZXRlciJdLAogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hdWRpby9hdWRpb19ody5jIGIvbW9kdWxlcy9hdWRpby9hdWRpb19ody5jCmluZGV4IDNjMjg4Y2EuLjhmNzNmMTEgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYXVkaW8vYXVkaW9faHcuYworKysgYi9tb2R1bGVzL2F1ZGlvL2F1ZGlvX2h3LmMKQEAgLTMwMCwxMSArMzAwLDkgQEAKIHsKICAgICBBTE9HVigiYWRldl9vcGVuX291dHB1dF9zdHJlYW0uLi4iKTsKIAotICAgIHN0cnVjdCBzdHViX2F1ZGlvX2RldmljZSAqbGFkZXYgPSAoc3RydWN0IHN0dWJfYXVkaW9fZGV2aWNlICopZGV2OwotICAgIHN0cnVjdCBzdHViX3N0cmVhbV9vdXQgKm91dDsKLSAgICBpbnQgcmV0OwotCi0gICAgb3V0ID0gKHN0cnVjdCBzdHViX3N0cmVhbV9vdXQgKiljYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzdHViX3N0cmVhbV9vdXQpKTsKKyAgICAqc3RyZWFtX291dCA9IE5VTEw7CisgICAgc3RydWN0IHN0dWJfc3RyZWFtX291dCAqb3V0ID0KKyAgICAgICAgICAgIChzdHJ1Y3Qgc3R1Yl9zdHJlYW1fb3V0ICopY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgc3R1Yl9zdHJlYW1fb3V0KSk7CiAgICAgaWYgKCFvdXQpCiAgICAgICAgIHJldHVybiAtRU5PTUVNOwogCkBAIC0zMjgsMTEgKzMyNiw2IEBACiAKICAgICAqc3RyZWFtX291dCA9ICZvdXQtPnN0cmVhbTsKICAgICByZXR1cm4gMDsKLQotZXJyX29wZW46Ci0gICAgZnJlZShvdXQpOwotICAgICpzdHJlYW1fb3V0ID0gTlVMTDsKLSAgICByZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBhZGV2X2Nsb3NlX291dHB1dF9zdHJlYW0oc3RydWN0IGF1ZGlvX2h3X2RldmljZSAqZGV2LApAQCAtNDI3LDExICs0MjAsOCBAQAogewogICAgIEFMT0dWKCJhZGV2X29wZW5faW5wdXRfc3RyZWFtLi4uIik7CiAKLSAgICBzdHJ1Y3Qgc3R1Yl9hdWRpb19kZXZpY2UgKmxhZGV2ID0gKHN0cnVjdCBzdHViX2F1ZGlvX2RldmljZSAqKWRldjsKLSAgICBzdHJ1Y3Qgc3R1Yl9zdHJlYW1faW4gKmluOwotICAgIGludCByZXQ7Ci0KLSAgICBpbiA9IChzdHJ1Y3Qgc3R1Yl9zdHJlYW1faW4gKiljYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzdHViX3N0cmVhbV9pbikpOworICAgICpzdHJlYW1faW4gPSBOVUxMOworICAgIHN0cnVjdCBzdHViX3N0cmVhbV9pbiAqaW4gPSAoc3RydWN0IHN0dWJfc3RyZWFtX2luICopY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgc3R1Yl9zdHJlYW1faW4pKTsKICAgICBpZiAoIWluKQogICAgICAgICByZXR1cm4gLUVOT01FTTsKIApAQCAtNDUzLDExICs0NDMsNiBAQAogCiAgICAgKnN0cmVhbV9pbiA9ICZpbi0+c3RyZWFtOwogICAgIHJldHVybiAwOwotCi1lcnJfb3BlbjoKLSAgICBmcmVlKGluKTsKLSAgICAqc3RyZWFtX2luID0gTlVMTDsKLSAgICByZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBhZGV2X2Nsb3NlX2lucHV0X3N0cmVhbShzdHJ1Y3QgYXVkaW9faHdfZGV2aWNlICpkZXYsCkBAIC00ODYsNyArNDcxLDYgQEAKICAgICBBTE9HVigiYWRldl9vcGVuOiAlcyIsIG5hbWUpOwogCiAgICAgc3RydWN0IHN0dWJfYXVkaW9fZGV2aWNlICphZGV2OwotICAgIGludCByZXQ7CiAKICAgICBpZiAoc3RyY21wKG5hbWUsIEFVRElPX0hBUkRXQVJFX0lOVEVSRkFDRSkgIT0gMCkKICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9tb2R1bGVzL2F1ZGlvL2F1ZGlvX3BvbGljeS5jIGIvbW9kdWxlcy9hdWRpby9hdWRpb19wb2xpY3kuYwppbmRleCA5MzM1NjU0Li40ZjljZDVhIDEwMDY0NAotLS0gYS9tb2R1bGVzL2F1ZGlvL2F1ZGlvX3BvbGljeS5jCisrKyBiL21vZHVsZXMvYXVkaW8vYXVkaW9fcG9saWN5LmMKQEAgLTI0MSw5ICsyNDEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXVkaW9fcG9saWN5ICoqYXApCiB7Ci0gICAgc3RydWN0IGRlZmF1bHRfYXBfZGV2aWNlICpkZXY7CiAgICAgc3RydWN0IGRlZmF1bHRfYXVkaW9fcG9saWN5ICpkYXA7Ci0gICAgaW50IHJldDsKIAogICAgICphcCA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL21vZHVsZXMvYXVkaW9fcmVtb3RlX3N1Ym1peC9BbmRyb2lkLm1rIGIvbW9kdWxlcy9hdWRpb19yZW1vdGVfc3VibWl4L0FuZHJvaWQubWsKaW5kZXggOTBkYTM5Ni4uYzllODUxZiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9hdWRpb19yZW1vdGVfc3VibWl4L0FuZHJvaWQubWsKKysrIGIvbW9kdWxlcy9hdWRpb19yZW1vdGVfc3VibWl4L0FuZHJvaWQubWsKQEAgLTE4LDExICsxOCwxMyBAQAogCiBMT0NBTF9NT0RVTEUgOj0gYXVkaW8ucl9zdWJtaXguZGVmYXVsdAogTE9DQUxfTU9EVUxFX1JFTEFUSVZFX1BBVEggOj0gaHcKK0xPQ0FMX1BST1BSSUVUQVJZX01PRFVMRSA6PSB0cnVlCiBMT0NBTF9TUkNfRklMRVMgOj0gXAogCWF1ZGlvX2h3LmNwcAogTE9DQUxfQ19JTkNMVURFUyArPSBcCiAJZnJhbWV3b3Jrcy9hdi9pbmNsdWRlLyBcCi0JZnJhbWV3b3Jrcy9uYXRpdmUvaW5jbHVkZS8KKwlmcmFtZXdvcmtzL25hdGl2ZS9pbmNsdWRlLyBcCisJJChjYWxsIGluY2x1ZGUtcGF0aC1mb3IsIGF1ZGlvLXV0aWxzKQogTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJsb2cgbGliY3V0aWxzIGxpYnV0aWxzIGxpYm5iYWlvCiBMT0NBTF9TVEFUSUNfTElCUkFSSUVTIDo9IGxpYm1lZGlhX2hlbHBlcgogTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKZGlmZiAtLWdpdCBhL21vZHVsZXMvY2FtZXJhLzNfMC9BbmRyb2lkLm1rIGIvbW9kdWxlcy9jYW1lcmEvM18wL0FuZHJvaWQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU2OGVkNQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvY2FtZXJhLzNfMC9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsNDUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK0xPQ0FMX1BBVEggOj0gJChjYWxsIG15LWRpcikKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX01PRFVMRSA6PSBjYW1lcmEuZGVmYXVsdAorTE9DQUxfTU9EVUxFX1JFTEFUSVZFX1BBVEggOj0gaHcKKworTE9DQUxfQ19JTkNMVURFUyArPSBcCisJc3lzdGVtL2NvcmUvaW5jbHVkZSBcCisJc3lzdGVtL21lZGlhL2NhbWVyYS9pbmNsdWRlIFwKKworTE9DQUxfU1JDX0ZJTEVTIDo9IFwKKwlDYW1lcmFIQUwuY3BwIFwKKwlDYW1lcmEuY3BwIFwKKwlFeGFtcGxlQ2FtZXJhLmNwcCBcCisJTWV0YWRhdGEuY3BwIFwKKwlTdHJlYW0uY3BwIFwKKwlWZW5kb3JUYWdzLmNwcCBcCisKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gXAorCWxpYmNhbWVyYV9tZXRhZGF0YSBcCisJbGliY3V0aWxzIFwKKwlsaWJsb2cgXAorCWxpYnN5bmMgXAorCWxpYnV0aWxzIFwKKworTE9DQUxfQ0ZMQUdTICs9IC1XYWxsIC1XZXh0cmEgLWZ2aXNpYmlsaXR5PWhpZGRlbgorCitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorCitpbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9tb2R1bGVzL2NhbWVyYS9DYW1lcmEuY3BwIGIvbW9kdWxlcy9jYW1lcmEvM18wL0NhbWVyYS5jcHAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1vZHVsZXMvY2FtZXJhL0NhbWVyYS5jcHAKcmVuYW1lIHRvIG1vZHVsZXMvY2FtZXJhLzNfMC9DYW1lcmEuY3BwCmRpZmYgLS1naXQgYS9tb2R1bGVzL2NhbWVyYS9DYW1lcmEuaCBiL21vZHVsZXMvY2FtZXJhLzNfMC9DYW1lcmEuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbW9kdWxlcy9jYW1lcmEvQ2FtZXJhLmgKcmVuYW1lIHRvIG1vZHVsZXMvY2FtZXJhLzNfMC9DYW1lcmEuaApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jYW1lcmEvQ2FtZXJhSEFMLmNwcCBiL21vZHVsZXMvY2FtZXJhLzNfMC9DYW1lcmFIQUwuY3BwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2NhbWVyYS9DYW1lcmFIQUwuY3BwCnJlbmFtZSB0byBtb2R1bGVzL2NhbWVyYS8zXzAvQ2FtZXJhSEFMLmNwcApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jYW1lcmEvQ2FtZXJhSEFMLmggYi9tb2R1bGVzL2NhbWVyYS8zXzAvQ2FtZXJhSEFMLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1vZHVsZXMvY2FtZXJhL0NhbWVyYUhBTC5oCnJlbmFtZSB0byBtb2R1bGVzL2NhbWVyYS8zXzAvQ2FtZXJhSEFMLmgKZGlmZiAtLWdpdCBhL21vZHVsZXMvY2FtZXJhL0V4YW1wbGVDYW1lcmEuY3BwIGIvbW9kdWxlcy9jYW1lcmEvM18wL0V4YW1wbGVDYW1lcmEuY3BwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2NhbWVyYS9FeGFtcGxlQ2FtZXJhLmNwcApyZW5hbWUgdG8gbW9kdWxlcy9jYW1lcmEvM18wL0V4YW1wbGVDYW1lcmEuY3BwCmRpZmYgLS1naXQgYS9tb2R1bGVzL2NhbWVyYS9FeGFtcGxlQ2FtZXJhLmggYi9tb2R1bGVzL2NhbWVyYS8zXzAvRXhhbXBsZUNhbWVyYS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2NhbWVyYS9FeGFtcGxlQ2FtZXJhLmgKcmVuYW1lIHRvIG1vZHVsZXMvY2FtZXJhLzNfMC9FeGFtcGxlQ2FtZXJhLmgKZGlmZiAtLWdpdCBhL21vZHVsZXMvY2FtZXJhL01ldGFkYXRhLmNwcCBiL21vZHVsZXMvY2FtZXJhLzNfMC9NZXRhZGF0YS5jcHAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1vZHVsZXMvY2FtZXJhL01ldGFkYXRhLmNwcApyZW5hbWUgdG8gbW9kdWxlcy9jYW1lcmEvM18wL01ldGFkYXRhLmNwcApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jYW1lcmEvTWV0YWRhdGEuaCBiL21vZHVsZXMvY2FtZXJhLzNfMC9NZXRhZGF0YS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2NhbWVyYS9NZXRhZGF0YS5oCnJlbmFtZSB0byBtb2R1bGVzL2NhbWVyYS8zXzAvTWV0YWRhdGEuaApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jYW1lcmEvU3RyZWFtLmNwcCBiL21vZHVsZXMvY2FtZXJhLzNfMC9TdHJlYW0uY3BwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2NhbWVyYS9TdHJlYW0uY3BwCnJlbmFtZSB0byBtb2R1bGVzL2NhbWVyYS8zXzAvU3RyZWFtLmNwcApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jYW1lcmEvU3RyZWFtLmggYi9tb2R1bGVzL2NhbWVyYS8zXzAvU3RyZWFtLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1vZHVsZXMvY2FtZXJhL1N0cmVhbS5oCnJlbmFtZSB0byBtb2R1bGVzL2NhbWVyYS8zXzAvU3RyZWFtLmgKZGlmZiAtLWdpdCBhL21vZHVsZXMvY2FtZXJhL1ZlbmRvclRhZ3MuY3BwIGIvbW9kdWxlcy9jYW1lcmEvM18wL1ZlbmRvclRhZ3MuY3BwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2NhbWVyYS9WZW5kb3JUYWdzLmNwcApyZW5hbWUgdG8gbW9kdWxlcy9jYW1lcmEvM18wL1ZlbmRvclRhZ3MuY3BwCmRpZmYgLS1naXQgYS9tb2R1bGVzL2NhbWVyYS9WZW5kb3JUYWdzLmggYi9tb2R1bGVzL2NhbWVyYS8zXzAvVmVuZG9yVGFncy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2NhbWVyYS9WZW5kb3JUYWdzLmgKcmVuYW1lIHRvIG1vZHVsZXMvY2FtZXJhLzNfMC9WZW5kb3JUYWdzLmgKZGlmZiAtLWdpdCBhL21vZHVsZXMvY2FtZXJhL0FuZHJvaWQubWsgYi9tb2R1bGVzL2NhbWVyYS9BbmRyb2lkLm1rCmluZGV4IGFlNjhlZDUuLjcxMzg4YWEgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvY2FtZXJhL0FuZHJvaWQubWsKKysrIGIvbW9kdWxlcy9jYW1lcmEvQW5kcm9pZC5tawpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMgQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICMKICMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KQEAgLTEyLDM0ICsxMiw0IEBACiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKLUxPQ0FMX1BBVEggOj0gJChjYWxsIG15LWRpcikKLQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX01PRFVMRSA6PSBjYW1lcmEuZGVmYXVsdAotTE9DQUxfTU9EVUxFX1JFTEFUSVZFX1BBVEggOj0gaHcKLQotTE9DQUxfQ19JTkNMVURFUyArPSBcCi0Jc3lzdGVtL2NvcmUvaW5jbHVkZSBcCi0Jc3lzdGVtL21lZGlhL2NhbWVyYS9pbmNsdWRlIFwKLQotTE9DQUxfU1JDX0ZJTEVTIDo9IFwKLQlDYW1lcmFIQUwuY3BwIFwKLQlDYW1lcmEuY3BwIFwKLQlFeGFtcGxlQ2FtZXJhLmNwcCBcCi0JTWV0YWRhdGEuY3BwIFwKLQlTdHJlYW0uY3BwIFwKLQlWZW5kb3JUYWdzLmNwcCBcCi0KLUxPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gXAotCWxpYmNhbWVyYV9tZXRhZGF0YSBcCi0JbGliY3V0aWxzIFwKLQlsaWJsb2cgXAotCWxpYnN5bmMgXAotCWxpYnV0aWxzIFwKLQotTE9DQUxfQ0ZMQUdTICs9IC1XYWxsIC1XZXh0cmEgLWZ2aXNpYmlsaXR5PWhpZGRlbgotCi1MT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAotCi1pbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkpCitpbmNsdWRlICQoY2FsbCBhbGwtc3ViZGlyLW1ha2VmaWxlcykKZGlmZiAtLWdpdCBhL21vZHVsZXMvY29uc3VtZXJpci9BbmRyb2lkLmJwIGIvbW9kdWxlcy9jb25zdW1lcmlyL0FuZHJvaWQuYnAKaW5kZXggNGVlNWZiMS4uYjEzOTQ5MiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9jb25zdW1lcmlyL0FuZHJvaWQuYnAKKysrIGIvbW9kdWxlcy9jb25zdW1lcmlyL0FuZHJvaWQuYnAKQEAgLTE1LDYgKzE1LDcgQEAKIGNjX2xpYnJhcnlfc2hhcmVkIHsKICAgICBuYW1lOiAiY29uc3VtZXJpci5kZWZhdWx0IiwKICAgICByZWxhdGl2ZV9pbnN0YWxsX3BhdGg6ICJodyIsCisgICAgcHJvcHJpZXRhcnk6IHRydWUsCiAgICAgc3JjczogWyJjb25zdW1lcmlyLmMiXSwKICAgICBzaGFyZWRfbGliczogWwogICAgICAgICAibGlibG9nIiwKZGlmZiAtLWdpdCBhL21vZHVsZXMvZmluZ2VycHJpbnQvQW5kcm9pZC5icCBiL21vZHVsZXMvZmluZ2VycHJpbnQvQW5kcm9pZC5icAppbmRleCBhNjZmOWY5Li5iYTc0OWU0IDEwMDY0NAotLS0gYS9tb2R1bGVzL2ZpbmdlcnByaW50L0FuZHJvaWQuYnAKKysrIGIvbW9kdWxlcy9maW5nZXJwcmludC9BbmRyb2lkLmJwCkBAIC0xNSw2ICsxNSw3IEBACiBjY19saWJyYXJ5X3NoYXJlZCB7CiAgICAgbmFtZTogImZpbmdlcnByaW50LmRlZmF1bHQiLAogICAgIHJlbGF0aXZlX2luc3RhbGxfcGF0aDogImh3IiwKKyAgICBwcm9wcmlldGFyeTogdHJ1ZSwKICAgICBzcmNzOiBbImZpbmdlcnByaW50LmMiXSwKICAgICBzaGFyZWRfbGliczogWyJsaWJsb2ciXSwKIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvZ3JhbGxvYy9BbmRyb2lkLm1rIGIvbW9kdWxlcy9ncmFsbG9jL0FuZHJvaWQubWsKaW5kZXggMDkyZTg1MS4uZmY1ODA4ZCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9ncmFsbG9jL0FuZHJvaWQubWsKKysrIGIvbW9kdWxlcy9ncmFsbG9jL0FuZHJvaWQubWsKQEAgLTIwLDYgKzIwLDcgQEAKIGluY2x1ZGUgJChDTEVBUl9WQVJTKQogCiBMT0NBTF9NT0RVTEVfUkVMQVRJVkVfUEFUSCA6PSBodworTE9DQUxfUFJPUFJJRVRBUllfTU9EVUxFIDo9IHRydWUKIExPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGlibG9nIGxpYmN1dGlscwogCiBMT0NBTF9TUkNfRklMRVMgOj0gCVwKQEAgLTI3LDYgKzI4LDggQEAKIAlmcmFtZWJ1ZmZlci5jcHAgXAogCW1hcHBlci5jcHAKIAorTE9DQUxfSEVBREVSX0xJQlJBUklFUyA6PSBsaWJoYXJkd2FyZV9oZWFkZXJzCisKIExPQ0FMX01PRFVMRSA6PSBncmFsbG9jLmRlZmF1bHQKIExPQ0FMX0NGTEFHUzo9IC1ETE9HX1RBRz1cImdyYWxsb2NcIiAtV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzCiBpZmVxICgkKFRBUkdFVF9VU0VfUEFOX0RJU1BMQVkpLHRydWUpCmRpZmYgLS1naXQgYS9tb2R1bGVzL2dyYWxsb2MvZ3JhbGxvYy5jcHAgYi9tb2R1bGVzL2dyYWxsb2MvZ3JhbGxvYy5jcHAKaW5kZXggZjhkM2M3OC4uMDdiYmZiYSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9ncmFsbG9jL2dyYWxsb2MuY3BwCisrKyBiL21vZHVsZXMvZ3JhbGxvYy9ncmFsbG9jLmNwcApAQCAtMjA5LDYgKzIwOSw5IEBACiAKICAgICBpbnQgYnl0ZXNQZXJQaXhlbCA9IDA7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAgICAgY2FzZSBIQUxfUElYRUxfRk9STUFUX1JHQkFfRlAxNjoKKyAgICAgICAgICAgIGJ5dGVzUGVyUGl4ZWwgPSA4OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSEFMX1BJWEVMX0ZPUk1BVF9SR0JBXzg4ODg6CiAgICAgICAgIGNhc2UgSEFMX1BJWEVMX0ZPUk1BVF9SR0JYXzg4ODg6CiAgICAgICAgIGNhc2UgSEFMX1BJWEVMX0ZPUk1BVF9CR1JBXzg4ODg6CmRpZmYgLS1naXQgYS9tb2R1bGVzL2h3Y29tcG9zZXIvQW5kcm9pZC5tayBiL21vZHVsZXMvaHdjb21wb3Nlci9BbmRyb2lkLm1rCmluZGV4IDM1YzBmYWUuLmRhMGY2ZGIgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvaHdjb21wb3Nlci9BbmRyb2lkLm1rCisrKyBiL21vZHVsZXMvaHdjb21wb3Nlci9BbmRyb2lkLm1rCkBAIC0yMCw2ICsyMCw3IEBACiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKIAogTE9DQUxfTU9EVUxFX1JFTEFUSVZFX1BBVEggOj0gaHcKK0xPQ0FMX1BST1BSSUVUQVJZX01PRFVMRSA6PSB0cnVlCiBMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmxvZyBsaWJFR0wKIExPQ0FMX1NSQ19GSUxFUyA6PSBod2NvbXBvc2VyLmNwcAogTE9DQUxfTU9EVUxFIDo9IGh3Y29tcG9zZXIuZGVmYXVsdApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9od2NvbXBvc2VyL2h3Y29tcG9zZXIuY3BwIGIvbW9kdWxlcy9od2NvbXBvc2VyL2h3Y29tcG9zZXIuY3BwCmluZGV4IDI5N2NhZmQuLmZkNGU5MGQgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvaHdjb21wb3Nlci9od2NvbXBvc2VyLmNwcAorKysgYi9tb2R1bGVzL2h3Y29tcG9zZXIvaHdjb21wb3Nlci5jcHAKQEAgLTM3LDE4ICszNywxOCBAQAogICAgICAgICBzdHJ1Y3QgaHdfZGV2aWNlX3QqKiBkZXZpY2UpOwogCiBzdGF0aWMgc3RydWN0IGh3X21vZHVsZV9tZXRob2RzX3QgaHdjX21vZHVsZV9tZXRob2RzID0gewotICAgIG9wZW46IGh3Y19kZXZpY2Vfb3BlbgorICAgIC5vcGVuID0gaHdjX2RldmljZV9vcGVuCiB9OwogCiBod2NfbW9kdWxlX3QgSEFMX01PRFVMRV9JTkZPX1NZTSA9IHsKLSAgICBjb21tb246IHsKLSAgICAgICAgdGFnOiBIQVJEV0FSRV9NT0RVTEVfVEFHLAotICAgICAgICB2ZXJzaW9uX21ham9yOiAxLAotICAgICAgICB2ZXJzaW9uX21pbm9yOiAwLAotICAgICAgICBpZDogSFdDX0hBUkRXQVJFX01PRFVMRV9JRCwKLSAgICAgICAgbmFtZTogIlNhbXBsZSBod2NvbXBvc2VyIG1vZHVsZSIsCi0gICAgICAgIGF1dGhvcjogIlRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QiLAotICAgICAgICBtZXRob2RzOiAmaHdjX21vZHVsZV9tZXRob2RzLAorICAgIC5jb21tb24gPSB7CisgICAgICAgIC50YWcgPSBIQVJEV0FSRV9NT0RVTEVfVEFHLAorICAgICAgICAudmVyc2lvbl9tYWpvciA9IDEsCisgICAgICAgIC52ZXJzaW9uX21pbm9yID0gMCwKKyAgICAgICAgLmlkID0gSFdDX0hBUkRXQVJFX01PRFVMRV9JRCwKKyAgICAgICAgLm5hbWUgPSAiU2FtcGxlIGh3Y29tcG9zZXIgbW9kdWxlIiwKKyAgICAgICAgLmF1dGhvciA9ICJUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IiwKKyAgICAgICAgLm1ldGhvZHMgPSAmaHdjX21vZHVsZV9tZXRob2RzLAogICAgIH0KIH07CiAKQEAgLTY3LDggKzY3LDggQEAKICAgICAgICAgICAgIGwtPmRpc3BsYXlGcmFtZS5ib3R0b20pOwogfQogCi1zdGF0aWMgaW50IGh3Y19wcmVwYXJlKGh3Y19jb21wb3Nlcl9kZXZpY2VfMV90ICpkZXYsCi0gICAgICAgIHNpemVfdCBudW1EaXNwbGF5cywgaHdjX2Rpc3BsYXlfY29udGVudHNfMV90KiogZGlzcGxheXMpIHsKK3N0YXRpYyBpbnQgaHdjX3ByZXBhcmUoaHdjX2NvbXBvc2VyX2RldmljZV8xX3QgKiAvKmRldiovLAorICAgICAgICBzaXplX3QgLypudW1EaXNwbGF5cyovLCBod2NfZGlzcGxheV9jb250ZW50c18xX3QqKiBkaXNwbGF5cykgewogICAgIGlmIChkaXNwbGF5cyAmJiAoZGlzcGxheXNbMF0tPmZsYWdzICYgSFdDX0dFT01FVFJZX0NIQU5HRUQpKSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGk9MCA7IGk8ZGlzcGxheXNbMF0tPm51bUh3TGF5ZXJzIDsgaSsrKSB7CiAgICAgICAgICAgICAvL2R1bXBfbGF5ZXIoJmxpc3QtPmh3TGF5ZXJzW2ldKTsKQEAgLTc4LDE2ICs3OCwxNiBAQAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGh3Y19zZXQoaHdjX2NvbXBvc2VyX2RldmljZV8xX3QgKmRldiwKLSAgICAgICAgc2l6ZV90IG51bURpc3BsYXlzLCBod2NfZGlzcGxheV9jb250ZW50c18xX3QqKiBkaXNwbGF5cykKK3N0YXRpYyBpbnQgaHdjX3NldChod2NfY29tcG9zZXJfZGV2aWNlXzFfdCAqIC8qZGV2Ki8sCisgICAgICAgIHNpemVfdCAvKm51bURpc3BsYXlzKi8sIGh3Y19kaXNwbGF5X2NvbnRlbnRzXzFfdCoqIGRpc3BsYXlzKQogewogICAgIC8vZm9yIChzaXplX3QgaT0wIDsgaTxsaXN0LT5udW1Id0xheWVycyA7IGkrKykgewogICAgIC8vICAgIGR1bXBfbGF5ZXIoJmxpc3QtPmh3TGF5ZXJzW2ldKTsKICAgICAvL30KIAotICAgIEVHTEJvb2xlYW4gc3VjZXNzID0gZWdsU3dhcEJ1ZmZlcnMoKEVHTERpc3BsYXkpZGlzcGxheXNbMF0tPmRweSwKKyAgICBFR0xCb29sZWFuIHN1Y2Nlc3MgPSBlZ2xTd2FwQnVmZmVycygoRUdMRGlzcGxheSlkaXNwbGF5c1swXS0+ZHB5LAogICAgICAgICAgICAgKEVHTFN1cmZhY2UpZGlzcGxheXNbMF0tPnN1cik7Ci0gICAgaWYgKCFzdWNlc3MpIHsKKyAgICBpZiAoIXN1Y2Nlc3MpIHsKICAgICAgICAgcmV0dXJuIEhXQ19FR0xfRVJST1I7CiAgICAgfQogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbnB1dC9ldmRldi9BbmRyb2lkLm1rIGIvbW9kdWxlcy9pbnB1dC9ldmRldi9BbmRyb2lkLm1rCmluZGV4IDlhNWQwOTIuLmJlNGRiNmIgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvaW5wdXQvZXZkZXYvQW5kcm9pZC5taworKysgYi9tb2R1bGVzL2lucHV0L2V2ZGV2L0FuZHJvaWQubWsKQEAgLTQ1LDYgKzQ1LDcgQEAKIAogTE9DQUxfTU9EVUxFIDo9IGlucHV0LmV2ZGV2LmRlZmF1bHQKIExPQ0FMX01PRFVMRV9SRUxBVElWRV9QQVRIIDo9IGh3CitMT0NBTF9QUk9QUklFVEFSWV9NT0RVTEUgOj0gdHJ1ZQogCiBMT0NBTF9TUkNfRklMRVMgOj0gXAogICAgIEV2ZGV2TW9kdWxlLmNwcApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9sb2NhbF90aW1lL0FuZHJvaWQuYnAgYi9tb2R1bGVzL2xvY2FsX3RpbWUvQW5kcm9pZC5icAppbmRleCBkZjMyMzI1Li42NDNhZmE1IDEwMDY0NAotLS0gYS9tb2R1bGVzL2xvY2FsX3RpbWUvQW5kcm9pZC5icAorKysgYi9tb2R1bGVzL2xvY2FsX3RpbWUvQW5kcm9pZC5icApAQCAtMjQsNiArMjQsNyBAQAogY2NfbGlicmFyeV9zaGFyZWQgewogICAgIG5hbWU6ICJsb2NhbF90aW1lLmRlZmF1bHQiLAogICAgIHJlbGF0aXZlX2luc3RhbGxfcGF0aDogImh3IiwKKyAgICBwcm9wcmlldGFyeTogdHJ1ZSwKICAgICBzcmNzOiBbImxvY2FsX3RpbWVfaHcuYyJdLAogICAgIHNoYXJlZF9saWJzOiBbCiAgICAgICAgICJsaWJsb2ciLApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9sb2NhbF90aW1lL2xvY2FsX3RpbWVfaHcuYyBiL21vZHVsZXMvbG9jYWxfdGltZS9sb2NhbF90aW1lX2h3LmMKaW5kZXggNGIyMTY1Ni4uYjM4ZDhhNSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9sb2NhbF90aW1lL2xvY2FsX3RpbWVfaHcuYworKysgYi9tb2R1bGVzL2xvY2FsX3RpbWUvbG9jYWxfdGltZV9ody5jCkBAIC0yOCw2ICsyOCw5IEBACiAjaW5jbHVkZSA8aGFyZHdhcmUvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxoYXJkd2FyZS9sb2NhbF90aW1lX2hhbC5oPgogCisvLyBXZSBvbmx5IHN1cHBvcnQgZ2NjIGFuZCBjbGFuZywgYm90aCBvZiB3aGljaCBzdXBwb3J0IHRoaXMgYXR0cmlidXRlLgorI2RlZmluZSBVTlVTRURfQVJHVU1FTlQgX19hdHRyaWJ1dGUoKHVudXNlZCkpCisKIHN0cnVjdCBzdHViX2xvY2FsX3RpbWVfZGV2aWNlIHsKICAgICBzdHJ1Y3QgbG9jYWxfdGltZV9od19kZXZpY2UgZGV2aWNlOwogfTsKQEAgLTUxLDcgKzU0LDggQEAKICAgICByZXR1cm4gKGludDY0X3Qpbm93OwogfQogCi1zdGF0aWMgdWludDY0X3QgbHRkZXZfZ2V0X2xvY2FsX2ZyZXEoc3RydWN0IGxvY2FsX3RpbWVfaHdfZGV2aWNlKiBkZXYpCitzdGF0aWMgdWludDY0X3QgbHRkZXZfZ2V0X2xvY2FsX2ZyZXEoCisgICAgICAgIHN0cnVjdCBsb2NhbF90aW1lX2h3X2RldmljZSogZGV2IFVOVVNFRF9BUkdVTUVOVCkKIHsKICAgICAvLyBGb3IgYmV0dGVyIG9yIHdvcnNlLCBsaW51eCBjbG9ja19nZXR0aW1lIHJvdXRpbmVzIG5vcm1hbGl6ZSBhbGwgY2xvY2sKICAgICAvLyBmcmVxdWVuY2llcyB0byAxR0h6CmRpZmYgLS1naXQgYS9tb2R1bGVzL25mYy1uY2kvQW5kcm9pZC5icCBiL21vZHVsZXMvbmZjLW5jaS9BbmRyb2lkLmJwCmluZGV4IGZjNzM3NjEuLjkwZDJhMjggMTAwNjQ0Ci0tLSBhL21vZHVsZXMvbmZjLW5jaS9BbmRyb2lkLmJwCisrKyBiL21vZHVsZXMvbmZjLW5jaS9BbmRyb2lkLmJwCkBAIC0xNSw2ICsxNSw3IEBACiBjY19saWJyYXJ5X3NoYXJlZCB7CiAgICAgbmFtZTogIm5mY19uY2kuZGVmYXVsdCIsCiAgICAgcmVsYXRpdmVfaW5zdGFsbF9wYXRoOiAiaHciLAorICAgIHByb3ByaWV0YXJ5OiB0cnVlLAogICAgIHNyY3M6IFsibmZjX25jaV9leGFtcGxlLmMiXSwKICAgICBzaGFyZWRfbGliczogWwogICAgICAgICAibGlibG9nIiwKZGlmZiAtLWdpdCBhL21vZHVsZXMvbmZjLW5jaS9uZmNfbmNpX2V4YW1wbGUuYyBiL21vZHVsZXMvbmZjLW5jaS9uZmNfbmNpX2V4YW1wbGUuYwppbmRleCBjZGZkN2Q3Li5mM2Y2MGY2IDEwMDY0NAotLS0gYS9tb2R1bGVzL25mYy1uY2kvbmZjX25jaV9leGFtcGxlLmMKKysrIGIvbW9kdWxlcy9uZmMtbmNpL25mY19uY2lfZXhhbXBsZS5jCkBAIC0yMyw0NCArMjMsNjEgQEAKICNpbmNsdWRlIDxoYXJkd2FyZS9uZmMuaD4KIAogLyoKKyAqIFdlIHdhbnQgdG8gc2lsZW5jZSB0aGUgInVudXNlZCBhcmd1bWVudCIgdGhhdCBnY2MgYW5kIGNsYW5nIGdpdmUuCisgKiBPdGhlciBjb21waWxlcnMgZ2VuZXJhdGluZyB0aGlzIHdhcm5pbmcgd2lsbCBuZWVkIHRvIHByb3ZpZGUgdGhlaXIKKyAqIGN1c3RvbSBhdHRyaWJ1dGUgdG8gc2lsZW5jZSB0aGlzLgorICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX2NsYW5nX18pCisjZGVmaW5lIFVOVVNFRF9BUkdVTUVOVCBfX2F0dHJpYnV0ZSgodW51c2VkKSkKKyNlbHNlCisjZGVmaW5lIFVOVVNFRF9BUkdVTUVOVAorI2VuZGlmCisKKy8qCiAgKiBOQ0kgSEFMIG1ldGhvZCBpbXBsZW1lbnRhdGlvbnMuIFRoZXNlIG11c3QgYmUgb3ZlcnJpZGVuCiAgKi8KLXN0YXRpYyBpbnQgaGFsX29wZW4oY29uc3Qgc3RydWN0IG5mY19uY2lfZGV2aWNlICpkZXYsCi0gICAgICAgIG5mY19zdGFja19jYWxsYmFja190ICpwX2NiYWNrLCBuZmNfc3RhY2tfZGF0YV9jYWxsYmFja190ICpwX2RhdGFfY2JhY2spIHsKK3N0YXRpYyBpbnQgaGFsX29wZW4oY29uc3Qgc3RydWN0IG5mY19uY2lfZGV2aWNlICpkZXYgVU5VU0VEX0FSR1VNRU5ULAorICAgICAgICBuZmNfc3RhY2tfY2FsbGJhY2tfdCAqcF9jYmFjayBVTlVTRURfQVJHVU1FTlQsCisgICAgICAgIG5mY19zdGFja19kYXRhX2NhbGxiYWNrX3QgKnBfZGF0YV9jYmFjayBVTlVTRURfQVJHVU1FTlQpIHsKICAgICBBTE9HRSgiTkZDLU5DSSBIQUw6ICVzIiwgX19GVU5DVElPTl9fKTsKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBoYWxfd3JpdGUoY29uc3Qgc3RydWN0IG5mY19uY2lfZGV2aWNlICpkZXYsCi0gICAgICAgIHVpbnQxNl90IGRhdGFfbGVuLCBjb25zdCB1aW50OF90ICpwX2RhdGEpIHsKK3N0YXRpYyBpbnQgaGFsX3dyaXRlKGNvbnN0IHN0cnVjdCBuZmNfbmNpX2RldmljZSAqZGV2IFVOVVNFRF9BUkdVTUVOVCwKKyAgICAgICAgdWludDE2X3QgZGF0YV9sZW4gVU5VU0VEX0FSR1VNRU5ULAorICAgICAgICBjb25zdCB1aW50OF90ICpwX2RhdGEgVU5VU0VEX0FSR1VNRU5UKSB7CiAgICAgQUxPR0UoIk5GQy1OQ0kgSEFMOiAlcyIsIF9fRlVOQ1RJT05fXyk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaGFsX2NvcmVfaW5pdGlhbGl6ZWQoY29uc3Qgc3RydWN0IG5mY19uY2lfZGV2aWNlICpkZXYsCi0gICAgICAgIHVpbnQ4X3QqIHBfY29yZV9pbml0X3JzcF9wYXJhbXMpIHsKK3N0YXRpYyBpbnQgaGFsX2NvcmVfaW5pdGlhbGl6ZWQoCisgICAgICAgIGNvbnN0IHN0cnVjdCBuZmNfbmNpX2RldmljZSAqZGV2IFVOVVNFRF9BUkdVTUVOVCwKKyAgICAgICAgdWludDhfdCogcF9jb3JlX2luaXRfcnNwX3BhcmFtcyBVTlVTRURfQVJHVU1FTlQpIHsKICAgICBBTE9HRSgiTkZDLU5DSSBIQUw6ICVzIiwgX19GVU5DVElPTl9fKTsKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBoYWxfcHJlX2Rpc2NvdmVyKGNvbnN0IHN0cnVjdCBuZmNfbmNpX2RldmljZSAqZGV2KSB7CitzdGF0aWMgaW50IGhhbF9wcmVfZGlzY292ZXIoCisgICAgICAgIGNvbnN0IHN0cnVjdCBuZmNfbmNpX2RldmljZSAqZGV2IFVOVVNFRF9BUkdVTUVOVCkgewogICAgIEFMT0dFKCJORkMtTkNJIEhBTDogJXMiLCBfX0ZVTkNUSU9OX18pOwogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGhhbF9jbG9zZShjb25zdCBzdHJ1Y3QgbmZjX25jaV9kZXZpY2UgKmRldikgeworc3RhdGljIGludCBoYWxfY2xvc2UoY29uc3Qgc3RydWN0IG5mY19uY2lfZGV2aWNlICpkZXYgVU5VU0VEX0FSR1VNRU5UKSB7CiAgICAgQUxPR0UoIk5GQy1OQ0kgSEFMOiAlcyIsIF9fRlVOQ1RJT05fXyk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaGFsX2NvbnRyb2xfZ3JhbnRlZCAoY29uc3Qgc3RydWN0IG5mY19uY2lfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgaGFsX2NvbnRyb2xfZ3JhbnRlZCAoCisgICAgICAgIGNvbnN0IHN0cnVjdCBuZmNfbmNpX2RldmljZSAqcF9kZXYgVU5VU0VEX0FSR1VNRU5UKQogewogICAgIEFMT0dFKCJORkMtTkNJIEhBTDogJXMiLCBfX0ZVTkNUSU9OX18pOwogICAgIHJldHVybiAwOwogfQogCiAKLXN0YXRpYyBpbnQgaGFsX3Bvd2VyX2N5Y2xlIChjb25zdCBzdHJ1Y3QgbmZjX25jaV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBoYWxfcG93ZXJfY3ljbGUgKAorICAgICAgICBjb25zdCBzdHJ1Y3QgbmZjX25jaV9kZXZpY2UgKnBfZGV2IFVOVVNFRF9BUkdVTUVOVCkKIHsKICAgICBBTE9HRSgiTkZDLU5DSSBIQUw6ICVzIiwgX19GVU5DVElPTl9fKTsKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL21vZHVsZXMvbmZjL0FuZHJvaWQuYnAgYi9tb2R1bGVzL25mYy9BbmRyb2lkLmJwCmluZGV4IDUzYWIzMDkuLjEwZGMyYzEgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvbmZjL0FuZHJvaWQuYnAKKysrIGIvbW9kdWxlcy9uZmMvQW5kcm9pZC5icApAQCAtMTUsNiArMTUsNyBAQAogY2NfbGlicmFyeV9zaGFyZWQgewogICAgIG5hbWU6ICJuZmMuZGVmYXVsdCIsCiAgICAgcmVsYXRpdmVfaW5zdGFsbF9wYXRoOiAiaHciLAorICAgIHByb3ByaWV0YXJ5OiB0cnVlLAogICAgIHNyY3M6IFsibmZjX3BuNTQ0X2V4YW1wbGUuYyJdLAogICAgIHNoYXJlZF9saWJzOiBbCiAgICAgICAgICJsaWJsb2ciLApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9wb3dlci9BbmRyb2lkLmJwIGIvbW9kdWxlcy9wb3dlci9BbmRyb2lkLmJwCmluZGV4IDJiODZjOGIuLmY0Yzc0Y2UgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvcG93ZXIvQW5kcm9pZC5icAorKysgYi9tb2R1bGVzL3Bvd2VyL0FuZHJvaWQuYnAKQEAgLTE1LDYgKzE1LDcgQEAKIGNjX2xpYnJhcnlfc2hhcmVkIHsKICAgICBuYW1lOiAicG93ZXIuZGVmYXVsdCIsCiAgICAgcmVsYXRpdmVfaW5zdGFsbF9wYXRoOiAiaHciLAorICAgIHByb3ByaWV0YXJ5OiB0cnVlLAogICAgIHNyY3M6IFsicG93ZXIuYyJdLAogICAgIHNoYXJlZF9saWJzOiBbImxpYmxvZyJdLAogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9yYWRpby9BbmRyb2lkLm1rIGIvbW9kdWxlcy9yYWRpby9BbmRyb2lkLm1rCmluZGV4IDIyMTQyNGYuLjZmMTExNjkgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvcmFkaW8vQW5kcm9pZC5taworKysgYi9tb2R1bGVzL3JhZGlvL0FuZHJvaWQubWsKQEAgLTIxLDYgKzIxLDcgQEAKIAogTE9DQUxfTU9EVUxFIDo9IHJhZGlvLmZtLmRlZmF1bHQKIExPQ0FMX01PRFVMRV9SRUxBVElWRV9QQVRIIDo9IGh3CitMT0NBTF9QUk9QUklFVEFSWV9NT0RVTEUgOj0gdHJ1ZQogTE9DQUxfU1JDX0ZJTEVTIDo9IHJhZGlvX2h3LmMKIExPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGlibG9nIGxpYmN1dGlscyBsaWJyYWRpb19tZXRhZGF0YQogTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKZGlmZiAtLWdpdCBhL21vZHVsZXMvcmFkaW8vcmFkaW9faGFsX3Rvb2wuYyBiL21vZHVsZXMvcmFkaW8vcmFkaW9faGFsX3Rvb2wuYwppbmRleCBiYWEyZWZlLi4wMTE3ZjI4IDEwMDY0NAotLS0gYS9tb2R1bGVzL3JhZGlvL3JhZGlvX2hhbF90b29sLmMKKysrIGIvbW9kdWxlcy9yYWRpby9yYWRpb19oYWxfdG9vbC5jCkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICAgICAgcmFkaW9fbWV0YWRhdGFfa2V5X3Qga2V5OwogICAgICAgICByYWRpb19tZXRhZGF0YV90eXBlX3QgdHlwZTsKICAgICAgICAgdm9pZCAqdmFsdWU7Ci0gICAgICAgIHVpbnQzMl90IHNpemU7CisgICAgICAgIHNpemVfdCBzaXplOwogCiAgICAgICAgIHJhZGlvX21ldGFkYXRhX2dldF9hdF9pbmRleChpbmZvLm1ldGFkYXRhLCBpLCAma2V5LCAmdHlwZSwgJnZhbHVlLCAmc2l6ZSk7CiAKZGlmZiAtLWdpdCBhL21vZHVsZXMvcmFkaW8vcmFkaW9faHcuYyBiL21vZHVsZXMvcmFkaW8vcmFkaW9faHcuYwppbmRleCBmMTQ0OGRhLi40NTZjODY2IDEwMDY0NAotLS0gYS9tb2R1bGVzL3JhZGlvL3JhZGlvX2h3LmMKKysrIGIvbW9kdWxlcy9yYWRpby9yYWRpb19ody5jCkBAIC01MSw3ICs1MSw3IEBACiAgICAgLmJhbmRzID0gewogICAgICAgICB7CiAgICAgICAgICAgICAudHlwZSA9IFJBRElPX0JBTkRfRk0sCi0gICAgICAgICAgICAuYW50ZW5uYV9jb25uZWN0ZWQgPSBmYWxzZSwKKyAgICAgICAgICAgIC5hbnRlbm5hX2Nvbm5lY3RlZCA9IHRydWUsCiAgICAgICAgICAgICAubG93ZXJfbGltaXQgPSA4NzkwMCwKICAgICAgICAgICAgIC51cHBlcl9saW1pdCA9IDEwNzkwMCwKICAgICAgICAgICAgIC5udW1fc3BhY2luZ3MgPSAxLApAQCAtMjEzLDYgKzIxMyw3IEBACiAgICAgKm1ldGFkYXRhID0gTlVMTDsKIAogICAgIHJldCA9IHJhZGlvX21ldGFkYXRhX2FsbG9jYXRlKG1ldGFkYXRhLCB0dW5lci0+cHJvZ3JhbS5jaGFubmVsLCAwKTsKKwogICAgIGlmIChyZXQgIT0gMCkKICAgICAgICAgcmV0dXJuIHJldDsKIApAQCAtMjI0LDE0ICsyMjUsMTQgQEAKICAgICAgICAgaWYgKHJldCAhPSAwKQogICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICByZXQgPSBhZGRfYml0bWFwX21ldGFkYXRhKG1ldGFkYXRhLCBSQURJT19NRVRBREFUQV9LRVlfSUNPTiwgQklUTUFQX0ZJTEVfUEFUSCk7Ci0gICAgICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgaWYgKHJldCAhPSAwICYmIHJldCAhPSAtRVBJUEUpCiAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgIHJldCA9IHJhZGlvX21ldGFkYXRhX2FkZF9jbG9jayhtZXRhZGF0YSwgUkFESU9fTUVUQURBVEFfS0VZX0NMT0NLLCAmaHdfY2xvY2spOwogICAgICAgICBpZiAocmV0ICE9IDApCiAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmV0ID0gYWRkX2JpdG1hcF9tZXRhZGF0YShtZXRhZGF0YSwgUkFESU9fTUVUQURBVEFfS0VZX0FSVCwgQklUTUFQX0ZJTEVfUEFUSCk7Ci0gICAgICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgaWYgKHJldCAhPSAwICYmIHJldCAhPSAtRVBJUEUpCiAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC0zNTksNiArMzYwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHR1bmVyLT5wcm9ncmFtLnN0ZXJlbyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB0dW5lci0+cHJvZ3JhbS5zdGVyZW8gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgcHJlcGFyZV9tZXRhZGF0YSh0dW5lciwgJnR1bmVyLT5wcm9ncmFtLm1ldGFkYXRhLCB0dW5lci0+cHJvZ3JhbS50dW5lZCk7CiAKICAgICAgICAgICAgICAgICAgICAgZXZlbnQudHlwZSA9IFJBRElPX0VWRU5UX1RVTkVEOwogICAgICAgICAgICAgICAgICAgICBldmVudC5pbmZvID0gdHVuZXItPnByb2dyYW07CkBAIC0zODUsNiArMzg3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgdHVuZXItPnByb2dyYW0uc3RlcmVvID0gdHVuZXItPmNvbmZpZy5hbS5zdGVyZW87CiAgICAgICAgICAgICAgICAgICAgIHR1bmVyLT5wcm9ncmFtLnNpZ25hbF9zdHJlbmd0aCA9IDUwOworICAgICAgICAgICAgICAgICAgICBwcmVwYXJlX21ldGFkYXRhKHR1bmVyLCAmdHVuZXItPnByb2dyYW0ubWV0YWRhdGEsIHR1bmVyLT5wcm9ncmFtLnR1bmVkKTsKIAogICAgICAgICAgICAgICAgICAgICBldmVudC50eXBlID0gUkFESU9fRVZFTlRfVFVORUQ7CiAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmluZm8gPSB0dW5lci0+cHJvZ3JhbTsKQEAgLTM5NywxMiArNDAwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0dW5lci0+Y29uZmlnLnNwYWNpbmdzWzBdICogNSkpICUgMjsKIAogICAgICAgICAgICAgICAgICAgICBpZiAodHVuZXItPnByb2dyYW0udHVuZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZXBhcmVfbWV0YWRhdGEodHVuZXIsICZ0dW5lci0+cHJvZ3JhbS5tZXRhZGF0YSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kX2NvbW1hbmRfbCh0dW5lciwgQ01EX0FOTk9VTkNFTUVOVFMsIDEwMDAsIE5VTEwpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR1bmVyLT5wcm9ncmFtLm1ldGFkYXRhICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaW9fbWV0YWRhdGFfZGVhbGxvY2F0ZSh0dW5lci0+cHJvZ3JhbS5tZXRhZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0dW5lci0+cHJvZ3JhbS5tZXRhZGF0YSA9IE5VTEw7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgdHVuZXItPnByb2dyYW0uc2lnbmFsX3N0cmVuZ3RoID0gMTAwOwogICAgICAgICAgICAgICAgICAgICBpZiAodHVuZXItPmNvbmZpZy50eXBlID09IFJBRElPX0JBTkRfRk0pCkBAIC00MTEsNiArNDA5LDggQEAKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgdHVuZXItPnByb2dyYW0uc3RlcmVvID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dW5lci0+cHJvZ3JhbS50dW5lZCA/IHR1bmVyLT5jb25maWcuYW0uc3RlcmVvIDogZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHByZXBhcmVfbWV0YWRhdGEodHVuZXIsICZ0dW5lci0+cHJvZ3JhbS5tZXRhZGF0YSwgdHVuZXItPnByb2dyYW0udHVuZWQpOworCiAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnR5cGUgPSBSQURJT19FVkVOVF9UVU5FRDsKICAgICAgICAgICAgICAgICAgICAgZXZlbnQuaW5mbyA9IHR1bmVyLT5wcm9ncmFtOwogICAgICAgICAgICAgICAgICAgICBzZW5kX21ldGFfZGF0YSA9IHRydWU7CkBAIC00MjIsNyArNDIyLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnR5cGUgPSBSQURJT19FVkVOVF9NRVRBREFUQTsKICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Lm1ldGFkYXRhID0gbWV0YWRhdGE7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgc2VuZF9tZXRhX2RhdGEgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0gYnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIENNRF9DQU5DRUw6IHsKQEAgLTUwNiw2ICs1MDUsMTAgQEAKICAgICAgICAgc3RhdHVzID0gLUVJTlZBTDsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KKyAgICBpZiAoY29uZmlnLT5sb3dlcl9saW1pdCA+IGNvbmZpZy0+dXBwZXJfbGltaXQpIHsKKyAgICAgICAgc3RhdHVzID0gLUVJTlZBTDsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KICAgICBzZW5kX2NvbW1hbmRfbChzdHViX3R1bmVyLCBDTURfQ0FOQ0VMLCAwLCBOVUxMKTsKICAgICBzZW5kX2NvbW1hbmRfbChzdHViX3R1bmVyLCBDTURfQ09ORklHLCA1MDAsICh2b2lkICopY29uZmlnKTsKIApAQCAtNjE4LDcgKzYyMSwxMiBAQAogICAgIG1ldGFkYXRhID0gaW5mby0+bWV0YWRhdGE7CiAgICAgKmluZm8gPSBzdHViX3R1bmVyLT5wcm9ncmFtOwogICAgIGluZm8tPm1ldGFkYXRhID0gbWV0YWRhdGE7Ci0gICAgaWYgKG1ldGFkYXRhICE9IE5VTEwgJiYgc3R1Yl90dW5lci0+cHJvZ3JhbS5tZXRhZGF0YSAhPSBOVUxMKQorICAgIGlmIChtZXRhZGF0YSA9PSBOVUxMKSB7CisgICAgICAgIEFMT0dFKCIlcyBtZXRhZGF0YSBpcyBhIG51bGxwdHIiLCBfX2Z1bmNfXyk7CisgICAgICAgIHN0YXR1cyA9IC1FSU5WQUw7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgaWYgKHN0dWJfdHVuZXItPnByb2dyYW0ubWV0YWRhdGEgIT0gTlVMTCkKICAgICAgICAgcmFkaW9fbWV0YWRhdGFfYWRkX21ldGFkYXRhKCZpbmZvLT5tZXRhZGF0YSwgc3R1Yl90dW5lci0+cHJvZ3JhbS5tZXRhZGF0YSk7CiAKIGV4aXQ6CmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvQW5kcm9pZC5icCBiL21vZHVsZXMvc2Vuc29ycy9BbmRyb2lkLmJwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMTUwNjUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvQW5kcm9pZC5icApAQCAtMCwwICsxLDE1IEBACitjY19saWJyYXJ5X3N0YXRpYyB7CisgICAgbmFtZTogIm11bHRpaGFsIiwKKyAgICB2ZW5kb3I6IHRydWUsCisgICAgc3JjczogWworICAgICAgICAibXVsdGloYWwuY3BwIiwKKyAgICAgICAgIlNlbnNvckV2ZW50UXVldWUuY3BwIgorICAgIF0sCisgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgImxpYmxvZyIsCisgICAgICAgICJsaWJjdXRpbHMiLAorICAgICAgICAibGlidXRpbHMiLAorICAgICAgICAibGliZGwiCisgICAgXSwKKyAgICBleHBvcnRfaW5jbHVkZV9kaXJzOiBbIi4iXSwKK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9BbmRyb2lkLm1rIGIvbW9kdWxlcy9zZW5zb3JzL0FuZHJvaWQubWsKaW5kZXggNTM0ZTZlOS4uY2EyNzdlNiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9zZW5zb3JzL0FuZHJvaWQubWsKKysrIGIvbW9kdWxlcy9zZW5zb3JzL0FuZHJvaWQubWsKQEAgLTIzLDYgKzIzLDcgQEAKIExPQ0FMX01PRFVMRSA6PSBzZW5zb3JzLiQoVEFSR0VUX0RFVklDRSkKIAogTE9DQUxfTU9EVUxFX1JFTEFUSVZFX1BBVEggOj0gaHcKK0xPQ0FMX1BST1BSSUVUQVJZX01PRFVMRSA6PSB0cnVlCiAKIExPQ0FMX0NGTEFHUyA6PSAtRExPR19UQUc9XCJNdWx0aUhhbFwiCiAKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9BbmRyb2lkLm1rIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0FuZHJvaWQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RjMTkyOQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsODggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK0xPQ0FMX1BBVEggOj0gJChjYWxsIG15LWRpcikKK0NPTU1PTl9DRkxBR1MgOj0gLVdhbGwgLVdlcnJvciAtV2V4dHJhCisKKyMKKyMgVGhlcmUgYXJlIHR3byB3YXlzIHRvIHV0aWxpemUgdGhlIGR5bmFtaWMgc2Vuc29yIG1vZHVsZToKKyMgICAxLiBVc2UgYXMgYW4gZXh0ZW5zaW9uIGluIGFuIGV4aXN0aW5nIGhhbDogZGVjbGFyZSBkZXBlbmRlbmN5IG9uIGxpYmR5bmFtaWNfc2Vuc29yX2V4dCBzaGFyZWQKKyMgICAgICBsaWJyYXJ5IGluIGV4aXN0aW5nIHNlbnNvciBoYWwuCisjICAgMi4gVXNlIGFzIGEgc3RhbmRhbG9uZSBzZW5zb3IgSEFMIGFuZCBjb25maWd1cmUgbXVsdGloYWwgdG8gY29tYmluZSBpdCB3aXRoIHNlbnNvciBoYWwgdGhhdAorIyAgICAgIGhvc3RzIG90aGVyIHNlbnNvcnM6IGFkZCBkZXBlbmRlbmN5IG9uIHNlbnNvcnMuZHluYW1pY19zZW5zb3JfaGFsIGluIGRldmljZSBsZXZlbCBtYWtlZmlsZSBhbmQKKyMgICAgICB3cml0ZSBtdWx0aWhhbCBjb25maWd1cmF0aW9uIGZpbGUgYWNjb3JkaW5nbHkuCisjCisjIFBsZWFzZSB0YWtlIG9ubHkgb25lIG9mIHRoZXNlIHR3byBvcHRpb25zIHRvIGF2b2lkIGNvbmZsaWN0IG92ZXIgaGFyZHdhcmUgcmVzb3VyY2UuCisjCisKKyMKKyMgT3B0aW9uIDE6IHNlbnNvciBleHRlbnNpb24gbW9kdWxlCisjCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKK0xPQ0FMX01PRFVMRSA6PSBsaWJkeW5hbWljX3NlbnNvcl9leHQKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisjIGludGVuZGVkIHRvIGJlIGludGVncmF0ZWQgaW50byBoYWwsIHRodXMgcHJvcHJpZXRhcnkKK0xPQ0FMX1BST1BSSUVUQVJZX01PRFVMRSA6PSB0cnVlCisKK0xPQ0FMX0NGTEFHUyArPSAkKENPTU1PTl9DRkxBR1MpIC1ETE9HX1RBRz1cIkR5bmFtaWNTZW5zb3JFeHRcIgorCitMT0NBTF9TUkNfRklMRVMgOj0gXAorICAgIEJhc2VEeW5hbWljU2Vuc29yRGFlbW9uLmNwcCBcCisgICAgQmFzZVNlbnNvck9iamVjdC5jcHAgXAorICAgIENvbm5lY3Rpb25EZXRlY3Rvci5jcHAgXAorICAgIER1bW15RHluYW1pY0FjY2VsRGFlbW9uLmNwcCBcCisgICAgRHluYW1pY1NlbnNvck1hbmFnZXIuY3BwIFwKKyAgICBSaW5nQnVmZmVyLmNwcAorCitMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IFwKKyAgICBsaWJjdXRpbHMgXAorICAgIGxpYnV0aWxzIFwKKyAgICBsaWJsb2cKKworTE9DQUxfRVhQT1JUX0NfSU5DTFVERV9ESVJTIDo9ICQoTE9DQUxfUEFUSCkKKworaW5jbHVkZSAkKEJVSUxEX1NIQVJFRF9MSUJSQVJZKQorCisjCisjIE9wdGlvbiAyOiBpbmRlcGVuZGVudCBzZW5zb3IgaGFsCisjCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKK0xPQ0FMX01PRFVMRSA6PSBzZW5zb3JzLmR5bmFtaWNfc2Vuc29yX2hhbAorTE9DQUxfTU9EVUxFX1JFTEFUSVZFX1BBVEggOj0gaHcKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisjIGhhbCBtb2R1bGUsIHRodXMgcHJvcHJpZXRhcnkKK0xPQ0FMX1BST1BSSUVUQVJZX01PRFVMRSA6PSB0cnVlCisKK0xPQ0FMX0NGTEFHUyArPSAkKENPTU1PTl9DRkxBR1MpIC1ETE9HX1RBRz1cIkR5bmFtaWNTZW5zb3JIYWxcIgorCitMT0NBTF9TUkNfRklMRVMgOj0gXAorICAgIEJhc2VEeW5hbWljU2Vuc29yRGFlbW9uLmNwcCBcCisgICAgQmFzZVNlbnNvck9iamVjdC5jcHAgXAorICAgIENvbm5lY3Rpb25EZXRlY3Rvci5jcHAgXAorICAgIER1bW15RHluYW1pY0FjY2VsRGFlbW9uLmNwcCBcCisgICAgRHluYW1pY1NlbnNvck1hbmFnZXIuY3BwIFwKKyAgICBSaW5nQnVmZmVyLmNwcCBcCisgICAgc2Vuc29ycy5jcHAKKworTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBcCisgICAgbGliY3V0aWxzIFwKKyAgICBsaWJ1dGlscyBcCisgICAgbGlibG9nCisKK0xPQ0FMX0VYUE9SVF9DX0lOQ0xVREVfRElSUyA6PSAkKExPQ0FMX1BBVEgpCisKK2luY2x1ZGUgJChCVUlMRF9TSEFSRURfTElCUkFSWSkKKworaW5jbHVkZSAkKExPQ0FMX1BBVEgpL0hpZFV0aWxzL0FuZHJvaWQubWsKKwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0Jhc2VEeW5hbWljU2Vuc29yRGFlbW9uLmNwcCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9CYXNlRHluYW1pY1NlbnNvckRhZW1vbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVmNjQyYwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9CYXNlRHluYW1pY1NlbnNvckRhZW1vbi5jcHAKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJCYXNlRHluYW1pY1NlbnNvckRhZW1vbi5oIgorI2luY2x1ZGUgIkR5bmFtaWNTZW5zb3JNYW5hZ2VyLmgiCisjaW5jbHVkZSAidXRpbHMvTG9nLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBTZW5zb3JIYWxFeHQgeworCitib29sIEJhc2VEeW5hbWljU2Vuc29yRGFlbW9uOjpvbkNvbm5lY3Rpb25DaGFuZ2UoY29uc3Qgc3RkOjpzdHJpbmcgJmRldmljZUtleSwgYm9vbCBjb25uZWN0ZWQpIHsKKyAgICBib29sIHJldCA9IGZhbHNlOworICAgIGF1dG8gaSA9IG1EZXZpY2VzLmZpbmQoZGV2aWNlS2V5KTsKKyAgICBpZiAoY29ubmVjdGVkKSB7CisgICAgICAgIGlmIChpID09IG1EZXZpY2VzLmVuZCgpKSB7CisgICAgICAgICAgICBBTE9HVigiZGV2aWNlICVzIGlzIGNvbm5lY3RlZCIsIGRldmljZUtleS5jX3N0cigpKTsKKyAgICAgICAgICAgIEJhc2VTZW5zb3JPYmplY3QqIHMgPSBjcmVhdGVTZW5zb3IoZGV2aWNlS2V5KTsKKyAgICAgICAgICAgIGlmIChzKSB7CisgICAgICAgICAgICAgICAgbURldmljZXMuZW1wbGFjZShkZXZpY2VLZXksIHNwPEJhc2VTZW5zb3JPYmplY3Q+KHMpKTsKKyAgICAgICAgICAgICAgICBtTWFuYWdlci5yZWdpc3RlclNlbnNvcihzKTsKKyAgICAgICAgICAgICAgICBBTE9HVigiZGV2aWNlICVzIGlzIHJlZ2lzdGVyZWQiLCBkZXZpY2VLZXkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgcmV0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFMT0dEKCJkZXZpY2UgJXMgYWxyZWFkeSBhZGRlZCBhbmQgaXMgY29ubmVjdGVkIGFnYWluLCBpZ25vcmUiLCBkZXZpY2VLZXkuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBBTE9HVigiZGV2aWNlICVzIGlzIGRpc2Nvbm5lY3RlZCIsIGRldmljZUtleS5jX3N0cigpKTsKKyAgICAgICAgaWYgKGkgIT0gbURldmljZXMuZW5kKCkpIHsKKyAgICAgICAgICAgIG1NYW5hZ2VyLnVucmVnaXN0ZXJTZW5zb3IoaS0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgICAgIG1EZXZpY2VzLmVyYXNlKGkpOworICAgICAgICAgICAgQUxPR1YoImRldmljZSAlcyBpcyB1bnJlZ2lzdGVyZWQiLCBkZXZpY2VLZXkuY19zdHIoKSk7CisgICAgICAgICAgICByZXQgPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQUxPR0QoImRldmljZSBub3QgZm91bmQgaW4gcmVnaXN0cnkiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9Cit9IC8vIG5hbWVzcGFjZSBTZW5zb3JIYWxFeHQKK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKKwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0Jhc2VEeW5hbWljU2Vuc29yRGFlbW9uLmggYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvQmFzZUR5bmFtaWNTZW5zb3JEYWVtb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjk4YjdkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0Jhc2VEeW5hbWljU2Vuc29yRGFlbW9uLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9TRU5TT1JIQUxfRVhUX0JBU0VfRFlOQU1JQ19TRU5TT1JfREFFTU9OX0gKKyNkZWZpbmUgQU5EUk9JRF9TRU5TT1JIQUxfRVhUX0JBU0VfRFlOQU1JQ19TRU5TT1JfREFFTU9OX0gKKworI2luY2x1ZGUgIkJhc2VTZW5zb3JPYmplY3QuaCIKKworI2luY2x1ZGUgPHV0aWxzL1JlZkJhc2UuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIFNlbnNvckhhbEV4dCB7CisKK2NsYXNzIER5bmFtaWNTZW5zb3JNYW5hZ2VyOworCitjbGFzcyBCYXNlRHluYW1pY1NlbnNvckRhZW1vbiA6IHB1YmxpYyBSZWZCYXNlIHsKK3B1YmxpYzoKKyAgICBCYXNlRHluYW1pY1NlbnNvckRhZW1vbihEeW5hbWljU2Vuc29yTWFuYWdlciYgbWFuYWdlcikgOiBtTWFuYWdlcihtYW5hZ2VyKSB7fQorICAgIHZpcnR1YWwgfkJhc2VEeW5hbWljU2Vuc29yRGFlbW9uKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBib29sIG9uQ29ubmVjdGlvbkNoYW5nZShjb25zdCBzdGQ6OnN0cmluZyAmZGV2aWNlS2V5LCBib29sIGNvbm5lY3RlZCk7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBCYXNlU2Vuc29yT2JqZWN0ICogY3JlYXRlU2Vuc29yKGNvbnN0IHN0ZDo6c3RyaW5nICZkZXZpY2VLZXkpID0gMDsKKworICAgIER5bmFtaWNTZW5zb3JNYW5hZ2VyICZtTWFuYWdlcjsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHNwPEJhc2VTZW5zb3JPYmplY3Q+ID4gbURldmljZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBTZW5zb3JIYWxFeHQKK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmIC8vIEFORFJPSURfU0VOU09SSEFMX0VYVF9CQVNFX0RZTkFNSUNfU0VOU09SX0RBRU1PTl9ICisKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9CYXNlU2Vuc29yT2JqZWN0LmNwcCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9CYXNlU2Vuc29yT2JqZWN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODllODdmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0Jhc2VTZW5zb3JPYmplY3QuY3BwCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiQmFzZVNlbnNvck9iamVjdC5oIgorI2luY2x1ZGUgIlNlbnNvckV2ZW50Q2FsbGJhY2suaCIKKworI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorI2luY2x1ZGUgPGNzdHJpbmc+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBTZW5zb3JIYWxFeHQgeworCitCYXNlU2Vuc29yT2JqZWN0OjpCYXNlU2Vuc29yT2JqZWN0KCkgOiBtQ2FsbGJhY2sobnVsbHB0cikgeworfQorCitib29sIEJhc2VTZW5zb3JPYmplY3Q6OnNldEV2ZW50Q2FsbGJhY2soU2Vuc29yRXZlbnRDYWxsYmFjayogY2FsbGJhY2spIHsKKyAgICBpZiAobUNhbGxiYWNrICE9IG51bGxwdHIpIHsKKyAgICAgICAgQUxPR0UoImNhbGxiYWNrIGlzIGFscmVhZHkgYXNzaWduZWQsIGNhbm5vdCBjaGFuZ2UuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbUNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQmFzZVNlbnNvck9iamVjdDo6Z2V0VXVpZCh1aW50OF90KiB1dWlkKSBjb25zdCB7CisgICAgLy8gZGVmYXVsdCB1dWlkIGRlbm90aW5nIHV1aWQgZmVhdHVyZSBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgc2Vuc29yLgorICAgIG1lbXNldCh1dWlkLCAwLCAxNik7Cit9CisKK2ludCBCYXNlU2Vuc29yT2JqZWN0OjpmbHVzaCgpIHsKKyAgICBzdGF0aWMgY29uc3Qgc2Vuc29yc19ldmVudF90IGV2ZW50ID0geworICAgICAgICAudHlwZSA9IFNFTlNPUl9UWVBFX01FVEFfREFUQSwKKyAgICAgICAgLnRpbWVzdGFtcCA9IFRJTUVTVEFNUF9BVVRPX0ZJTEwgIC8vIHRpbWVzdGFtcCB3aWxsIGJlIGZpbGxlZCBhdCBkaXNwYXRjaGVyCisgICAgfTsKKyAgICBnZW5lcmF0ZUV2ZW50KGV2ZW50KTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBCYXNlU2Vuc29yT2JqZWN0OjpnZW5lcmF0ZUV2ZW50KGNvbnN0IHNlbnNvcnNfZXZlbnRfdCAmZSkgeworICAgIGlmIChtQ2FsbGJhY2spIHsKKyAgICAgICAgbUNhbGxiYWNrLT5zdWJtaXRFdmVudCh0aGlzLCBlKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFNlbnNvckhhbEV4dAorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvQmFzZVNlbnNvck9iamVjdC5oIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0Jhc2VTZW5zb3JPYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjZlMTM4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0Jhc2VTZW5zb3JPYmplY3QuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBTkRST0lEX1NFTlNPUkhBTF9CQVNFX1NFTlNPUl9PQkpFQ1RfSAorI2RlZmluZSBBTkRST0lEX1NFTlNPUkhBTF9CQVNFX1NFTlNPUl9PQkpFQ1RfSAorCisjaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgorI2luY2x1ZGUgPHV0aWxzL1RpbWVycy5oPiAvLyBmb3IgbnNlY3NfdAorI2luY2x1ZGUgPGNzdGRpbnQ+CisKK3N0cnVjdCBzZW5zb3JfdDsKK3N0cnVjdCBzZW5zb3JzX2V2ZW50X3Q7CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBTZW5zb3JIYWxFeHQgeworCitjbGFzcyBTZW5zb3JFdmVudENhbGxiYWNrOworCitjbGFzcyBCYXNlU2Vuc29yT2JqZWN0IDogdmlydHVhbCBwdWJsaWMgUmVmQmFzZSB7CitwdWJsaWM6CisgICAgQmFzZVNlbnNvck9iamVjdCgpOworICAgIHZpcnR1YWwgfkJhc2VTZW5zb3JPYmplY3QoKSA9IGRlZmF1bHQ7CisKKyAgICAvLyBhbHdheXMgY2FsbGVkIGJ5IER5bmFtaWNTZW5zb3JNYW5hZ2VyLCBjYWxsYmFjayBtdXN0IHBvaW50IHRvCisgICAgLy8gdmFsaWQgb2JqZWN0IHRocm91Z2hvdXQgbGlmZSBjeWNsZSBvZiBCYXNlU2Vuc29yT2JqZWN0CisgICAgYm9vbCBzZXRFdmVudENhbGxiYWNrKFNlbnNvckV2ZW50Q2FsbGJhY2sqIGNhbGxiYWNrKTsKKworICAgIC8vIHZpcnR1YWwgZnVuY3Rpb25zIHRvIGdldCBzZW5zb3IgaW5mb3JtYXRpb24gYW5kIG9wZXJhdGUgc2Vuc29yCisgICAgdmlydHVhbCBjb25zdCBzZW5zb3JfdCogZ2V0U2Vuc29yKCkgY29uc3QgPSAwOworCisgICAgLy8gZ2V0IHV1aWQgb2Ygc2Vuc29yLCBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHNldCBpdCB0byBhbGwgemVybywgbWVhbnMgZG9lcyBub3QgaGF2ZSBhIHV1aWQuCisgICAgdmlydHVhbCB2b2lkIGdldFV1aWQodWludDhfdCogdXVpZCkgY29uc3Q7CisKKyAgICAvLyBlbmFibGUgc2Vuc29yCisgICAgdmlydHVhbCBpbnQgZW5hYmxlKGJvb2wgZW5hYmxlKSA9IDA7CisKKyAgICAvLyBzZXQgc2FtcGxlIHBlcmlvZCBhbmQgYmF0Y2hpbmcgcGVyaW9kIG9mIHNlbnNvci4KKyAgICB2aXJ0dWFsIGludCBiYXRjaChuc2Vjc190IHNhbXBsZVBlcmlvZCwgbnNlY3NfdCBiYXRjaFBlcmlvZCkgPSAwOworCisgICAgLy8gZmx1c2ggc2Vuc29yLCBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdpbGwgc2VuZCBhIGZsdXNoIGNvbXBsZXRlIGV2ZW50IGJhY2suCisgICAgdmlydHVhbCBpbnQgZmx1c2goKTsKKworcHJvdGVjdGVkOgorICAgIC8vIHV0aWxpdHkgZnVuY3Rpb24gZm9yIHN1Yi1jbGFzcworICAgIHZvaWQgZ2VuZXJhdGVFdmVudChjb25zdCBzZW5zb3JzX2V2ZW50X3QgJmUpOworcHJpdmF0ZToKKyAgICBTZW5zb3JFdmVudENhbGxiYWNrKiBtQ2FsbGJhY2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBTZW5zb3JIYWxFeHQKK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmIC8vIEFORFJPSURfU0VOU09SSEFMX0JBU0VfU0VOU09SX09CSkVDVF9ICisKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9Db25uZWN0aW9uRGV0ZWN0b3IuY3BwIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0Nvbm5lY3Rpb25EZXRlY3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA5OTQ5MwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9Db25uZWN0aW9uRGV0ZWN0b3IuY3BwCkBAIC0wLDAgKzEsMjE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgIkNvbm5lY3Rpb25EZXRlY3Rvci5oIgorCisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxzeXMvaW5vdGlmeS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworI2luY2x1ZGUgPHNzdHJlYW0+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBTZW5zb3JIYWxFeHQgeworCisvLyBTb2NrZXRDb25uZWN0aW9uRGV0ZWN0b3IgZnVuY3Rpb25zCitTb2NrZXRDb25uZWN0aW9uRGV0ZWN0b3I6OlNvY2tldENvbm5lY3Rpb25EZXRlY3RvcihCYXNlRHluYW1pY1NlbnNvckRhZW1vbiAqZCwgaW50IHBvcnQpCisgICAgICAgIDogQ29ubmVjdGlvbkRldGVjdG9yKGQpIHsKKyAgICAvLyBpbml0aWFsaXplIHNvY2tldCB0aGF0IGFjY2VwdCBjb25uZWN0aW9uIHRvIGxvY2FsaG9zdDpwb3J0CisgICAgbUxpc3RlbkZkID0gOjpzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApOworICAgIGlmIChtTGlzdGVuRmQgPCAwKSB7CisgICAgICAgIEFMT0dFKCJDYW5ub3Qgb3BlbiBzb2NrZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzZXJ2ZXJBZGRyZXNzID0geworICAgICAgICAuc2luX2ZhbWlseSA9IEFGX0lORVQsCisgICAgICAgIC5zaW5fcG9ydCA9IGh0b25zKHBvcnQpLAorICAgICAgICAuc2luX2FkZHIgPSB7CisgICAgICAgICAgICAuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKQorICAgICAgICB9CisgICAgfTsKKworICAgIDo6YmluZChtTGlzdGVuRmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSZzZXJ2ZXJBZGRyZXNzLCBzaXplb2Yoc2VydmVyQWRkcmVzcykpOworICAgIGlmICg6Omxpc3RlbihtTGlzdGVuRmQsIDApICE9IE5PX0VSUk9SKSB7CisgICAgICAgIEFMT0dFKCJDYW5ub3QgbGlzdGVuIHRvIHBvcnQgJWQiLCBwb3J0KTsKKyAgICAgICAgbUxpc3RlbkZkID0gLTE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gczsKKyAgICBzIDw8ICJzb2NrZXQ6IiA8PCBwb3J0OworICAgIG1EZXZpY2UgPSBzLnN0cigpOworCisgICAgcnVuKCJkZGFkX3NvY2tldCIpOworfQorCitTb2NrZXRDb25uZWN0aW9uRGV0ZWN0b3I6On5Tb2NrZXRDb25uZWN0aW9uRGV0ZWN0b3IoKSB7CisgICAgaWYgKG1MaXN0ZW5GZCA+PSAwKSB7CisgICAgICAgIHJlcXVlc3RFeGl0QW5kV2FpdCgpOworICAgIH0KK30KKworaW50IFNvY2tldENvbm5lY3Rpb25EZXRlY3Rvcjo6d2FpdEZvckNvbm5lY3Rpb24oKSB7CisgICAgcmV0dXJuIDo6YWNjZXB0KG1MaXN0ZW5GZCwgbnVsbHB0ciwgbnVsbHB0cik7Cit9CisKK3ZvaWQgU29ja2V0Q29ubmVjdGlvbkRldGVjdG9yOjp3YWl0Rm9yRGlzY29ubmVjdGlvbihpbnQgY29ubkZkKSB7CisgICAgY2hhciBidWZmZXJbMTZdOworICAgIHdoaWxlICg6OnJlYWQoY29ubkZkLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSA+IDApIHsKKyAgICAgICAgLy8gZGlzY2FyZCBkYXRhIGJ1dCByZXNwb25zZSBzb21ldGhpbmcgdG8gZGVub3RlIHRocmVhZCBhbGl2ZQorICAgICAgICA6OndyaXRlKGNvbm5GZCwgIi4iLCAxKTsKKyAgICB9CisgICAgLy8gcmVhZCBmYWlsdXJlIG1lYW5zIGRpc2Nvbm5lY3Rpb24KKyAgICA6OmNsb3NlKGNvbm5GZCk7Cit9CisKK2Jvb2wgU29ja2V0Q29ubmVjdGlvbkRldGVjdG9yOjp0aHJlYWRMb29wKCkgeworICAgIHdoaWxlICghVGhyZWFkOjpleGl0UGVuZGluZygpKSB7CisgICAgICAgIC8vIGJsb2NrIHdhaXRpbmcgZm9yIGNvbm5lY3Rpb24KKyAgICAgICAgaW50IGNvbm5GZCA9IHdhaXRGb3JDb25uZWN0aW9uKCk7CisKKyAgICAgICAgaWYgKGNvbm5GZCA8IDApIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgQUxPR1YoIlJlY2VpdmVkIGNvbm5lY3Rpb24sIHJlZ2lzdGVyIGR5bmFtaWMgYWNjZWwgc2Vuc29yIik7CisgICAgICAgIG1EYWVtb24tPm9uQ29ubmVjdGlvbkNoYW5nZShtRGV2aWNlLCB0cnVlKTsKKworICAgICAgICB3YWl0Rm9yRGlzY29ubmVjdGlvbihjb25uRmQpOworICAgICAgICBBTE9HVigiQ29ubmVjdGlvbiBicmVhaywgdW5yZWdpc3RlciBkeW5hbWljIGFjY2VsIHNlbnNvciIpOworICAgICAgICBtRGFlbW9uLT5vbkNvbm5lY3Rpb25DaGFuZ2UobURldmljZSwgZmFsc2UpOworICAgIH0KKyAgICBtRGFlbW9uLT5vbkNvbm5lY3Rpb25DaGFuZ2UobURldmljZSwgZmFsc2UpOworICAgIEFMT0dEKCJTb2NrZXRDb25uZWN0aW9uRGV0ZWN0b3IgdGhyZWFkIGV4aXRlZCIpOworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gRmlsZUNvbm5lY3Rpb25EZXRlY3RvciBmdW5jdGlvbnMKK0ZpbGVDb25uZWN0aW9uRGV0ZWN0b3I6OkZpbGVDb25uZWN0aW9uRGV0ZWN0b3IgKAorICAgICAgICBCYXNlRHluYW1pY1NlbnNvckRhZW1vbiAqZCwgY29uc3Qgc3RkOjpzdHJpbmcgJnBhdGgsIGNvbnN0IHN0ZDo6c3RyaW5nICZyZWdleCkKKyAgICAgICAgICAgIDogQ29ubmVjdGlvbkRldGVjdG9yKGQpLCBtUGF0aChwYXRoKSwgbVJlZ2V4KHJlZ2V4KSB7CisgICAgbUlub3RpZnlGZCA9IDo6aW5vdGlmeV9pbml0MShJTl9OT05CTE9DSyk7CisgICAgaWYgKG1Jbm90aWZ5RmQgPCAwKSB7CisgICAgICAgIEFMT0dFKCJDYW5ub3QgaW5pdCBpbm90aWZ5Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgd2QgPSA6Omlub3RpZnlfYWRkX3dhdGNoKG1Jbm90aWZ5RmQsIHBhdGguY19zdHIoKSwgSU5fQ1JFQVRFIHwgSU5fREVMRVRFIHwgSU5fTU9WRURfRlJPTSk7CisgICAgaWYgKHdkIDwgMCkgeworICAgICAgICA6OmNsb3NlKG1Jbm90aWZ5RmQpOworICAgICAgICBtSW5vdGlmeUZkID0gLTE7CisgICAgICAgIEFMT0dFKCJDYW5ub3Qgc2V0dXAgd2F0Y2ggb24gZGlyICVzIiwgcGF0aC5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1Qb2xsRmQuZmQgPSB3ZDsKKyAgICBtUG9sbEZkLmV2ZW50cyA9IFBPTExJTjsKKworICAgIHJ1bigiZGRhZF9maWxlIik7Cit9CisKK0ZpbGVDb25uZWN0aW9uRGV0ZWN0b3I6On5GaWxlQ29ubmVjdGlvbkRldGVjdG9yKCkgeworICAgIGlmIChtSW5vdGlmeUZkKSB7CisgICAgICAgIHJlcXVlc3RFeGl0QW5kV2FpdCgpOworICAgICAgICA6OmNsb3NlKG1Jbm90aWZ5RmQpOworICAgIH0KK30KKworYm9vbCBGaWxlQ29ubmVjdGlvbkRldGVjdG9yOjptYXRjaGVzKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBjb25zdCB7CisgICAgcmV0dXJuIHN0ZDo6cmVnZXhfbWF0Y2gobmFtZSwgbVJlZ2V4KTsKK30KKworc3RkOjpzdHJpbmcgRmlsZUNvbm5lY3Rpb25EZXRlY3Rvcjo6Z2V0RnVsbE5hbWUoY29uc3Qgc3RkOjpzdHJpbmcgbmFtZSkgY29uc3QgeworICAgIHJldHVybiBtUGF0aCArIG5hbWU7Cit9CisKK3ZvaWQgRmlsZUNvbm5lY3Rpb25EZXRlY3Rvcjo6cHJvY2Vzc0V4aXN0aW5nRmlsZXMoKSBjb25zdCB7CisgICAgYXV0byBkaXJwID0gOjpvcGVuZGlyKG1QYXRoLmNfc3RyKCkpOworICAgIHN0cnVjdCBkaXJlbnQgKmRwOworICAgIHdoaWxlICgoZHAgPSA6OnJlYWRkaXIoZGlycCkpICE9IE5VTEwpIHsKKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgbmFtZShkcC0+ZF9uYW1lKTsKKyAgICAgICAgaWYgKG1hdGNoZXMobmFtZSkpIHsKKyAgICAgICAgICAgIG1EYWVtb24tPm9uQ29ubmVjdGlvbkNoYW5nZShnZXRGdWxsTmFtZShuYW1lKSwgdHJ1ZSAvKmNvbm5lY3RlZCovKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA6OmNsb3NlZGlyKGRpcnApOworfQorCitib29sIEZpbGVDb25uZWN0aW9uRGV0ZWN0b3I6OnRocmVhZExvb3AoKSB7CisgICAgc3RydWN0IHsKKyAgICAgICAgc3RydWN0IGlub3RpZnlfZXZlbnQgZTsKKyAgICAgICAgdWludDhfdCBwYWRkaW5nW05BTUVfTUFYICsgMV07CisgICAgfSBldjsKKworICAgIHByb2Nlc3NFeGlzdGluZ0ZpbGVzKCk7CisKKyAgICB3aGlsZSAoIVRocmVhZDo6ZXhpdFBlbmRpbmcoKSkgeworICAgICAgICBpbnQgcG9sbE51bSA9IDo6cG9sbCgmbVBvbGxGZCwgMSwgLTEpOworICAgICAgICBpZiAocG9sbE51bSA9PSAtMSkgeworICAgICAgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpCisgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgQUxPR0UoImlub3RpZnkgcG9sbCBlcnJvcjogJXMiLCA6OnN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocG9sbE51bSA+IDApIHsKKyAgICAgICAgICAgIGlmICghIChtUG9sbEZkLnJldmVudHMgJiBQT0xMSU4pKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIElub3RpZnkgZXZlbnRzIGFyZSBhdmFpbGFibGUgKi8KKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgLyogUmVhZCBzb21lIGV2ZW50cy4gKi8KKyAgICAgICAgICAgICAgICBzc2l6ZV90IGxlbiA9IDo6cmVhZChtSW5vdGlmeUZkLCAmZXYsIHNpemVvZiBldik7CisgICAgICAgICAgICAgICAgaWYgKGxlbiA9PSAtMSAmJiBlcnJubyAhPSBFQUdBSU4pIHsKKyAgICAgICAgICAgICAgICAgICAgQUxPR0UoInJlYWQgZXJyb3I6ICVzIiwgOjpzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhpdCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBJZiB0aGUgbm9uYmxvY2tpbmcgcmVhZCgpIGZvdW5kIG5vIGV2ZW50cyB0byByZWFkLCB0aGVuCisgICAgICAgICAgICAgICAgICAgaXQgcmV0dXJucyAtMSB3aXRoIGVycm5vIHNldCB0byBFQUdBSU4uIEluIHRoYXQgY2FzZSwKKyAgICAgICAgICAgICAgICAgICB3ZSBleGl0IHRoZSBsb29wLiAqLworICAgICAgICAgICAgICAgIGlmIChsZW4gPD0gMCkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoZXYuZS5sZW4gJiYgIShldi5lLm1hc2sgJiBJTl9JU0RJUikpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgbmFtZShldi5lLm5hbWUpOworICAgICAgICAgICAgICAgICAgICBBTE9HVigiZGV2aWNlICVzIHN0YXRlIGNoYW5nZWQiLCBuYW1lLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyhuYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2LmUubWFzayAmIElOX0NSRUFURSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EYWVtb24tPm9uQ29ubmVjdGlvbkNoYW5nZShnZXRGdWxsTmFtZShuYW1lKSwgdHJ1ZSAvKiBjb25uZWN0ZWQqLyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldi5lLm1hc2sgJiBJTl9ERUxFVEUgfHwgZXYuZS5tYXNrICYgSU5fTU9WRURfRlJPTSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EYWVtb24tPm9uQ29ubmVjdGlvbkNoYW5nZShnZXRGdWxsTmFtZShuYW1lKSwgZmFsc2UgLyogY29ubmVjdGVkKi8pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgQUxPR0QoIkZpbGVDb25uZWN0aW9uRGV0ZWN0aW9uIHRocmVhZCBleGl0ZWQiKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9Cit9IC8vIG5hbWVzcGFjZSBTZW5zb3JIYWxFeHQKK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9Db25uZWN0aW9uRGV0ZWN0b3IuaCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9Db25uZWN0aW9uRGV0ZWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTJkODMyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0Nvbm5lY3Rpb25EZXRlY3Rvci5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfU0VOU09SSEFMX0VYVF9DT05ORUNUSU9OX0RFVEVDVE9SX0gKKyNkZWZpbmUgQU5EUk9JRF9TRU5TT1JIQUxfRVhUX0NPTk5FQ1RJT05fREVURUNUT1JfSAorCisjaW5jbHVkZSAiQmFzZUR5bmFtaWNTZW5zb3JEYWVtb24uaCIKKyNpbmNsdWRlIDx1dGlscy9UaHJlYWQuaD4KKworI2luY2x1ZGUgPHJlZ2V4PgorCisjaW5jbHVkZSA8cG9sbC5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgU2Vuc29ySGFsRXh0IHsKKworLy8gQWJzdHJhY3Rpb24gb2YgY29ubmVjdGlvbiBkZXRlY3RvcjogYW4gZW50aXR5IHRoYXQgY2FsbHMKKy8vIEJhc2VEeW5hbWljU2Vuc29yRGFlbW9uOjpvbkNvbm5lY3Rpb25DaGFuZ2UoKSB3aGVuIG5lY2Vzc2FyeS4KK2NsYXNzIENvbm5lY3Rpb25EZXRlY3RvciA6IHZpcnR1YWwgcHVibGljIFJlZkJhc2UgeworcHVibGljOgorICAgIENvbm5lY3Rpb25EZXRlY3RvcihCYXNlRHluYW1pY1NlbnNvckRhZW1vbiAqZCkgOiBtRGFlbW9uKGQpIHsgfQorICAgIHZpcnR1YWwgfkNvbm5lY3Rpb25EZXRlY3RvcigpID0gZGVmYXVsdDsKK3Byb3RlY3RlZDoKKyAgICBCYXNlRHluYW1pY1NlbnNvckRhZW1vbiogbURhZW1vbjsKK307CisKKy8vIE9wZW4gYSBzb2NrZXQgdGhhdCBsaXN0ZW4gdG8gbG9jYWxob3N0OnBvcnQgYW5kIG5vdGlmeSBzZW5zb3IgZGFlbW9uIG9mIGNvbm5lY3Rpb24gYW5kCisvLyBkaXNjb25uZWN0aW9uIGV2ZW50IHdoZW4gc29ja2V0IGlzIGNvbm5lY3RlZCBvciBkaXNjb25uZWN0ZWQsIHJlc3BlY3RpdmVseS4gT25seSBvbmUgY29uY3VycmVudAorLy8gY2xpZW50IGlzIGFjY2VwdGVkLgorY2xhc3MgU29ja2V0Q29ubmVjdGlvbkRldGVjdG9yIDogcHVibGljIENvbm5lY3Rpb25EZXRlY3RvciwgcHVibGljIFRocmVhZCB7CitwdWJsaWM6CisgICAgU29ja2V0Q29ubmVjdGlvbkRldGVjdG9yKEJhc2VEeW5hbWljU2Vuc29yRGFlbW9uICpkLCBpbnQgcG9ydCk7CisgICAgdmlydHVhbCB+U29ja2V0Q29ubmVjdGlvbkRldGVjdG9yKCk7Citwcml2YXRlOgorICAgIC8vIGltcGxlbWVudCB2aXJ0dWFsIG9mIFRocmVhZAorICAgIHZpcnR1YWwgYm9vbCB0aHJlYWRMb29wKCk7CisgICAgaW50IHdhaXRGb3JDb25uZWN0aW9uKCk7CisgICAgc3RhdGljIHZvaWQgd2FpdEZvckRpc2Nvbm5lY3Rpb24oaW50IGNvbm5GZCk7CisKKyAgICBpbnQgbUxpc3RlbkZkOworICAgIHN0ZDo6c3RyaW5nIG1EZXZpY2U7Cit9OworCisvLyBEZXRlY3QgZmlsZSBjaGFuZ2UgdW5kZXIgcGF0aCBhbmQgbm90aWZ5IHNlbnNvciBkYWVtb24gb2YgY29ubmVjdGlvbiBhbmQgZGlzY29ubmVjdGlvbiBldmVudCB3aGVuCisvLyBmaWxlIGlzIGNyZWF0ZWQgaW4gb3IgcmVtb3ZlZCBmcm9tIHRoZSBkaXJlY3RvcnksIHJlc3BlY3RpdmVseS4KK2NsYXNzIEZpbGVDb25uZWN0aW9uRGV0ZWN0b3IgOiBwdWJsaWMgQ29ubmVjdGlvbkRldGVjdG9yLCBwdWJsaWMgVGhyZWFkIHsKK3B1YmxpYzoKKyAgICBGaWxlQ29ubmVjdGlvbkRldGVjdG9yKAorICAgICAgICAgICAgQmFzZUR5bmFtaWNTZW5zb3JEYWVtb24gKmQsIGNvbnN0IHN0ZDo6c3RyaW5nICZwYXRoLCBjb25zdCBzdGQ6OnN0cmluZyAmcmVnZXgpOworICAgIHZpcnR1YWwgfkZpbGVDb25uZWN0aW9uRGV0ZWN0b3IoKTsKK3ByaXZhdGU6CisgICAgLy8gaW1wbGVtZW50IHZpcnR1YWwgb2YgVGhyZWFkCisgICAgdmlydHVhbCBib29sIHRocmVhZExvb3AoKTsKKworICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkgY29uc3Q7CisgICAgdm9pZCBwcm9jZXNzRXhpc3RpbmdGaWxlcygpIGNvbnN0OworICAgIHN0ZDo6c3RyaW5nIGdldEZ1bGxOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWUpIGNvbnN0OworCisgICAgc3RkOjpzdHJpbmcgbVBhdGg7CisgICAgc3RkOjpyZWdleCBtUmVnZXg7CisgICAgaW50IG1Jbm90aWZ5RmQ7CisgICAgc3RydWN0IHBvbGxmZCBtUG9sbEZkOworfTsKKworfSAvLyBuYW1lc3BhY2UgU2Vuc29ySGFsRXh0Cit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAvLyBBTkRST0lEX1NFTlNPUkhBTF9FWFRfRFlOQU1JQ19TRU5TT1JfREFFTU9OX0gKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9EdW1teUR5bmFtaWNBY2NlbERhZW1vbi5jcHAgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvRHVtbXlEeW5hbWljQWNjZWxEYWVtb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5Nzc5NjcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvRHVtbXlEeW5hbWljQWNjZWxEYWVtb24uY3BwCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgIkJhc2VTZW5zb3JPYmplY3QuaCIKKyNpbmNsdWRlICJDb25uZWN0aW9uRGV0ZWN0b3IuaCIKKyNpbmNsdWRlICJEdW1teUR5bmFtaWNBY2NlbERhZW1vbi5oIgorI2luY2x1ZGUgIkR5bmFtaWNTZW5zb3JNYW5hZ2VyLmgiCisKKyNpbmNsdWRlIDxjdXRpbHMvcHJvcGVydGllcy5oPgorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorI2luY2x1ZGUgPHV0aWxzL1N5c3RlbUNsb2NrLmg+CisjaW5jbHVkZSA8dXRpbHMvbWlzYy5oPgorCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhbGdvcml0aG0+ICAgICAgICAgICAgLy9zdGQ6Om1heAorCisjZGVmaW5lIFNZU1BST1BfUFJFRklYICAgICAgICAgICAgICAgICAgImR5bmFtaWNfc2Vuc29yLmR1bW15IgorI2RlZmluZSBGSUxFX05BTUVfQkFTRSAgICAgICAgICAgICAgICAgICJkdW1teV9hY2NlbF9maWxlIgorI2RlZmluZSBGSUxFX05BTUVfUkVHRVggICAgICAgICAgICAgICAgICgiXiIgRklMRV9OQU1FX0JBU0UgIlswLTldJCIpCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBTZW5zb3JIYWxFeHQgeworCitEdW1teUR5bmFtaWNBY2NlbERhZW1vbjo6RHVtbXlEeW5hbWljQWNjZWxEYWVtb24oRHluYW1pY1NlbnNvck1hbmFnZXImIG1hbmFnZXIpCisgICAgICAgIDogQmFzZUR5bmFtaWNTZW5zb3JEYWVtb24obWFuYWdlcikgeworICAgIGNoYXIgcHJvcGVydHlbUFJPUEVSVFlfVkFMVUVfTUFYKzFdOworCisgICAgcHJvcGVydHlfZ2V0KFNZU1BST1BfUFJFRklYICIuZmlsZSIsIHByb3BlcnR5LCAiIik7CisgICAgaWYgKHN0cmNtcChwcm9wZXJ0eSwgIiIpICE9IDApIHsKKyAgICAgICAgbUZpbGVEZXRlY3RvciA9IG5ldyBGaWxlQ29ubmVjdGlvbkRldGVjdG9yKAorICAgICAgICAgICAgICAgIHRoaXMsIHN0ZDo6c3RyaW5nKHByb3BlcnR5KSwgc3RkOjpzdHJpbmcoRklMRV9OQU1FX1JFR0VYKSk7CisgICAgfQorCisgICAgcHJvcGVydHlfZ2V0KFNZU1BST1BfUFJFRklYICIuc29ja2V0IiwgcHJvcGVydHksICIiKTsKKyAgICBpZiAoc3RyY21wKHByb3BlcnR5LCAiIikgIT0gMCkgeworICAgICAgICBtU29ja2V0RGV0ZWN0b3IgPSBuZXcgU29ja2V0Q29ubmVjdGlvbkRldGVjdG9yKHRoaXMsIGF0b2kocHJvcGVydHkpKTsKKyAgICB9Cit9CisKK0Jhc2VTZW5zb3JPYmplY3QgKiBEdW1teUR5bmFtaWNBY2NlbERhZW1vbjo6Y3JlYXRlU2Vuc29yKGNvbnN0IHN0ZDo6c3RyaW5nICZkZXZpY2VLZXkpIHsKKyAgICBpZiAoZGV2aWNlS2V5LmNvbXBhcmUoMCwgMSwgIi8iKSA9PSAwKSB7CisgICAgICAgIC8vIGZpbGUgZGV0ZWN0b3IgcmVzdWx0LCBkZXZpY2VLZXkgaXMgZmlsZSBhYnNvbHV0ZSBwYXRoCisgICAgICAgIHNpemVfdCBzdGFydCA9IHN0ZDo6bWF4KHN0YXRpY19jYXN0PHNpemVfdD4oMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZUtleS5sZW5ndGgoKSAtICg6OnN0cmxlbihGSUxFX05BTUVfQkFTRSkgKyAxKSk7CisgICAgICAgIHJldHVybiBuZXcgRHVtbXlTZW5zb3IoZGV2aWNlS2V5LnN1YnN0cihzdGFydCkpOworCisgICAgfSBlbHNlIGlmIChkZXZpY2VLZXkuY29tcGFyZSgwLCA6OnN0cmxlbigic29ja2V0OiIpLCAic29ja2V0OiIpID09IDApIHsKKyAgICAgICAgcmV0dXJuIG5ldyBEdW1teVNlbnNvcihkZXZpY2VLZXkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIHVua25vd24gZGV2aWNlS2V5CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK30KKworRHVtbXlEeW5hbWljQWNjZWxEYWVtb246OkR1bW15U2Vuc29yOjpEdW1teVNlbnNvcihjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkgOiBtUnVuU3RhdGUoZmFsc2UpIHsKKyAgICBtU2Vuc29yTmFtZSA9ICJEdW1teSBBY2NlbCAtICIgKyBuYW1lOworICAgIG1TZW5zb3IgPSAoc3RydWN0IHNlbnNvcl90KSB7CisgICAgICAgIG1TZW5zb3JOYW1lLmNfc3RyKCksCisgICAgICAgICJEZW1vU2Vuc2UsIEluYy4iLAorICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmVyc2lvbgorICAgICAgICAtMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlLCBkdW1teSBudW1iZXIgaGVyZQorICAgICAgICBTRU5TT1JfVFlQRV9BQ0NFTEVST01FVEVSLAorICAgICAgICA5LjggKiA4LjBmLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4UmFuZ2UKKyAgICAgICAgOS44ICogOC4wZiAvIDMyNzY4LjBmLCAgICAgICAgICAgICAgICAgICAgIC8vIHJlc29sdXRpb24KKyAgICAgICAgMC41ZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBvd2VyCisgICAgICAgIChpbnQzMl90KSgxLjBFNmYgLyA1MCksICAgICAgICAgICAgICAgICAgICAvLyBtaW5EZWxheQorICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlmb1Jlc2VydmVkRXZlbnRDb3VudAorICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlmb01heEV2ZW50Q291bnQKKyAgICAgICAgU0VOU09SX1NUUklOR19UWVBFX0FDQ0VMRVJPTUVURVIsCisgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXF1aXJlZFBlcm1pc3Npb24KKyAgICAgICAgKGxvbmcpKDEuMEU2ZiAvIDUwKSwgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heERlbGF5CisgICAgICAgIFNFTlNPUl9GTEFHX0NPTlRJTlVPVVNfTU9ERSwKKyAgICAgICAgeyBOVUxMLCBOVUxMIH0KKyAgICB9OworICAgIG1SdW5Mb2NrLmxvY2soKTsKKyAgICBydW4oIkR1bW15U2Vuc29yIik7Cit9CisKK0R1bW15RHluYW1pY0FjY2VsRGFlbW9uOjpEdW1teVNlbnNvcjo6fkR1bW15U2Vuc29yKCkgeworICAgIHJlcXVlc3RFeGl0QW5kV2FpdCgpOworICAgIC8vIHVubG9jayBtUnVuTG9jayBzbyB0aHJlYWQgY2FuIGJlIHVuYmxvY2tlZAorICAgIG1SdW5Mb2NrLnVubG9jaygpOworfQorCitjb25zdCBzZW5zb3JfdCogRHVtbXlEeW5hbWljQWNjZWxEYWVtb246OkR1bW15U2Vuc29yOjpnZXRTZW5zb3IoKSBjb25zdCB7CisgICAgcmV0dXJuICZtU2Vuc29yOworfQorCit2b2lkIER1bW15RHluYW1pY0FjY2VsRGFlbW9uOjpEdW1teVNlbnNvcjo6Z2V0VXVpZCh1aW50OF90KiB1dWlkKSBjb25zdCB7CisgICAgLy8gYXQgbWF4aW11bSwgdGhlcmUgd2lsbCBiZSBhbHdheXMgb25lIGluc3RhbmNlLCBzbyB3ZSBjYW4gaGFyZGNvZGUKKyAgICBzaXplX3QgaGFzaCA9IHN0ZDo6aGFzaDxzdGQ6OnN0cmluZz4oKShtU2Vuc29yTmFtZSk7CisgICAgbWVtc2V0KHV1aWQsICd4JywgMTYpOworICAgIG1lbWNweSh1dWlkLCAmaGFzaCwgc2l6ZW9mKGhhc2gpKTsKK30KKworaW50IER1bW15RHluYW1pY0FjY2VsRGFlbW9uOjpEdW1teVNlbnNvcjo6ZW5hYmxlKGJvb2wgZW5hYmxlKSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxrKG1Mb2NrKTsKKyAgICBpZiAobVJ1blN0YXRlICE9IGVuYWJsZSkgeworICAgICAgICBpZiAoZW5hYmxlKSB7CisgICAgICAgICAgICBtUnVuTG9jay51bmxvY2soKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1SdW5Mb2NrLmxvY2soKTsKKyAgICAgICAgfQorICAgICAgICBtUnVuU3RhdGUgPSBlbmFibGU7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitpbnQgRHVtbXlEeW5hbWljQWNjZWxEYWVtb246OkR1bW15U2Vuc29yOjpiYXRjaChuc2Vjc190LCBuc2Vjc190KSB7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRHVtbXlEeW5hbWljQWNjZWxEYWVtb246OkR1bW15U2Vuc29yOjp3YWl0VW50aWxOZXh0U2FtcGxlKCkgeworICAgIC8vIGJsb2NrIHdoZW4gZGlzYWJsZWQgKG1SdW5Mb2NrIGxvY2tlZCkKKyAgICBtUnVuTG9jay5sb2NrKCk7CisgICAgbVJ1bkxvY2sudW5sb2NrKCk7CisKKyAgICBpZiAoIVRocmVhZDo6ZXhpdFBlbmRpbmcoKSkgeworICAgICAgICAvLyBzbGVlcCAyMCBtcyAoNTBIeikKKyAgICAgICAgdXNsZWVwKDIwMDAwKTsKKyAgICB9Cit9CisKK2Jvb2wgRHVtbXlEeW5hbWljQWNjZWxEYWVtb246OkR1bW15U2Vuc29yOjp0aHJlYWRMb29wKCkgeworICAgIC8vIGRlc2lnbmF0ZWQgaW50aWFsaXphdGlvbiB3aWxsIGxlYXZlIHRoZSB1bnNwZWNpZmllZCBmaWVsZHMgemVyb2VkCisgICAgc2Vuc29yc19ldmVudF90IGV2ZW50ID0geworICAgICAgICAudmVyc2lvbiA9IHNpemVvZihldmVudCksCisgICAgICAgIC5zZW5zb3IgPSAtMSwKKyAgICAgICAgLnR5cGUgPSBTRU5TT1JfVFlQRV9BQ0NFTEVST01FVEVSLAorICAgIH07CisKKyAgICBpbnQ2NF90IHN0YXJ0VGltZU5zID0gZWxhcHNlZFJlYWx0aW1lTmFubygpOworCisgICAgQUxPR0koIkR5bmFtaWMgRHVtbXkgQWNjZWwgc3RhcnRlZCBmb3Igc2Vuc29yICVzIiwgbVNlbnNvck5hbWUuY19zdHIoKSk7CisgICAgd2hpbGUgKCFUaHJlYWQ6OmV4aXRQZW5kaW5nKCkpIHsKKyAgICAgICAgd2FpdFVudGlsTmV4dFNhbXBsZSgpOworCisgICAgICAgIGlmIChUaHJlYWQ6OmV4aXRQZW5kaW5nKCkpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGludDY0X3Qgbm93VGltZU5zID0gZWxhcHNlZFJlYWx0aW1lTmFubygpOworICAgICAgICBmbG9hdCB0ID0gKG5vd1RpbWVOcyAtIHN0YXJ0VGltZU5zKSAvIDFlOWY7CisKKyAgICAgICAgZXZlbnQuZGF0YVswXSA9IDIgKiA6OnNpbigzICogTV9QSSAqIHQpOworICAgICAgICBldmVudC5kYXRhWzFdID0gMyAqIDo6Y29zKDMgKiBNX1BJICogdCk7CisgICAgICAgIGV2ZW50LmRhdGFbMl0gPSAxLjUgKiA6OnNpbig2ICogTV9QSSAqIHQpOworICAgICAgICBldmVudC50aW1lc3RhbXAgPSBub3dUaW1lTnM7CisgICAgICAgIGdlbmVyYXRlRXZlbnQoZXZlbnQpOworICAgIH0KKworICAgIEFMT0dJKCJEeW5hbWljIER1bW15IEFjY2VsIHRocmVhZCBlbmRlZCBmb3Igc2Vuc29yICVzIiwgbVNlbnNvck5hbWUuY19zdHIoKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBTZW5zb3JIYWxFeHQKK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKKwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0R1bW15RHluYW1pY0FjY2VsRGFlbW9uLmggYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvRHVtbXlEeW5hbWljQWNjZWxEYWVtb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmZmYmVlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0R1bW15RHluYW1pY0FjY2VsRGFlbW9uLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9TRU5TT1JIQUxfRVhUX0RVTU1ZX0RZTkFNSUNfQUNDRUxfREFFTU9OX0gKKyNkZWZpbmUgQU5EUk9JRF9TRU5TT1JIQUxfRVhUX0RVTU1ZX0RZTkFNSUNfQUNDRUxfREFFTU9OX0gKKworI2luY2x1ZGUgIkJhc2VEeW5hbWljU2Vuc29yRGFlbW9uLmgiCisjaW5jbHVkZSAiQmFzZVNlbnNvck9iamVjdC5oIgorCisjaW5jbHVkZSA8aGFyZHdhcmUvc2Vuc29ycy5oPgorI2luY2x1ZGUgPHV0aWxzL1RocmVhZC5oPgorI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBTZW5zb3JIYWxFeHQgeworCitjbGFzcyBDb25uZWN0aW9uRGV0ZWN0b3I7CisKKy8qKgorICogVGhpcyBkYWVtb24gc2ltdWxhdGVzIGR5bmFtaWMgc2Vuc29yIGNvbm5lY3Rpb24gd2l0aG91dCB0aGUgbmVlZCBvZiBhY3R1YWxseSBjb25uZWN0IHBlcmlwaGVyYWwKKyAqIHRvIEFuZHJvaWQuIEl0IGlzIGZvciBkZWJ1Z2dpbmcgYW5kIHRlc3RpbmcuIEl0IGNhbiBoYW5kbGUgb25lIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMgYXQgbWF4aW11bS4KKyAqLworY2xhc3MgRHVtbXlEeW5hbWljQWNjZWxEYWVtb24gOiBwdWJsaWMgQmFzZUR5bmFtaWNTZW5zb3JEYWVtb24geworcHVibGljOgorICAgIER1bW15RHluYW1pY0FjY2VsRGFlbW9uKER5bmFtaWNTZW5zb3JNYW5hZ2VyJiBtYW5hZ2VyKTsKKyAgICB2aXJ0dWFsIH5EdW1teUR5bmFtaWNBY2NlbERhZW1vbigpID0gZGVmYXVsdDsKK3ByaXZhdGU6CisgICAgY2xhc3MgRHVtbXlTZW5zb3IgOiBwdWJsaWMgQmFzZVNlbnNvck9iamVjdCwgcHVibGljIFRocmVhZCB7CisgICAgcHVibGljOgorICAgICAgICBEdW1teVNlbnNvcihjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7CisgICAgICAgIH5EdW1teVNlbnNvcigpOworICAgICAgICB2aXJ0dWFsIGNvbnN0IHNlbnNvcl90KiBnZXRTZW5zb3IoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGdldFV1aWQodWludDhfdCogdXVpZCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgaW50IGVuYWJsZShib29sIGVuYWJsZSk7CisgICAgICAgIHZpcnR1YWwgaW50IGJhdGNoKG5zZWNzX3Qgc2FtcGxlX3BlcmlvZCwgbnNlY3NfdCBiYXRjaF9wZXJpb2QpOworICAgIHByaXZhdGU6CisgICAgICAgIC8vIGltcGxlbWVudCBUaHJlYWQgZnVuY3Rpb24KKyAgICAgICAgdmlydHVhbCBib29sIHRocmVhZExvb3AoKSBvdmVycmlkZTsKKworICAgICAgICB2b2lkIHdhaXRVbnRpbE5leHRTYW1wbGUoKTsKKworICAgICAgICBzZW5zb3JfdCBtU2Vuc29yOworICAgICAgICBzdGQ6OnN0cmluZyBtU2Vuc29yTmFtZTsKKworICAgICAgICBzdGQ6Om11dGV4IG1Mb2NrOworICAgICAgICBzdGQ6Om11dGV4IG1SdW5Mb2NrOworICAgICAgICBib29sIG1SdW5TdGF0ZTsKKyAgICB9OworICAgIC8vIGltcGxlbWVudCBCYXNlRHluYW1pY1NlbnNvckRhZW1vbiBmdW5jdGlvbgorICAgIEJhc2VTZW5zb3JPYmplY3QgKiBjcmVhdGVTZW5zb3IoY29uc3Qgc3RkOjpzdHJpbmcgJmRldmljZUtleSkgb3ZlcnJpZGU7CisKKyAgICBzcDxDb25uZWN0aW9uRGV0ZWN0b3I+IG1GaWxlRGV0ZWN0b3I7CisgICAgc3A8Q29ubmVjdGlvbkRldGVjdG9yPiBtU29ja2V0RGV0ZWN0b3I7Cit9OworfSAvLyBuYW1lc3BhY2UgU2Vuc29ySGFsRXh0Cit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAvLyBBTkRST0lEX1NFTlNPUkhBTF9FWFRfRFlOQU1JQ19TRU5TT1JfREFFTU9OX0gKKwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0R5bmFtaWNTZW5zb3JNYW5hZ2VyLmNwcCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9EeW5hbWljU2Vuc29yTWFuYWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI0OTAzZAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9EeW5hbWljU2Vuc29yTWFuYWdlci5jcHAKQEAgLTAsMCArMSwyODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiQmFzZUR5bmFtaWNTZW5zb3JEYWVtb24uaCIKKyNpbmNsdWRlICJCYXNlU2Vuc29yT2JqZWN0LmgiCisjaW5jbHVkZSAiRHVtbXlEeW5hbWljQWNjZWxEYWVtb24uaCIKKyNpbmNsdWRlICJEeW5hbWljU2Vuc29yTWFuYWdlci5oIgorCisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisjaW5jbHVkZSA8dXRpbHMvU3lzdGVtQ2xvY2suaD4KKworI2luY2x1ZGUgPGNhc3NlcnQ+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBTZW5zb3JIYWxFeHQgeworCitEeW5hbWljU2Vuc29yTWFuYWdlciogRHluYW1pY1NlbnNvck1hbmFnZXI6OmNyZWF0ZUluc3RhbmNlKAorICAgICAgICBpbnQgaGFuZGxlQmFzZSwgaW50IGhhbmRsZUNvdW50LCBTZW5zb3JFdmVudENhbGxiYWNrICpjYWxsYmFjaykgeworICAgIGF1dG8gbSA9IG5ldyBEeW5hbWljU2Vuc29yTWFuYWdlcihoYW5kbGVCYXNlLCBoYW5kbGVCYXNlICsgaGFuZGxlQ291bnQgLSAxLCBjYWxsYmFjayk7CisgICAgbS0+bURhZW1vblZlY3Rvci5wdXNoX2JhY2sobmV3IER1bW15RHluYW1pY0FjY2VsRGFlbW9uKCptKSk7CisgICAgcmV0dXJuIG07Cit9CisKK0R5bmFtaWNTZW5zb3JNYW5hZ2VyOjpEeW5hbWljU2Vuc29yTWFuYWdlcigKKyAgICAgICAgaW50IGhhbmRsZUJhc2UsIGludCBoYW5kbGVNYXgsIFNlbnNvckV2ZW50Q2FsbGJhY2sqIGNhbGxiYWNrKSA6CisgICAgICAgIG1IYW5kbGVSYW5nZShoYW5kbGVCYXNlLCBoYW5kbGVNYXgpLAorICAgICAgICBtQ2FsbGJhY2soY2FsbGJhY2spLAorICAgICAgICBtRmlmbyhjYWxsYmFjayA/IDAgOiBrRmlmb1NpemUpLAorICAgICAgICBtTmV4dEhhbmRsZShoYW5kbGVCYXNlKzEpIHsKKyAgICBhc3NlcnQoaGFuZGxlQmFzZSA+IDAgJiYgaGFuZGxlTWF4ID4gaGFuZGxlQmFzZSArIDEpOyAvLyBoYW5kbGVCYXNlIGlzIHJlc2VydmVkCisKKyAgICBtTWV0YVNlbnNvciA9IChjb25zdCBzZW5zb3JfdCkgeworICAgICAgICAiRHluYW1pYyBTZW5zb3IgTWFuYWdlciIsCisgICAgICAgICJHb29nbGUiLAorICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZlcnNpb24KKyAgICAgICAgaGFuZGxlQmFzZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUKKyAgICAgICAgU0VOU09SX1RZUEVfRFlOQU1JQ19TRU5TT1JfTUVUQSwKKyAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXhSYW5nZQorICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlc29sdXRpb24KKyAgICAgICAgMWUtNmYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwb3dlciwgdmVyeSBzbWFsbCBudW1iZXIgaW5zdGVhZCBvZiAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQgc2lndWxhcml0eSBpbiBhcHAKKyAgICAgICAgKGludDMyX3QpKDEwMDApLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtaW5EZWxheQorICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpZm9SZXNlcnZlZEV2ZW50Q291bnQKKyAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaWZvTWF4RXZlbnRDb3VudAorICAgICAgICBTRU5TT1JfU1RSSU5HX1RZUEVfRFlOQU1JQ19TRU5TT1JfTUVUQSwKKyAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXF1aXJlZFBlcm1pc3Npb24KKyAgICAgICAgKGxvbmcpKDEwMDApLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXhEZWxheQorICAgICAgICBTRU5TT1JfRkxBR19TUEVDSUFMX1JFUE9SVElOR19NT0RFIHwgU0VOU09SX0ZMQUdfV0FLRV9VUCwKKyAgICAgICAgeyBOVUxMLCBOVUxMIH0KKyAgICB9OworfQorCitEeW5hbWljU2Vuc29yTWFuYWdlcjo6fkR5bmFtaWNTZW5zb3JNYW5hZ2VyKCkgeworICAgIC8vIGZyZWUgYWxsIGRhZW1vbnMgZmlyc3QKKyAgICBtRGFlbW9uVmVjdG9yLmNsZWFyKCk7Cit9CisKK2Jvb2wgRHluYW1pY1NlbnNvck1hbmFnZXI6Om93bnMoaW50IGhhbmRsZSkgY29uc3QgeworICAgIHJldHVybiBoYW5kbGUgPj0gbUhhbmRsZVJhbmdlLmZpcnN0ICYmIGhhbmRsZSA8IG1IYW5kbGVSYW5nZS5zZWNvbmQ7Cit9CisKK2ludCBEeW5hbWljU2Vuc29yTWFuYWdlcjo6YWN0aXZhdGUoaW50IGhhbmRsZSwgYm9vbCBlbmFibGUpIHsKKyAgICBpZiAoaGFuZGxlID09IG1IYW5kbGVSYW5nZS5maXJzdCkgeworICAgICAgICAvLyBpZ25vcmVkCisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8vIGluIGNhc2UgdGhlcmUgaXMgYSBwZW5kaW5nIHJlcG9ydCwgbm93IGl0IGlzIHRpbWUgdG8gcmVtb3ZlIGl0IGFzIGl0IGlzIG5vIGxvbmdlciBuZWNlc3NhcnkuCisgICAgeworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbGsobUxvY2spOworICAgICAgICBtUGVuZGluZ1JlcG9ydC5lcmFzZShoYW5kbGUpOworICAgIH0KKworICAgIHJldHVybiBvcGVyYXRlU2Vuc29yKGhhbmRsZSwKKyAgICAgICAgICAgIFsmZW5hYmxlXSAoc3A8QmFzZVNlbnNvck9iamVjdD4gcyktPmludCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHMtPmVuYWJsZShlbmFibGUpOworICAgICAgICAgICAgfSk7Cit9CisKK2ludCBEeW5hbWljU2Vuc29yTWFuYWdlcjo6YmF0Y2goaW50IGhhbmRsZSwgbnNlY3NfdCBzYW1wbGVfcGVyaW9kLCBuc2Vjc190IGJhdGNoX3BlcmlvZCkgeworICAgIGlmIChoYW5kbGUgPT0gbUhhbmRsZVJhbmdlLmZpcnN0KSB7CisgICAgICAgIC8vIGlnbm9yZWQKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBvcGVyYXRlU2Vuc29yKGhhbmRsZSwKKyAgICAgICAgICAgIFsmc2FtcGxlX3BlcmlvZCwgJmJhdGNoX3BlcmlvZF0gKHNwPEJhc2VTZW5zb3JPYmplY3Q+IHMpLT5pbnQgeworICAgICAgICAgICAgICAgIHJldHVybiBzLT5iYXRjaChzYW1wbGVfcGVyaW9kLCBiYXRjaF9wZXJpb2QpOworICAgICAgICAgICAgfSk7Cit9CisKK2ludCBEeW5hbWljU2Vuc29yTWFuYWdlcjo6c2V0RGVsYXkoaW50IGhhbmRsZSwgbnNlY3NfdCBzYW1wbGVfcGVyaW9kKSB7CisgICAgcmV0dXJuIGJhdGNoKGhhbmRsZSwgc2FtcGxlX3BlcmlvZCwgMCk7Cit9CisKK2ludCBEeW5hbWljU2Vuc29yTWFuYWdlcjo6Zmx1c2goaW50IGhhbmRsZSkgeworICAgIGlmIChoYW5kbGUgPT0gbUhhbmRsZVJhbmdlLmZpcnN0KSB7CisgICAgICAgIC8vIFRPRE86IHN1Ym1pdCBhIGZsdXNoIGNvbXBsZXRlIGhlcmUKKyAgICAgICAgc3RhdGljIGNvbnN0IHNlbnNvcnNfZXZlbnRfdCBldmVudCA9IHsKKyAgICAgICAgICAgIC50eXBlID0gU0VOU09SX1RZUEVfTUVUQV9EQVRBLAorICAgICAgICAgICAgLnNlbnNvciA9IG1IYW5kbGVSYW5nZS5maXJzdCwKKyAgICAgICAgICAgIC50aW1lc3RhbXAgPSBUSU1FU1RBTVBfQVVUT19GSUxMLCAgLy8gdGltZXN0YW1wIHdpbGwgYmUgZmlsbGVkIGF0IGRpc3BhdGNoZXIKKyAgICAgICAgfTsKKyAgICAgICAgc3VibWl0RXZlbnQobnVsbHB0ciwgZXZlbnQpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIG9wZXJhdGVTZW5zb3IoaGFuZGxlLCBbXSAoc3A8QmFzZVNlbnNvck9iamVjdD4gcyktPmludCB7cmV0dXJuIHMtPmZsdXNoKCk7fSk7Cit9CisKK2ludCBEeW5hbWljU2Vuc29yTWFuYWdlcjo6cG9sbChzZW5zb3JzX2V2ZW50X3QgKiBkYXRhLCBpbnQgY291bnQpIHsKKyAgICBhc3NlcnQobUNhbGxiYWNrID09IG51bGxwdHIpOworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsayhtRmlmb0xvY2spOworICAgIHJldHVybiBtRmlmby5yZWFkKGRhdGEsIGNvdW50KTsKK30KKworYm9vbCBEeW5hbWljU2Vuc29yTWFuYWdlcjo6cmVnaXN0ZXJTZW5zb3Ioc3A8QmFzZVNlbnNvck9iamVjdD4gc2Vuc29yKSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxrKG1Mb2NrKTsKKyAgICBpZiAobVJldmVyc2VNYXAuZmluZChzZW5zb3IuZ2V0KCkpICE9IG1SZXZlcnNlTWFwLmVuZCgpKSB7CisgICAgICAgIEFMT0dFKCJ0cnlpbmcgdG8gYWRkIHRoZSBzYW1lIHNlbnNvciB0d2ljZSwgaWdub3JlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaW50IGhhbmRsZSA9IGdldE5leHRBdmFpbGFibGVIYW5kbGUoKTsKKyAgICBpZiAoaGFuZGxlIDwgMCkgeworICAgICAgICBBTE9HRSgiUnVubmluZyBvdXQgb2YgaGFuZGxlLCBxdWl0LiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gdGhlc2UgZW1wbGFjZSB3aWxsIGFsd2F5cyBiZSBzdWNjZXNzZnVsCisgICAgbU1hcC5lbXBsYWNlKGhhbmRsZSwgc2Vuc29yKTsKKyAgICBtUmV2ZXJzZU1hcC5lbXBsYWNlKHNlbnNvci5nZXQoKSwgaGFuZGxlKTsKKyAgICBzZW5zb3ItPnNldEV2ZW50Q2FsbGJhY2sodGhpcyk7CisKKyAgICBhdXRvIGVudHJ5ID0gbVBlbmRpbmdSZXBvcnQuZW1wbGFjZSgKKyAgICAgICAgICAgIHN0ZDo6cGllY2V3aXNlX2NvbnN0cnVjdCwKKyAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZF9hc190dXBsZShoYW5kbGUpLAorICAgICAgICAgICAgc3RkOjpmb3J3YXJkX2FzX3R1cGxlKGhhbmRsZSwgc2Vuc29yKSk7CisgICAgaWYgKGVudHJ5LnNlY29uZCkgeworICAgICAgICBzdWJtaXRFdmVudChudWxscHRyLCBlbnRyeS5maXJzdC0+c2Vjb25kLmdlbmVyYXRlQ29ubmVjdGlvbkV2ZW50KG1IYW5kbGVSYW5nZS5maXJzdCkpOworICAgIH0KKyAgICByZXR1cm4gZW50cnkuc2Vjb25kOworfQorCit2b2lkIER5bmFtaWNTZW5zb3JNYW5hZ2VyOjp1bnJlZ2lzdGVyU2Vuc29yKHNwPEJhc2VTZW5zb3JPYmplY3Q+IHNlbnNvcikgeworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsayhtTG9jayk7CisgICAgYXV0byBpID0gbVJldmVyc2VNYXAuZmluZChzZW5zb3IuZ2V0KCkpOworICAgIGlmIChpID09IG1SZXZlcnNlTWFwLmVuZCgpKSB7CisgICAgICAgIEFMT0dFKCJjYW5ub3QgcmVtb3ZlIGEgbm9uLWV4aXN0IHNlbnNvciIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGludCBoYW5kbGUgPSBpLT5zZWNvbmQ7CisgICAgbVJldmVyc2VNYXAuZXJhc2UoaSk7CisgICAgbU1hcC5lcmFzZShoYW5kbGUpOworCisgICAgLy8gd2lsbCBub3QgY2xlYW4gdXAgbVBlbmRpbmdSZXBvcnQgaGVyZSwgaXQgd2lsbCBiZSBjbGVhbmVkIHVwIHdoZW4gYXQgZmlyc3QgYWN0aXZhdGUgY2FsbC4KKyAgICAvLyBzZW5zb3JzZXJ2aWNlIGlzIGd1cmFudGVlZCB0byBjYWxsIGFjdGl2YXRlIHVwb24gYXJyaXZhbCBvZiBkeW5hbWljIHNlbnNvciBtZXRhIGNvbm5lY3Rpb24KKyAgICAvLyBldmVudC4KKworICAgIC8vIHNlbmQgZGlzY29ubmVjdGlvbiBldmVudAorICAgIHNlbnNvcnNfZXZlbnRfdCBldmVudDsKKyAgICBDb25uZWN0aW9uUmVwb3J0OjpmaWxsRGlzY29ubmVjdGlvbkV2ZW50KCZldmVudCwgbUhhbmRsZVJhbmdlLmZpcnN0LCBoYW5kbGUpOworICAgIHN1Ym1pdEV2ZW50KG51bGxwdHIsIGV2ZW50KTsKK30KKworaW50IER5bmFtaWNTZW5zb3JNYW5hZ2VyOjpzdWJtaXRFdmVudChzcDxCYXNlU2Vuc29yT2JqZWN0PiBzb3VyY2UsIGNvbnN0IHNlbnNvcnNfZXZlbnRfdCAmZSkgeworICAgIGludCBoYW5kbGU7CisgICAgaWYgKHNvdXJjZSA9PSBudWxscHRyKSB7CisgICAgICAgIGhhbmRsZSA9IG1IYW5kbGVSYW5nZS5maXJzdDsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbGsobUxvY2spOworICAgICAgICBhdXRvIGkgPSBtUmV2ZXJzZU1hcC5maW5kKHNvdXJjZS5nZXQoKSk7CisgICAgICAgIGlmIChpID09IG1SZXZlcnNlTWFwLmVuZCgpKSB7CisgICAgICAgICAgICBBTE9HRSgiY2Fubm90IHN1Ym1pdCBldmVudCBmb3Igc2Vuc29yIHRoYXQgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQiKTsKKyAgICAgICAgICAgIHJldHVybiBOQU1FX05PVF9GT1VORDsKKyAgICAgICAgfQorICAgICAgICBoYW5kbGUgPSBpLT5zZWNvbmQ7CisgICAgfQorCisgICAgLy8gbWFraW5nIGEgY29weSBvZiBldmVudHMsIHByZXBhcmUgZm9yIGVkaXRpbmcKKyAgICBzZW5zb3JzX2V2ZW50X3QgZXZlbnQgPSBlOworICAgIGV2ZW50LnZlcnNpb24gPSBzaXplb2YoZXZlbnQpOworCisgICAgLy8gc3BlY2lhbCBjYXNlIG9mIGZsdXNoIGNvbXBsZXRlCisgICAgaWYgKGV2ZW50LnR5cGUgPT0gU0VOU09SX1RZUEVfTUVUQV9EQVRBKSB7CisgICAgICAgIGV2ZW50LnNlbnNvciA9IDA7CisgICAgICAgIGV2ZW50Lm1ldGFfZGF0YS5zZW5zb3IgPSBoYW5kbGU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXZlbnQuc2Vuc29yID0gaGFuZGxlOworICAgIH0KKworICAgIC8vIHNldCB0aW1lc3RhbXAgaWYgaXQgaXMgZGVmYXVsdCB2YWx1ZQorICAgIGlmIChldmVudC50aW1lc3RhbXAgPT0gVElNRVNUQU1QX0FVVE9fRklMTCkgeworICAgICAgICBldmVudC50aW1lc3RhbXAgPSBlbGFwc2VkUmVhbHRpbWVOYW5vKCk7CisgICAgfQorCisgICAgaWYgKG1DYWxsYmFjaykgeworICAgICAgICAvLyBleHRlbnRpb24gbW9kZSwgY2FsbGluZyBjYWxsYmFjayBkaXJlY3RseQorICAgICAgICBpbnQgcmV0OworCisgICAgICAgIHJldCA9IG1DYWxsYmFjay0+c3VibWl0RXZlbnQobnVsbHB0ciwgZXZlbnQpOworICAgICAgICBpZiAocmV0IDwgMCkgeworICAgICAgICAgICAgQUxPR0UoIkR5bmFtaWNTZW5zb3JNYW5hZ2VyIGNhbGxiYWNrIGZhaWxlZCwgcmV0OiAlZCIsIHJldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBzdGFuZGFsb25lIG1vZGUsIGFkZCBldmVudCB0byBpbnRlcm5hbCBidWZmZXIgZm9yIHBvbGwoKSB0byBwaWNrIHVwCisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsayhtRmlmb0xvY2spOworICAgICAgICBpZiAobUZpZm8ud3JpdGUoJmV2ZW50LCAxKSA8IDApIHsKKyAgICAgICAgICAgIEFMT0dFKCJEeW5hbWljU2Vuc29yTWFuYWdlciBmaWZvIGZ1bGwiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworaW50IER5bmFtaWNTZW5zb3JNYW5hZ2VyOjpnZXROZXh0QXZhaWxhYmxlSGFuZGxlKCkgeworICAgIGlmIChtTmV4dEhhbmRsZSA9PSBtSGFuZGxlUmFuZ2Uuc2Vjb25kKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIG1OZXh0SGFuZGxlKys7Cit9CisKK2NvbnN0IHNlbnNvcl90JiBEeW5hbWljU2Vuc29yTWFuYWdlcjo6Z2V0RHluYW1pY01ldGFTZW5zb3IoKSBjb25zdCB7CisgICAgcmV0dXJuIG1NZXRhU2Vuc29yOworfQorCitEeW5hbWljU2Vuc29yTWFuYWdlcjo6Q29ubmVjdGlvblJlcG9ydDo6Q29ubmVjdGlvblJlcG9ydCgKKyAgICAgICAgaW50IGhhbmRsZSwgc3A8QmFzZVNlbnNvck9iamVjdD4gc2Vuc29yKSA6CisgICAgICAgIG1TZW5zb3IoKihzZW5zb3ItPmdldFNlbnNvcigpKSksCisgICAgICAgIG1OYW1lKG1TZW5zb3IubmFtZSksCisgICAgICAgIG1WZW5kb3IobVNlbnNvci52ZW5kb3IpLAorICAgICAgICBtUGVybWlzc2lvbihtU2Vuc29yLnJlcXVpcmVkUGVybWlzc2lvbiksCisgICAgICAgIG1TdHJpbmdUeXBlKG1TZW5zb3Iuc3RyaW5nVHlwZSksCisgICAgICAgIG1HZW5lcmF0ZWQoZmFsc2UpIHsKKyAgICBtU2Vuc29yLm5hbWUgPSBtTmFtZS5jX3N0cigpOworICAgIG1TZW5zb3IudmVuZG9yID0gbVZlbmRvci5jX3N0cigpOworICAgIG1TZW5zb3IucmVxdWlyZWRQZXJtaXNzaW9uID0gbVBlcm1pc3Npb24uY19zdHIoKTsKKyAgICBtU2Vuc29yLnN0cmluZ1R5cGUgPSBtU3RyaW5nVHlwZS5jX3N0cigpOworICAgIG1TZW5zb3IuaGFuZGxlID0gaGFuZGxlOworICAgIG1lbXNldCgmbUV2ZW50LCAwLCBzaXplb2YobUV2ZW50KSk7CisgICAgbUV2ZW50LnZlcnNpb24gPSBzaXplb2YobUV2ZW50KTsKKyAgICBzZW5zb3ItPmdldFV1aWQobVV1aWQpOworICAgIEFMT0dWKCJDb25uZWN0aW9uIHJlcG9ydCBpbml0OiBuYW1lID0gJXMsIGhhbmRsZSA9ICVkIiwgbVNlbnNvci5uYW1lLCBtU2Vuc29yLmhhbmRsZSk7Cit9CisKK0R5bmFtaWNTZW5zb3JNYW5hZ2VyOjpDb25uZWN0aW9uUmVwb3J0Ojp+Q29ubmVjdGlvblJlcG9ydCgpIHsKKyAgICBBTE9HVigiQ29ubmVjdGlvbiByZXBvcnQgZHRvcjogbmFtZSA9ICVzLCBoYW5kbGUgPSAlZCIsIG1TZW5zb3IubmFtZSwgbVNlbnNvci5oYW5kbGUpOworfQorCitjb25zdCBzZW5zb3JzX2V2ZW50X3QmIER5bmFtaWNTZW5zb3JNYW5hZ2VyOjpDb25uZWN0aW9uUmVwb3J0OjoKKyAgICAgICAgZ2VuZXJhdGVDb25uZWN0aW9uRXZlbnQoaW50IG1ldGFIYW5kbGUpIHsKKyAgICBpZiAoIW1HZW5lcmF0ZWQpIHsKKyAgICAgICAgbUV2ZW50LnNlbnNvciA9IG1ldGFIYW5kbGU7CisgICAgICAgIG1FdmVudC50eXBlID0gU0VOU09SX1RZUEVfRFlOQU1JQ19TRU5TT1JfTUVUQTsKKyAgICAgICAgbUV2ZW50LnRpbWVzdGFtcCA9IGVsYXBzZWRSZWFsdGltZU5hbm8oKTsKKyAgICAgICAgbUV2ZW50LmR5bmFtaWNfc2Vuc29yX21ldGEgPQorICAgICAgICAgICAgICAgIChkeW5hbWljX3NlbnNvcl9tZXRhX2V2ZW50X3QpIHt0cnVlLCBtU2Vuc29yLmhhbmRsZSwgJm1TZW5zb3IsIHswfX07CisgICAgICAgIG1lbWNweSgmbUV2ZW50LmR5bmFtaWNfc2Vuc29yX21ldGEudXVpZCwgJm1VdWlkLCBzaXplb2YobUV2ZW50LmR5bmFtaWNfc2Vuc29yX21ldGEudXVpZCkpOworICAgICAgICBtR2VuZXJhdGVkID0gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIG1FdmVudDsKK30KKwordm9pZCBEeW5hbWljU2Vuc29yTWFuYWdlcjo6Q29ubmVjdGlvblJlcG9ydDo6CisgICAgICAgIGZpbGxEaXNjb25uZWN0aW9uRXZlbnQoc2Vuc29yc19ldmVudF90KiBldmVudCwgaW50IG1ldGFIYW5kbGUsIGludCBoYW5kbGUpIHsKKyAgICBtZW1zZXQoZXZlbnQsIDAsIHNpemVvZihzZW5zb3JzX2V2ZW50X3QpKTsKKyAgICBldmVudC0+dmVyc2lvbiA9IHNpemVvZihzZW5zb3JzX2V2ZW50X3QpOworICAgIGV2ZW50LT5zZW5zb3IgPSBtZXRhSGFuZGxlOworICAgIGV2ZW50LT50eXBlID0gU0VOU09SX1RZUEVfRFlOQU1JQ19TRU5TT1JfTUVUQTsKKyAgICBldmVudC0+dGltZXN0YW1wID0gZWxhcHNlZFJlYWx0aW1lTmFubygpOworICAgIGV2ZW50LT5keW5hbWljX3NlbnNvcl9tZXRhLmNvbm5lY3RlZCA9IGZhbHNlOworICAgIGV2ZW50LT5keW5hbWljX3NlbnNvcl9tZXRhLmhhbmRsZSA9IGhhbmRsZTsKK30KKworfSAvLyBuYW1lc3BhY2UgU2Vuc29ySGFsRXh0Cit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvRHluYW1pY1NlbnNvck1hbmFnZXIuaCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9EeW5hbWljU2Vuc29yTWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZmQ0NzIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvRHluYW1pY1NlbnNvck1hbmFnZXIuaApAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9TRU5TT1JIQUxfRVhUX0RZTkFNSUNfU0VOU09SX01BTkFHRVJfSAorI2RlZmluZSBBTkRST0lEX1NFTlNPUkhBTF9FWFRfRFlOQU1JQ19TRU5TT1JfTUFOQUdFUl9ICisKKyNpbmNsdWRlICJTZW5zb3JFdmVudENhbGxiYWNrLmgiCisjaW5jbHVkZSAiUmluZ0J1ZmZlci5oIgorI2luY2x1ZGUgPGhhcmR3YXJlL3NlbnNvcnMuaD4KKyNpbmNsdWRlIDx1dGlscy9SZWZCYXNlLmg+CisKKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBTZW5zb3JIYWxFeHQgeworCitjbGFzcyBCYXNlRHluYW1pY1NlbnNvckRhZW1vbjsKKworY2xhc3MgRHluYW1pY1NlbnNvck1hbmFnZXIgOiBwdWJsaWMgU2Vuc29yRXZlbnRDYWxsYmFjayB7CitwdWJsaWM6CisgICAgLy8gaGFuZGxlQmFzZSBpcyByZXNlcnZlZCBmb3IgdGhlIGR5bmFtaWMgc2Vuc29yIG1ldGEgc2Vuc29yLgorICAgIC8vIGhhbmRsZU1heCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBoYW5kbGVCYXNlICsgMS4KKyAgICAvLyBUaGlzIGNsYXNzIGhhcyB0d28gb3BlcmF0aW9uIG1vZGUgZGVwZW5kaW5nIG9uIGNhbGxiYWNrOiAxKSBleHRlbnNpb24sIDIpIHN0YW5kLWFsb25lLgorICAgIC8vIEluIGV4dGVuc2lvbiBtb2RlLCBjYWxsYmFjayBtdXN0IG5vdCBiZSBudWxscHRyLiBTZW5zb3IgZXZlbnQgZ2VuZXJhdGVkIHdpbGwgYmUgc3VibWl0dGVkIHRvCisgICAgLy8gYnVmZmVyIG9mIHByaW1hcnkgc2Vuc29yIEhBTCBpbXBsZW1lbnRhdGlvbi4gSW4gc3RhbmQtYWxvbmUgbW9kZSwgY2FsbGJhY2sgbXVzdCBiZSBudWxscHRyLgorICAgIC8vIEdlbmVyYXRlZCBzZW5zb3IgZXZlbnRzIHdpbGwgYmUgYWRkZWQgaW50byBpbnRlcm5hbCBidWZmZXIgd2FpdGluZyBmb3IgcG9sbCgpIGZ1bmN0aW9uIHRvCisgICAgLy8gcGljayB1cC4KKyAgICAvLworICAgIHN0YXRpYyBEeW5hbWljU2Vuc29yTWFuYWdlciogY3JlYXRlSW5zdGFuY2UoCisgICAgICAgICAgICBpbnQgaGFuZGxlQmFzZSwgaW50IGhhbmRsZUNvdW50LCBTZW5zb3JFdmVudENhbGxiYWNrICpjYWxsYmFjayk7CisgICAgdmlydHVhbCB+RHluYW1pY1NlbnNvck1hbmFnZXIoKTsKKworICAgIC8vIGNhbGxzIHRvIGFkZCBvciByZW1vdmUgc2Vuc29yLCBjYWxsZWQgZnJvbSBzZW5zb3IgZGFlbW9uCisgICAgYm9vbCByZWdpc3RlclNlbnNvcihzcDxCYXNlU2Vuc29yT2JqZWN0PiBzZW5zb3IpOworICAgIHZvaWQgdW5yZWdpc3RlclNlbnNvcihzcDxCYXNlU2Vuc29yT2JqZWN0PiBzZW5zb3IpOworCisgICAgLy8gRGV0ZXJtaW5lIGlmIGEgc2Vuc29yIGhhbmRsZSBpcyBpbiB0aGUgcmFuZ2UgZGVmaW5lZCBpbiBjb25zdHJ1Y3Rvci4KKyAgICAvLyBJdCBkb2VzIG5vdCB0ZXN0IGlmIHNlbnNvciBoYW5kbGUgaXMgdmFsaWQuCisgICAgYm9vbCBvd25zKGludCBoYW5kbGUpIGNvbnN0OworCisgICAgLy8gaGFuZGxlcyBzZW5zb3IgaGFsIHJlcXVlc3RzLgorICAgIGludCBhY3RpdmF0ZShpbnQgaGFuZGxlLCBib29sIGVuYWJsZSk7CisgICAgaW50IGJhdGNoKGludCBoYW5kbGUsIG5zZWNzX3Qgc2FtcGxlX3BlcmlvZCwgbnNlY3NfdCBiYXRjaF9wZXJpb2QpOworICAgIGludCBzZXREZWxheShpbnQgaGFuZGxlLCBuc2Vjc190IHNhbXBsZV9wZXJpb2QpOworICAgIGludCBmbHVzaChpbnQgaGFuZGxlKTsKKyAgICBpbnQgcG9sbChzZW5zb3JzX2V2ZW50X3QgKiBkYXRhLCBpbnQgY291bnQpOworCisgICAgLy8gU2Vuc29yRXZlbnRDYWxsYmFjaworICAgIHZpcnR1YWwgaW50IHN1Ym1pdEV2ZW50KHNwPEJhc2VTZW5zb3JPYmplY3Q+LCBjb25zdCBzZW5zb3JzX2V2ZW50X3QgJmUpIG92ZXJyaWRlOworCisgICAgLy8gZ2V0IG1ldGEgc2Vuc29yIHN0cnVjdAorICAgIGNvbnN0IHNlbnNvcl90JiBnZXREeW5hbWljTWV0YVNlbnNvcigpIGNvbnN0OworcHJvdGVjdGVkOgorICAgIER5bmFtaWNTZW5zb3JNYW5hZ2VyKGludCBoYW5kbGVCYXNlLCBpbnQgaGFuZGxlTWF4LCBTZW5zb3JFdmVudENhbGxiYWNrKiBjYWxsYmFjayk7Citwcml2YXRlOgorICAgIC8vIGEgaGVscGVyIGNsYXNzIHVzZWQgZm9yIGdlbmVyYXRlIGNvbm5lY3Rpb24gYW5kIGRpc2Nvbm5lY3Rpb24gcmVwb3J0CisgICAgY2xhc3MgQ29ubmVjdGlvblJlcG9ydCB7CisgICAgcHVibGljOgorICAgICAgICBDb25uZWN0aW9uUmVwb3J0KCkge30KKyAgICAgICAgQ29ubmVjdGlvblJlcG9ydChpbnQgaGFuZGxlLCBzcDxCYXNlU2Vuc29yT2JqZWN0PiBzZW5zb3IpOworICAgICAgICB+Q29ubmVjdGlvblJlcG9ydCgpOworICAgICAgICBjb25zdCBzZW5zb3JzX2V2ZW50X3QmIGdlbmVyYXRlQ29ubmVjdGlvbkV2ZW50KGludCBtZXRhSGFuZGxlKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZmlsbERpc2Nvbm5lY3Rpb25FdmVudChzZW5zb3JzX2V2ZW50X3QqIGV2ZW50LCBpbnQgbWV0YUhhbmRsZSwgaW50IGhhbmRsZSk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgc2Vuc29yX3QgbVNlbnNvcjsKKyAgICAgICAgc3RkOjpzdHJpbmcgbU5hbWU7CisgICAgICAgIHN0ZDo6c3RyaW5nIG1WZW5kb3I7CisgICAgICAgIHN0ZDo6c3RyaW5nIG1QZXJtaXNzaW9uOworICAgICAgICBzdGQ6OnN0cmluZyBtU3RyaW5nVHlwZTsKKyAgICAgICAgc2Vuc29yc19ldmVudF90IG1FdmVudDsKKyAgICAgICAgdWludDhfdCBtVXVpZFsxNl07CisgICAgICAgIGJvb2wgbUdlbmVyYXRlZDsKKyAgICAgICAgRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoQ29ubmVjdGlvblJlcG9ydCk7CisgICAgfTsKKworICAgIC8vIHJldHVybnMgbmV4dCBhdmFpbGFibGUgaGFuZGxlIHRvIHVzZSB1cG9uIGEgbmV3IHNlbnNvciBjb25uZWN0aW9uLCBvciAtMSBpZiB3ZSBydW4gb3V0LgorICAgIGludCBnZXROZXh0QXZhaWxhYmxlSGFuZGxlKCk7CisKKyAgICAvLyBURjogIGludCBmb28oc3A8QmFzZVNlbnNvck9iamVjdD4gb2JqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVEY+CisgICAgaW50IG9wZXJhdGVTZW5zb3IoaW50IGhhbmRsZSwgVEYgZikgY29uc3QgeworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbGsobUxvY2spOworICAgICAgICBjb25zdCBhdXRvIGkgPSBtTWFwLmZpbmQoaGFuZGxlKTsKKyAgICAgICAgaWYgKGkgPT0gbU1hcC5lbmQoKSkgeworICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICAgICAgfQorICAgICAgICBzcDxCYXNlU2Vuc29yT2JqZWN0PiBzID0gaS0+c2Vjb25kLnByb21vdGUoKTsKKyAgICAgICAgaWYgKHMgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgLy8gc2Vuc29yIG9iamVjdCBpcyBhbHJlYWR5IGdvbmUKKyAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGYocyk7CisgICAgfQorCisgICAgLy8gYXZhaWxhYmxlIHNlbnNvciBoYW5kbGUgc3BhY2UKKyAgICBjb25zdCBzdGQ6OnBhaXI8aW50LCBpbnQ+IG1IYW5kbGVSYW5nZTsKKyAgICBzZW5zb3JfdCBtTWV0YVNlbnNvcjsKKworICAgIC8vIGltbXV0YWJsZSBwb2ludGVyIHRvIGV2ZW50IGNhbGxiYWNrLCB1c2VkIGluIGV4dGVudGlvbiBtb2RlLgorICAgIFNlbnNvckV2ZW50Q2FsbGJhY2sgKiBjb25zdCBtQ2FsbGJhY2s7CisKKyAgICAvLyBSaW5nQnVmZmVyIHVzZWQgaW4gc3RhbmRhbG9uZSBtb2RlCisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qga0ZpZm9TaXplID0gNDA5NjsgLy80SyBldmVudHMKKyAgICBtdXRhYmxlIHN0ZDo6bXV0ZXggbUZpZm9Mb2NrOworICAgIFJpbmdCdWZmZXIgbUZpZm87CisKKyAgICAvLyBtYXBwaW5nIGJldHdlZW4gaGFuZGxlIGFuZCBTZW5zb3JPYmplY3RzCisgICAgbXV0YWJsZSBzdGQ6Om11dGV4IG1Mb2NrOworICAgIGludCBtTmV4dEhhbmRsZTsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8aW50LCB3cDxCYXNlU2Vuc29yT2JqZWN0PiA+IG1NYXA7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHZvaWQgKiwgaW50PiBtUmV2ZXJzZU1hcDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5vcmRlcmVkX21hcDxpbnQsIENvbm5lY3Rpb25SZXBvcnQ+IG1QZW5kaW5nUmVwb3J0OworCisgICAgLy8gZGFlbW9ucworICAgIHN0ZDo6dmVjdG9yPHNwPEJhc2VEeW5hbWljU2Vuc29yRGFlbW9uPj4gbURhZW1vblZlY3RvcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFNlbnNvckhhbEV4dAorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgLy8gQU5EUk9JRF9TRU5TT1JIQUxfRVhUX0RZTkFNSUNfU0VOU09SX01BTkFHRVJfSApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0FuZHJvaWQubWsgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvQW5kcm9pZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTFkODkwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0FuZHJvaWQubWsKQEAgLTAsMCArMSw5OSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworTE9DQUxfUEFUSCA6PSAkKGNhbGwgbXktZGlyKQorQ09NTU9OX0NGTEFHUyA6PSAtV2FsbCAtV2Vycm9yIC1XZXh0cmEKKworaGlkcGFyc2VyX3NyYyA6PSBcCisgICAgSGlkR2xvYmFsLmNwcCBcCisgICAgSGlkSXRlbS5jcHAgXAorICAgIEhpZExvY2FsLmNwcCBcCisgICAgSGlkUGFyc2VyLmNwcCBcCisgICAgSGlkUmVwb3J0LmNwcCBcCisgICAgSGlkVHJlZS5jcHAKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCitMT0NBTF9NT0RVTEUgOj0gbGliaGlkcGFyc2VyCitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorIyBpbmRlbmRlZCB0byBiZSB1c2VkIGJ5IGhhbCBjb21wb25lbnRzLCB0aHVzIHByb3BpZXRhcnkKK0xPQ0FMX1BST1BSSUVUQVJZX01PRFVMRSA6PSB0cnVlCisKK0xPQ0FMX0NGTEFHUyArPSAkKENPTU1PTl9DRkxBR1MpIC1ETE9HX1RBRz1cIkhpZFV0aWxcIgorTE9DQUxfU1JDX0ZJTEVTIDo9ICQoaGlkcGFyc2VyX3NyYykKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGliYmFzZQorTE9DQUxfRVhQT1JUX0NfSU5DTFVERV9ESVJTIDo9ICQoTE9DQUxfUEFUSCkKK2luY2x1ZGUgJChCVUlMRF9TSEFSRURfTElCUkFSWSkKKworIworIyBob3N0IHNpZGUgc2hhcmVkIGxpYnJhcnkgKGZvciBob3N0IHRlc3QsIGV4YW1wbGUsIGV0YykKKyMKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorTE9DQUxfTU9EVUxFIDo9IGxpYmhpZHBhcnNlcl9ob3N0CitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorCitMT0NBTF9DRkxBR1MgKz0gJChDT01NT05fQ0ZMQUdTKQorCitMT0NBTF9TUkNfRklMRVMgOj0gJChoaWRwYXJzZXJfc3JjKQorCitMT0NBTF9FWFBPUlRfQ19JTkNMVURFX0RJUlMgOj0gJChMT0NBTF9QQVRIKQoraW5jbHVkZSAkKEJVSUxEX0hPU1RfU0hBUkVEX0xJQlJBUlkpCisKKyMKKyMgRXhhbXBsZSBvZiBIaWRQYXJzZXIKKyMKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorTE9DQUxfTU9EVUxFIDo9IGhpZHBhcnNlcl9leGFtcGxlCitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorCitMT0NBTF9DRkxBR1MgKz0gJChDT01NT05fQ0ZMQUdTKQorTE9DQUxfU1JDX0ZJTEVTIDo9IFwKKyAgICAkKGhpZHBhcnNlcl9zcmMpIFwKKyAgICB0ZXN0L0hpZFBhcnNlckV4YW1wbGUuY3BwIFwKKyAgICB0ZXN0L1Rlc3RIaWREZXNjcmlwdG9yLmNwcAorCitMT0NBTF9DX0lOQ0xVREVTICs9ICQoTE9DQUxfUEFUSCkvdGVzdAoraW5jbHVkZSAkKEJVSUxEX0hPU1RfRVhFQ1VUQUJMRSkKKworIworIyBBbm90aGVyIGV4YW1wbGUgb2YgSGlkUGFyc2VyCisjCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKK0xPQ0FMX01PRFVMRSA6PSBoaWRwYXJzZXJfZXhhbXBsZTIKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisKK0xPQ0FMX0NGTEFHUyArPSAkKENPTU1PTl9DRkxBR1MpCitMT0NBTF9TUkNfRklMRVMgOj0gXAorICAgICQoaGlkcGFyc2VyX3NyYykgXAorICAgIHRlc3QvSGlkUGFyc2VyRXhhbXBsZTIuY3BwIFwKKyAgICB0ZXN0L1Rlc3RIaWREZXNjcmlwdG9yLmNwcAorCitMT0NBTF9DX0lOQ0xVREVTICs9ICQoTE9DQUxfUEFUSCkvdGVzdAoraW5jbHVkZSAkKEJVSUxEX0hPU1RfRVhFQ1VUQUJMRSkKKworIworIyBUZXN0IGZvciBUcmlTdGF0ZSB0ZW1wbGF0ZQorIworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCitMT0NBTF9NT0RVTEUgOj0gdHJpc3RhdGVfdGVzdAorTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKKworTE9DQUxfQ0ZMQUdTICs9ICQoQ09NTU9OX0NGTEFHUykKK0xPQ0FMX1NSQ19GSUxFUyA6PSB0ZXN0L1RyaVN0YXRlVGVzdC5jcHAKKworTE9DQUxfU1RBVElDX0xJQlJBUklFUyA6PSBcCisgICAgIGxpYmd0ZXN0IFwKKyAgICAgbGliZ3Rlc3RfbWFpbgorCitMT0NBTF9DX0lOQ0xVREVTICs9ICQoTE9DQUxfUEFUSCkvdGVzdAoraW5jbHVkZSAkKEJVSUxEX0hPU1RfTkFUSVZFX1RFU1QpCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkRGVmcy5oIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZERlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTQ0NWRiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZERlZnMuaApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaWZuZGVmIEhJRFVUSUxfSElEREVGU19IXworI2RlZmluZSBISURVVElMX0hJRERFRlNfSF8KKworbmFtZXNwYWNlIEhpZFV0aWwgeworCisvLyBISUQgc3BlY2lmaWNhdGlvbiBjb25zdGFudHMgZGVmaW5pdGlvbgorLy8KKy8vIERlZmluaXRpb25zIGFyZSBmcm9tIEhJRCBzcGVjaWZpY2F0aW9uIHYxLjExLCB3aGljaCBjYW4gYmUgb2J0YWluZWQgZnJvbSBodHRwOi8vd3d3LnVzYi5vcmcKKy8vCisvLyBQcmVmZXJyZWQgbmFtZXNwYWNlIGZvciBuYW1lc3BhY2UgcmVzdHJpY3Rpb24gdGhhbiBlbnVtIGNsYXNzIGFzIGVudW0gY2xhc3MgaGFzIHN0cm9uZyB0eXBlCisvLyB3aGljaCBpcyBpbmNvbnZlbmllbnQgaW4gYSBwYXJzZXIsIGluIHdoaWNoIGlucHV0IGJpbmFyeSB2YWx1ZXMgaGFzIHRvIGJlIGNvbXBhcmVkIHdpdGggdGhlc2UKKy8vIGRlZmluaXRpb25zIGZyZXF1bmV0bHkuCituYW1lc3BhY2UgSGlkRGVmIHsKKy8vIEhpZCBzcGVjIDYuMi4yLjMKK25hbWVzcGFjZSBUYWdUeXBlIHsKK2VudW0geworICAgIE1BSU4sCisgICAgR0xPQkFMLAorICAgIExPQ0FMLAorICAgIFJFU0VSVkVECit9OworfSAvLyBuYW1lc3BhY2UgVGFnVHlwZQorCisvLyBISUQgc3BlYyA2LjIuMi40CituYW1lc3BhY2UgUmVwb3J0RmxhZyB7CitlbnVtIHsKKyAgICBEQVRBX0NPTlNUID0gMSwKKyAgICBBUlJBWV9WQVJJQUJMRSA9IDIsCisgICAgV1JBUCA9IDQsCisgICAgTk9OTElORUFSID0gOCwKKyAgICBOT19QUkVGRVJSRUQgPSAweDEwLAorICAgIE5VTExfU1RBVEUgPSAweDIwLAorICAgIFZPTEFUSUxFID0gMHg0MCwKKyAgICAvLyBiaXQgNyByZXNlcnZlZAorICAgIEJVRkZFUkVEX0JZVEVTID0gMHgxMDAKK307Cit9IC8vIG5hbWVzcGFjZSBSZXBvcnRGbGFnCisKKy8vIEhJRCBzcGVjIDYuMi4yLjUKK25hbWVzcGFjZSBNYWluVGFnIHsKK2VudW0geworICAgIElOUFVUID0gOCwKKyAgICBPVVRQVVQgPSA5LAorICAgIENPTExFQ1RJT04gPSAxMCwKKyAgICBGRUFUVVJFID0gMTEsCisgICAgRU5EX0NPTExFQ1RJT04gPSAxMiwKKyAgICBMT05HX0lURU0gPSAxNSwKK307Cit9IC8vIG5hbWVzcGFjZSBNYWluVGFnCisKKy8vIEhJRCBzcGVjIDYuMi4yLjYKK25hbWVzcGFjZSBDb2xsZWN0aW9uVHlwZSB7CitlbnVtIHsKKyAgICBQSFlTSUNBTCA9IDAsCisgICAgQVBQTElDQVRJT04sCisgICAgTE9HSUNBTCwKKyAgICBSRVBPUlQsCisgICAgTkFNRURfQVJSQVksCisgICAgVVNBR0VfU1dJVENILAorICAgIFVTQUdFX01PRElGSUVSCit9OworfSAvLyBuYW1lc3BhY2UgQ29sbGVjdGlvblR5cGUKKworLy8gSElEIHNwZWMgNi4yLjIuNworbmFtZXNwYWNlIEdsb2JhbFRhZyB7CitlbnVtIHsKKyAgICBVU0FHRV9QQUdFLAorICAgIExPR0lDQUxfTUlOSU1VTSwKKyAgICBMT0dJQ0FMX01BWElNVU0sCisgICAgUEhZU0lDQUxfTUlOSU1VTSwKKyAgICBQSFlTSUNBTF9NQVhJTVVNLAorICAgIFVOSVRfRVhQT05FTlQsCisgICAgVU5JVCwKKyAgICBSRVBPUlRfU0laRSwKKyAgICBSRVBPUlRfSUQsCisgICAgUkVQT1JUX0NPVU5ULAorICAgIFBVU0gsCisgICAgUE9QCit9OworfSAvL25hbWVzcGFjZSBHbG9iYWxUYWcKKworLy8gSElEIHNwZWMgNi4yLjIuOAorbmFtZXNwYWNlIExvY2FsVGFnIHsKK2VudW0gSGlkTG9jYWxUYWcgeworICAgIFVTQUdFLAorICAgIFVTQUdFX01JTklNVU0sCisgICAgVVNBR0VfTUFYSU1VTSwKKyAgICBERVNJR05BVE9SX0lOREVYLAorICAgIERFU0lHTkFUT1JfTUlOSU1VTSwKKyAgICBERVNJR05BVE9SX01BWElNVU0sCisgICAgLy8gdGhlcmUgaXMgYSBob2xlIGhlcmUgaW4gdGhlIHNwZWMKKyAgICBTVFJJTkdfSU5ERVggPSA3LAorICAgIFNUUklOR19NSU5JTVVNLAorICAgIFNUUklOR19NQVhJTVVNLAorICAgIERFTElNSVRPUgorfTsKK30gLy8gbmFtZXNwYWNlIExvY2FsVGFnCisKK30gLy9uYW1lc3BhY2UgSGlkRGVmCit9IC8vbmFtZXNwYWNlIEhpZFV0aWwKKworI2VuZGlmIC8vIEhJRFVUSUxfSElEREVGU19IXwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZEdsb2JhbC5jcHAgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkR2xvYmFsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTQ3MTNiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZEdsb2JhbC5jcHAKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2luY2x1ZGUgIkhpZERlZnMuaCIKKyNpbmNsdWRlICJIaWRHbG9iYWwuaCIKKyNpbmNsdWRlICJIaWRMb2cuaCIKKworbmFtZXNwYWNlIEhpZFV0aWwgewordXNpbmcgbmFtZXNwYWNlIEhpZERlZjo6R2xvYmFsVGFnOworCitib29sIEhpZEdsb2JhbDo6YXBwZW5kKGNvbnN0IEhpZEl0ZW0gJmkpIHsKKyAgICB1c2luZyBuYW1lc3BhY2UgSGlkRGVmOjpUYWdUeXBlOworICAgIGlmIChpLnR5cGUgIT0gR0xPQkFMKSB7CisgICAgICAgIExPR19FIDw8ICJIaWRHbG9iYWw6OmFwcGVuZCBjYW5ub3QgcHJvY2VzcyB0YWcgdGhhdCBpcyBub3QgZ2xvYmFsLCAiIDw8IGkgPDwgTE9HX0VOREw7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoaS50YWcgPT0gUFVTSCB8fCBpLnRhZyA9PSBQT1ApIHsKKyAgICAgICAgTE9HX0UgPDwgIlBVU0ggYW5kIFBPUCBzaG91bGQgYmUgaGFuZGxlZCBpbiBIaWRHbG9iYWxTdGFjaywgIiA8PCBpIDw8IExPR19FTkRMOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IHNpZ25lZEludGVnZXI7CisgICAgdW5zaWduZWQgdW5zaWduZWRJbnRlZ2VyOworICAgIGJvb2wgc2lnbmVkRXJyb3IgPSAhaS5kYXRhQXNTaWduZWQoJnNpZ25lZEludGVnZXIpOworICAgIGJvb2wgdW5zaWduZWRFcnJvciA9ICFpLmRhdGFBc1Vuc2lnbmVkKCZ1bnNpZ25lZEludGVnZXIpOworCisgICAgYm9vbCB2YWx1ZUVycm9yID0gZmFsc2U7CisgICAgYm9vbCByZXQgPSB0cnVlOworICAgIHN3aXRjaCAoaS50YWcpIHsKKyAgICAgICAgY2FzZSBVU0FHRV9QQUdFOgorICAgICAgICAgICAgdXNhZ2VQYWdlID0gdW5zaWduZWRJbnRlZ2VyOworICAgICAgICAgICAgdmFsdWVFcnJvciA9IHVuc2lnbmVkRXJyb3I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMT0dJQ0FMX01JTklNVU06CisgICAgICAgICAgICBsb2dpY2FsTWluID0gc2lnbmVkSW50ZWdlcjsKKyAgICAgICAgICAgIHZhbHVlRXJyb3IgPSBzaWduZWRFcnJvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExPR0lDQUxfTUFYSU1VTToKKyAgICAgICAgICAgIGxvZ2ljYWxNYXggPSBzaWduZWRJbnRlZ2VyOworICAgICAgICAgICAgdmFsdWVFcnJvciA9IHNpZ25lZEVycm9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUEhZU0lDQUxfTUlOSU1VTToKKyAgICAgICAgICAgIHBoeXNpY2FsTWluID0gc2lnbmVkSW50ZWdlcjsKKyAgICAgICAgICAgIHZhbHVlRXJyb3IgPSBzaWduZWRFcnJvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBIWVNJQ0FMX01BWElNVU06CisgICAgICAgICAgICBwaHlzaWNhbE1heCA9IHNpZ25lZEludGVnZXI7CisgICAgICAgICAgICB2YWx1ZUVycm9yID0gc2lnbmVkRXJyb3I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVTklUX0VYUE9ORU5UOgorICAgICAgICAgICAgZXhwb25lbnQgPSB1bnNpZ25lZEludGVnZXI7CisgICAgICAgICAgICB2YWx1ZUVycm9yID0gdW5zaWduZWRFcnJvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVOSVQ6CisgICAgICAgICAgICB1bml0ID0gdW5zaWduZWRJbnRlZ2VyOworICAgICAgICAgICAgdmFsdWVFcnJvciA9IHVuc2lnbmVkRXJyb3I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSRVBPUlRfU0laRToKKyAgICAgICAgICAgIHJlcG9ydFNpemUgPSB1bnNpZ25lZEludGVnZXI7CisgICAgICAgICAgICB2YWx1ZUVycm9yID0gdW5zaWduZWRFcnJvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJFUE9SVF9JRDoKKyAgICAgICAgICAgIHJlcG9ydElkID0gdW5zaWduZWRJbnRlZ2VyOworICAgICAgICAgICAgdmFsdWVFcnJvciA9IHVuc2lnbmVkRXJyb3I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSRVBPUlRfQ09VTlQ6CisgICAgICAgICAgICByZXBvcnRDb3VudCA9IHVuc2lnbmVkSW50ZWdlcjsKKyAgICAgICAgICAgIHZhbHVlRXJyb3IgPSB1bnNpZ25lZEVycm9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBMT0dfRSA8PCAidW5rbm93biBnbG9iYWwgdGFnLCAiIDw8IGkgPDwgTE9HX0VOREw7CisgICAgICAgICAgICByZXQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAodmFsdWVFcnJvcikgeworICAgICAgICBMT0dfRSA8PCAiQ2Fubm90IGdldCBzaWduZWQgLyB1bnNpZ25lZCBkYXRhIGF0ICIgPDwgaSA8PCBMT0dfRU5ETDsKKyAgICAgICAgcmV0ID0gZmFsc2U7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKK2Jvb2wgSGlkR2xvYmFsU3RhY2s6OmFwcGVuZChjb25zdCBIaWRJdGVtICZpKSB7CisgICAgdXNpbmcgbmFtZXNwYWNlIEhpZERlZjo6VGFnVHlwZTsKKyAgICBpZiAoaS50eXBlICE9IEdMT0JBTCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCByZXQgPSB0cnVlOworICAgIGlmIChpLnRhZyA9PSBQVVNIKSB7CisgICAgICAgIG1TdGFjay5wdXNoX2JhY2sodG9wKCkpOworICAgIH0gZWxzZSBpZiAoaS50YWcgPT0gUE9QKSB7CisgICAgICAgIG1TdGFjay5wb3BfYmFjaygpOworICAgICAgICBpZiAobVN0YWNrLnNpemUoKSA9PSAwKSB7CisgICAgICAgICAgICBtU3RhY2sucHVzaF9iYWNrKEhpZEdsb2JhbCgpKTsgLy8gZmFpbC1zYWZlCisgICAgICAgICAgICByZXQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHJldCA9IG1TdGFjay5iYWNrKCkuYXBwZW5kKGkpOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCitIaWRHbG9iYWxTdGFjazo6SGlkR2xvYmFsU3RhY2soKSB7CisgICAgLy8gZGVmYXVsdCBlbGVtZW50CisgICAgbVN0YWNrLnB1c2hfYmFjayhIaWRHbG9iYWwoKSk7Cit9CisKK2NvbnN0IEhpZEdsb2JhbCYgSGlkR2xvYmFsU3RhY2s6OnRvcCgpIGNvbnN0IHsKKyAgICByZXR1cm4gbVN0YWNrLmJhY2soKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSGlkVXRpbApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZEdsb2JhbC5oIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZEdsb2JhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MTM5ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkR2xvYmFsLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaWZuZGVmIEhJRFVUSUxfSElER0xPQkFMX0hfCisjZGVmaW5lIEhJRFVUSUxfSElER0xPQkFMX0hfCisKKyNpbmNsdWRlICJIaWRJdGVtLmgiCisjaW5jbHVkZSAiVHJpU3RhdGUuaCIKKworbmFtZXNwYWNlIEhpZFV0aWwgeworLy8gQSBzZXQgb2YgZ2xvYmFsIHN0YXRlcyB0aGF0IHBhcnNlciBoYXMgdG8ga2VlcCB0cmFjayBkdXJpbmcgcGFyc2luZy4KKy8vIFRoZXkgYXJlIGFsbCBzcGVjaWZpZWQgaW4gSElEIHNwZWMgdjEuMTEgc2VjdGlvbiA2LjIuMi43CitzdHJ1Y3QgSGlkR2xvYmFsIHsKKyAgICAvLyBhZGQgYSB0b2tlbiBhbmQgY2hhbmdlIGdsb2JhbCBzdGF0ZXMsIHJldHVybnMgdmFsdWUgaW5kaWNhdGVzIGlmIG9wZXJhdGlvbiBpcyBzdWNjZXNzZnVsCisgICAgYm9vbCBhcHBlbmQoY29uc3QgSGlkSXRlbSAmaSk7CisKKyAgICB0cmlfdWludCB1c2FnZVBhZ2U7CisgICAgdHJpX2ludCAgbG9naWNhbE1pbjsKKyAgICB0cmlfaW50ICBsb2dpY2FsTWF4OworICAgIHRyaV9pbnQgIHBoeXNpY2FsTWluOworICAgIHRyaV9pbnQgIHBoeXNpY2FsTWF4OworICAgIHRyaV91aW50IGV4cG9uZW50OworICAgIHRyaV91aW50IHVuaXQ7CisgICAgdHJpX3VpbnQgcmVwb3J0U2l6ZTsKKyAgICB0cmlfdWludCByZXBvcnRJZDsKKyAgICB0cmlfdWludCByZXBvcnRDb3VudDsKK307CisKKy8vIEhJRCBzcGVjcyBhbGxvd3MgUFVTSCBhbmQgUE9QIHRvIHNhdmUgYSBzbmFwc2hvdCBvZiBjdXJyZW50IGdsb2JhbCBzdGF0ZXMgYW5kIGNvbWUgYmFjayB0byB0aGUKKy8vIHNhdmVkIHNhdGVzIGxhdGVyLiBIaWRTdGFjayBtYW5hZ2VzIHRoaXMgbG9naWMuIE5vdGUgdGhhdCBQVVNIIGFuZCBQT1AgYXJlIGFsc28gSGlkSXRlbXMsIHNvCisvLyB0aGVyZSBpcyBubyBleHBsaWNpdCBwdXNoIGFuZCBwb3AgZnVuY3Rpb24gaW4gdGhpcyBzdGFjayBpbXBsZW1lbnRhdGlvbi4KK2NsYXNzIEhpZEdsb2JhbFN0YWNrIHsKK3B1YmxpYzoKKyAgICBIaWRHbG9iYWxTdGFjaygpOworCisgICAgLy8gYWRkIGEgdG9rZW4gYW5kIGNoYW5nZSBnbG9iYWwgc3RhdGVzLCByZXR1cm5zIHZhbHVlIGluZGljYXRlcyBpZiBvcGVyYXRpb24gaXMgc3VjY2Vzc2Z1bAorICAgIC8vIGl0IHRoZSB0b2tlbiBpcyBwdXNoL3BvcCwgdGhlIHN0YWNrIHB1c2gvcG9wIGFjY29yZGluZ2x5LgorICAgIGJvb2wgYXBwZW5kKGNvbnN0IEhpZEl0ZW0gJmkpOworCisgICAgLy8gZ2V0IHJlZmVyZW5jZSB0byB0b3AgZWxlbWVudCBvbiB0aGUgc3RhY2sKKyAgICBjb25zdCBIaWRHbG9iYWwmIHRvcCgpIGNvbnN0OworcHJpdmF0ZToKKyAgICBzdGQ6OnZlY3RvcjxIaWRHbG9iYWw+IG1TdGFjazsKK307CisKK30gLy9uYW1lc3BhY2UgSGlkVXRpbAorCisjZW5kaWYgLy8gSElEVVRJTF9ISURHTE9BQkxfSF8KZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRJdGVtLmNwcCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRJdGVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzA0ZGI3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZEl0ZW0uY3BwCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpbmNsdWRlICJIaWRJdGVtLmgiCisjaW5jbHVkZSAiSGlkRGVmcy5oIgorI2luY2x1ZGUgIlN0cmVhbUlvVXRpbC5oIgorI2luY2x1ZGUgPGlvc3RyZWFtPgorCituYW1lc3BhY2UgSGlkVXRpbCB7CisKK2Jvb2wgSGlkSXRlbTo6ZGF0YUFzVW5zaWduZWQodW5zaWduZWQgaW50ICpvdXQpIGNvbnN0ICB7CisgICAgaWYgKGRhdGEuc2l6ZSgpID4gNCB8fCBkYXRhLnNpemUoKSA9PSAwKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAqb3V0ID0gMDsKKyAgICBpbnQgc2hpZnQgPSAwOworCisgICAgZm9yIChhdXRvIGkgOiBkYXRhKSB7CisgICAgICAgICpvdXQgfD0gKGkgPDwgc2hpZnQpOworICAgICAgICBzaGlmdCArPSA4OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBIaWRJdGVtOjpkYXRhQXNTaWduZWQoaW50ICpvdXQpIGNvbnN0IHsKKyAgICB1bnNpZ25lZCBpbnQgdTsKKyAgICBpZiAoIWRhdGFBc1Vuc2lnbmVkKCZ1KSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHNpemVfdCBiaXRTaXplXzEgPSBkYXRhLnNpemUoKSAqIDggLSAxOworICAgIHVuc2lnbmVkIGludCBzaWduID0gdSAmICgxIDw8IGJpdFNpemVfMSk7CisgICAgKm91dCA9IHUgfCAoKHNpZ24gPT0gMCkgPyAwIDogKCB+MCA8PCBiaXRTaXplXzEpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RkOjp2ZWN0b3I8SGlkSXRlbT4gSGlkSXRlbTo6dG9rZW5pemUoY29uc3QgdWludDhfdCAqYmVnaW4sIHNpemVfdCBzaXplKSB7CisgICAgLy8gY29uc3RydWN0IGEgc3RyZWFtCisgICAgY2hhcnZlY3RvcmJ1Zjx1bnNpZ25lZCBjaGFyPiBidWYoYmVnaW4sIHNpemUpOworICAgIHN0ZDo6aXN0cmVhbSBpcygmYnVmKTsKKyAgICByZXR1cm4gdG9rZW5pemUoaXMpOworfQorCitzdGQ6OnZlY3RvcjxIaWRJdGVtPiBIaWRJdGVtOjp0b2tlbml6ZShjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiAmZGVzY3JpcHRvcikgeworICAgIC8vIGNvbnN0cnVjdCBhIHN0cmVhbQorICAgIGNoYXJ2ZWN0b3JidWY8dW5zaWduZWQgY2hhcj4gYnVmKGRlc2NyaXB0b3IpOworICAgIHN0ZDo6aXN0cmVhbSBpcygmYnVmKTsKKyAgICByZXR1cm4gdG9rZW5pemUoaXMpOworfQorCitzdGQ6OnZlY3RvcjxIaWRJdGVtPiBIaWRJdGVtOjp0b2tlbml6ZShzdGQ6OmlzdHJlYW0gJmlzKSB7CisgICAgc3RkOjp2ZWN0b3I8SGlkSXRlbT4gaGlkVG9rZW47CisKKyAgICAvLyB0aGlzIGlzIGltcG9ydGFudCB0byBhdm9pZCBza2lwcGluZyBjaGFyYWN0ZXJzCisgICAgaXMudW5zZXRmKHN0ZDo6aW9zX2Jhc2U6OnNraXB3cyk7CisgICAgd2hpbGUgKCFpcy5lb2YoKSkgeworICAgICAgICBIaWRJdGVtIGk7CisgICAgICAgIGlzID4+IGk7CisgICAgICAgIGlmIChpLnZhbGlkKSB7CisgICAgICAgICAgICBoaWRUb2tlbi5wdXNoX2JhY2soaSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gaGlkVG9rZW47Cit9CisKK3N0ZDo6aXN0cmVhbSYgb3BlcmF0b3I+PihzdGQ6OmlzdHJlYW0gJmlzLCBIaWRVdGlsOjpIaWRJdGVtICZoKSB7CisgICAgdXNpbmcgbmFtZXNwYWNlIEhpZFV0aWw6OkhpZERlZjo6TWFpblRhZzsKKyAgICB1c2luZyBuYW1lc3BhY2UgSGlkVXRpbDo6SGlkRGVmOjpUYWdUeXBlOworCisgICAgaC52YWxpZCA9IGZhbHNlOworICAgIGgub2Zmc2V0ID0gaXMudGVsbGcoKTsKKyAgICBoLmJ5dGVTaXplID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGZpcnN0OworICAgIGlzID4+IGZpcnN0OworICAgIGlmICghaXMuZW9mKCkpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBsZW5UYWJsZVtdID0geyAwLCAxLCAyLCA0IH07CisgICAgICAgIHNpemVfdCBsZW4gPSBsZW5UYWJsZVtmaXJzdCAmIDB4M107IC8vIGxvdyAyIGJpdHMgYXJlIGxlbmd0aCBkZXNjcmlwdG9yCisgICAgICAgIGgudGFnID0gKGZpcnN0ID4+IDQpOworICAgICAgICBoLnR5cGUgPSAoZmlyc3QgJiAweEMpID4+IDI7CisKKyAgICAgICAgaWYgKGgudGFnID09IExPTkdfSVRFTSAmJiBoLnR5cGUgPT0gUkVTRVJWRUQpIHsgLy8gbG9uZyBpdGVtCisgICAgICAgICAgICAvL2xvbmcgaXRlbQorICAgICAgICAgICAgdW5zaWduZWQgY2hhciBiID0gMDsKKyAgICAgICAgICAgIGlzID4+IGI7CisgICAgICAgICAgICBsZW4gPSBiOworICAgICAgICAgICAgaXMgPj4gYjsKKyAgICAgICAgICAgIGgudGFnID0gYjsKKyAgICAgICAgfQorCisgICAgICAgIGguZGF0YS5yZXNpemUobGVuKTsKKyAgICAgICAgZm9yIChhdXRvICZpIDogaC5kYXRhKSB7CisgICAgICAgICAgICBpZiAoaXMuZW9mKCkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlzID4+IGk7CisgICAgICAgIH0KKyAgICAgICAgaC5ieXRlU2l6ZSA9IChzc2l6ZV90KSBpcy50ZWxsZygpIC0gaC5vZmZzZXQ7CisgICAgICAgIGgudmFsaWQgPSAhaXMuZW9mKCk7CisgICAgfQorCisgICAgcmV0dXJuIGlzOworfQorCitzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtICZvcywgY29uc3QgSGlkVXRpbDo6SGlkSXRlbSAmaCkgeworICAgIG9zIDw8ICJvZmZzZXQ6ICIgPDwgaC5vZmZzZXQgPDwgIiwgc2l6ZTogIiA8PCBoLmJ5dGVTaXplCisgICAgICAgPDwgIiwgdGFnOiAiIDw8IGgudGFnIDw8ICIsIHR5cGU6ICIgPDwgaC50eXBlIDw8ICIsIGRhdGE6ICI7CisgICAgaWYgKGguZGF0YS5lbXB0eSgpKSB7CisgICAgICAgIG9zIDw8ICJbZW1wdHldIjsKKyAgICB9IGVsc2UgeworICAgICAgICBvcyA8PCBoLmRhdGEuc2l6ZSgpIDw8ICIgYnl0ZShzKSB7IjsKKyAgICAgICAgZm9yIChhdXRvIGkgOiBoLmRhdGEpIHsKKyAgICAgICAgICAgIG9zIDw8IChpbnQpIGkgPDwgIiwgIjsKKyAgICAgICAgfQorICAgICAgICBvcyA8PCAifSI7CisgICAgfQorICAgIHJldHVybiBvczsKK30KK30gLy8gbmFtZXNwYWNlIEhpZFV0aWwKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRJdGVtLmggYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkSXRlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYzc5ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkSXRlbS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2lmbmRlZiBISURVVElMX0hJRElURU1fSF8KKyNkZWZpbmUgSElEVVRJTF9ISURJVEVNX0hfCisKKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxpc3RyZWFtPgorI2luY2x1ZGUgPG9zdHJlYW0+CisKK25hbWVzcGFjZSBIaWRVdGlsIHsKKworc3RydWN0IEhpZEl0ZW0geworICAgIGJvb2wgdmFsaWQ7CisgICAgdW5zaWduZWQgaW50IHR5cGU7CisgICAgdW5zaWduZWQgaW50IHRhZzsKKyAgICBzc2l6ZV90IG9mZnNldDsKKyAgICBzc2l6ZV90IGJ5dGVTaXplOworICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CisKKyAgICBib29sIGRhdGFBc1Vuc2lnbmVkKHVuc2lnbmVkIGludCAqb3V0KSBjb25zdDsKKyAgICBib29sIGRhdGFBc1NpZ25lZChpbnQgKm91dCkgY29uc3Q7CisKKyAgICAvLyBmcmllbmQgc3RyZWFtIGZ1bmN0aW9ucworICAgIGZyaWVuZCBzdGQ6OmlzdHJlYW0mIG9wZXJhdG9yPj4oc3RkOjppc3RyZWFtICZpcywgSGlkSXRlbSAmaCk7CisgICAgZnJpZW5kIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0gJm9zLCBjb25zdCBIaWRJdGVtICZoKTsKKworICAgIC8vIHRva2VuaXplIGZyb20gYSB1bnNpZ25lZCBjaGFyIHZlY3RvcgorICAgIHN0YXRpYyBzdGQ6OnZlY3RvcjxIaWRJdGVtPiB0b2tlbml6ZShjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiAmZGVzY3JpcHRvcik7CisgICAgc3RhdGljIHN0ZDo6dmVjdG9yPEhpZEl0ZW0+IHRva2VuaXplKGNvbnN0IHVpbnQ4X3QgKmJlZ2luLCBzaXplX3Qgc2l6ZSk7CisgICAgc3RhdGljIHN0ZDo6dmVjdG9yPEhpZEl0ZW0+IHRva2VuaXplKHN0ZDo6aXN0cmVhbSAmaXMpOworfTsKKworLy8gcGFyc2luZyBpbiBmcm9tIGJpbmFyeSBzdHJlYW0KK3N0ZDo6aXN0cmVhbSYgb3BlcmF0b3I+PihzdGQ6OmlzdHJlYW0gJmlzLCBIaWRVdGlsOjpIaWRJdGVtICZoKTsKKworLy8gb3V0cHV0IGFzIGh1bWFuIHJlYWRhYmxlIHN0cmluZyB0byBzdHJlYW0KK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0gJm9zLCBjb25zdCBIaWRVdGlsOjpIaWRJdGVtICZoKTsKK30gLy9uYW1lc3BhY2UgSGlkVXRpbAorCisjZW5kaWYgLy8gSElEVVRJTF9ISURJVEVNX0hfCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkTG9jYWwuY3BwIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZExvY2FsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjE3YWJlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZExvY2FsLmNwcApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaW5jbHVkZSAiSGlkRGVmcy5oIgorI2luY2x1ZGUgIkhpZExvY2FsLmgiCisjaW5jbHVkZSAiSGlkTG9nLmgiCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKworbmFtZXNwYWNlIEhpZFV0aWwgeworCitjb25zdGV4cHIgdWludDMyX3QgSU5WQUxJRF9VU0FHRSA9IDB4RkZGRjsKK2NvbnN0ZXhwciB1aW50MzJfdCBJTlZBTElEX0RFU0lHTkFUT1IgPSAweEZGRkY7Citjb25zdGV4cHIgdWludDMyX3QgSU5WQUxJRF9TVFJJTkcgPSAweEZGRkY7CisKK3VpbnQzMl90IEhpZExvY2FsOjpnZXRVc2FnZShzaXplX3QgaW5kZXgpIGNvbnN0IHsKKyAgICBpZiAodXNhZ2UuZW1wdHkoKSkgeworICAgICAgICByZXR1cm4gSU5WQUxJRF9VU0FHRTsKKyAgICB9CisgICAgcmV0dXJuIChpbmRleCA+PSB1c2FnZS5zaXplKCkpID8gdXNhZ2UuYmFjaygpIDogdXNhZ2VbaW5kZXhdOworfQorCit1aW50MzJfdCBIaWRMb2NhbDo6Z2V0RGVzaWduYXRvcihzaXplX3QgaW5kZXgpIGNvbnN0IHsKKyAgICBpZiAoZGVzaWduYXRvci5lbXB0eSgpKSB7CisgICAgICAgIHJldHVybiBJTlZBTElEX0RFU0lHTkFUT1I7CisgICAgfQorICAgIHJldHVybiAoaW5kZXggPj0gZGVzaWduYXRvci5zaXplKCkpID8gZGVzaWduYXRvci5iYWNrKCkgOiBkZXNpZ25hdG9yW2luZGV4XTsKK30KKwordWludDMyX3QgSGlkTG9jYWw6OmdldFN0cmluZyhzaXplX3QgaW5kZXgpIGNvbnN0IHsKKyAgICBpZiAoc3RyaW5nLmVtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuIElOVkFMSURfU1RSSU5HOworICAgIH0KKyAgICByZXR1cm4gKGluZGV4ID49IHN0cmluZy5zaXplKCkpID8gc3RyaW5nLmJhY2soKSA6IHN0cmluZ1tpbmRleF07Cit9CisKK3ZvaWQgSGlkTG9jYWw6OmNsZWFyKCkgeworICAgICp0aGlzID0gSGlkTG9jYWwoKTsKK30KKworYm9vbCBIaWRMb2NhbDo6YXBwZW5kKGNvbnN0IEhpZEl0ZW0gJmkpIHsKKyAgICB1c2luZyBuYW1lc3BhY2UgSGlkRGVmOjpMb2NhbFRhZzsKKworICAgIGJvb2wgcmV0ID0gdHJ1ZTsKKyAgICB1bnNpZ25lZCB1bnNpZ25lZEludGVnZXI7CisgICAgYm9vbCB1bnNpZ25lZEVycm9yID0gIWkuZGF0YUFzVW5zaWduZWQoJnVuc2lnbmVkSW50ZWdlcik7CisgICAgYm9vbCB2YWx1ZUVycm9yID0gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGkudGFnKSB7CisgICAgICAgIGNhc2UgVVNBR0U6CisgICAgICAgICAgICB1c2FnZS5wdXNoX2JhY2sodW5zaWduZWRJbnRlZ2VyKTsKKyAgICAgICAgICAgIHZhbHVlRXJyb3IgPSB1bnNpZ25lZEVycm9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVVNBR0VfTUlOSU1VTToKKyAgICAgICAgICAgIHVzYWdlTWluID0gdW5zaWduZWRJbnRlZ2VyOworICAgICAgICAgICAgdmFsdWVFcnJvciA9IHVuc2lnbmVkRXJyb3I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVU0FHRV9NQVhJTVVNOgorICAgICAgICAgICAgaWYgKCF1c2FnZU1pbi5pc1NldCgpKSB7CisgICAgICAgICAgICAgICAgTE9HX0UgPDwgInVzYWdlIG1pbiBub3Qgc2V0IHdoZW4gc2F3IHVzYWdlIG1heCAiIDw8IGkgPDwgTE9HX0VOREw7CisgICAgICAgICAgICAgICAgcmV0ID0gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHVpbnQzMl90IHVzYWdlbWF4ID0gdW5zaWduZWRJbnRlZ2VyOworICAgICAgICAgICAgICAgIHZhbHVlRXJyb3IgPSB1bnNpZ25lZEVycm9yOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSB1c2FnZU1pbi5nZXQoMCk7IGogPD0gdXNhZ2VtYXg7ICsraikgeworICAgICAgICAgICAgICAgICAgICB1c2FnZS5wdXNoX2JhY2soaik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHVzYWdlTWluLmNsZWFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVFJJTkdfSU5ERVg6CisgICAgICAgICAgICBzdHJpbmcucHVzaF9iYWNrKHVuc2lnbmVkSW50ZWdlcik7CisgICAgICAgICAgICB2YWx1ZUVycm9yID0gdW5zaWduZWRFcnJvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUUklOR19NSU5JTVVNOgorICAgICAgICAgICAgc3RyaW5nTWluID0gdW5zaWduZWRJbnRlZ2VyOworICAgICAgICAgICAgdmFsdWVFcnJvciA9IHVuc2lnbmVkRXJyb3I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVFJJTkdfTUFYSU1VTTogeworICAgICAgICAgICAgaWYgKCF1c2FnZU1pbi5pc1NldCgpKSB7CisgICAgICAgICAgICAgICAgTE9HX0UgPDwgInN0cmluZyBtaW4gbm90IHNldCB3aGVuIHNhdyBzdHJpbmcgbWF4ICIgPDwgaSA8PCBMT0dfRU5ETDsKKyAgICAgICAgICAgICAgICByZXQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdWludDMyX3Qgc3RyaW5nTWF4ID0gdW5zaWduZWRJbnRlZ2VyOworICAgICAgICAgICAgICAgIHZhbHVlRXJyb3IgPSB1bnNpZ25lZEVycm9yOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBzdHJpbmdNaW4uZ2V0KDApOyBqIDw9IHN0cmluZ01heDsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIHN0cmluZy5wdXNoX2JhY2soaik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0cmluZ01pbi5jbGVhcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBERUxJTUlUT1I6CisgICAgICAgICAgICBkZWxpbWV0ZXIgPSB1bnNpZ25lZEludGVnZXI7CisgICAgICAgICAgICB2YWx1ZUVycm9yID0gdW5zaWduZWRFcnJvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgTE9HX0UgPDwgInVua25vd24gbG9jYWwgdGFnLCAiIDw8IGkgPDwgTE9HX0VOREw7CisgICAgICAgICAgICByZXQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbHVlRXJyb3IpIHsKKyAgICAgICAgTE9HX0UgPDwgIkNhbm5vdCBnZXQgdW5zaWduZWQgZGF0YSBhdCAiIDw8IGkgPDwgTE9HX0VOREw7CisgICAgICAgIHJldCA9IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorfSAvL25hbWVzcGFjZSBIaWRVdGlsCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkTG9jYWwuaCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRMb2NhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMzBiMzAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkTG9jYWwuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpZm5kZWYgSElEVVRJTF9ISURMT0NBTF9IXworI2RlZmluZSBISURVVElMX0hJRExPQ0FMX0hfCisKKyNpbmNsdWRlICJIaWRJdGVtLmgiCisjaW5jbHVkZSAiVHJpU3RhdGUuaCIKKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworbmFtZXNwYWNlIEhpZFV0aWwgeworCisvLyBBIHNldCBvZiBsb2NhbCBzdGF0ZXMgdGhhdCBwYXJzZXIgaGFzIHRvIGtlZXAgdHJhY2sgZHVyaW5nIHBhcnNpbmcuCisvLyBUaGV5IGFyZSBhbGwgc3BlY2lmaWVkIGluIEhJRCBzcGVjIHYxLjExIHNlY3Rpb24gNi4yLjIuOAorc3RydWN0IEhpZExvY2FsIHsKKyAgICAvLyBhZGQgYSB0b2tlbiB0byBjaGFuZ2UgbG9jYWwgc3RhdGVzLCByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIGlmIG9wZXJhdGlvbiBpcyBzdWNjZXNzZnVsCisgICAgYm9vbCBhcHBlbmQoY29uc3QgSGlkSXRlbSAmaSk7CisgICAgLy8gY2xlYXIgYWxsIGxvY2FsIHN0YXRlcy4gVGhpcyBuZWVkIHRvIGJlIGRvbmUgYWZ0ZXIgZWFjaCBtYWluIHRhZworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIC8vIG11bHRpcGxlIHVzYWdlLCBkZXNpZ25hdG9yIG9yIHN0cmluZ3MgbWF5IGV4aXN0IGZvciBzaW5nbGUgaW5wdXQvb3V0cHV0L2ZlYXR1cmUgcmVwb3J0CisgICAgdWludDMyX3QgZ2V0VXNhZ2Uoc2l6ZV90IGluZGV4KSBjb25zdDsKKyAgICB1aW50MzJfdCBnZXREZXNpZ25hdG9yKHNpemVfdCBpbmRleCkgY29uc3Q7CisgICAgdWludDMyX3QgZ2V0U3RyaW5nKHNpemVfdCBpbmRleCkgY29uc3Q7CisKKyAgICBzdGQ6OnZlY3Rvcjx1aW50MzJfdD4gdXNhZ2U7CisgICAgLy8ga2VlcCB0cmFjayBvZiB1c2FnZSBtaW4gd2hlbiBleHBlY3RpbmcgYSB1c2FnZSBtYXgKKyAgICB0cmlfdWludCB1c2FnZU1pbjsKKworICAgIHN0ZDo6dmVjdG9yPHVpbnQzMl90PiBkZXNpZ25hdG9yOworICAgIC8vIGtlZXAgdHJhY2sgb2YgZGVzaWduYXRvciBtaW4gd2hlbiBleHBlY3RpbmcgZGVzaWduYXRvciBtYXgKKyAgICB0cmlfdWludCBkZXNpZ25hdG9yTWluOworCisgICAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IHN0cmluZzsKKyAgICAvLyBrZWVwIHRyYWNrIG9mIHN0cmluZyBtaW4gd2hlbiBleHBlY3Rpbmcgc3RyaW5nIG1heAorICAgIHRyaV91aW50IHN0cmluZ01pbjsKKworICAgIHRyaV91aW50IGRlbGltZXRlcjsKK307Cit9IC8vIG5hbWVzcGFjZSBIaWRVdGlsCisKKyNlbmRpZiAvLyBISURVVElMX0hJRExPQ0FMX0hfCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkTG9nLmggYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkTG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc3ZGU1NwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRMb2cuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpZm5kZWYgSElEVVRJTF9ISURMT0dfSF8KKyNkZWZpbmUgSElEVVRJTF9ISURMT0dfSF8KKworI2lmIGRlZmluZWQoX19BTkRST0lEX18pICYmICFkZWZpbmVkKExPR19UT19DT05TT0xFKQorI2luY2x1ZGUgPGFuZHJvaWQtYmFzZS9sb2dnaW5nLmg+CisjZGVmaW5lIExPR19FTkRMICIiCisjZGVmaW5lIExPR19FIExPRyhFUlJPUikKKyNkZWZpbmUgTE9HX1cgTE9HKFdBUk5JTkcpCisjZGVmaW5lIExPR19JIExPRyhJTkZPKQorI2RlZmluZSBMT0dfRCBMT0coREVCVUcpCisjZGVmaW5lIExPR19WIExPRyhWRVJCT1NFKQorI2Vsc2UKKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNkZWZpbmUgTE9HX0VOREwgc3RkOjplbmRsCisjZGVmaW5lIExPR19FIChzdGQ6OmNlcnIgPDwgIkU6ICIpCisjZGVmaW5lIExPR19XIChzdGQ6OmNlcnIgPDwgIlc6ICIpCisjZGVmaW5lIExPR19JIChzdGQ6OmNlcnIgPDwgIkk6ICIpCisjZGVmaW5lIExPR19EIChzdGQ6OmNlcnIgPDwgIkQ6ICIpCisjZGVmaW5lIExPR19WIChzdGQ6OmNlcnIgPDwgIlY6ICIpCisjZW5kaWYKKworI2VuZGlmIC8vIEhJRFVUSUxfSElETE9HX0hfCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkUGFyc2VyLmNwcCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRQYXJzZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZmFmNjUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkUGFyc2VyLmNwcApAQCAtMCwwICsxLDMxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaW5jbHVkZSAiSGlkRGVmcy5oIgorI2luY2x1ZGUgIkhpZFBhcnNlci5oIgorI2luY2x1ZGUgIkhpZExvZy5oIgorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPGlvbWFuaXA+CisKK25hbWVzcGFjZSBIaWRVdGlsIHsKKwordm9pZCBIaWRQYXJzZXI6OnJlc2V0KCkgeworICAgIG1HbG9iYWxTdGFjayA9IEhpZEdsb2JhbFN0YWNrKCk7CisgICAgbUxvY2FsID0gSGlkTG9jYWwoKTsKKyAgICBtVHJlZSA9IHN0ZDo6bWFrZV9zaGFyZWQ8SGlkVHJlZU5vZGU+KCk7CisgICAgbUN1cnJlbnQgPSBtVHJlZTsKK30KKworYm9vbCBIaWRQYXJzZXI6OnBhcnNlKGNvbnN0IHN0ZDo6dmVjdG9yPEhpZEl0ZW0+ICZ0b2tlbikgeworICAgIC8vIENsZWFuIHVwIGludGVybmFsIHN0YXRlcyBvZiB0aGUgcGFyc2VyIGZvciBhIG5ldyBzdHJlYW0gb2YgZGVzY3JpcHRvciB0b2tlbgorICAgIHJlc2V0KCk7CisKKyAgICBib29sIHJldCA9IHRydWU7CisgICAgdXNpbmcgbmFtZXNwYWNlIEhpZERlZjo6VGFnVHlwZTsKKworICAgIGZvciAoYXV0byAmaSA6IHRva2VuKSB7CisgICAgICAgIHN3aXRjaCAoaS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIE1BSU46CisgICAgICAgICAgICAgICAgcmV0ID0gcHJvY2Vzc01haW5UYWcoaSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEdMT0JBTDoKKyAgICAgICAgICAgICAgICByZXQgPSBtR2xvYmFsU3RhY2suYXBwZW5kKGkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBMT0NBTDoKKyAgICAgICAgICAgICAgICByZXQgPSBtTG9jYWwuYXBwZW5kKGkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBMT0dfRSA8PCAiSGlkUGFyc2VyIGZvdW5kIGlsbGVnYWwgSGlkSXRlbTogIiA8PCBpIDw8IExPR19FTkRMOworICAgICAgICAgICAgICAgIHJldCA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgLy8gaW4gY2FzZSBhIHBhcnNlIGZhaWx1cmUsIHF1aXQgcHJlbWF0dXJlbHkKKyAgICAgICAgaWYgKCFyZXQpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKK2Jvb2wgSGlkUGFyc2VyOjpwcm9jZXNzTWFpblRhZyhjb25zdCBIaWRJdGVtICZpKSB7CisgICAgdXNpbmcgbmFtZXNwYWNlIEhpZERlZjo6TWFpblRhZzsKKyAgICB1c2luZyBuYW1lc3BhY2UgSGlkRGVmOjpSZXBvcnRGbGFnOworCisgICAgYm9vbCByZXQgPSB0cnVlOworICAgIHN3aXRjaCAoaS50YWcpIHsKKyAgICAgICAgY2FzZSBDT0xMRUNUSU9OOiB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY29sbGVjdGlvblR5cGU7CisgICAgICAgICAgICBpZiAoIWkuZGF0YUFzVW5zaWduZWQoJmNvbGxlY3Rpb25UeXBlKSkgeworICAgICAgICAgICAgICAgIExPR19FIDw8ICJDYW5ub3QgZ2V0IGNvbGxlY3Rpb24gdHlwZSBhdCBvZmZzZXQgIiA8PCBpLm9mZnNldCA8PCBMT0dfRU5ETDsKKyAgICAgICAgICAgICAgICByZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBmdWxsVXNhZ2UgPQorICAgICAgICAgICAgICAgICAgICBtR2xvYmFsU3RhY2sudG9wKCkudXNhZ2VQYWdlLmdldCgwKSA8PCAxNiB8IG1Mb2NhbC5nZXRVc2FnZSgwKTsKKyAgICAgICAgICAgIG1DdXJyZW50ID0gbUN1cnJlbnQtPmFkZENoaWxkKAorICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2Vfc2hhcmVkPEhpZFRyZWVOb2RlPihtQ3VycmVudCwgY29sbGVjdGlvblR5cGUsIGZ1bGxVc2FnZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFTkRfQ09MTEVDVElPTjoKKyAgICAgICAgICAgIG1DdXJyZW50ID0gbUN1cnJlbnQtPmdldFBhcmVudCgpOworICAgICAgICAgICAgaWYgKCFtQ3VycmVudCkgeworICAgICAgICAgICAgICAgIC8vIHRyaWdnZXIgcGFyc2UgZmFpbHVyZSBzbyB0aGF0IG1DdXJyZW50IHdpbGwgbm90IGJlIGFjY2Vzc2VkCisgICAgICAgICAgICAgICAgTE9HX0UgPDwgInVubWF0Y2hlZCBFTkRfQ09MTEVDVElPTiBhdCAiIDw8IGkub2Zmc2V0IDw8IExPR19FTkRMOworICAgICAgICAgICAgICAgIHJldCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSU5QVVQ6CisgICAgICAgIGNhc2UgT1VUUFVUOgorICAgICAgICBjYXNlIEZFQVRVUkU6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCByZXBvcnRUeXBlID0gaS50YWc7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZzsKKyAgICAgICAgICAgIGlmICghaS5kYXRhQXNVbnNpZ25lZCgmZmxhZykpIHsKKyAgICAgICAgICAgICAgICBMT0dfRSA8PCAiQ2Fubm90IGdldCByZXBvcnQgZmxhZyBhdCBvZmZzZXQgIiA8PCBpLm9mZnNldCA8PCBMT0dfRU5ETDsKKyAgICAgICAgICAgICAgICByZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN0IEhpZEdsb2JhbCAmdG9wID0gbUdsb2JhbFN0YWNrLnRvcCgpOworCisgICAgICAgICAgICAvLyB1c2FnZSBwYWdlLCBsb2NhbCBtaW4vbWF4LCByZXBvcnQgc2l6ZSBhbmQgY291bnQgaGF2ZSB0byBiZSBkZWZpbmVkIGF0IHJlcG9ydAorICAgICAgICAgICAgLy8gZGVmaW5pdGlvbi4KKyAgICAgICAgICAgIGlmICghKHRvcC51c2FnZVBhZ2UuaXNTZXQoKSAmJiB0b3AubG9naWNhbE1pbi5pc1NldCgpICYmIHRvcC5sb2dpY2FsTWF4LmlzU2V0KCkKKyAgICAgICAgICAgICAgICAgICYmIHRvcC5yZXBvcnRTaXplLmlzU2V0KCkgJiYgdG9wLnJlcG9ydENvdW50LmlzU2V0KCkpKSB7CisgICAgICAgICAgICAgICAgTE9HX0UgPDwgIlJlcG9ydCBkZWZpbmVkIGF0ICIgPDwgaS5vZmZzZXQKKyAgICAgICAgICAgICAgICAgICAgICA8PCAiIGRvZXMgbm90IGhhdmUgYWxsIG1hbmRhdG9yeSBmaWVsZHMgc2V0IiA8PCBMT0dfRU5ETDsKKyAgICAgICAgICAgICAgICByZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0b3AucmVwb3J0U2l6ZS5nZXQoMCkgPiAzMikgeworICAgICAgICAgICAgICAgIExPR19FIDw8ICJSZXBvcnQgZGVmaW5lZCBhdCAiIDw8IGkub2Zmc2V0CisgICAgICAgICAgICAgICAgICAgICAgPDwgIiBoYXMgdW5zdXBwb3J0ZWQgcmVwb3J0IHNpemUoPiAzMiBiaXQpIiA8PCBMT0dfRU5ETDsKKyAgICAgICAgICAgICAgICByZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSGlkUmVwb3J0IHJlcG9ydChyZXBvcnRUeXBlLCBmbGFnLCB0b3AsIG1Mb2NhbCk7CisgICAgICAgICAgICBtUmVwb3J0LnB1c2hfYmFjayhyZXBvcnQpOworICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiBub2RlKG5ldyBIaWRSZXBvcnROb2RlKG1DdXJyZW50LCByZXBvcnQpKTsKKyAgICAgICAgICAgIG1DdXJyZW50LT5hZGRDaGlsZChub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBMT0dfRSA8PCAidW5rbm93biBtYWluIHRhZywgIiA8PCBpIDw8IExPR19FTkRMOworICAgICAgICAgICAgcmV0ID0gZmFsc2U7CisgICAgfQorICAgIC8vIGxvY2FscyBpcyBjbGVhcmVkIGFmdGVyIGFueSBtYWluIHRhZyBhY2NvcmRpbmcgdG8gSElEIHNwZWMKKyAgICBtTG9jYWwuY2xlYXIoKTsKKyAgICByZXR1cm4gcmV0OworfQorCitib29sIEhpZFBhcnNlcjo6cGFyc2UoY29uc3QgdW5zaWduZWQgY2hhciAqYmVnaW4sIHNpemVfdCBzaXplKSB7CisgICAgc3RkOjp2ZWN0b3I8SGlkSXRlbT4gaGlkSXRlbVZlY3RvciA9IEhpZEl0ZW06OnRva2VuaXplKGJlZ2luLCBzaXplKTsKKyAgICByZXR1cm4gcGFyc2UoaGlkSXRlbVZlY3Rvcik7Cit9CisKK3ZvaWQgSGlkUGFyc2VyOjpmaWx0ZXJUcmVlKCkgeworICAgIGlmIChtVHJlZSAhPSBudWxscHRyKSB7CisgICAgICAgIGZpbHRlclRyZWUobVRyZWUpOworICAgIH0KK30KKwordm9pZCBIaWRQYXJzZXI6OmZpbHRlclRyZWUoc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiAmbm9kZSkgeworICAgIGlmIChub2RlLT5pc1JlcG9ydENvbGxlY3Rpb24oKSkgeworICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8SGlkUmVwb3J0Tm9kZT4gcmVwb3J0Tm9kZSA9CisgICAgICAgICAgICAgICAgc3RkOjpzdGF0aWNfcG9pbnRlcl9jYXN0PEhpZFJlcG9ydE5vZGU+KG5vZGUtPmdldENoaWxkcmVuKCkuZnJvbnQoKSk7CisgICAgICAgIGlmIChyZXBvcnROb2RlICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgIHJlcG9ydE5vZGUtPmNvbGxhcHNlKG5vZGUtPmdldEZ1bGxVc2FnZSgpKTsKKyAgICAgICAgICAgIG5vZGUgPSByZXBvcnROb2RlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChhdXRvICZpIDogbm9kZS0+Z2V0Q2hpbGRyZW4oKSkgeworICAgICAgICAgICAgZmlsdGVyVHJlZShpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworSGlkUGFyc2VyOjpEaWdlc3RWZWN0b3IgSGlkUGFyc2VyOjpnZW5lcmF0ZURpZ2VzdCgKKyAgICAgICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfc2V0PHVuc2lnbmVkIGludD4gJmludGVyZXN0ZWRVc2FnZSkgeworICAgIERpZ2VzdFZlY3RvciBkaWdlc3RWZWN0b3I7CisgICAgZGlnZXN0KCZkaWdlc3RWZWN0b3IsIG1UcmVlLCBpbnRlcmVzdGVkVXNhZ2UpOworICAgIHJldHVybiBkaWdlc3RWZWN0b3I7Cit9CisKK3ZvaWQgSGlkUGFyc2VyOjpkaWdlc3QoSGlkUGFyc2VyOjpEaWdlc3RWZWN0b3IgKmRpZ2VzdFZlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiAmbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfc2V0PHVuc2lnbmVkIGludD4gJmludGVyZXN0ZWRVc2FnZSkgeworICAgIGlmIChkaWdlc3RWZWN0b3IgPT0gbnVsbHB0cikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG5vZGUtPmlzVXNhZ2VDb2xsZWN0aW9uKCkKKyAgICAgICAgICAgICYmIGludGVyZXN0ZWRVc2FnZS5maW5kKG5vZGUtPmdldEZ1bGxVc2FnZSgpKSAhPSBpbnRlcmVzdGVkVXNhZ2UuZW5kKCkpIHsKKyAgICAgICAgLy8gdGhpcyBjb2xsZWN0aW9uIGNvbnRhaW5zIHRoZSB1c2FnZSBpbnRlcmVzdGVkCisgICAgICAgIFJlcG9ydFNldEdyb3VwIHJlcG9ydFNldEdyb3VwOworCisgICAgICAgIC8vIG9uZSBsYXllciBkZWVwIHNlYXJjaAorICAgICAgICBmb3IgKGF1dG8gJmkgOiBub2RlLT5nZXRDaGlsZHJlbigpKSB7CisgICAgICAgICAgICAvLyBza2lwIGFsbCBub2RlcyB0aGF0IGlzIG5vdCBhIHJlcG9ydCBub2RlCisgICAgICAgICAgICBpZiAoaS0+Z2V0Tm9kZVR5cGUoKSAhPSBIaWRUcmVlTm9kZTo6VFlQRV9SRVBPUlQpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN0IEhpZFJlcG9ydCAmcmVwb3J0ID0KKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdGF0aWNfcG9pbnRlcl9jYXN0PEhpZFJlcG9ydE5vZGU+KGkpLT5nZXRSZXBvcnQoKTsKKworICAgICAgICAgICAgdW5zaWduZWQgaW50IGlkID0gcmVwb3J0LmdldFJlcG9ydElkKCk7OworICAgICAgICAgICAgaWYgKHJlcG9ydFNldEdyb3VwLmZpbmQoaWQpID09IHJlcG9ydFNldEdyb3VwLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGFuIGlkIGdyb3VwIGlmIGl0IGlzIG5vdCBjcmVhdGVkCisgICAgICAgICAgICAgICAgcmVwb3J0U2V0R3JvdXAuZW1wbGFjZShpZCwgUmVwb3J0U2V0KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSZXBvcnRTZXQgJnJlcG9ydEdyb3VwID0gcmVwb3J0U2V0R3JvdXBbaWRdOworICAgICAgICAgICAgc3dpdGNoKHJlcG9ydC5nZXRUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICB1c2luZyBuYW1lc3BhY2UgSGlkRGVmOjpNYWluVGFnOworICAgICAgICAgICAgICAgIGNhc2UgRkVBVFVSRToKKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0R3JvdXBbUkVQT1JUX1RZUEVfRkVBVFVSRV0ucHVzaF9iYWNrKHJlcG9ydCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSU5QVVQ6CisgICAgICAgICAgICAgICAgICAgIHJlcG9ydEdyb3VwW1JFUE9SVF9UWVBFX0lOUFVUXS5wdXNoX2JhY2socmVwb3J0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBPVVRQVVQ6CisgICAgICAgICAgICAgICAgICAgIHJlcG9ydEdyb3VwW1JFUE9SVF9UWVBFX09VVFBVVF0ucHVzaF9iYWNrKHJlcG9ydCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFJlcG9ydERpZ2VzdCBkaWdlc3QgPSB7CisgICAgICAgICAgICAuZnVsbFVzYWdlID0gbm9kZS0+Z2V0RnVsbFVzYWdlKCksCisgICAgICAgICAgICAucGFja2V0cyA9IGNvbnZlcnRHcm91cFRvUGFja2V0KHJlcG9ydFNldEdyb3VwKQorICAgICAgICB9OworICAgICAgICBkaWdlc3RWZWN0b3ItPmVtcGxhY2VfYmFjayhkaWdlc3QpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoY29uc3QgYXV0byAmY2hpbGQgOiBub2RlLT5nZXRDaGlsZHJlbigpKSB7CisgICAgICAgICAgICBpZiAoY2hpbGQtPmdldE5vZGVUeXBlKCkgPT0gSGlkVHJlZU5vZGU6OlRZUEVfTk9STUFMKSB7CisgICAgICAgICAgICAgICAgLy8gb25seSBmb2xsb3cgaW50byBjb2xsZWN0aW9uIG5vZGVzCisgICAgICAgICAgICAgICAgZGlnZXN0KGRpZ2VzdFZlY3RvciwgY2hpbGQsIGludGVyZXN0ZWRVc2FnZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0ZDo6dmVjdG9yPEhpZFBhcnNlcjo6UmVwb3J0UGFja2V0PiBIaWRQYXJzZXI6OmNvbnZlcnRHcm91cFRvUGFja2V0KAorICAgICAgICBjb25zdCBIaWRQYXJzZXI6OlJlcG9ydFNldEdyb3VwICZncm91cCkgeworICAgIHN0ZDo6dmVjdG9yPFJlcG9ydFBhY2tldD4gcGFja2V0czsKKworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGludD4gdHlwZXMgPSB7UkVQT1JUX1RZUEVfRkVBVFVSRSwgUkVQT1JUX1RZUEVfSU5QVVQsIFJFUE9SVF9UWVBFX09VVFBVVH07CisKKyAgICBmb3IgKGNvbnN0IGF1dG8gJnNldFBhaXIgOiBncm91cCkgeworICAgICAgICB1bnNpZ25lZCBpbnQgaWQgPSBzZXRQYWlyLmZpcnN0OworICAgICAgICBmb3IgKGF1dG8gdHlwZSA6IHR5cGVzKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvICZyZXBvcnRzID0gc2V0UGFpci5zZWNvbmRbdHlwZV07IC8vIGZlYXR1cmUKKworICAgICAgICAgICAgLy8gdGVtcGxhdGUKKyAgICAgICAgICAgIFJlcG9ydFBhY2tldCBwYWNrZXQgPSB7CisgICAgICAgICAgICAgICAgLnR5cGUgPSB0eXBlLAorICAgICAgICAgICAgICAgIC5pZCA9IGlkLAorICAgICAgICAgICAgICAgIC5iaXRTaXplID0gMAorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvICZyIDogcmVwb3J0cykgeworICAgICAgICAgICAgICAgIGF1dG8gbG9naWNhbCA9IHIuZ2V0TG9naWNhbFJhbmdlKCk7CisgICAgICAgICAgICAgICAgYXV0byBwaHlzaWNhbCA9IHIuZ2V0UGh5c2ljYWxSYW5nZSgpOworCisgICAgICAgICAgICAgICAgaW50NjRfdCBvZmZzZXQgPSBwaHlzaWNhbC5maXJzdCAtIGxvZ2ljYWwuZmlyc3Q7CisgICAgICAgICAgICAgICAgZG91YmxlIHNjYWxlID0gc3RhdGljX2Nhc3Q8ZG91YmxlPigocGh5c2ljYWwuc2Vjb25kIC0gcGh5c2ljYWwuZmlyc3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgLyAobG9naWNhbC5zZWNvbmQgLSBsb2dpY2FsLmZpcnN0KTsKKyAgICAgICAgICAgICAgICBzY2FsZSAqPSByLmdldEV4cG9uZW50VmFsdWUoKTsKKworICAgICAgICAgICAgICAgIFJlcG9ydEl0ZW0gZGlnZXN0ID0geworICAgICAgICAgICAgICAgICAgICAudXNhZ2UgPSByLmdldEZ1bGxVc2FnZSgpLAorICAgICAgICAgICAgICAgICAgICAuaWQgPSBpZCwKKyAgICAgICAgICAgICAgICAgICAgLm1pblJhdyA9IGxvZ2ljYWwuZmlyc3QsCisgICAgICAgICAgICAgICAgICAgIC5tYXhSYXcgPSBsb2dpY2FsLnNlY29uZCwKKyAgICAgICAgICAgICAgICAgICAgLmEgPSBzY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgLmIgPSBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIC5iaXRPZmZzZXQgPSBwYWNrZXQuYml0U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgLmJpdFNpemUgPSByLmdldFNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgLmNvdW50ID0gci5nZXRDb3VudCgpLAorICAgICAgICAgICAgICAgICAgICAudW5pdCA9IHIuZ2V0VW5pdCgpLAorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgcGFja2V0LnJlcG9ydHMucHVzaF9iYWNrKGRpZ2VzdCk7CisgICAgICAgICAgICAgICAgcGFja2V0LmJpdFNpemUgKz0gZGlnZXN0LmJpdFNpemUgKiBkaWdlc3QuY291bnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXBhY2tldC5yZXBvcnRzLmVtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBwYWNrZXRzLnB1c2hfYmFjayhzdGQ6Om1vdmUocGFja2V0KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHBhY2tldHM7Cit9CisKK3N0YXRpYyBzdGQ6OnN0cmluZyByZXBvcnRUeXBlVG9TdHJpbmcoaW50IHJlcG9ydFR5cGUpIHsKKyAgICBzd2l0Y2ggKHJlcG9ydFR5cGUpIHsKKyAgICAgICAgY2FzZSBIaWRQYXJzZXI6OlJFUE9SVF9UWVBFX0lOUFVUOgorICAgICAgICAgICAgcmV0dXJuICJJTlBVVCI7CisgICAgICAgIGNhc2UgSGlkUGFyc2VyOjpSRVBPUlRfVFlQRV9PVVRQVVQ6CisgICAgICAgICAgICByZXR1cm4gIk9VVFBVVCI7CisgICAgICAgIGNhc2UgSGlkUGFyc2VyOjpSRVBPUlRfVFlQRV9GRUFUVVJFOgorICAgICAgICAgICAgcmV0dXJuICJGRUFUVVJFIjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAiSU5WQUxJRCBSRVBPUlQiOworICAgIH0KK30KKworc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSAmb3MsIGNvbnN0IEhpZFBhcnNlcjo6RGlnZXN0VmVjdG9yICZkaWdlc3RzKSB7CisgICAgZm9yIChjb25zdCBhdXRvICZpIDogZGlnZXN0cykgeworICAgICAgICBvcyA8PCAiVXNhZ2U6IDB4IiA8PCBzdGQ6OmhleCAgPDwgaS5mdWxsVXNhZ2UgPDwgc3RkOjpkZWMKKyAgICAgICAgICAgPDwgIiwgIiA8PCBpLnBhY2tldHMuc2l6ZSgpIDw8ICIgcmVwb3J0IHBhY2tldDoiIDw8IExPR19FTkRMOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8gJnBhY2tldCA6IGkucGFja2V0cykgeworICAgICAgICAgICAgb3MgPDwgcmVwb3J0VHlwZVRvU3RyaW5nKHBhY2tldC50eXBlKSA8PCAiIGlkOiAiIDw8IHBhY2tldC5pZAorICAgICAgICAgICAgICAgPDwgIiBzaXplOiAiIDw8IHBhY2tldC5iaXRTaXplCisgICAgICAgICAgICAgICA8PCAiYigiIDw8IHBhY2tldC5nZXRCeXRlU2l6ZSgpIDw8ICJCKSwgIgorICAgICAgICAgICAgICAgPDwgcGFja2V0LnJlcG9ydHMuc2l6ZSgpIDw8ICIgZW50cmllcyIgPDwgTE9HX0VOREw7CisKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byAmcmVwb3J0IDogcGFja2V0LnJlcG9ydHMpIHsKKyAgICAgICAgICAgICAgICBkb3VibGUgbWluLCBtYXg7CisgICAgICAgICAgICAgICAgcmVwb3J0LmRlY29kZShyZXBvcnQubWFzayhyZXBvcnQubWluUmF3KSwgJm1pbik7CisgICAgICAgICAgICAgICAgcmVwb3J0LmRlY29kZShyZXBvcnQubWFzayhyZXBvcnQubWF4UmF3KSwgJm1heCk7CisKKyAgICAgICAgICAgICAgICBvcyA8PCAiICAiIDw8IHJlcG9ydC5iaXRPZmZzZXQgPDwgIiBzaXplOiAiIDw8IHJlcG9ydC5iaXRTaXplCisgICAgICAgICAgICAgICAgICAgPDwgIiwgY291bnQ6ICIgPDwgcmVwb3J0LmNvdW50CisgICAgICAgICAgICAgICAgICAgPDwgIiwgdXNhZ2U6ICIgPDwgc3RkOjpoZXggPDwgc3RkOjpzZXRmaWxsKCcwJykgPDwgc3RkOjpzZXR3KDgpCisgICAgICAgICAgICAgICAgICAgPDwgcmVwb3J0LnVzYWdlIDw8IHN0ZDo6ZGVjCisgICAgICAgICAgICAgICAgICAgPDwgIiwgbWluOiAiIDw8IHJlcG9ydC5taW5SYXcgPDwgIiwgbWF4OiAiIDw8IHJlcG9ydC5tYXhSYXcKKyAgICAgICAgICAgICAgICAgICA8PCAiLCBtaW5EZWNvZGVkOiAiIDw8IG1pbgorICAgICAgICAgICAgICAgICAgIDw8ICIsIG1heERlY29kZWQ6ICIgPDwgbWF4CisgICAgICAgICAgICAgICAgICAgPDwgIiwgYTogIiA8PCByZXBvcnQuYSA8PCAiLCBiOiAiIDw8IHJlcG9ydC5iCisgICAgICAgICAgICAgICAgICAgPDwgc3RkOjpoZXgKKyAgICAgICAgICAgICAgICAgICA8PCAiLCBtaW5SYXdIZXg6IDB4IiA8PCByZXBvcnQubWFzayhyZXBvcnQubWluUmF3KQorICAgICAgICAgICAgICAgICAgIDw8ICIsIG1heFJhd0hleDogMHgiIDw8IHJlcG9ydC5tYXNrKHJlcG9ydC5tYXhSYXcpCisgICAgICAgICAgICAgICAgICAgPDwgIiwgcmF3TWFza2VkOiAweCIgPDwgcmVwb3J0LnJhd01hc2soKQorICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZGVjIDw8IExPR19FTkRMOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG9zIDw8IExPR19FTkRMOworICAgIH0KKyAgICBvcyA8PCBMT0dfRU5ETDsKKyAgICByZXR1cm4gb3M7Cit9Cit9IC8vIG5hbWVzcGFjZSBIaWRVdGlsCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkUGFyc2VyLmggYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVmNWVjNgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRQYXJzZXIuaApAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaWZuZGVmIEhJRFVUSUxfSElEUEFSU0VSX0hfCisjZGVmaW5lIEhJRFVUSUxfSElEUEFSU0VSX0hfCisKKyNpbmNsdWRlICJIaWRJdGVtLmgiCisjaW5jbHVkZSAiSGlkVHJlZS5oIgorI2luY2x1ZGUgIkhpZEdsb2JhbC5oIgorI2luY2x1ZGUgIkhpZExvY2FsLmgiCisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxhcnJheT4KKyNpbmNsdWRlIDxvc3RyZWFtPgorCituYW1lc3BhY2UgSGlkVXRpbCB7CitjbGFzcyBIaWRQYXJzZXIgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBSRVBPUlRfVFlQRV9GRUFUVVJFID0gMCwKKyAgICAgICAgUkVQT1JUX1RZUEVfSU5QVVQgPSAxLAorICAgICAgICBSRVBPUlRfVFlQRV9PVVRQVVQgPSAyCisgICAgfTsKKworICAgIHN0cnVjdCBSZXBvcnRJdGVtOworICAgIHN0cnVjdCBSZXBvcnRQYWNrZXQ7CisKKyAgICAvLyByZXBvcnQgKGluY2x1ZGluZyBpbnB1dCBvdXRwdXQgYW5kIGZlYXR1cmUpIGdyb3VwZWQgYnkgZnVsbCB1c2FnZQorICAgIHN0cnVjdCBSZXBvcnREaWdlc3QgeworICAgICAgICB1bnNpZ25lZCBpbnQgZnVsbFVzYWdlOworICAgICAgICBzdGQ6OnZlY3RvcjxSZXBvcnRQYWNrZXQ+IHBhY2tldHM7CisgICAgfTsKKworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8UmVwb3J0RGlnZXN0PiBEaWdlc3RWZWN0b3I7CisKKyAgICAvLyBwYXJzZSBISUQgZGVzY3JpcHRvcgorICAgIGJvb2wgcGFyc2UoY29uc3Qgc3RkOjp2ZWN0b3I8SGlkSXRlbT4gJnRva2VuKTsKKyAgICBib29sIHBhcnNlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJlZ2luLCBzaXplX3Qgc2l6ZSk7CisKKyAgICAvLyBmaWx0ZXIgdGhlIHRyZWUgdG8gZWxpbWluYXRlIHNpbmdsZSBjaGlsZCByZXBvcnQgbGVhZiBub2RlIGNhdXNlcyBieSB1c2FnZSBhcnJheSB0eXBlCisgICAgLy8gcmVwb3J0cworICAgIHZvaWQgZmlsdGVyVHJlZSgpOworCisgICAgLy8gZ2VuZXJhdGUgYSBsaXN0IG9mIHJlcG9ydCBkaWdlc3QgZm9yIGFsbCBpbnRlcmVzdGVkIHVzYWdlLiBJdCB3aWxsIGF1dG9tYXRpY2FsbHkKKyAgICAvLyBjYWxsIGZpbHRlclRyZWUoKS4KKyAgICBEaWdlc3RWZWN0b3IgZ2VuZXJhdGVEaWdlc3QoY29uc3Qgc3RkOjp1bm9yZGVyZWRfc2V0PHVuc2lnbmVkIGludD4gJmludGVyZXN0ZWRVc2FnZSk7CisKKyAgICAvLyBnZXQgcGFyc2VkIHRyZWUgKGZpbHRlcmVkIG9yIG5vdCBmaWx0ZXJlZCkKKyAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IGdldFRyZWUoKSBjb25zdCB7IHJldHVybiBtVHJlZTsgfQorCisgICAgLy8gZ2V0IGFsbCBwYXJzZWQgcmVwb3J0IGluIGEgcGFyc2VkIGZvcm0uCisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8SGlkUmVwb3J0PiYgZ2V0UmVwb3J0KCkgY29uc3QgeyByZXR1cm4gbVJlcG9ydDsgfQorCitwcml2YXRlOgorICAgIHR5cGVkZWYgc3RkOjphcnJheTxzdGQ6OnZlY3RvcjxIaWRSZXBvcnQ+LCAzPiBSZXBvcnRTZXQ7CisgICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8dW5zaWduZWQgaW50IC8qIHJlcG9ydElkICovLCBSZXBvcnRTZXQ+IFJlcG9ydFNldEdyb3VwOworCisgICAgLy8gaGVscGVyIHN1YnJvdXRpbmVzCisgICAgdm9pZCByZXNldCgpOworICAgIGJvb2wgcHJvY2Vzc01haW5UYWcoY29uc3QgSGlkSXRlbSAmaSk7CisgICAgc3RhdGljIHZvaWQgZmlsdGVyVHJlZShzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+ICZub2RlKTsKKyAgICBzdGF0aWMgdm9pZCBkaWdlc3QoCisgICAgICAgICAgICBEaWdlc3RWZWN0b3IgKmRpZ2VzdFZlY3RvciwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gJm5vZGUsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9zZXQ8dW5zaWduZWQgaW50PiAmaW50ZXJlc3RlZFVzYWdlKTsKKyAgICBzdGF0aWMgc3RkOjp2ZWN0b3I8UmVwb3J0UGFja2V0PiBjb252ZXJ0R3JvdXBUb1BhY2tldChjb25zdCBSZXBvcnRTZXRHcm91cCAmZ3JvdXApOworCisgICAgSGlkR2xvYmFsU3RhY2sgbUdsb2JhbFN0YWNrOworICAgIEhpZExvY2FsIG1Mb2NhbDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IG1UcmVlOworICAgIHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gbUN1cnJlbnQ7CisgICAgc3RkOjp2ZWN0b3I8SGlkUmVwb3J0PiBtUmVwb3J0OworfTsKKworc3RydWN0IEhpZFBhcnNlcjo6UmVwb3J0SXRlbSB7CisgICAgdW5zaWduZWQgaW50IHVzYWdlOworICAgIHVuc2lnbmVkIGludCBpZDsKKyAgICBpbnQgdHlwZTsgLy8gZmVhdHVyZSwgaW5wdXQgb3Igb3V0cHV0CisKKyAgICBpbnQ2NF90IG1pblJhdzsKKyAgICBpbnQ2NF90IG1heFJhdzsKKworICAgIC8vIGNvbnZlcnNpb24gZm9yIGZsb2F0IHBvaW50IHZhbHVlcworICAgIC8vIHJlYWwgdmFsdWUgPSAoc2lnbkV4dGVuZElmTmVlZGVkKHJhdykgKyBiKSAqIGEKKyAgICAvLyByYXcgdmFsdWUgPSBtYXNrKHJlYWwvYSAtIGIpOworICAgIC8vCisgICAgLy8gY29udmVyc2lvbiBmb3IgaW50ZWdlciB2YWx1ZXMKKyAgICAvLyByZWFsIHZhbHVlID0gc2lnbkV4dGVuZGVkSWZOZWVkZWQocmF3KSArIGI7CisgICAgLy8gcmF3IHZhbHVlID0gbWFzayhyZWFsIC0gYik7CisgICAgZG91YmxlIGE7IC8vIHNjYWxpbmcKKyAgICBpbnQ2NF90IGI7IC8vIG9mZnNldAorICAgIHVuc2lnbmVkIGludCB1bml0OworCisgICAgc2l6ZV90IGJpdE9mZnNldDsKKyAgICBzaXplX3QgYml0U2l6ZTsgLy8gYml0IGxlbmd0aCBwZXIgdW5pdAorICAgIHNpemVfdCBjb3VudDsKKworICAgIC8vIGhlbHBlciBmdW5jdGlvbgorICAgIGJvb2wgaXNTaWduZWQoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtaW5SYXcgPCAwOworICAgIH0KKworICAgIGJvb2wgaXNCeXRlQWxpZ25lZCgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIChiaXRPZmZzZXQgJiA3KSA9PSAwICYmIChiaXRTaXplICYgNykgPT0gMDsKKyAgICB9CisKKyAgICAvLyBjb252ZXJ0IHJhdyB2YWx1ZXMgdG8gdW5zaWduZWQgZm9ybWF0CisgICAgdWludDMyX3QgbWFzayhpbnQ2NF90IGlucHV0KSBjb25zdCB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaW5wdXQgJiByYXdNYXNrKCkpOworICAgIH0KKworICAgIGJvb2wgZGVjb2RlKHVpbnQzMl90IGlucHV0LCBkb3VibGUgKm91dHB1dCkgY29uc3QgeworICAgICAgICBpZiAob3V0cHV0ID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpbnQ2NF90IHMgPSBzaWduRXh0ZW5kSWZOZWVkZWQoaW5wdXQpOworICAgICAgICBpZiAocyA8IG1pblJhdyB8fCBzID4gbWF4UmF3KSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgKm91dHB1dCA9IChzICsgYikgKiBhOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIGVuY29kZShkb3VibGUgaW5wdXQsIHVpbnQzMl90ICpvdXRwdXQpIGNvbnN0IHsKKyAgICAgICAgaWYgKG91dHB1dCA9PSBudWxscHRyKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaW5wdXQgPSBpbnB1dCAvIGEgLSBiOworICAgICAgICBpZiAoaW5wdXQgPCBtaW5SYXcgfHwgaW5wdXQgPiBtYXhSYXcpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAqb3V0cHV0ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGludDY0X3Q+KGlucHV0KSAmIHJhd01hc2soKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGludDY0X3QgcmF3TWFzaygpIGNvbnN0IHsKKyAgICAgICAgY29uc3RleHByIGludDY0X3Qgb25lID0gMTsKKyAgICAgICAgcmV0dXJuIChvbmUgPDwgYml0U2l6ZSkgLSAxOworICAgIH0KKworICAgIGludDY0X3Qgc2lnbkV4dGVuZElmTmVlZGVkKGludDY0X3QgdmFsdWUpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIHZhbHVlIHwgKChpc1NpZ25lZCgpICYmIGlzTmVnYXRpdmUodmFsdWUpKSA/IH5yYXdNYXNrKCkgOiAwKTsKKyAgICB9CisKKyAgICBib29sIGlzTmVnYXRpdmUoaW50NjRfdCB2YWx1ZSkgY29uc3QgeworICAgICAgICBjb25zdGV4cHIgaW50NjRfdCBvbmUgPSAxOworICAgICAgICByZXR1cm4gKChvbmUgPDwgKGJpdFNpemUgLSAxKSkgJiB2YWx1ZSkgIT0gMDsKKyAgICB9Cit9OworCisvLyBhIGNvbGxlY3Rpb24gb2YgcmVwb3J0IGl0ZW0gdGhhdCBmb3JtcyBhIHBhY2tldAorLy8gdGhpcyBpcyB0aGUgaW5wdXQgb3V0cHV0IHVuaXQgd2l0aCBISUQgaGFyZHdhcmUKK3N0cnVjdCBIaWRQYXJzZXI6OlJlcG9ydFBhY2tldCB7CisgICAgc3RkOjp2ZWN0b3I8UmVwb3J0SXRlbT4gcmVwb3J0czsKKyAgICBzaXplX3QgYml0U2l6ZTsKKyAgICBpbnQgdHlwZTsgLy8gUkVQT1JUX1RZUEVfRkVBVFVSRS9JTlBVVC9PVVRQVVQKKyAgICB1bnNpZ25lZCBpbnQgaWQ7CisKKyAgICBzaXplX3QgZ2V0Qnl0ZVNpemUoKSBjb25zdCB7IHJldHVybiAoYml0U2l6ZSArIDcpIC8gODsgfTsKK307CisKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0gJm9zLCBjb25zdCBIaWRQYXJzZXI6OkRpZ2VzdFZlY3RvciAmZGlnZXN0Mik7Cit9IC8vIG5hbWVzcGFjZSBIaWRVdGlsCisKKyNlbmRpZiAvLyBISURVVElMX0hJRFBBUlNFUl9IXwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZFJlcG9ydC5jcHAgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkUmVwb3J0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjJiNzhiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZFJlcG9ydC5jcHAKQEAgLTAsMCArMSwyMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2luY2x1ZGUgIkhpZFJlcG9ydC5oIgorI2luY2x1ZGUgIkhpZERlZnMuaCIKKyNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPGlvbWFuaXA+CisKK25hbWVzcGFjZSBIaWRVdGlsIHsKK0hpZFJlcG9ydDo6SGlkUmVwb3J0KHVpbnQzMl90IHR5cGUsIHVpbnQzMl90IGRhdGEsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBIaWRHbG9iYWwgJmdsb2JhbCwgY29uc3QgSGlkTG9jYWwgJmxvY2FsKQorICAgICAgICA6IG1SZXBvcnRUeXBlKHR5cGUpLAorICAgICAgICAgIG1GbGFnKGRhdGEpLAorICAgICAgICAgIG1Vc2FnZVBhZ2UoZ2xvYmFsLnVzYWdlUGFnZS5nZXQoMCkpLCAgIC8vIGRlZmF1bHQgdmFsdWUgMAorICAgICAgICAgIG1Vc2FnZShsb2NhbC5nZXRVc2FnZSgwKSksCisgICAgICAgICAgbVVzYWdlVmVjdG9yKGxvY2FsLnVzYWdlKSwKKyAgICAgICAgICBtTG9naWNhbE1pbihnbG9iYWwubG9naWNhbE1pbi5nZXQoMCkpLCAvLyBkZWZhdWx0IHZhbHVlIDAKKyAgICAgICAgICBtTG9naWNhbE1heChnbG9iYWwubG9naWNhbE1heC5nZXQoMCkpLAorICAgICAgICAgIG1SZXBvcnRTaXplKGdsb2JhbC5yZXBvcnRTaXplKSwKKyAgICAgICAgICBtUmVwb3J0Q291bnQoZ2xvYmFsLnJlcG9ydENvdW50KSwKKyAgICAgICAgICBtUGh5c2ljYWxNaW4oZ2xvYmFsLnBoeXNpY2FsTWluKSwKKyAgICAgICAgICBtUGh5c2ljYWxNYXgoZ2xvYmFsLnBoeXNpY2FsTWF4KSwKKyAgICAgICAgICBtRXhwb25lbnQoZ2xvYmFsLmV4cG9uZW50KSwKKyAgICAgICAgICBtVW5pdChnbG9iYWwudW5pdCksCisgICAgICAgICAgbVJlcG9ydElkKGdsb2JhbC5yZXBvcnRJZCkgeyB9CisKK3N0ZDo6c3RyaW5nIEhpZFJlcG9ydDo6Z2V0U3RyaW5nVHlwZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gcmVwb3J0VHlwZVRvU3RyaW5nKG1SZXBvcnRUeXBlKTsKK30KKworc3RkOjpzdHJpbmcgSGlkUmVwb3J0OjpyZXBvcnRUeXBlVG9TdHJpbmcoaW50IHR5cGUpIHsKKyAgICB1c2luZyBuYW1lc3BhY2UgSGlkRGVmOjpNYWluVGFnOworICAgIHN3aXRjaCh0eXBlKSB7CisgICAgICAgIGNhc2UgSU5QVVQ6CisgICAgICAgICAgICByZXR1cm4gIklOUFVUIjsKKyAgICAgICAgY2FzZSBPVVRQVVQ6CisgICAgICAgICAgICByZXR1cm4gIk9VVFBVVCI7CisgICAgICAgIGNhc2UgRkVBVFVSRToKKyAgICAgICAgICAgIHJldHVybiAiRkVBVFVSRSI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gIjw8VU5LTk9XTj4+IjsKKyAgICB9Cit9CisKK2RvdWJsZSBIaWRSZXBvcnQ6OmdldEV4cG9uZW50VmFsdWUoKSBjb25zdCB7CisgICAgaWYgKCFtRXhwb25lbnQuaXNTZXQoKSkgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgLy8gZGVmYXVsdCBleHBvbmVudCBpcyAwCisgICAgaW50IGV4cG9uZW50SW50ID0gbUV4cG9uZW50LmdldCgwKTsKKyAgICBpZiAoZXhwb25lbnRJbnQgPiAxNSB8fCBleHBvbmVudEludCA8IDApIHsKKyAgICAgICAgcmV0dXJuIE5BTjsKKyAgICB9CisgICAgcmV0dXJuIHBvdygxMC4wLCBzdGF0aWNfY2FzdDxkb3VibGU+KChleHBvbmVudEludCA8PSA3KSA/IGV4cG9uZW50SW50IDogZXhwb25lbnRJbnQgLSAxNikpOworfQorCitzdGQ6OnN0cmluZyBIaWRSZXBvcnQ6OmdldEV4cG9uZW50U3RyaW5nKCkgY29uc3QgeworICAgIGludCBleHBvbmVudEludCA9IG1FeHBvbmVudC5nZXQoMCk7CisgICAgaWYgKGV4cG9uZW50SW50ID4gMTUgfHwgZXhwb25lbnRJbnQgPCAwKSB7CisgICAgICAgIHJldHVybiAiW2Vycm9yXSI7CisgICAgfQorICAgIHJldHVybiBzdGQ6OnN0cmluZygieDEwXiIpCisgICAgICAgICAgICArIHN0ZDo6dG9fc3RyaW5nKChleHBvbmVudEludCA8PSA3KSA/IGV4cG9uZW50SW50IDogZXhwb25lbnRJbnQgLSAxNik7Cit9CisKK3N0ZDo6c3RyaW5nIEhpZFJlcG9ydDo6Z2V0VW5pdFN0cmluZygpIGNvbnN0IHsKKyAgICBpZiAoIW1Vbml0LmlzU2V0KCkpIHsKKyAgICAgICAgcmV0dXJuICJkZWZhdWx0IjsKKyAgICB9CisgICAgcmV0dXJuICJbbm90IGltcGxlbWVudGVkXSI7CisKKyAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gcmV0OworICAgIHJldCA8PCBzdGQ6OmhleCA8PCBzdGQ6OnNldGZpbGwoJzAnKSA8PCBzdGQ6OnNldHcoMikgPDwgbVVuaXQuZ2V0KDApOworICAgIHJldHVybiByZXQuc3RyKCk7Cit9CisKK3N0ZDo6c3RyaW5nIEhpZFJlcG9ydDo6Z2V0RmxhZ1N0cmluZygpIGNvbnN0IHsKKyAgICB1c2luZyBuYW1lc3BhY2UgSGlkRGVmOjpSZXBvcnRGbGFnOworICAgIHN0ZDo6c3RyaW5nIHJldDsKKyAgICByZXQgKz0gKG1GbGFnICYgREFUQV9DT05TVCkgPyAiQ29uc3QgIiA6ICJEYXRhICI7CisgICAgcmV0ICs9IChtRmxhZyAmIEFSUkFZX1ZBUklBQkxFKSA/ICJWYXJpYWJsZSAiIDogIkFycmF5ICI7CisgICAgcmV0ICs9IChtRmxhZyAmIFdSQVApID8gIldyYXAgIiA6ICIiOworICAgIHJldCArPSAobUZsYWcgJiBOT05MSU5FQVIpID8gIk5vbmxpbmVhciAiIDogIiI7CisgICAgcmV0ICs9IChtRmxhZyAmIE5PX1BSRUZFUlJFRCkgPyAiTm9QcmVmZXJyZWQgIiA6ICIiOworICAgIHJldCArPSAobUZsYWcgJiBOVUxMX1NUQVRFKSA/ICJOdWxsU3RhdGUgIiA6ICIiOworICAgIHJldCArPSAobUZsYWcgJiBWT0xBVElMRSkgPyAiVm9sYXRpbGUgIiA6ICIiOworICAgIHJldCArPSAobUZsYWcgJiBCVUZGRVJFRF9CWVRFUykgPyAiQnVmZmVyZWRCeXRlcyAiIDogIiI7CisgICAgcmV0dXJuIHJldDsKK30KKworLy8gaXNBcnJheSgpIHdpbGwgcmV0dXJuIHRydWUgZm9yIHJlcG9ydHMgdGhhdCBtYXkgY29udGFpbnMgbXVsdGlwbGUgdmFsdWVzLCBlLmcuIGtleWJvYXJkIHNjYW4KKy8vIGNvZGUsIHdoaWNoIGNhbiBoYXZlIG11bHRpcGxlIHZhbHVlLCBlYWNoIGRlbm90aW5nIGEga2V5IHByZXNzZWQgZG93biBhdCB0aGUgc2FtZSB0aW1lLiBJdCB3aWxsCisvLyByZXR1cm4gZmFsc2UgaWYgcmVwb3IgcmVwcmVzZW50IGEgdmVjdG9yIG9yIG1hdHJpeC4KKy8vCisvLyBUaGlzIHNsaWdodGx5IGRldmlhdGVzIGZyb20gSElEJ3MgZGVmaW5pdGlvbiwgaXQgaXMgbW9yZSBjb252ZW5pZW50IHRoaXMgd2F5IGFzIG1hdHJpeC92ZWN0b3IKKy8vIGlucHV0IGlzIHRyZWF0ZWQgc2ltaWxhcmx5IGFzIHZhcmlhYmxlcy4KK2Jvb2wgSGlkUmVwb3J0Ojppc0FycmF5KCkgY29uc3QgeworICAgIHVzaW5nIG5hbWVzcGFjZSBIaWREZWY6OlJlcG9ydEZsYWc7CisgICAgcmV0dXJuIChtRmxhZyAmIEFSUkFZX1ZBUklBQkxFKSA9PSAwICYmIG1Jc0NvbGxhcHNlZDsKK30KKworYm9vbCBIaWRSZXBvcnQ6OmlzVmFyaWFibGUoKSBjb25zdCB7CisgICAgcmV0dXJuICFpc0FycmF5KCk7Cit9CisKK2Jvb2wgSGlkUmVwb3J0Ojppc0RhdGEoKSBjb25zdCB7CisgICAgdXNpbmcgbmFtZXNwYWNlIEhpZERlZjo6UmVwb3J0RmxhZzsKKyAgICByZXR1cm4gKG1GbGFnICYgREFUQV9DT05TVCkgPT0gMDsKK30KKworc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEhpZFJlcG9ydCYgaCkgeworICAgIG9zIDw8IGguZ2V0U3RyaW5nVHlwZSgpIDw8ICIsICIKKyAgICAgICA8PCAidXNhZ2U6ICIgPDwgc3RkOjpoZXggPDwgaC5nZXRGdWxsVXNhZ2UoKSA8PCBzdGQ6OmRlYyA8PCAiLCAiOworCisgICAgaWYgKGguaXNEYXRhKCkpIHsKKyAgICAgICAgYXV0byByYW5nZSA9IGguZ2V0TG9naWNhbFJhbmdlKCk7CisgICAgICAgIG9zIDw8ICJsb2dNaW46ICIgPDwgcmFuZ2UuZmlyc3QgPDwgIiwgIgorICAgICAgICAgICA8PCAibG9nTWF4OiAiIDw8IHJhbmdlLnNlY29uZCA8PCAiLCAiOworCisgICAgICAgIGlmIChyYW5nZSA9PSBoLmdldFBoeXNpY2FsUmFuZ2UoKSkgeworICAgICAgICAgICAgb3MgPDwgInBoeT09PWxvZywgIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJhbmdlID0gaC5nZXRQaHlzaWNhbFJhbmdlKCk7CisgICAgICAgICAgICBvcyA8PCAicGh5TWluOiAiIDw8IHJhbmdlLmZpcnN0IDw8ICIsICIKKyAgICAgICAgICAgICAgIDw8ICJwaHlNYXg6ICIgPDwgcmFuZ2Uuc2Vjb25kIDw8ICIsICI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaC5pc0FycmF5KCkpIHsKKyAgICAgICAgICAgIG9zIDw8ICJtYXA6ICgiIDw8IHN0ZDo6aGV4OworICAgICAgICAgICAgZm9yIChhdXRvIGkgOiBoLmdldFVzYWdlVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICBvcyA8PCBpIDw8ICIsIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9zIDw8ICIpLCAiIDw8IHN0ZDo6ZGVjOworICAgICAgICB9CisKKyAgICAgICAgb3MgPDwgImV4cG9uZW50OiAiIDw8IGguZ2V0RXhwb25lbnRTdHJpbmcoKSA8PCAiLCAiCisgICAgICAgICAgIDw8ICJ1bml0OiAiIDw8IGguZ2V0VW5pdFN0cmluZygpIDw8ICIsICI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgb3MgPDwgImNvbnN0YW50OiAiOworICAgIH0KKyAgICBvcyA8PCAic2l6ZTogIiA8PCBoLmdldFNpemUoKSA8PCAiYml0IHggIiA8PCBoLmdldENvdW50KCkgPDwgIiwgIgorICAgICAgIDw8ICJpZDogIiA8PCBoLm1SZXBvcnRJZDsKKworICAgIHJldHVybiBvczsKK30KKworc3RkOjpwYWlyPGludDY0X3QsIGludDY0X3Q+IEhpZFJlcG9ydDo6Z2V0TG9naWNhbFJhbmdlKCkgY29uc3QgeworICAgIGludDY0X3QgYSA9IG1Mb2dpY2FsTWluOworICAgIGludDY0X3QgYiA9IG1Mb2dpY2FsTWF4OworCisgICAgaWYgKGEgPiBiKSB7CisgICAgICAgIC8vIG1pZ2h0IGJlIHVuc2lnbmVkCisgICAgICAgIGEgPSBhICYgKChzdGF0aWNfY2FzdDxpbnQ2NF90PigxKSA8PCBnZXRTaXplKCkpIC0gMSk7CisgICAgICAgIGIgPSBiICYgKChzdGF0aWNfY2FzdDxpbnQ2NF90PigxKSA8PCBnZXRTaXplKCkpIC0gMSk7CisgICAgICAgIGlmIChhID4gYikgeworICAgICAgICAgICAgLy8gYmFkIGhpZCBkZXNjcmlwdG9yCisgICAgICAgICAgICByZXR1cm4gezAsIDB9OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB7YSwgYn07Cit9CisKK3N0ZDo6cGFpcjxpbnQ2NF90LCBpbnQ2NF90PiBIaWRSZXBvcnQ6OmdldFBoeXNpY2FsUmFuZ2UoKSBjb25zdCB7CisgICAgaWYgKCEobVBoeXNpY2FsTWluLmlzU2V0KCkgJiYgbVBoeXNpY2FsTWF4LmlzU2V0KCkpKSB7CisgICAgICAgIC8vIHBoeXNpY2FsIHJhbmdlIHVuZGVmaW5lZCwgdXNlIGxvZ2ljYWwgcmFuZ2UKKyAgICAgICAgcmV0dXJuIGdldExvZ2ljYWxSYW5nZSgpOworICAgIH0KKworICAgIGludDY0X3QgYSA9IG1QaHlzaWNhbE1pbi5nZXQoMCk7CisgICAgaW50NjRfdCBiID0gbVBoeXNpY2FsTWF4LmdldCgwKTsKKworICAgIGlmIChhID4gYikgeworICAgICAgICBhID0gYSAmICgoc3RhdGljX2Nhc3Q8aW50NjRfdD4oMSkgPDwgZ2V0U2l6ZSgpKSAtIDEpOworICAgICAgICBiID0gYiAmICgoc3RhdGljX2Nhc3Q8aW50NjRfdD4oMSkgPDwgZ2V0U2l6ZSgpKSAtIDEpOworICAgICAgICBpZiAoYSA+IGIpIHsKKyAgICAgICAgICAgIHJldHVybiB7MCwgMH07CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHthLCBifTsKK30KKwordW5zaWduZWQgaW50IEhpZFJlcG9ydDo6Z2V0RnVsbFVzYWdlKCkgY29uc3QgeworICAgIHJldHVybiBtVXNhZ2UgfCAobVVzYWdlUGFnZSA8PCAxNik7Cit9CisKK3NpemVfdCBIaWRSZXBvcnQ6OmdldFNpemUoKSBjb25zdCB7CisgICAgcmV0dXJuIG1SZXBvcnRTaXplOworfQorCitzaXplX3QgSGlkUmVwb3J0OjpnZXRDb3VudCgpIGNvbnN0IHsKKyAgICByZXR1cm4gbVJlcG9ydENvdW50OworfQorCit1bnNpZ25lZCBpbnQgSGlkUmVwb3J0OjpnZXRVbml0KCkgY29uc3QgeworICAgIHJldHVybiBtVW5pdC5nZXQoMCk7IC8vIGRlZmF1bHQgdW5pdCBpcyAwIG1lYW5zIGRlZmF1bHQgdW5pdAorfQorCit1bnNpZ25lZCBIaWRSZXBvcnQ6OmdldFJlcG9ydElkKCkgY29uc3QgeworICAgIC8vIGlmIHJlcG9ydCBpZCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byB6ZXJvCisgICAgcmV0dXJuIG1SZXBvcnRJZC5nZXQoMCk7Cit9CisKK3Vuc2lnbmVkIEhpZFJlcG9ydDo6Z2V0VHlwZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gbVJlcG9ydFR5cGU7Cit9CisKK3ZvaWQgSGlkUmVwb3J0OjpzZXRDb2xsYXBzZWQodWludDMyX3QgZnVsbFVzYWdlKSB7CisgICAgbVVzYWdlID0gZnVsbFVzYWdlICYgMHhGRkZGOworICAgIG1Vc2FnZVBhZ2UgPSBmdWxsVXNhZ2UgPj4gMTY7CisgICAgbUlzQ29sbGFwc2VkID0gdHJ1ZTsKK30KKworY29uc3Qgc3RkOjp2ZWN0b3I8dW5zaWduZWQgaW50PiYgSGlkUmVwb3J0OjpnZXRVc2FnZVZlY3RvcigpIGNvbnN0IHsKKyAgICByZXR1cm4gbVVzYWdlVmVjdG9yOworfQorfSAvLyBuYW1lc3BhY2UgSGlkVXRpbApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZFJlcG9ydC5oIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZFJlcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMDFiNjgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkUmVwb3J0LmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2lmbmRlZiBISURVVElMX0hJRFJFUE9SVF9IXworI2RlZmluZSBISURVVElMX0hJRFJFUE9SVF9IXworCisjaW5jbHVkZSAiSGlkR2xvYmFsLmgiCisjaW5jbHVkZSAiSGlkTG9jYWwuaCIKKyNpbmNsdWRlICJUcmlTdGF0ZS5oIgorI2luY2x1ZGUgPGNzdGRpbnQ+CisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPHV0aWxpdHk+CisKK25hbWVzcGFjZSBIaWRVdGlsIHsKKworY2xhc3MgSGlkUGFyc2VyOworY2xhc3MgSGlkVHJlZU5vZGU7CisKKy8vIEhpZFJlcG9ydCByZXByZXNlbnQgYW4gaW5wdXQsIG91dHB1dCBvciBmZWF0dXJlIHJlcG9ydAorY2xhc3MgSGlkUmVwb3J0IHsKKyAgICBmcmllbmQgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEhpZFJlcG9ydCYgaCk7CitwdWJsaWM6CisgICAgSGlkUmVwb3J0KHVpbnQzMl90IHR5cGVfLCB1aW50MzJfdCBkYXRhLCBjb25zdCBIaWRHbG9iYWwgJmdsb2JhbCwgY29uc3QgSGlkTG9jYWwgJmxvY2FsKTsKKworICAgIC8vIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBwYXJzaW5nIHByb2Nlc3Mgd2hlbiB0aGUgcGFyc2VyIHJlZ3JvdXBzIG11bHRpLXZhbHVlZCByZXBvcnQgaW50byBvbmUKKyAgICB2b2lkIHNldENvbGxhcHNlZCh1aW50MzJfdCBmdWxsVXNhZ2UpOworCisgICAgLy8gZ2V0IHJlcG9ydCBpZAorICAgIHVuc2lnbmVkIGludCBnZXRSZXBvcnRJZCgpIGNvbnN0OworICAgIC8vIGdldCB0eXBlIG9mIHJlcG9ydCwgcmV0dXJuIGNvbnN0YW50IG9mIEhpZERlZjo6TWFpblRhZworICAgIHVuc2lnbmVkIGludCBnZXRUeXBlKCkgY29uc3Q7CisgICAgLy8gRnVsbCBzZW5zb3IgdXNhZ2UKKyAgICB1bnNpZ25lZCBpbnQgZ2V0RnVsbFVzYWdlKCkgY29uc3Q7CisKKyAgICAvLyBiaW5hcnkgcHJvcGVydGllcworICAgIGJvb2wgaXNBcnJheSgpIGNvbnN0OworICAgIGJvb2wgaXNEYXRhKCkgY29uc3Q7CisgICAgYm9vbCBpc1ZhcmlhYmxlKCkgY29uc3Q7CisKKyAgICAvLyBsb2dpY2FsIGFuZCBwaHlzaWNhbCB2YWx1ZSByYW5nZQorICAgIHN0ZDo6cGFpcjxpbnQ2NF90LCBpbnQ2NF90PiBnZXRMb2dpY2FsUmFuZ2UoKSBjb25zdDsKKyAgICBzdGQ6OnBhaXI8aW50NjRfdCwgaW50NjRfdD4gZ2V0UGh5c2ljYWxSYW5nZSgpIGNvbnN0OworICAgIGRvdWJsZSBnZXRFeHBvbmVudFZhbHVlKCkgY29uc3Q7CisKKyAgICAvLyByZXR1cm4gSElEIHVuaXQgbmliYmxlcyBpbiBhbiB1bnNpZ25lZCBpbnQKKyAgICB1bnNpZ25lZCBpbnQgZ2V0VW5pdCgpIGNvbnN0OworCisgICAgLy8gc2l6ZSBpbiBiaXRzCisgICAgc2l6ZV90IGdldFNpemUoKSBjb25zdDsKKyAgICAvLyBkaW1lbnNpb24gKGlmIGl0IGlzIHZlY3Rvci9tYXRyaXgpIG9yIG51bWJlciBvZiBjb25jdXJyZW50IGlucHV0IHZhbHVlcworICAgIC8vIGl0IGlzIGFsc28gdXNlZCB0byBjYWxjdWxhdGUgbWVtb3J5IGZvb3QgcHJpbnQKKyAgICBzaXplX3QgZ2V0Q291bnQoKSBjb25zdDsKKworICAgIC8vIGZvciBvdXRwdXQgdG8gc3RyZWFtCisgICAgc3RhdGljIHN0ZDo6c3RyaW5nIHJlcG9ydFR5cGVUb1N0cmluZyhpbnQgdHlwZSk7CisgICAgc3RkOjpzdHJpbmcgZ2V0U3RyaW5nVHlwZSgpIGNvbnN0OworICAgIHN0ZDo6c3RyaW5nIGdldEV4cG9uZW50U3RyaW5nKCkgY29uc3Q7CisgICAgc3RkOjpzdHJpbmcgZ2V0VW5pdFN0cmluZygpIGNvbnN0OworICAgIHN0ZDo6c3RyaW5nIGdldEZsYWdTdHJpbmcoKSBjb25zdDsKKyAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBpbnQ+JiBnZXRVc2FnZVZlY3RvcigpIGNvbnN0OworcHJpdmF0ZToKKyAgICBib29sIG1Jc0NvbGxhcHNlZDsKKworICAgIC8vIG1hbmRhdGFyeSBmaWVsZHMKKyAgICB1bnNpZ25lZCBpbnQgbVJlcG9ydFR5cGU7CisgICAgdW5zaWduZWQgaW50IG1GbGFnOworICAgIHVuc2lnbmVkIGludCBtVXNhZ2VQYWdlOworICAgIHVuc2lnbmVkIGludCBtVXNhZ2U7CisgICAgc3RkOjp2ZWN0b3I8dW5zaWduZWQgaW50PiBtVXNhZ2VWZWN0b3I7CisKKyAgICBpbnQgbUxvZ2ljYWxNaW47ICAgICAgICAvLyAzMiBiaXQgaXMgZW5vdWdoCisgICAgaW50IG1Mb2dpY2FsTWF4OworICAgIHVuc2lnbmVkIGludCBtUmVwb3J0U2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgbVJlcG9ydENvdW50OworCisgICAgLy8gdGhlc2UgYmVsb3cgYXJlIG9wdGlvbmFsCisgICAgdHJpX2ludCBtUGh5c2ljYWxNaW47CisgICAgdHJpX2ludCBtUGh5c2ljYWxNYXg7CisKKyAgICB0cmlfdWludCBtRXhwb25lbnQ7CisgICAgdHJpX3VpbnQgbVVuaXQ7CisgICAgdHJpX3VpbnQgbVJlcG9ydElkOworfTsKKworc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEhpZFJlcG9ydCYgaCk7Cit9IC8vIG5hbWVzcGFjZSBIaWRVdGlsCisjZW5kaWYgLy8gSElEVVRJTF9ISURSRVBPUlRfSF8KZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRUcmVlLmNwcCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRUcmVlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjA0MTM1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZFRyZWUuY3BwCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpbmNsdWRlICJIaWREZWZzLmgiCisjaW5jbHVkZSAiSGlkTG9nLmgiCisjaW5jbHVkZSAiSGlkVHJlZS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKworbmFtZXNwYWNlIEhpZFV0aWwgeworCisvLyBIaWRUcmVlTm9kZQorSGlkVHJlZU5vZGU6OkhpZFRyZWVOb2RlKCkgOiBtTm9kZVR5cGUoVFlQRV9VTklOSVRJQUxJWkVEKSwgbURhdGEoMCksIG1GdWxsVXNhZ2UoMCkgeworfQorCitIaWRUcmVlTm9kZTo6SGlkVHJlZU5vZGUoc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiBwYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZGF0YSwgdWludDMyX3QgZnVsbFVzYWdlLCBpbnQgbm9kZVR5cGUpCisgICAgICAgIDogbU5vZGVUeXBlKG5vZGVUeXBlKSwgbURhdGEoZGF0YSksCisgICAgICAgIG1GdWxsVXNhZ2UoZnVsbFVzYWdlKSwgbVBhcmVudChwYXJlbnQpIHsKK30KKworSGlkVHJlZU5vZGU6OkhpZFRyZWVOb2RlKHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gcGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRhdGEsIHVpbnQzMl90IGZ1bGxVc2FnZSkKKyAgICAgICAgOiBtTm9kZVR5cGUoVFlQRV9OT1JNQUwpLCBtRGF0YShkYXRhKSwKKyAgICAgICAgbUZ1bGxVc2FnZShmdWxsVXNhZ2UpLCBtUGFyZW50KHBhcmVudCkgeworfQorCit2b2lkIEhpZFRyZWVOb2RlOjpvdXRwdXRSZWN1cnNpdmUoc3RkOjpvc3RyZWFtICZvcywgaW50IGxldmVsKSBjb25zdCB7CisgICAgaW5zZXJ0SW5kZW50YXRpb24ob3MsIGxldmVsKTsKKyAgICBvcyA8PCAiTm9kZSBkYXRhOiAiIDw8IG1EYXRhCisgICAgICAgPDwgIiwgdXNhZ2UgIiA8PCBzdGQ6OmhleCA8PCBtRnVsbFVzYWdlIDw8IHN0ZDo6ZGVjIDw8IExPR19FTkRMOworCisgICAgZm9yIChhdXRvICZjaGlsZCA6IG1DaGlsZHJlbikgeworICAgICAgICBjaGlsZC0+b3V0cHV0UmVjdXJzaXZlKG9zLCBsZXZlbCArIDEpOworICAgIH0KK30KKworc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiBIaWRUcmVlTm9kZTo6ZGVlcENvcHkoCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gcGFyZW50KSBjb25zdCB7CisgICAgc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiBjb3B5KG5ldyBIaWRUcmVlTm9kZShwYXJlbnQsIG1EYXRhLCBtRnVsbFVzYWdlLCBtTm9kZVR5cGUpKTsKKyAgICBmb3IgKGF1dG8gJmkgOiBtQ2hpbGRyZW4pIHsKKyAgICAgICAgY29weS0+bUNoaWxkcmVuLnB1c2hfYmFjayhpLT5kZWVwQ29weShjb3B5KSk7CisgICAgfQorICAgIHJldHVybiBjb3B5OworfQorCit2b2lkIEhpZFRyZWVOb2RlOjppbnNlcnRJbmRlbnRhdGlvbihzdGQ6Om9zdHJlYW0gJm9zLCBpbnQgbGV2ZWwpIGNvbnN0IHsKKyAgICBjb25zdGV4cHIgY2hhciBpbmRlbnRDaGFyYWN0ZXIgPSAnXHQnOworICAgIHN0ZDo6ZmlsbF9uKHN0ZDo6b3N0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPihvcyksIGxldmVsLCBpbmRlbnRDaGFyYWN0ZXIpOworfQorCitzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IEhpZFRyZWVOb2RlOjphZGRDaGlsZChzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IGNoaWxkKSB7CisgICAgbUNoaWxkcmVuLnB1c2hfYmFjayhjaGlsZCk7CisgICAgcmV0dXJuIGNoaWxkOworfQorCitzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IEhpZFRyZWVOb2RlOjpnZXRQYXJlbnQoKSBjb25zdCB7CisgICAgcmV0dXJuIG1QYXJlbnQubG9jaygpOworfQorCitib29sIEhpZFRyZWVOb2RlOjppc1JlcG9ydENvbGxlY3Rpb24oKSBjb25zdCB7CisgICAgcmV0dXJuIG1Ob2RlVHlwZSA9PSBUWVBFX05PUk1BTCAmJiBtQ2hpbGRyZW4uc2l6ZSgpID09IDEKKyAgICAgICAgICAgICYmIG1DaGlsZHJlbi5mcm9udCgpLT5tTm9kZVR5cGUgPT0gVFlQRV9SRVBPUlQ7Cit9CisKK3Vuc2lnbmVkIGludCBIaWRUcmVlTm9kZTo6Z2V0RnVsbFVzYWdlKCkgY29uc3QgeworICAgIHJldHVybiBtRnVsbFVzYWdlOworfQorCitzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+PiYgSGlkVHJlZU5vZGU6OmdldENoaWxkcmVuKCkgeworICAgIHJldHVybiBtQ2hpbGRyZW47Cit9CisKK2NvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4+JiBIaWRUcmVlTm9kZTo6Z2V0Q2hpbGRyZW4oKSBjb25zdCB7CisgICAgcmV0dXJuIG1DaGlsZHJlbjsKK30KKworYm9vbCBIaWRUcmVlTm9kZTo6aXNVc2FnZUNvbGxlY3Rpb24oKSBjb25zdCB7CisgICAgdXNpbmcgbmFtZXNwYWNlIEhpZERlZjo6Q29sbGVjdGlvblR5cGU7CisgICAgcmV0dXJuIG1Ob2RlVHlwZSA9PSBUWVBFX05PUk1BTCAmJiAobURhdGEgPT0gUEhZU0lDQUwgfHwgbURhdGEgPT0gQVBQTElDQVRJT04pOworfQorCitpbnQgSGlkVHJlZU5vZGU6OmdldE5vZGVUeXBlKCkgY29uc3QgeworICAgIHJldHVybiBtTm9kZVR5cGU7Cit9CisKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBIaWRUcmVlTm9kZSYgbikgeworICAgIG4ub3V0cHV0UmVjdXJzaXZlKG9zLCAwKTsKKyAgICByZXR1cm4gb3M7Cit9CisKKy8vIEhpZFJlcG9ydE5vZGUKK0hpZFJlcG9ydE5vZGU6OkhpZFJlcG9ydE5vZGUoc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiBwYXJlbnQsIGNvbnN0IEhpZFJlcG9ydCAmcmVwb3J0KQorICAgIDogSGlkVHJlZU5vZGUocGFyZW50LCAwIC8qZGF0YSovLCAwIC8qZnVsbFVzYWdlKi8sIFRZUEVfUkVQT1JUKSwgbVJlcG9ydChyZXBvcnQpIHsKK30KKwordm9pZCBIaWRSZXBvcnROb2RlOjpvdXRwdXRSZWN1cnNpdmUoc3RkOjpvc3RyZWFtICZvcywgaW50IGxldmVsKSBjb25zdCB7CisgICAgaW5zZXJ0SW5kZW50YXRpb24ob3MsIGxldmVsKTsKKyAgICBvcyA8PCBtUmVwb3J0IDw8IExPR19FTkRMOworfQorCitzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IEhpZFJlcG9ydE5vZGU6OmRlZXBDb3B5KAorICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IHBhcmVudCkgY29uc3QgeworICAgIHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gY29weShuZXcgSGlkUmVwb3J0Tm9kZShwYXJlbnQsIG1SZXBvcnQpKTsKKyAgICByZXR1cm4gY29weTsKK30KKworY29uc3QgSGlkUmVwb3J0JiBIaWRSZXBvcnROb2RlOjpnZXRSZXBvcnQoKSBjb25zdCB7CisgICAgcmV0dXJuIG1SZXBvcnQ7Cit9CisKK3ZvaWQgSGlkUmVwb3J0Tm9kZTo6Y29sbGFwc2UodW5zaWduZWQgaW50IG5ld1VzYWdlKSB7CisgICAgbVJlcG9ydC5zZXRDb2xsYXBzZWQobmV3VXNhZ2UpOworfQorCit9IC8vbmFtZXNwYWNlIEhpZFV0aWwKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRUcmVlLmggYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkVHJlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NTIwMDcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkVHJlZS5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpZm5kZWYgSElEVVRJTF9ISURUUkVFX0hfCisjZGVmaW5lIEhJRFVUSUxfSElEVFJFRV9IXworCisjaW5jbHVkZSAiSGlkUmVwb3J0LmgiCisKKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKworbmFtZXNwYWNlIEhpZFV0aWwgeworCisvLyBISUQgcmVwb3J0IHBhcnNlciBvdXRwdXQgdHJlZSBub2RlCitjbGFzcyBIaWRUcmVlTm9kZSB7CisgICAgZnJpZW5kIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBIaWRUcmVlTm9kZSYgbik7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIFRZUEVfVU5JTklUSUFMSVpFRCA9IDAsCisgICAgICAgIFRZUEVfTk9STUFMID0gMSwKKyAgICAgICAgVFlQRV9SRVBPUlQgPSAyICAgICAvLyBjYW4gYmUgY2FzdCB0byBIaWRSZXBvcnROb2RlCisgICAgfTsKKyAgICBIaWRUcmVlTm9kZSgpOworICAgIEhpZFRyZWVOb2RlKHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gcGFyZW50LCB1aW50MzJfdCBkYXRhLCB1aW50MzJfdCBmdWxsVXNhZ2UpOworCisgICAgdmlydHVhbCB+SGlkVHJlZU5vZGUoKSA9IGRlZmF1bHQ7CisKKyAgICAvLyBtYWtlIGEgZGVlcCBjb3B5IG9mIHRyZWUgYXQgYW5kIGJlbG93IHRoaXMgbm9kZSBhbmQgYXR0YWNoIGl0IHRvIHNwZWNpZmllZCBwYXJlbnQgbm9kZQorICAgIHZpcnR1YWwgc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiBkZWVwQ29weSgKKyAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IHBhcmVudCA9IG51bGxwdHIpIGNvbnN0OworCisgICAgLy8gYWRkIGNoaWxkIHRvIHRoaXMgbm9kZQorICAgIHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gYWRkQ2hpbGQoc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiBjaGlsZCk7CisKKyAgICAvLyBnZXQgYWxsIGNoaWxkcmVuIG9mIGEgbm9kZQorICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4+JiBnZXRDaGlsZHJlbigpOworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4+JiBnZXRDaGlsZHJlbigpIGNvbnN0OworCisgICAgLy8gZ2V0IHBhcmVudCAobnVsbHB0ciBpZiBpdCBpcyByb290IG5vZGUgb3IgaWYgbG9jayB3ZWFrX3B0ciBmYWlsZWQpCisgICAgc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiBnZXRQYXJlbnQoKSBjb25zdDsKKworICAgIC8vIGFjY2VzcyB1c2FnZSBvZiB0aGlzIG5vZGUKKyAgICB1bnNpZ25lZCBpbnQgZ2V0RnVsbFVzYWdlKCkgY29uc3Q7CisKKyAgICBib29sIGlzUmVwb3J0Q29sbGVjdGlvbigpIGNvbnN0OworICAgIGJvb2wgaXNVc2FnZUNvbGxlY3Rpb24oKSBjb25zdDsKKyAgICBpbnQgZ2V0Tm9kZVR5cGUoKSBjb25zdDsKK3Byb3RlY3RlZDoKKyAgICAvLyBmb3IgZGVyaXZlZCBjbGFzcyB0byBkZWZpbmUgZGlmZmVyZW50IG5vZGVUeXBlCisgICAgSGlkVHJlZU5vZGUoc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiBwYXJlbnQsCisgICAgICAgICAgICAgIHVpbnQzMl90IGRhdGEsIHVpbnQzMl90IGZ1bGxVc2FnZSwgaW50IG5vZGVUeXBlKTsKKworICAgIC8vIGhlbHBlciBmb3Igc3RyZWFtIG91dHB1dAorICAgIHZvaWQgaW5zZXJ0SW5kZW50YXRpb24oc3RkOjpvc3RyZWFtICZvcywgaW50IGxldmVsKSBjb25zdDsKK3ByaXZhdGU6CisgICAgLy8gaGVscGVyIGZvciBzdHJlYW0gb3V0cHV0CisgICAgdmlydHVhbCB2b2lkIG91dHB1dFJlY3Vyc2l2ZShzdGQ6Om9zdHJlYW0mIG9zLCBpbnQgbGV2ZWwpIGNvbnN0OworCisgICAgaW50IG1Ob2RlVHlwZTsKKyAgICB1aW50MzJfdCBtRGF0YTsKKyAgICB1aW50MzJfdCBtRnVsbFVzYWdlOworCisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPj4gbUNoaWxkcmVuOworICAgIHN0ZDo6d2Vha19wdHI8SGlkVHJlZU5vZGU+IG1QYXJlbnQ7Cit9OworCisvLyBUcmVlIG5vZGUgdGhhdCBjb3JyZXNwb25kcyB0byBhbiBpbnB1dCwgb3V0cHV0IG9yIGZlYXR1cmUgcmVwb3J0CitjbGFzcyBIaWRSZXBvcnROb2RlIDogcHVibGljIEhpZFRyZWVOb2RlIHsKK3B1YmxpYzoKKyAgICBIaWRSZXBvcnROb2RlKHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gcGFyZW50LCBjb25zdCBIaWRSZXBvcnQgJnJlcG9ydCk7CisKKyAgICB2aXJ0dWFsIHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gZGVlcENvcHkoCisgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiBwYXJlbnQgPSBudWxscHRyKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIG9idGFpbiBIaWRSZXBvcnQgYXR0YWNoZWQgdG8gdGhpcyBub2RlCisgICAgY29uc3QgSGlkUmVwb3J0JiBnZXRSZXBvcnQoKSBjb25zdDsKKworICAgIC8vIHJlc2V0IHVzYWdlIG9mIG5vZGUgYW5kIHNldCB1bmRlcmx5aW5nIHJlcG9ydCB0byBjb2xsYXBzZWQKKyAgICB2b2lkIGNvbGxhcHNlKHVuc2lnbmVkIGludCBuZXdVc2FnZSk7Citwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBvdXRwdXRSZWN1cnNpdmUoc3RkOjpvc3RyZWFtICZvcywgaW50IGxldmVsKSBjb25zdCBvdmVycmlkZTsKKworICAgIEhpZFJlcG9ydCBtUmVwb3J0OworfTsKKworc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEhpZFRyZWVOb2RlJiBuKTsKKworfSAvLyBuYW1lc3BhY2UgSGlkVXRpbAorCisjZW5kaWYgLy8gSElEVVRJTF9ISURUUkVFX0hfCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvU3RyZWFtSW9VdGlsLmggYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvU3RyZWFtSW9VdGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVhOTRiNgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9TdHJlYW1Jb1V0aWwuaApAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaWZuZGVmIEhJRFVUSUxfU1RSRUFNX0lPX1VUSUxfSF8KKyNkZWZpbmUgSElEVVRJTF9TVFJFQU1fSU9fVVRJTF9IXworCisjaW5jbHVkZSAiSGlkTG9nLmgiCisjaW5jbHVkZSA8aXN0cmVhbT4KKyNpbmNsdWRlIDxpb21hbmlwPgorI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisKK25hbWVzcGFjZSBIaWRVdGlsIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhclQ+CitjbGFzcyBjaGFydmVjdG9yYnVmIDogcHVibGljIHN0ZDo6c3RyZWFtYnVmIHsgLy8gY2xhc3MgbmFtZSBpcyBjb25zaXN0ZW50IHdpdGggc3RkIGxpYgorICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19jb25zdDxDaGFyVD46OnZhbHVlID09IGZhbHNlLCAiY2Fubm90IHVzZSBjb25zdCB0eXBlIik7CitwdWJsaWM6CisgICAgLy8gci93IGJ1ZmZlciBjb25zdHJ1Y3RvcnMKKyAgICBjaGFydmVjdG9yYnVmKHN0ZDo6dmVjdG9yPENoYXJUPiAmdmVjKSB7CisgICAgICAgIGluaXQodmVjLmRhdGEoKSwgdmVjLnNpemUoKSk7CisgICAgfQorCisgICAgY2hhcnZlY3RvcmJ1ZihDaGFyVCAqYmVnaW4sIENoYXJUICplbmQpIHsKKyAgICAgICAgYXNzZXJ0KGVuZCA+PSBiZWdpbik7CisgICAgICAgIGluaXQoYmVnaW4sIGVuZCAtIGJlZ2luKTsKKyAgICB9CisKKyAgICBjaGFydmVjdG9yYnVmKENoYXJUICpiZWdpbiwgc2l6ZV90IHNpemUpIHsKKyAgICAgICAgaW5pdChiZWdpbiwgc2l6ZSk7CisgICAgfQorCisgICAgLy8gci9vIGJ1ZmZlciBjb25zdHJ1Y3RvcgorICAgIGNoYXJ2ZWN0b3JidWYoY29uc3Qgc3RkOjp2ZWN0b3I8Q2hhclQ+ICZ2ZWMpIHsKKyAgICAgICAgaW5pdCh2ZWMuZGF0YSgpLCB2ZWMuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBjaGFydmVjdG9yYnVmKGNvbnN0IENoYXJUICpiZWdpbiwgY29uc3QgQ2hhclQgKmVuZCkgeworICAgICAgICBhc3NlcnQoZW5kID49IGJlZ2luKTsKKyAgICAgICAgaW5pdChiZWdpbiwgZW5kIC0gYmVnaW4pOworICAgIH0KKworICAgIGNoYXJ2ZWN0b3JidWYoY29uc3QgQ2hhclQgKmJlZ2luLCBzaXplX3Qgc2l6ZSkgeworICAgICAgICBpbml0KGJlZ2luLCBzaXplKTsKKyAgICB9CisgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgc3RkOjpzdHJlYW1wb3Mgc2Vla3BvcygKKyAgICAgICAgICAgIHN0ZDo6c3RyZWFtcG9zIHNwLCBzdGQ6Omlvc19iYXNlOjpvcGVubW9kZSB3aGljaCA9CisgICAgICAgICAgICBzdGQ6Omlvc19iYXNlOjppbiB8IHN0ZDo6aW9zX2Jhc2U6Om91dCkgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4gc2Vla29mZihzdGQ6OnN0cmVhbW9mZihzcCksIHN0ZDo6aW9zX2Jhc2U6OmJlZywgd2hpY2gpOworICAgIH0KKworICAgIC8vIHRoaXMgaXMgbmVlZGVkIHRvIHVzZSBmdGVsbCgpIG9uIHN0cmVhbQorICAgIHZpcnR1YWwgc3RkOjpzdHJlYW1wb3Mgc2Vla29mZigKKyAgICAgICAgICAgIHN0ZDo6c3RyZWFtb2ZmIG9mZiwgc3RkOjppb3NfYmFzZTo6c2Vla2RpciB3YXksCisgICAgICAgICAgICBzdGQ6Omlvc19iYXNlOjpvcGVubW9kZSB3aGljaCA9CisgICAgICAgICAgICBzdGQ6Omlvc19iYXNlOjppbiB8IHN0ZDo6aW9zX2Jhc2U6Om91dCkgb3ZlcnJpZGUgeworCisgICAgICAgIC8vIHBwdHIoKSA9PSBudWxscHRyOiByZWFkLW9ubHkKKyAgICAgICAgYXNzZXJ0KHBwdHIoKSA9PSBudWxscHRyIHx8IGVncHRyKCkgLSBlYmFjaygpID09IGVwcHRyKCkgLSBwYmFzZSgpKTsKKyAgICAgICAgYm9vbCBpbiA9IHdoaWNoICYgc3RkOjppb3NfYmFzZTo6aW47CisgICAgICAgIGJvb2wgb3V0ID0gd2hpY2ggJiBzdGQ6Omlvc19iYXNlOjpvdXQ7CisgICAgICAgIHBvc190eXBlIGVuZCA9IGVncHRyKCkgLSBlYmFjaygpOworCisgICAgICAgIGlmICghaW4gJiYgIW91dCkgeworICAgICAgICAgICAgcmV0dXJuIHBvc190eXBlKC0xKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbiAmJiBvdXQgJiYgd2F5ID09IHN0ZDo6aW9zX2Jhc2U6OmN1cikgeworICAgICAgICAgICAgcmV0dXJuIHBvc190eXBlKC0xKTsKKyAgICAgICAgfQorCisgICAgICAgIG9mZl90eXBlIG5vZmY7CisgICAgICAgIHN3aXRjaCAod2F5KSB7CisgICAgICAgICAgICBjYXNlIHN0ZDo6aW9zX2Jhc2U6OmJlZzoKKyAgICAgICAgICAgICAgICBub2ZmID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ugc3RkOjppb3NfYmFzZTo6Y3VyOgorICAgICAgICAgICAgICAgIGlmIChpbikgeworICAgICAgICAgICAgICAgICAgICBub2ZmID0gZ3B0cigpIC0gZWJhY2soKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBub2ZmID0gcHB0cigpIC0gcGJhc2UoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIHN0ZDo6aW9zX2Jhc2U6OmVuZDoKKyAgICAgICAgICAgICAgICBub2ZmID0gZW5kOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gcG9zX3R5cGUoLTEpOworICAgICAgICB9CisgICAgICAgIG5vZmYgKz0gb2ZmOworICAgICAgICBpZiAobm9mZiA8IDAgfHwgIG5vZmYgPiBlbmQpIHsKKyAgICAgICAgICAgIHJldHVybiBwb3NfdHlwZSgtMSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobm9mZiAhPSAwICYmICgoaW4gJiYgZ3B0cigpID09IG51bGxwdHIpIHx8IChvdXQgJiYgcHB0cigpID09IG51bGxwdHIpKSkgeworICAgICAgICAgICAgcmV0dXJuIHBvc190eXBlKC0xKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbikgeworICAgICAgICAgICAgc2V0ZyhlYmFjaygpLCBlYmFjaygpICsgbm9mZiwgZWdwdHIoKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAob3V0KSB7CisgICAgICAgICAgICBzZXRwKHBiYXNlKCksIGVwcHRyKCkpOworICAgICAgICAgICAgcGJ1bXAobm9mZik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcG9zX3R5cGUobm9mZik7CisgICAgfQorcHJpdmF0ZToKKyAgICAvLyByZWFkIG9ubHkgYnVmZmVyIGluaXQKKyAgICB2b2lkIGluaXQoY29uc3QgQ2hhclQgKmJhc2UsIHNpemVfdCBzaXplKSB7CisgICAgICAgIHNldGcoKGNoYXIqKWJhc2UsIChjaGFyKiliYXNlLCAoY2hhciopKGJhc2UgKyBzaXplKSk7CisgICAgfQorCisgICAgLy8gcmVhZCB3cml0ZSBidWZmZXIgaW5pdAorICAgIHZvaWQgaW5pdChDaGFyVCAqYmFzZSwgc2l6ZV90IHNpemUpIHsKKyAgICAgICAgc2V0ZygoY2hhciopYmFzZSwgKGNoYXIqKWJhc2UsIChjaGFyKikoYmFzZSArIHNpemUpKTsKKyAgICAgICAgc2V0cCgoY2hhciopYmFzZSwgKGNoYXIqKShiYXNlICsgc2l6ZSkpOworICAgIH0KK307CisKKy8vIGR1bXAgYmluYXJ5IHZhbHVlcwordGVtcGxhdGUgPGNsYXNzIEZvcndhcmRJdGVyYXRvcj4KK3ZvaWQgaGV4ZHVtcFRvU3RyZWFtKHN0ZDo6b3N0cmVhbSAmb3MsIGNvbnN0IEZvcndhcmRJdGVyYXRvciAmZmlyc3QsIGNvbnN0IEZvcndhcmRJdGVyYXRvciAmbGFzdCkgeworICAgIHN0YXRpY19hc3NlcnQoCisgICAgICAgICAgICBzdGQ6OmlzX2NvbnZlcnRpYmxlPAorICAgICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEZvcndhcmRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5LAorICAgICAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWc+Ojp2YWx1ZQorICAgICAgICAgICAgJiYgc3RkOjppc19jb252ZXJ0aWJsZTwKKyAgICAgICAgICAgICAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxGb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXI+Ojp2YWx1ZQorICAgICAgICAgICAgJiYgc2l6ZW9mKHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUpCisgICAgICAgICAgICAgICAgPT0gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpLAorICAgICAgICAgICAgIk9ubHkgYWNjZXB0cyBmb3J3YXJkIGl0ZXJhdG9yIG9mIGEgdHlwZSBvZiBzaXplIDEgIgorICAgICAgICAgICAgICAgICJ0aGF0IGNhbiBiZSBjb252ZXJ0IHRvIHVuc2lnbmVkIGNoYXIuXG4iKTsKKyAgICBzaXplX3QgYyA9IDA7CisgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHNzOworICAgIGZvciAoRm9yd2FyZEl0ZXJhdG9yIGkgPSBmaXJzdDsgaSAhPSBsYXN0OyArK2ksICsrYykgeworICAgICAgICB1bnNpZ25lZCBjaGFyIHYgPSAqaTsKKyAgICAgICAgLy8gZm9ybWF0dGluZworICAgICAgICBzd2l0Y2ggKGMgJiAweGYpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAvLyBhZGRyZXNzCisgICAgICAgICAgICAgICAgb3MgPDwgc3Muc3RyKCkgPDwgTE9HX0VOREw7CisgICAgICAgICAgICAgICAgc3Muc3RyKCIiKTsKKyAgICAgICAgICAgICAgICBzcyA8PCBzdGQ6OmhleDsKKyAgICAgICAgICAgICAgICBzcyA8PCBzdGQ6OnNldGZpbGwoJzAnKSA8PCBzdGQ6OnNldHcoNCkgPDwgYyA8PCAiOiAiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgICAgIC8vIHNwYWNlCisgICAgICAgICAgICAgICAgc3MgPDwgIiAiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNzIDw8IHN0ZDo6c2V0ZmlsbCgnMCcpIDw8IHN0ZDo6c2V0dygyKQorICAgICAgICAgICA8PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4odikpIDw8ICIgIjsKKyAgICB9CisgICAgb3MgPDwgc3Muc3RyKCkgPDwgTE9HX0VOREw7Cit9Cit9IC8vbmFtZXNwYWNlIEhpZFV0aWwKKworI2VuZGlmIC8vIEhJRFVUSUxfU1RSRUFNX0lPX1VUSUxfSF8KKwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL1RyaVN0YXRlLmggYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvVHJpU3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTQ0ODI2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL1RyaVN0YXRlLmgKQEAgLTAsMCArMSwyNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2lmbmRlZiBISURVVElMX1RSSVNUQVRFX0hfCisjZGVmaW5lIEhJRFVUSUxfVFJJU1RBVEVfSF8KKworI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisKK25hbWVzcGFjZSBIaWRVdGlsIHsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBUcmlTdGF0ZSB7CitwdWJsaWM6CisgICAgLy8gY29uc3RydWN0b3IKKyAgICBUcmlTdGF0ZSgpIDogbUlzU2V0KGZhbHNlKSB7IH0KKyAgICBUcmlTdGF0ZShjb25zdCBUcmlTdGF0ZTxUPiAmb3RoZXIpIDogbUlzU2V0KG90aGVyLm1Jc1NldCksIG1WYWx1ZShvdGhlci5tVmFsdWUpIHsgfQorICAgIGV4cGxpY2l0IFRyaVN0YXRlKGNvbnN0IFQgJnZhbHVlKSA6IG1Jc1NldCh0cnVlKSwgbVZhbHVlKHZhbHVlKSB7IH0KKworICAgIHZvaWQgY2xlYXIoKSB7CisgICAgICAgIG1WYWx1ZSA9IFQoKTsKKyAgICAgICAgbUlzU2V0ID0gZmFsc2U7CisgICAgfQorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtSXNTZXQ7CisgICAgfQorCisgICAgY29uc3QgVCBnZXQoY29uc3QgVCAmZGVmYXVsdFZhbHVlKSBjb25zdCB7CisgICAgICAgIHJldHVybiBpc1NldCgpID8gbVZhbHVlIDogZGVmYXVsdFZhbHVlOworICAgIH0KKworICAgIC8vIG9wZXJhdG9yIG92ZXJsb2FkaW5nCisgICAgZXhwbGljaXQgb3BlcmF0b3IgVCAoKSBjb25zdCB7CisgICAgICAgIGFzc2VydChtSXNTZXQpOworICAgICAgICByZXR1cm4gbVZhbHVlOworICAgIH0KKworICAgIFRyaVN0YXRlPFQ+JiBvcGVyYXRvcj0oY29uc3QgVHJpU3RhdGU8VD4gJm90aGVyKSB7CisgICAgICAgIG1Jc1NldCA9IG90aGVyLm1Jc1NldDsKKyAgICAgICAgbVZhbHVlID0gb3RoZXIubVZhbHVlOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgVHJpU3RhdGU8VD4mIG9wZXJhdG9yPShjb25zdCBUJiB2YWx1ZSkgeworICAgICAgICBtSXNTZXQgPSB0cnVlOworICAgICAgICBtVmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIFRyaVN0YXRlPFQ+JiBvcGVyYXRvcisrKCkgIHsKKyAgICAgICAgaWYgKG1Jc1NldCkgeworICAgICAgICAgICAgbVZhbHVlKys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIFRyaVN0YXRlPFQ+IG9wZXJhdG9yKysoaW50KSB7CisgICAgICAgIFRyaVN0YXRlPFQ+IHRtcCgqdGhpcyk7CisgICAgICAgIG9wZXJhdG9yKysoKTsKKyAgICAgICAgcmV0dXJuIHRtcDsKKyAgICB9CisKKyAgICBUcmlTdGF0ZTxUPiYgb3BlcmF0b3ItLSgpICB7CisgICAgICAgIGlmIChtSXNTZXQpIHsKKyAgICAgICAgICAgIG1WYWx1ZS0tOworICAgICAgICB9CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBUcmlTdGF0ZTxUPiBvcGVyYXRvci0tKGludCkgeworICAgICAgICBUcmlTdGF0ZTxUPiB0bXAoKnRoaXMpOworICAgICAgICBvcGVyYXRvci0tKCk7CisgICAgICAgIHJldHVybiB0bXA7CisgICAgfQorCisjZGVmaW5lIFVOQVJZX09QKG9wKSBcCisgICAgVHJpU3RhdGU8VD4gb3BlcmF0b3Igb3AoKSB7IFwKKyAgICAgICAgVHJpU3RhdGU8VD4gdG1wKCp0aGlzKTsgXAorICAgICAgICBpZiAobUlzU2V0KSB7IFwKKyAgICAgICAgICAgIHRtcC5tVmFsdWUgPSBvcCB0bXAubVZhbHVlOyBcCisgICAgICAgIH0gXAorICAgICAgICByZXR1cm4gdG1wOyBcCisgICAgfQorCisgICAgVU5BUllfT1AoISk7CisgICAgVU5BUllfT1AoLSk7CisgICAgVU5BUllfT1Aofik7CisjdW5kZWYgVU5BUllfT1AKKworI2RlZmluZSBDT01QT1VORF9BU1NJR05fT1Aob3ApIFwKKyAgICBUcmlTdGF0ZTxUPiYgb3BlcmF0b3Igb3AgKGNvbnN0IFRyaVN0YXRlPFQ+JiByaHMpIHsgXAorICAgICAgICBpZiAobUlzU2V0ICYmIHJocy5tSXNTZXQpIHsgXAorICAgICAgICAgICAgbVZhbHVlIG9wIHJocy5tVmFsdWU7IFwKKyAgICAgICAgfSBlbHNlIHsgXAorICAgICAgICAgICAgbUlzU2V0ID0gZmFsc2U7IFwKKyAgICAgICAgfSBcCisgICAgICAgIHJldHVybiAqdGhpczsgXAorICAgIH0gXAorICAgIFRyaVN0YXRlPFQ+JiBvcGVyYXRvciBvcChjb25zdCBUJiByaHMpIHsgXAorICAgICAgICBpZiAobUlzU2V0KSB7IFwKKyAgICAgICAgICAgIG1WYWx1ZSBvcCByaHM7IFwKKyAgICAgICAgfSBcCisgICAgICAgIHJldHVybiAqdGhpczsgXAorICAgIH0KKworICAgIENPTVBPVU5EX0FTU0lHTl9PUCgrPSk7CisgICAgQ09NUE9VTkRfQVNTSUdOX09QKC09KTsKKyAgICBDT01QT1VORF9BU1NJR05fT1AoKj0pOworICAgIENPTVBPVU5EX0FTU0lHTl9PUCgvPSk7CisgICAgQ09NUE9VTkRfQVNTSUdOX09QKCU9KTsKKyAgICBDT01QT1VORF9BU1NJR05fT1AoJj0pOworICAgIENPTVBPVU5EX0FTU0lHTl9PUCh8PSk7CisgICAgQ09NUE9VTkRfQVNTSUdOX09QKF49KTsKKyN1bmRlZiBDT01QT1VORF9BU1NJR05fT1AKKworICAgIFRyaVN0YXRlPFQ+JiBvcGVyYXRvciA+Pj0oaW50IGkpIHsKKyAgICAgICAgaWYgKG1Jc1NldCkgeworICAgICAgICAgICAgbVZhbHVlID4+PSBpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAqdGhpczsgXAorICAgIH0KKworICAgIFRyaVN0YXRlPFQ+JiBvcGVyYXRvciA8PD0oaW50IGkpIHsKKyAgICAgICAgaWYgKG1Jc1NldCkgeworICAgICAgICAgICAgbVZhbHVlIDw8PSBpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAqdGhpczsgXAorICAgIH0KKworICAgIFRyaVN0YXRlPFQ+IG9wZXJhdG9yIDw8KGludCBpKSB7IFwKKyAgICAgICAgVHJpU3RhdGU8VD4gdG1wKCp0aGlzKTsKKyAgICAgICAgb3BlcmF0b3I8PChpKTsKKyAgICAgICAgcmV0dXJuIHRtcDsKKyAgICB9CisKKyAgICBUcmlTdGF0ZTxUPiBvcGVyYXRvciA+PihpbnQgaSkgeyBcCisgICAgICAgIFRyaVN0YXRlPFQ+IHRtcCgqdGhpcyk7CisgICAgICAgIG9wZXJhdG9yPj4oaSk7CisgICAgICAgIHJldHVybiB0bXA7CisgICAgfQorCisjZGVmaW5lIEJJTkFSWV9PUChvcCwgY29tcG91bmRfb3ApIFwKKyAgICBmcmllbmQgVHJpU3RhdGU8VD4gb3BlcmF0b3Igb3AoVHJpU3RhdGU8VD4gbGhzLCBjb25zdCBUcmlTdGF0ZTxUPiYgcmhzKSB7IFwKKyAgICAgICAgbGhzIGNvbXBvdW5kX29wIHJoczsgXAorICAgIHJldHVybiBsaHM7IFwKKyAgICB9XAorICAgICAgICBmcmllbmQgVHJpU3RhdGU8VD4gb3BlcmF0b3Igb3AoVHJpU3RhdGU8VD4gbGhzLCBjb25zdCBUJiByaHMpIHsgXAorICAgIGxocyBjb21wb3VuZF9vcCByaHM7IFwKKyAgICAgICAgcmV0dXJuIGxoczsgXAorICAgIH1cCisgICAgZnJpZW5kIFRyaVN0YXRlPFQ+IG9wZXJhdG9yIG9wKGNvbnN0IFQgJmxocywgY29uc3QgVHJpU3RhdGU8VD4mIHJocykgeyBcCisgICAgICAgIFRyaVN0YXRlPFQ+IHRtcChsaHMpOyBcCisgICAgICAgIHJldHVybiB0bXAgb3AgcmhzOyBcCisgICAgfQorCisgICAgQklOQVJZX09QKCssICs9KTsKKyAgICBCSU5BUllfT1AoLSwgLT0pOworICAgIEJJTkFSWV9PUCgqLCAqPSk7CisgICAgQklOQVJZX09QKC8sIC89KTsKKyAgICBCSU5BUllfT1AoJSwgJT0pOworICAgIEJJTkFSWV9PUCgmLCAmPSk7CisgICAgQklOQVJZX09QKHwsIHw9KTsKKyAgICBCSU5BUllfT1AoXiwgXj0pOworI3VuZGVmIEJJTkFSWV9PUAorCisjZGVmaW5lIFJFTEFUSU9OX09QKG9wKSBcCisgICAgZnJpZW5kIFRyaVN0YXRlPGJvb2w+IG9wZXJhdG9yIG9wKGNvbnN0IFRyaVN0YXRlPFQ+JiBsaHMsIGNvbnN0IFRyaVN0YXRlPFQ+JiByaHMpIHsgXAorICAgICAgICBpZiAobGhzLm1Jc1NldCAmJiByaHMubUlzU2V0KSB7IFwKKyAgICAgICAgICAgIHJldHVybiBUcmlTdGF0ZTxib29sPihsaHMubVZhbHVlIG9wIHJocy5tVmFsdWUpOyBcCisgICAgICAgIH0gZWxzZSB7IFwKKyAgICAgICAgcmV0dXJuIFRyaVN0YXRlPGJvb2w+KCk7IFwKKyAgICAgICAgfSBcCisgICAgfSBcCisgICAgZnJpZW5kIFRyaVN0YXRlPGJvb2w+IG9wZXJhdG9yIG9wKGNvbnN0IFRyaVN0YXRlPFQ+JiBsaHMsIGNvbnN0IFQmIHJocykgeyBcCisgICAgICAgIGlmIChsaHMubUlzU2V0KSB7IFwKKyAgICAgICAgICAgIHJldHVybiBUcmlTdGF0ZTxib29sPihsaHMubVZhbHVlIG9wIHJocyk7IFwKKyAgICAgICAgfSBlbHNlIHsgXAorICAgICAgICAgICAgcmV0dXJuIFRyaVN0YXRlPGJvb2w+KCk7IFwKKyAgICAgICAgfSBcCisgICAgfSBcCisgICAgZnJpZW5kIFRyaVN0YXRlPGJvb2w+IG9wZXJhdG9yIG9wKGNvbnN0IFQmIGxocywgY29uc3QgVHJpU3RhdGU8VD4mIHJocykgeyBcCisgICAgICAgIGlmIChyaHMubUlzU2V0KSB7IFwKKyAgICAgICAgICAgIHJldHVybiBUcmlTdGF0ZTxib29sPihsaHMgb3AgcmhzLm1WYWx1ZSk7IFwKKyAgICAgICAgfSBlbHNlIHsgXAorICAgICAgICAgICAgcmV0dXJuIFRyaVN0YXRlPGJvb2w+KCk7IFwKKyAgICAgICAgfSBcCisgICAgfQorCisgICAgUkVMQVRJT05fT1AoPT0pOworICAgIFJFTEFUSU9OX09QKCE9KTsKKyAgICBSRUxBVElPTl9PUCg+PSk7CisgICAgUkVMQVRJT05fT1AoPD0pOworICAgIFJFTEFUSU9OX09QKD4pOworICAgIFJFTEFUSU9OX09QKDwpOworI3VuZGVmIFJFTEFUSU9OX09QCisKKyAgICBmcmllbmQgVHJpU3RhdGU8Ym9vbD4gb3BlcmF0b3IgJiYoVHJpU3RhdGU8VD4mIGxocywgY29uc3QgVHJpU3RhdGU8VD4mIHJocykgeworICAgICAgICBpZiAobGhzLm1Jc1NldCAmJiByaHMubUlzU2V0KSB7CisgICAgICAgICAgICByZXR1cm4gVHJpU3RhdGU8Ym9vbD4obGhzLm1WYWx1ZSAmJiByaHMubVZhbHVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBUcmlTdGF0ZTxib29sPigpOworICAgICAgICB9CisgICAgfQorCisgICAgZnJpZW5kIFRyaVN0YXRlPGJvb2w+IG9wZXJhdG9yIHx8KFRyaVN0YXRlPFQ+JiBsaHMsIGNvbnN0IFRyaVN0YXRlPFQ+JiByaHMpIHsKKyAgICAgICAgaWYgKGxocy5tSXNTZXQgJiYgcmhzLm1Jc1NldCkgeworICAgICAgICAgICAgcmV0dXJuIFRyaVN0YXRlPGJvb2w+KGxocy5tVmFsdWUgfHwgcmhzLm1WYWx1ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gVHJpU3RhdGU8Ym9vbD4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZyaWVuZCBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yIDw8KHN0ZDo6b3N0cmVhbSAmb3MsIGNvbnN0IFRyaVN0YXRlPFQ+ICZ2KSB7CisgICAgICAgIGlmICh2Lm1Jc1NldCkgeworICAgICAgICAgICAgb3MgPDwgdi5tVmFsdWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvcyA8PCAiW25vdCBzZXRdIjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gb3M7CisgICAgfQorCisgICAgZnJpZW5kIHN0ZDo6aXN0cmVhbSYgb3BlcmF0b3IgPj4oc3RkOjppc3RyZWFtICZpcywgY29uc3QgVHJpU3RhdGU8VD4gJnYpIHsKKyAgICAgICAgVCBhOworICAgICAgICBpcyA+PiBhOworICAgICAgICB2ID0gVHJpU3RhdGU8VD4oYSk7CisgICAgICAgIHJldHVybiBpczsKKyAgICB9Citwcml2YXRlOgorICAgIGJvb2wgbUlzU2V0OworICAgIFQgbVZhbHVlOworfTsKKworLy8gY29tbW9ubHkgdXNlZCBvbmVzCit0eXBlZGVmIFRyaVN0YXRlPHVuc2lnbmVkPiB0cmlfdWludDsKK3R5cGVkZWYgVHJpU3RhdGU8aW50PiB0cmlfaW50OworCit0eXBlZGVmIFRyaVN0YXRlPHVpbnQzMl90PiB0cmlfdWludDMyX3Q7Cit0eXBlZGVmIFRyaVN0YXRlPGludDMyX3Q+IHRyaV9pbnQzMl90OwordHlwZWRlZiBUcmlTdGF0ZTx1aW50OF90PiB0cmlfdWludDhfdDsKK3R5cGVkZWYgVHJpU3RhdGU8dWludDE2X3Q+IHRyaV91aW50MTZfdDsKK30KKworI2VuZGlmIC8vIEhJRFVUSUxfVFJJU1RBVEVfSF8KZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy90ZXN0L0hpZFBhcnNlckV4YW1wbGUuY3BwIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL3Rlc3QvSGlkUGFyc2VyRXhhbXBsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM3MjQzZQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy90ZXN0L0hpZFBhcnNlckV4YW1wbGUuY3BwCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpbmNsdWRlICJIaWRMb2cuaCIKKyNpbmNsdWRlICJIaWRQYXJzZXIuaCIKKyNpbmNsdWRlICJUZXN0SGlkRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisKK3VzaW5nIEhpZFV0aWw6OkhpZFBhcnNlcjsKKworYm9vbCBkb1BhcnNlKCkgeworICAgIEhpZFBhcnNlciBoaWRQYXJzZXI7CisgICAgYm9vbCByZXQgPSB0cnVlOworCisgICAgZm9yIChjb25zdCBUZXN0SGlkRGVzY3JpcHRvciAqcCA9IGdEZXNjcmlwdG9yQXJyYXk7IDsgKytwKSB7CisgICAgICAgIGlmIChwLT5kYXRhID09IG51bGxwdHIgfHwgcC0+bGVuID09IDApIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBwLT5uYW1lICE9IG51bGxwdHIgPyBwLT5uYW1lIDogInVubmFtZWQiOworICAgICAgICBib29sIHBhcnNlUmVzdWx0ID0gaGlkUGFyc2VyLnBhcnNlKHAtPmRhdGEsIHAtPmxlbik7CisKKyAgICAgICAgaWYgKHBhcnNlUmVzdWx0KSB7CisgICAgICAgICAgICBMT0dfViA8PCBuYW1lIDw8ICIgIGZpbHRlcmVkIHRyZWU6ICIgPDwgTE9HX0VOREw7CisgICAgICAgICAgICBMT0dfViA8PCAqKGhpZFBhcnNlci5nZXRUcmVlKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0ID0gZmFsc2U7CisgICAgICAgICAgICBMT0dfRSA8PCBuYW1lIDw8ICIgcGFyc2luZyBlcnJvciEiIDw8IExPR19FTkRMOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKK2Jvb2wgZG9QYXJzZUFuZEZpbHRlcigpIHsKKyAgICBIaWRQYXJzZXIgaGlkUGFyc2VyOworICAgIGJvb2wgcmV0ID0gdHJ1ZTsKKworICAgIGZvciAoY29uc3QgVGVzdEhpZERlc2NyaXB0b3IgKnAgPSBnRGVzY3JpcHRvckFycmF5OyA7ICsrcCkgeworICAgICAgICBpZiAocC0+ZGF0YSA9PSBudWxscHRyIHx8IHAtPmxlbiA9PSAwKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBjaGFyICpuYW1lID0gcC0+bmFtZSAhPSBudWxscHRyID8gcC0+bmFtZSA6ICJ1bm5hbWVkIjsKKyAgICAgICAgYm9vbCBwYXJzZVJlc3VsdCA9IGhpZFBhcnNlci5wYXJzZShwLT5kYXRhLCBwLT5sZW4pOworCisgICAgICAgIGlmIChwYXJzZVJlc3VsdCkgeworICAgICAgICAgICAgaGlkUGFyc2VyLmZpbHRlclRyZWUoKTsKKyAgICAgICAgICAgIExPR19WIDw8IG5hbWUgPDwgIiAgZmlsdGVyZWQgdHJlZTogIiA8PCBMT0dfRU5ETDsKKyAgICAgICAgICAgIExPR19WIDw8ICooaGlkUGFyc2VyLmdldFRyZWUoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXQgPSBmYWxzZTsKKyAgICAgICAgICAgIExPR19FIDw8IG5hbWUgPDwgIiBwYXJzaW5nIGVycm9yISIgPDwgTE9HX0VOREw7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworYm9vbCBkb0RpZ2VzdCgpIHsKKyAgICBIaWRQYXJzZXIgaGlkUGFyc2VyOworICAgIGJvb2wgcmV0ID0gdHJ1ZTsKKworICAgIC8vIHZhbHVlIGZyb20gSElEIHNlbnNvciB1c2FnZSBwYWdlIHNwZWMKKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8dW5zaWduZWQgaW50PiBpbnRlcmVzdGVkVXNhZ2UgPSB7CisgICAgICAgIDB4MjAwMDczLCAvLyBhY2NlbGVyb21ldGVyIDNkCisgICAgICAgIDB4MjAwMDc2LCAvLyBneXJvIDNkCisgICAgICAgIDB4MjAwMDgzLCAvLyBtYWcgM2QKKyAgICAgICAgMHgyMDAwOGEsIC8vIGRldmljZSBvcmllbnRhdGlvbiAocm90YXRpb24gdmVjdG9yKQorICAgIH07CisKKyAgICBmb3IgKGNvbnN0IFRlc3RIaWREZXNjcmlwdG9yICpwID0gZ0Rlc2NyaXB0b3JBcnJheTsgOyArK3ApIHsKKyAgICAgICAgaWYgKHAtPmRhdGEgPT0gbnVsbHB0ciB8fCBwLT5sZW4gPT0gMCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IHAtPm5hbWUgIT0gbnVsbHB0ciA/IHAtPm5hbWUgOiAidW5uYW1lZCI7CisgICAgICAgIGJvb2wgcGFyc2VSZXN1bHQgPSBoaWRQYXJzZXIucGFyc2UocC0+ZGF0YSwgcC0+bGVuKTsKKworICAgICAgICBpZiAoIXBhcnNlUmVzdWx0KSB7CisgICAgICAgICAgICBMT0dfRSA8PCBuYW1lIDw8ICIgcGFyc2luZyBlcnJvciEiIDw8IExPR19FTkRMOworICAgICAgICAgICAgcmV0ID0gZmFsc2U7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGhpZFBhcnNlci5maWx0ZXJUcmVlKCk7CisgICAgICAgIExPR19WIDw8IG5hbWUgPDwgIiAgZGlnZXN0OiAiIDw8IExPR19FTkRMOworICAgICAgICBIaWRQYXJzZXI6OkRpZ2VzdFZlY3RvciBkaWdlc3RWZWN0b3IgPSBoaWRQYXJzZXIuZ2VuZXJhdGVEaWdlc3QoaW50ZXJlc3RlZFVzYWdlKTsKKyAgICAgICAgTE9HX1YgPDwgZGlnZXN0VmVjdG9yOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCit2b2lkIHByaW50VXNhZ2UoY2hhciAqYXJndjApIHsKKyAgICBMT0dfViA8PCAiVXNhZ2U6ICIgPDwgYXJndjAgPDwgIiB0ZXN0X25hbWUiIDw8IExPR19FTkRMOworICAgIExPR19WIDw8ICIgIHRlc3RfbmFtZSBjYW4gYmUgcGFyc2UsIHBhcnNlX2ZpbHRlciwgZGlnZXN0LiIgPDwgTE9HX0VOREw7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pIHsKKyAgICBpbnQgcmV0OworCisgICAgaWYgKGFyZ2MgIT0gMikgeworICAgICAgICBMT0dfRSA8PCAiRXJyb3I6IG5lZWQgcGFyYW0iIDw8IExPR19FTkRMOworICAgICAgICBwcmludFVzYWdlKGFyZ3ZbMF0pOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICBpZiAoc3RyY21wKGFyZ3ZbMV0sICJwYXJzZSIpID09IDApIHsKKyAgICAgICAgcmV0ID0gZG9QYXJzZSgpID8gMCA6IDE7CisgICAgfSBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgInBhcnNlX2ZpbHRlciIpID09IDApIHsKKyAgICAgICAgcmV0ID0gZG9QYXJzZUFuZEZpbHRlcigpID8gMCA6IDE7CisgICAgfSBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgImRpZ2VzdCIpID09IDApIHsKKyAgICAgICAgcmV0ID0gZG9EaWdlc3QoKSA/IDAgOiAxOworICAgIH0gZWxzZSB7CisgICAgICAgIExPR19FIDw8ICJFcnJvcjogdW5rbm93biB0ZXN0IG5hbWUiIDw8IExPR19FTkRMOworICAgICAgICBwcmludFVzYWdlKGFyZ3ZbMF0pOworICAgICAgICByZXQgPSAtRU5PRU5UOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvdGVzdC9IaWRQYXJzZXJFeGFtcGxlMi5jcHAgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvdGVzdC9IaWRQYXJzZXJFeGFtcGxlMi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE1MWRmZgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy90ZXN0L0hpZFBhcnNlckV4YW1wbGUyLmNwcApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgIlRlc3RIaWREZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiSGlkTG9nLmgiCisjaW5jbHVkZSAiSGlkUGFyc2VyLmgiCisjaW5jbHVkZSAiU3RyZWFtSW9VdGlsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBIaWRVdGlsOworCit2b2lkIHByaW50UmF3VmFsdWUoY29uc3Qgc3RkOjp2ZWN0b3I8dW5zaWduZWQgY2hhcj4gJmRlc2NyaXB0b3IpIHsKKyAgICBMT0dfRCA8PCAiRGVzY3JpcHRvciBbIiA8PCBkZXNjcmlwdG9yLnNpemUoKSA8PCAiXTogIiA8PCBzdGQ6OmhleDsKKyAgICBoZXhkdW1wVG9TdHJlYW0oTE9HX0QsIGRlc2NyaXB0b3IuYmVnaW4oKSwgZGVzY3JpcHRvci5lbmQoKSk7Cit9CisKK3ZvaWQgcHJpbnRUb2tlbihjb25zdCBzdGQ6OnZlY3RvcjxIaWRJdGVtPiAmaGlkSXRlbVZlY3RvcikgeworICAgIExPR19WIDw8ICJUb3RhbCAiIDw8IGhpZEl0ZW1WZWN0b3Iuc2l6ZSgpIDw8ICIgdG9rZW5zIiA8PCBMT0dfRU5ETDsKKyAgICBmb3IgKGF1dG8gJmkgOiBoaWRJdGVtVmVjdG9yKSB7CisgICAgICAgIExPR19WIDw8IGkgPDwgTE9HX0VOREw7CisgICAgfQorfQorCitpbnQgbWFpbigpIHsKKyAgICBjb25zdCBUZXN0SGlkRGVzY3JpcHRvciAqdCA9IGZpbmRUZXN0RGVzY3JpcHRvcigiYWNjZWwzIik7CisgICAgY29uc3RleHByIHVuc2lnbmVkIGludCBBQ0NFTF8zRF9VU0FHRSA9IDB4MjAwMDczOworCisgICAgYXNzZXJ0KHQgIT0gbnVsbHB0cik7CisgICAgc3RkOjp2ZWN0b3I8dW5zaWduZWQgY2hhcj4gZGVzY3JpcHRvcih0LT5kYXRhLCB0LT5kYXRhICsgdC0+bGVuKTsKKworICAgIC8vIHBhcnNlIGNhbiBiZSBkb25lIGluIG9uZSBzdGVwIHdpdGggSGlkUGFyc2VyOjpwYXJzZShjb25zdCB1bnNpZ25lZCBjaGFyICpiZWdpbiwgc2l6ZV90IHNpemUpOworICAgIC8vIGhlcmUgaXQgaXMgZG9uZSBpbiBtdWx0aXBsZSBzdGVwcyBmb3IgaWxsdXN0cmF0aW9uIHB1cnBvc2UKKyAgICBIaWRQYXJzZXIgaGlkUGFyc2VyOworICAgIC8vIHByaW50IG91dCByYXcgdmFsdWUKKyAgICBwcmludFJhd1ZhbHVlKGRlc2NyaXB0b3IpOworCisgICAgLy8gdG9rZW5pemUgaXQKKyAgICBzdGQ6OnZlY3RvcjxIaWRJdGVtPiBoaWRJdGVtVmVjdG9yID0gSGlkSXRlbTo6dG9rZW5pemUoZGVzY3JpcHRvcik7CisKKyAgICAvLyBwcmludCBvdXQgdG9rZW5zCisgICAgcHJpbnRUb2tlbihoaWRJdGVtVmVjdG9yKTsKKworICAgIC8vIHBhcnNlIGl0CisgICAgaWYgKGhpZFBhcnNlci5wYXJzZShoaWRJdGVtVmVjdG9yKSkgeworICAgICAgICAvLyBtYWtpbmcgYSBkZWVwY29weSBvZiB0cmVlIChub3QgbmVjZXNzYXJ5LCBidXQgZm9yIGlsbHVzdHJhdGlvbikKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiB0cmVlID0gaGlkUGFyc2VyLmdldFRyZWUoKS0+ZGVlcENvcHkoKTsKKworICAgICAgICBMT0dfViA8PCAiVHJlZTogIiA8PCBMT0dfRU5ETDsKKyAgICAgICAgTE9HX1YgPDwgKnRyZWU7CisgICAgICAgIExPR19WIDw8IExPR19FTkRMOworCisgICAgICAgIGhpZFBhcnNlci5maWx0ZXJUcmVlKCk7CisgICAgICAgIExPR19WIDw8ICJGaWx0ZXJlZFRyZWU6ICIgPDwgTE9HX0VOREw7CisgICAgICAgIExPR19WIDw8ICooaGlkUGFyc2VyLmdldFRyZWUoKSk7CisKKyAgICAgICAgTE9HX1YgPDwgIkRpZ2VzdFZlY3RvcjogIiA8PCBMT0dfRU5ETDsKKyAgICAgICAgc3RkOjp1bm9yZGVyZWRfc2V0PHVuc2lnbmVkIGludD4gaW50ZXJlc3RlZCA9IHtBQ0NFTF8zRF9VU0FHRX07CisgICAgICAgIEhpZFBhcnNlcjo6RGlnZXN0VmVjdG9yIGRpZ2VzdFZlY3RvciA9IGhpZFBhcnNlci5nZW5lcmF0ZURpZ2VzdChpbnRlcmVzdGVkKTsKKyAgICAgICAgTE9HX1YgPDwgZGlnZXN0VmVjdG9yOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgTE9HX1YgPDwgIlBhcnNpbmcgRXJyb3IiIDw8IExPR19FTkRMOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvdGVzdC9UZXN0SGlkRGVzY3JpcHRvci5jcHAgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvdGVzdC9UZXN0SGlkRGVzY3JpcHRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM1N2Q0ZgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy90ZXN0L1Rlc3RIaWREZXNjcmlwdG9yLmNwcApAQCAtMCwwICsxLDI2MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2luY2x1ZGUgIlRlc3RIaWREZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiVGVzdEhpZFNlbnNvclNwZWMuaCIKKyNpbmNsdWRlIDxjc3RyaW5nPgorCisvKioKKyAqIEV4YW1wbGUgSElEIHNlbnNvciBkZXNjcmlwdG9ycyBpbiB0aGlzIGZpbGUgaXMgZXh0cmFjdGVkIGZyb20gcHVibGlzaGVkIGRvY3VtZW50CisgKiAiSElEIFNlbnNvcnMgVXNhZ2UiIChoaWQtc2Vuc29ycy11c2FnZS5kb2N4KS4gVGhleSBhcmUgYWRkZWQgZm9yIHRlc3Rpbmcgb2YgSGlkUGFyc2VyLgorICoKKyAqIEl0IGlzIHNsaWdodGx5IG1vZGlmaWVkIGluIG9yZGVyIHRvIGNvbXBpbGUuCisgKi8KK25hbWVzcGFjZSB7CisvKioKKyAqIFR3byBzZW5zb3JzIGNvbGxlY3Rpb24gc2tlbGV0b24gZXhhbXBsZS4KKyAqLworY29uc3QgdW5zaWduZWQgY2hhciBjb2wxX3JlcG9ydF9kZXNjcmlwdG9yW10gPSB7CisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9DT0xMRUNUSU9OLAorICAgIEhJRF9DT0xMRUNUSU9OKEFwcGxpY2F0aW9uKSwKKworICAgIEhJRF9SRVBPUlRfSUQoMSksCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorCisgICAgSElEX1VTQUdFX1NFTlNPUl9UWVBFX01PVElPTl9BQ0NFTEVST01FVEVSXzNELAorICAgIEhJRF9DT0xMRUNUSU9OKFBoeXNpY2FsKSwKKworICAgIC8vRmVhdHVyZSBSZXBvcnQgRGVzY3JpcHRvciBmb3IgU2Vuc29yIFJlcG9ydCBJRCA9IDEKKworICAgIC8vSW5wdXQgUmVwb3J0IERlc2NyaXB0b3IgZm9yIFNlbnNvciBSZXBvcnQgSUQgPSAxCisKKyAgICBISURfRU5EX0NPTExFQ1RJT04sIC8vZm9yIFJlcG9ydCBJRCA9IDEKKworICAgIEhJRF9SRVBPUlRfSUQoMiksCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NT1RJT05fR1lST01FVEVSXzNELAorICAgIEhJRF9DT0xMRUNUSU9OKFBoeXNpY2FsKSwKKworICAgIC8vRmVhdHVyZSBSZXBvcnQgRGVzY3JpcHRvciBmb3IgU2Vuc29yIFJlcG9ydCBJRCA9IDIKKworICAgIC8vSW5wdXQgUmVwb3J0IERlc2NyaXB0b3IgZm9yIFNlbnNvciBSZXBvcnQgSUQgPSAyCisKKyAgICBISURfRU5EX0NPTExFQ1RJT04sIC8vZm9yIFJlcG9ydCBJRCA9IDIKKworICAgIC8vTW9yZSBzZW5zb3JzIGZvbGxvdyB1c2luZyB0aGUgc2FtZSBwYXR0ZXJuCisKKyAgICBISURfRU5EX0NPTExFQ1RJT04gLy9BcHBsaWNhdGlvbgorfTsKKworCisvKioKKyAqIENvbXBvc2l0ZSBkZXZpY2UgZGVzY3JpcHRvciBleGFtcGxlOiB0d28gc2Vuc29ycyB3aXRoIGEga2V5Ym9hcmQgYW5kIGEgbW91c2UuCisgKi8KK2NvbnN0IHVuc2lnbmVkIGNoYXIgY29sMl9yZXBvcnRfZGVzY3JpcHRvcltdID0geworICAgIC8va2V5Ym9hcmQKKyAgICAweDA1VSwgMHgwMVUsICAgICAgICAgLy8gVVNBR0UgUEFHRSAoR2VuZXJpYyBEZXNrdG9wKQorICAgIDB4MDlVLCAweDA2VSwgICAgICAgICAvLyBVU0FHRSAoS2V5Ym9hcmQpCisgICAgMHhBMVUsIDB4MDFVLCAgICAgICAgIC8vIENPTExFQ1RJT04gKEFwcGxpY2F0aW9uKQorCisgICAgMHg4NVUsIDB4MDNVLCAgICAgICAgIC8vIFJFUE9SVF9JRCAoMSkKKworICAgIDB4MTVVLCAweDAwVSwgICAgICAgICAvLyAgIExPR0lDQUwgTUlOSU1VTSAoMCkKKyAgICAweDI1VSwgMHgwMVUsICAgICAgICAgLy8gICBMT0dJQ0FMIE1BWElNVU0gKDEpCisgICAgMHg3NVUsIDB4MDFVLCAgICAgICAgIC8vICAgUkVQT1JUIFNJWkUgKDEpCisgICAgMHg5NVUsIDB4MDhVLCAgICAgICAgIC8vICAgUkVQT1JUIENPVU5UICg4KQorICAgIDB4MDVVLCAweDA3VSwgICAgICAgICAvLyAgIFVTQUdFIFBBR0UgKEtleWJvYXJkKQorICAgIDB4MTlVLCAweEUwVSwgICAgICAgICAvLyAgIFVTQUdFIE1JTklNVU0gKEtleWJvYXJkIExlZnRDb250cm9sKQorICAgIDB4MjlVLCAweEU3VSwgICAgICAgICAvLyAgIFVTQUdFIE1BWElNVU0gKEtleWJvYXJkIFJpZ2h0IEdVSSkKKyAgICAweDgxVSwgMHgwMlUsICAgICAgICAgLy8gICBJTlBVVCAoVmFyKQorCisgICAgMHg3NVUsIDB4MDhVLCAgICAgICAgIC8vICAgUkVQT1JUIFNJWkUgKDgpCisgICAgMHg5NVUsIDB4MEFVLCAgICAgICAgIC8vICAgUkVQT1JUIENPVU5UICgxMCkKKyAgICAweDE5VSwgMHgwMFUsICAgICAgICAgLy8gICBVU0FHRSBNSU5JTVVNIChObyBldmVudCkKKyAgICAweDI5VSwgMHg5MVUsICAgICAgICAgLy8gICBVU0FHRSBNQVhJTVVNIChLZXlib2FyZCBMQU5HMikKKyAgICAweDI2VSwgMHhGRlUsIDB4MDBVLCAgLy8gICBMT0dJQ0FMIE1BWElNVU0gKDB4RkYpCisgICAgMHg4MVUsIDB4MDBVLCAgICAgICAgIC8vICAgSU5QVVQgKERhdGEsQXJ5LEFicykKKworICAgIDB4QzBVLCAgICAgICAgICAgICAgICAvLyBFTkQgQ09MTEVDVElPTiwgLy9rZXlib2FyZAorCisgICAgLy8gVHdvIHNlbnNvciBjb2xsZWN0aW9uIHNrZWxldG9uIGV4YW1wbGU6CisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9DT0xMRUNUSU9OLAorICAgIEhJRF9DT0xMRUNUSU9OKEFwcGxpY2F0aW9uKSwKKworICAgIEhJRF9SRVBPUlRfSUQoMiksCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorCisgICAgSElEX1VTQUdFX1NFTlNPUl9UWVBFX01PVElPTl9BQ0NFTEVST01FVEVSXzNELAorICAgIEhJRF9DT0xMRUNUSU9OKFBoeXNpY2FsKSwKKworICAgIC8vRmVhdHVyZSBSZXBvcnQgRGVzY3JpcHRvciBmb3IgU2Vuc29yIFJlcG9ydCBJRCA9IDIKKworICAgIC8vSW5wdXQgUmVwb3J0IERlc2NyaXB0b3IgZm9yIFNlbnNvciBSZXBvcnQgSUQgPSAyCisKKyAgICBISURfRU5EX0NPTExFQ1RJT04sIC8vZm9yIFJlcG9ydCBJRCA9IDIKKworICAgIEhJRF9SRVBPUlRfSUQoMyksCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NT1RJT05fR1lST01FVEVSXzNELAorICAgIEhJRF9DT0xMRUNUSU9OKFBoeXNpY2FsKSwKKworICAgIC8vRmVhdHVyZSBSZXBvcnQgRGVzY3JpcHRvciBmb3IgU2Vuc29yIFJlcG9ydCBJRCA9IDMKKworICAgIC8vSW5wdXQgUmVwb3J0IERlc2NyaXB0b3IgZm9yIFNlbnNvciBSZXBvcnQgSUQgPSAzCisKKyAgICBISURfRU5EX0NPTExFQ1RJT04sIC8vZm9yIFJlcG9ydCBJRCA9IDMKKworICAgIC8vTW9yZSBzZW5zb3JzIGZvbGxvdyB1c2luZyB0aGUgc2FtZSBwYXR0ZXJuCisKKyAgICBISURfRU5EX0NPTExFQ1RJT04sIC8vU2Vuc29yIGNvbGxlY3Rpb24KKworICAgIC8vbW91c2UKKyAgICAweDA1VSwgMHgwMVUsICAgICAgICAgLy8gVVNBR0UgUEFHRSAoR2VuZXJpYyBEZXNrdG9wKQorICAgIDB4MDlVLCAweDAyVSwgICAgICAgICAvLyBVU0FHRSAoTW91c2UpCisgICAgMHhBMVUsIDB4MDFVLCAgICAgICAgIC8vIENPTExFQ1RJT04gKEFwcGxpY2F0aW9uKQorICAgIDB4ODVVLCAweDA0VSwgICAgICAgICAvLyBSRVBPUlRfSUQgKDQpCisKKyAgICAvLyA1IG1vdXNlIGJ1dHRvbnMKKyAgICAweDA1VSwgMHgwOVUsICAgICAgICAgLy8gICBVU0FHRSBQQUdFIChCdXR0b24pCisgICAgMHgxOVUsIDB4MDFVLCAgICAgICAgIC8vICAgVVNBR0UgTUlOSU1VTSAoQnV0dG9uIDEpCisgICAgMHgyOVUsIDB4MDVVLCAgICAgICAgIC8vICAgVVNBR0UgTUFYSU1VTSAoQnV0dG9uIDUpCisgICAgMHgxNVUsIDB4MDBVLCAgICAgICAgIC8vICAgTE9HSUNBTCBNSU5JTVVNICgwKQorICAgIDB4MjVVLCAweDAxVSwgICAgICAgICAvLyAgIExPR0lDQUwgTUFYSU1VTSAoMSkKKyAgICAweDk1VSwgMHgwNVUsICAgICAgICAgLy8gICBSRVBPUlQgQ09VTlQgKDUpCisgICAgMHg3NVUsIDB4MDFVLCAgICAgICAgIC8vICAgUkVQT1JUIFNJWkUgKDEpCisgICAgMHg4MVUsIDB4MDJVLCAgICAgICAgIC8vICAgSU5QVVQgKERhdGEsVmFyLEFicykKKworICAgIC8vICAzIHVudXNlZCBidXR0b25zOgorICAgIDB4OTVVLCAweDAxVSwgICAgICAgICAvLyAgIFJFUE9SVCBDT1VOVCAoMSkKKyAgICAweDc1VSwgMHgwM1UsICAgICAgICAgLy8gICBSRVBPUlQgU0laRSAoMykKKyAgICAweDgxVSwgMHgwM1UsICAgICAgICAgLy8gICBJTlBVVCAoQ25zdCxWYXIsQWJzKQorCisgICAgLy8gbW91c2UgKGRlbHRhIHgsIGRlbHRhIHkpIHBvc2l0aW9uCisgICAgMHgxNVUsIDB4ODFVLCAgICAgICAgIC8vICAgTE9HSUNBTCBNSU5JTVVNICgtMTI3KQorICAgIDB4MjVVLCAweDdmVSwgICAgICAgICAvLyAgIExPR0lDQUwgTUFYSU1VTSAoKzEyNykKKyAgICAweDc1VSwgMHgwOFUsICAgICAgICAgLy8gICBSRVBPUlQgU0laRSAoOCkKKyAgICAweDk1VSwgMHgwMlUsICAgICAgICAgLy8gICBSRVBPUlQgQ09VTlQgKDIpCisgICAgMHgwNVUsIDB4MDFVLCAgICAgICAgIC8vICAgVVNBR0UgUEFHRSAoR2VuZXJpYyBEZXNrdG9wKQorICAgIDB4MDlVLCAweDMwVSwgICAgICAgICAvLyAgIFVTQUdFKFgpCisgICAgMHgwOVUsIDB4MzFVLCAgICAgICAgIC8vICAgVVNBR0UgKFkpCisgICAgMHg4MVUsIDB4MDZVLCAgICAgICAgIC8vICAgSU5QVVQgKERhdGEsVmFyLFJlbCkKKworICAgIDB4QzBVLCAgICAgICAgICAgICAgICAvLyBFTkQgQ09MTEVDVElPTiAvL21vdXNlCit9OworCisKKy8qKgorICogQ29tcG9zaXRlIGRldmljZSBkZXNjcmlwdG9yIGV4YW1wbGU6IG9uZSBzZW5zb3Igd2l0aCBhIGtleWJvYXJkIGFuZCBhIG1vdXNlLgorICovCitjb25zdCB1bnNpZ25lZCBjaGFyIGNvbDNfcmVwb3J0X2Rlc2NyaXB0b3JbXSA9IHsKKyAgICAvL2tleWJvYXJkCisgICAgMHgwNVUsIDB4MDFVLCAgICAgICAgIC8vIFVTQUdFIFBBR0UgKEdlbmVyaWMgRGVza3RvcCkKKyAgICAweDA5VSwgMHgwNlUsICAgICAgICAgLy8gVVNBR0UgKEtleWJvYXJkKQorICAgIDB4QTFVLCAweDAxVSwgICAgICAgICAvLyBDT0xMRUNUSU9OIChBcHBsaWNhdGlvbikKKworICAgIDB4ODVVLCAweDAzVSwgICAgICAgICAvLyBSRVBPUlRfSUQgKDEpCisKKyAgICAweDE1VSwgMHgwMFUsICAgICAgICAgLy8gICBMT0dJQ0FMIE1JTklNVU0gKDApCisgICAgMHgyNVUsIDB4MDFVLCAgICAgICAgIC8vICAgTE9HSUNBTCBNQVhJTVVNICgxKQorICAgIDB4NzVVLCAweDAxVSwgICAgICAgICAvLyAgIFJFUE9SVCBTSVpFICgxKQorICAgIDB4OTVVLCAweDA4VSwgICAgICAgICAvLyAgIFJFUE9SVCBDT1VOVCAoOCkKKyAgICAweDA1VSwgMHgwN1UsICAgICAgICAgLy8gICBVU0FHRSBQQUdFIChLZXlib2FyZCkKKyAgICAweDE5VSwgMHhFMFUsICAgICAgICAgLy8gICBVU0FHRSBNSU5JTVVNIChLZXlib2FyZCBMZWZ0Q29udHJvbCkKKyAgICAweDI5VSwgMHhFN1UsICAgICAgICAgLy8gICBVU0FHRSBNQVhJTVVNIChLZXlib2FyZCBSaWdodCBHVUkpCisgICAgMHg4MVUsIDB4MDJVLCAgICAgICAgIC8vICAgSU5QVVQgKFZhcikKKworICAgIDB4NzVVLCAweDA4VSwgICAgICAgICAvLyAgIFJFUE9SVCBTSVpFICg4KQorICAgIDB4OTVVLCAweDBBVSwgICAgICAgICAvLyAgIFJFUE9SVCBDT1VOVCAoMTApCisgICAgMHgxOVUsIDB4MDBVLCAgICAgICAgIC8vICAgVVNBR0UgTUlOSU1VTSAoTm8gZXZlbnQpCisgICAgMHgyOVUsIDB4OTFVLCAgICAgICAgIC8vICAgVVNBR0UgTUFYSU1VTSAoS2V5Ym9hcmQgTEFORzIpCisgICAgMHgyNlUsIDB4RkZVLCAweDAwVSwgIC8vICAgTE9HSUNBTCBNQVhJTVVNICgweEZGKQorICAgIDB4ODFVLCAweDAwVSwgICAgICAgICAvLyAgIElOUFVUIChEYXRhLEFyeSxBYnMpCisKKyAgICAweEMwVSwgICAgICAgICAgICAgICAgLy8gRU5EIENPTExFQ1RJT04sIC8va2V5Ym9hcmQKKworICAgIC8vIE9uZSBzZW5zb3IgY29sbGVjdGlvbiBza2VsZXRvbiBleGFtcGxlOgorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1RZUEVfQ09MTEVDVElPTiwKKyAgICBISURfQ09MTEVDVElPTihBcHBsaWNhdGlvbiksCisKKyAgICBISURfUkVQT1JUX0lEKDIpLAorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKworICAgIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NT1RJT05fR1lST01FVEVSXzNELAorICAgIEhJRF9DT0xMRUNUSU9OKFBoeXNpY2FsKSwKKworICAgIC8vRmVhdHVyZSBSZXBvcnQgRGVzY3JpcHRvciBmb3IgU2Vuc29yIFJlcG9ydCBJRCA9IDIKKworICAgIC8vSW5wdXQgUmVwb3J0IERlc2NyaXB0b3IgZm9yIFNlbnNvciBSZXBvcnQgSUQgPSAyCisKKyAgICBISURfRU5EX0NPTExFQ1RJT04sIC8vZm9yIFJlcG9ydCBJRCA9IDIKKworICAgIEhJRF9FTkRfQ09MTEVDVElPTiwgLy9TZW5zb3IgY29sbGVjdGlvbgorCisgICAgLy9tb3VzZQorICAgIDB4MDVVLCAweDAxVSwgICAgICAgICAvLyBVU0FHRSBQQUdFIChHZW5lcmljIERlc2t0b3ApCisgICAgMHgwOVUsIDB4MDJVLCAgICAgICAgIC8vIFVTQUdFIChNb3VzZSkKKyAgICAweEExVSwgMHgwMVUsICAgICAgICAgLy8gQ09MTEVDVElPTiAoQXBwbGljYXRpb24pCisgICAgMHg4NVUsIDB4MDRVLCAgICAgICAgIC8vIFJFUE9SVF9JRCAoMykKKworICAgIC8vIDUgbW91c2UgYnV0dG9ucworICAgIDB4MDVVLCAweDA5VSwgICAgICAgICAvLyAgIFVTQUdFIFBBR0UgKEJ1dHRvbikKKyAgICAweDE5VSwgMHgwMVUsICAgICAgICAgLy8gICBVU0FHRSBNSU5JTVVNIChCdXR0b24gMSkKKyAgICAweDI5VSwgMHgwNVUsICAgICAgICAgLy8gICBVU0FHRSBNQVhJTVVNIChCdXR0b24gNSkKKyAgICAweDE1VSwgMHgwMFUsICAgICAgICAgLy8gICBMT0dJQ0FMIE1JTklNVU0gKDApCisgICAgMHgyNVUsIDB4MDFVLCAgICAgICAgIC8vICAgTE9HSUNBTCBNQVhJTVVNICgxKQorICAgIDB4OTVVLCAweDA1VSwgICAgICAgICAvLyAgIFJFUE9SVCBDT1VOVCAoNSkKKyAgICAweDc1VSwgMHgwMVUsICAgICAgICAgLy8gICBSRVBPUlQgU0laRSAoMSkKKyAgICAweDgxVSwgMHgwMlUsICAgICAgICAgLy8gICBJTlBVVCAoRGF0YSxWYXIsQWJzKQorCisgICAgLy8gIDMgdW51c2VkIGJ1dHRvbnM6CisgICAgMHg5NVUsIDB4MDFVLCAgICAgICAgIC8vICAgUkVQT1JUIENPVU5UICgxKQorICAgIDB4NzVVLCAweDAzVSwgICAgICAgICAvLyAgIFJFUE9SVCBTSVpFICgzKQorICAgIDB4ODFVLCAweDAzVSwgICAgICAgICAvLyAgIElOUFVUIChDbnN0LFZhcixBYnMpCisKKyAgICAvLyBtb3VzZSAoZGVsdGEgeCwgZGVsdGEgeSkgcG9zaXRpb24KKyAgICAweDE1VSwgMHg4MVUsICAgICAgICAgLy8gICBMT0dJQ0FMIE1JTklNVU0gKC0xMjcpCisgICAgMHgyNVUsIDB4N2ZVLCAgICAgICAgIC8vICAgTE9HSUNBTCBNQVhJTVVNICgrMTI3KQorICAgIDB4NzVVLCAweDA4VSwgICAgICAgICAvLyAgIFJFUE9SVCBTSVpFICg4KQorICAgIDB4OTVVLCAweDAyVSwgICAgICAgICAvLyAgIFJFUE9SVCBDT1VOVCAoMikKKyAgICAweDA1VSwgMHgwMVUsICAgICAgICAgLy8gICBVU0FHRSBQQUdFIChHZW5lcmljIERlc2t0b3ApCisgICAgMHgwOVUsIDB4MzBVLCAgICAgICAgIC8vICAgVVNBR0UoWCkKKyAgICAweDA5VSwgMHgzMVUsICAgICAgICAgLy8gICBVU0FHRSAoWSkKKyAgICAweDgxVSwgMHgwNlUsICAgICAgICAgLy8gICBJTlBVVCAoRGF0YSxWYXIsUmVsKQorCisgICAgMHhDMFUsICAgICAgICAgICAgICAgICAvLyAgIEVORCBDT0xMRUNUSU9OIC8vbW91c2UKK307CisKKworLyoqCisgKiBTaW1wbGUgY3VzdG9tIHNlbnNvciBleGFtcGxlLgorICovCitjb25zdCB1bnNpZ25lZCBjaGFyIGN1czFfcmVwb3J0X2Rlc2NyaXB0b3JbXSA9IHsKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsICAgICAgICAgLy8gVVNBR0VfUEFHRSAoU2Vuc29yKQorICAgIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9PVEhFUl9DVVNUT00sIC8vIFVTQUdFIChTaW1wbGUgQ3VzdG9tKQorICAgIEhJRF9DT0xMRUNUSU9OKFBoeXNpY2FsKSwKKworICAgIC8vaW5wdXQgcmVwb3J0cyAodHJhbnNtaXQpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLCAvLyA9IEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fU1BFRUQgdmFsdWUKKworICAgIEhJRF9FTkRfQ09MTEVDVElPTgorfTsKKworCisvKioKKyAqIE1vcmUgY29tcGxleCBjdXN0b20gc2Vuc29yIGV4YW1wbGUuCisgKi8KK2NvbnN0IHVuc2lnbmVkIGNoYXIgY3VzMl9yZXBvcnRfZGVzY3JpcHRvcltdID0geworICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwgICAgICAgICAvLyBVU0FHRV9QQUdFIChTZW5zb3IpCisgICAgSElEX1VTQUdFX1NFTlNPUl9UWVBFX09USEVSX0NVU1RPTSwgLy8gVVNBR0UgKFNpbXBsZSBDdXN0b20pCisgICAgSElEX0NPTExFQ1RJT04oUGh5c2ljYWwpLAorCisgICAgLy9pbnB1dCByZXBvcnRzICh0cmFuc21pdCkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9VU0FHRSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksIC8vID0gSElEX1VTQUdFX1NFTlNPUl9UWVBFX01PVElPTl9TUEVFRE9NRVRFUgorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fQk9PTEVBTl9BUlJBWSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksIC8vID0gSElEX1VTQUdFX1NFTlNPUl9UWVBFX01PVElPTl9TUEVFRE9NRVRFUgorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLCAvLyA9IEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fU1BFRUQgdmFsdWUKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzIsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwgLy8gPSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX1NQRUVEIHZhbHVlCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8zLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksIC8vID0gSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9TUEVFRCB2YWx1ZQorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfNCwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLCAvLyA9IEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fU1BFRUQgdmFsdWUKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzUsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwgLy8gPSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX1NQRUVEIHZhbHVlCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV82LAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksIC8vID0gSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9TUEVFRCB2YWx1ZQorCisgICAgSElEX0VORF9DT0xMRUNUSU9OCit9OworCisKKy8qKgorICogQ3VzdG9tIHNlbnNvciBleGFtcGxlIHdpdGggZmVhdHVyZXMKKyAqLworY29uc3QgdW5zaWduZWQgY2hhciBjdXMzX3JlcG9ydF9kZXNjcmlwdG9yW10gPSB7CisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLCAgICAgICAgIC8vIFVTQUdFX1BBR0UgKFNlbnNvcikKKyAgICBISURfVVNBR0VfU0VOU09SX1RZUEVfT1RIRVJfQ1VTVE9NLCAvLyBVU0FHRSAoU2ltcGxlIEN1c3RvbSkKKyAgICBISURfQ09MTEVDVElPTihQaHlzaWNhbCksCisKKyAgICAvL2ZlYXR1cmUgcmVwb3J0cyAoeG1pdC9yZWNlaXZlKQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1NFTlNPUl9DT05ORUNUSU9OX1RZUEUsICAvLyBOQXJ5CisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoMiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfSU5URUdSQVRFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfQVRUQUNIRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0VYVEVSTkFMX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX1VOREVGSU5FRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMF9GVUxMX1BPV0VSX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QxX0xPV19QT1dFUl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMl9TVEFOREJZX1dJVEhfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EM19TTEVFUF9XSVRIX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDRfUE9XRVJfT0ZGX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUX0lOVEVSVkFMLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8zMigweEZGLDB4RkYsMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMzIpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMCksCisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9DSEFOR0VfU0VOU0lUSVZJVFlfQUJTKSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTSxISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01BWCksCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NLEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUlOKSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisKKyAgICAvL2lucHV0IHJlcG9ydHMgKHRyYW5zbWl0KQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5ULAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9TVEFURV9DSEFOR0VEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BST1BFUlRZX0NIQU5HRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREFUQV9VUERBVEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BPTExfUkVTUE9OU0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfQ0hBTkdFX1NFTlNJVElWSVRZX1NFTCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9VU0FHRSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksIC8vID0gSElEX1VTQUdFX1NFTlNPUl9UWVBFX01PVElPTl9TUEVFRE9NRVRFUgorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLCAvLyA9IEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fU1BFRUQgdmFsdWUKKworICAgIEhJRF9FTkRfQ09MTEVDVElPTgorfTsKKworCisvKioKKyAqIEZ1bGwgY3VzdG9tIHNlbnNvciBleGFtcGxlIHdpdGggZmVhdHVyZS4KKyAqLworY29uc3QgdW5zaWduZWQgY2hhciBjdXM0X3JlcG9ydF9kZXNjcmlwdG9yW10gPSB7CisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLCAgICAgICAgIC8vIFVTQUdFX1BBR0UgKFNlbnNvcikKKyAgICBISURfVVNBR0VfU0VOU09SX1RZUEVfT1RIRVJfQ1VTVE9NLCAvLyBVU0FHRSAoU2ltcGxlIEN1c3RvbSkKKyAgICBISURfQ09MTEVDVElPTihBcHBsaWNhdGlvbiksCisKKyAgICAvL2ZlYXR1cmUgcmVwb3J0cyAoeG1pdC9yZWNlaXZlKQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1NFTlNPUl9DT05ORUNUSU9OX1RZUEUsICAvLyBOQXJ5CisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoMiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfSU5URUdSQVRFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfQVRUQUNIRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0VYVEVSTkFMX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX1VOREVGSU5FRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMF9GVUxMX1BPV0VSX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QxX0xPV19QT1dFUl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMl9TVEFOREJZX1dJVEhfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EM19TTEVFUF9XSVRIX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDRfUE9XRVJfT0ZGX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUX0lOVEVSVkFMLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8zMigweEZGLDB4RkYsMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMzIpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMCksCisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9DSEFOR0VfU0VOU0lUSVZJVFlfQUJTKSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTSxISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01BWCksCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NLEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUlOKSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisKKyAgICAvL2lucHV0IHJlcG9ydHMgKHRyYW5zbWl0KQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5ULAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9TVEFURV9DSEFOR0VEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BST1BFUlRZX0NIQU5HRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREFUQV9VUERBVEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BPTExfUkVTUE9OU0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfQ0hBTkdFX1NFTlNJVElWSVRZX1NFTCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9VU0FHRSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9CT09MRUFOX0FSUkFZLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzEsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzIsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzMsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzQsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzUsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzYsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKworI2lmIDEgLy9kZWZpbmUgdmVuZG9yLXNwZWNpZmljIChub24tc3BlYykgY3VzdG9tIGRhdGFmaWVsZHMKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzcsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzgsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzksCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzEwLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8xMSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMTIsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzEzLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8xNCwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMTUsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzE2LAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8xNywKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMTgsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzE5LAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8yMCwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMjEsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzIyLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8yMywKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMjQsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzI1LAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8yNiwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMjcsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzI4LAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisjZW5kaWYKKyAgICBISURfRU5EX0NPTExFQ1RJT04KK307CisKKworLyoqCisgKiBIdW1hbiBwcmVzZW5jZSBzZW5zb3IgZXhhbXBsZS4KKyAqLworY29uc3QgdW5zaWduZWQgY2hhciBwcmVzX3JlcG9ydF9kZXNjcmlwdG9yW10gPSB7CisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9CSU9NRVRSSUNfUFJFU0VOQ0UsCisgICAgSElEX0NPTExFQ1RJT04oUGh5c2ljYWwpLAorCisgICAgLy9mZWF0dXJlIHJlcG9ydHMgKHhtaXQvcmVjZWl2ZSkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9TRU5TT1JfQ09OTkVDVElPTl9UWVBFLCAgLy8gTkFyeQorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDIpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0lOVEVHUkFURURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0FUVEFDSEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19FWFRFUk5BTF9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9VTkRFRklORURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDBfRlVMTF9QT1dFUl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMV9MT1dfUE9XRVJfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDJfU1RBTkRCWV9XSVRIX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDNfU0xFRVBfV0lUSF9XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0Q0X1BPV0VSX09GRl9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVF9JTlRFUlZBTCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMzIoMHhGRiwweEZGLDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDMyKSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDApLAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisKKyAgICAvL2lucHV0IHJlcG9ydHMgKHRyYW5zbWl0KQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5ULAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9TVEFURV9DSEFOR0VEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BST1BFUlRZX0NIQU5HRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREFUQV9VUERBVEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BPTExfUkVTUE9OU0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfQ0hBTkdFX1NFTlNJVElWSVRZX1NFTCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0JJT01FVFJJQ19IVU1BTl9QUkVTRU5DRSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwgLy8gRmFsc2UKKyAgICBISURfTE9HSUNBTF9NQVhfOCgxKSwgLy8gVHJ1ZQorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorCisgICAgSElEX0VORF9DT0xMRUNUSU9OCit9OworCisKKy8qKgorICogUHJveGltaXR5IHNlbnNvciBleGFtcGxlLgorICovCitjb25zdCB1bnNpZ25lZCBjaGFyIHByb3hfcmVwb3J0X2Rlc2NyaXB0b3JbXSA9IHsKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0JJT01FVFJJQ19QUk9YSU1JVFksCisgICAgSElEX0NPTExFQ1RJT04oUGh5c2ljYWwpLAorCisgICAgLy9mZWF0dXJlIHJlcG9ydHMgKHhtaXQvcmVjZWl2ZSkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9TRU5TT1JfQ09OTkVDVElPTl9UWVBFLCAgLy8gTkFyeQorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDIpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0lOVEVHUkFURURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0FUVEFDSEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19FWFRFUk5BTF9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9VTkRFRklORURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDBfRlVMTF9QT1dFUl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMV9MT1dfUE9XRVJfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDJfU1RBTkRCWV9XSVRIX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDNfU0xFRVBfV0lUSF9XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0Q0X1BPV0VSX09GRl9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVF9JTlRFUlZBTCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMzIoMHhGRiwweEZGLDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDMyKSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDApLAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9CSU9NRVRSSUNfSFVNQU5fUFJPWElNSVRZX1JBTkdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX0NIQU5HRV9TRU5TSVRJVklUWV9BQlMpLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBEKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0ICJtZXRlciIgdG8gImNlbnRpbWV0ZXIiCisgICAgLy8gdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfQklPTUVUUklDX0hVTUFOX1BST1hJTUlUWV9SQU5HRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NQVgpLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRCksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCAibWV0ZXIiIHRvICJjZW50aW1ldGVyIgorICAgIC8vIHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX0JJT01FVFJJQ19IVU1BTl9QUk9YSU1JVFlfUkFOR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUlOKSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEQpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgIm1ldGVyIiB0byAiY2VudGltZXRlciIKKyAgICAvLyB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisKKyAgICAvL2lucHV0IHJlcG9ydHMgKHRyYW5zbWl0KQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5ULAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9TVEFURV9DSEFOR0VEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BST1BFUlRZX0NIQU5HRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREFUQV9VUERBVEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BPTExfUkVTUE9OU0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfQ0hBTkdFX1NFTlNJVElWSVRZX1NFTCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0JJT01FVFJJQ19IVU1BTl9QUk9YSU1JVFlfT1VUX09GX1JBTkdFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLCAvLyBGYWxzZQorICAgIEhJRF9MT0dJQ0FMX01BWF84KDEpLCAvLyBUcnVlCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0JJT01FVFJJQ19IVU1BTl9QUk9YSU1JVFlfUkFOR0UsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBEKSwgIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCAibWV0ZXIiIHRvICJjZW50aW1ldGVyIgorICAgIC8vIHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisKKyAgICBISURfRU5EX0NPTExFQ1RJT04KK307CisKKworLyoqCisgKiBCYXJvbWV0ZXIgc2Vuc29yIGV4YW1wbGUuCisgKi8KK2NvbnN0IHVuc2lnbmVkIGNoYXIgYmFyX3JlcG9ydF9kZXNjcmlwdG9yW10gPSB7CisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9FTlZJUk9OTUVOVEFMX0FUTU9TUEhFUklDX1BSRVNTVVJFLAorICAgIEhJRF9DT0xMRUNUSU9OKFBoeXNpY2FsKSwKKworICAgIC8vZmVhdHVyZSByZXBvcnRzICh4bWl0L3JlY2VpdmUpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfU0VOU09SX0NPTk5FQ1RJT05fVFlQRSwgIC8vIE5BcnkKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCgyKSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19JTlRFR1JBVEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19BVFRBQ0hFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfRVhURVJOQUxfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfVU5ERUZJTkVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QwX0ZVTExfUE9XRVJfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDFfTE9XX1BPV0VSX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QyX1NUQU5EQllfV0lUSF9XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QzX1NMRUVQX1dJVEhfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9ENF9QT1dFUl9PRkZfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRfSU5URVJWQUwsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzMyKDB4RkYsMHhGRiwweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgzMiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgwKSwKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfRU5WSVJPTk1FTlRBTF9BVE1PU1BIRVJJQ19QUkVTU1VSRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9DSEFOR0VfU0VOU0lUSVZJVFlfQUJTKSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCAiQmFyIiB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfRU5WSVJPTk1FTlRBTF9BVE1PU1BIRVJJQ19QUkVTU1VSRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NQVgpLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0ICJCYXIiIHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTlZJUk9OTUVOVEFMX0FUTU9TUEhFUklDX1BSRVNTVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01JTiksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgIkJhciIgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKworICAgIC8vaW5wdXQgcmVwb3J0cyAodHJhbnNtaXQpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlQsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1NUQVRFX0NIQU5HRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9EQVRBX1VQREFURURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUE9MTF9SRVNQT05TRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9DSEFOR0VfU0VOU0lUSVZJVFlfU0VMLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfRU5WSVJPTk1FTlRBTF9BVE1PU1BIRVJJQ19QUkVTU1VSRSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCAiQmFyIiB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKworICAgIEhJRF9FTkRfQ09MTEVDVElPTgorfTsKKworCisvKioKKyAqIEh1bWlkaXR5IHNlbnNvciBleGFtcGxlLgorICovCitjb25zdCB1bnNpZ25lZCBjaGFyIGh1bWlfcmVwb3J0X2Rlc2NyaXB0b3JbXSA9IHsKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0VOVklST05NRU5UQUxfSFVNSURJVFksCisgICAgSElEX0NPTExFQ1RJT04oUGh5c2ljYWwpLAorCisgICAgLy9mZWF0dXJlIHJlcG9ydHMgKHhtaXQvcmVjZWl2ZSkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9TRU5TT1JfQ09OTkVDVElPTl9UWVBFLCAgLy8gTkFyeQorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDIpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0lOVEVHUkFURURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0FUVEFDSEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19FWFRFUk5BTF9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9VTkRFRklORURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDBfRlVMTF9QT1dFUl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMV9MT1dfUE9XRVJfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDJfU1RBTkRCWV9XSVRIX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDNfU0xFRVBfV0lUSF9XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0Q0X1BPV0VSX09GRl9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVF9JTlRFUlZBTCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMzIoMHhGRiwweEZGLDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDMyKSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDApLAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTlZJUk9OTUVOVEFMX1JFTEFUSVZFX0hVTUlESVRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX0NIQU5HRV9TRU5TSVRJVklUWV9BQlMpLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweDEwLDB4MjcpLCAvLyAxMDAwMCA9IDAuMDAgdG8gMTAwLjAwIHBlcmNlbnQgd2l0aCAyIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfRU5WSVJPTk1FTlRBTF9SRUxBVElWRV9IVU1JRElUWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NQVgpLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweDEwLDB4MjcpLCAvLyAxMDAwMCA9IDAuMDAgdG8gMTAwLjAwIHBlcmNlbnQgd2l0aCAyIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfRU5WSVJPTk1FTlRBTF9SRUxBVElWRV9IVU1JRElUWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NSU4pLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweDEwLDB4MjcpLCAvLyAxMDAwMCA9IDAuMDAgdG8gMTAwLjAwIHBlcmNlbnQgd2l0aCAyIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorCisgICAgLy9pbnB1dCByZXBvcnRzICh0cmFuc21pdCkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfU1RBVEVfQ0hBTkdFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QUk9QRVJUWV9DSEFOR0VEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RBVEFfVVBEQVRFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QT0xMX1JFU1BPTlNFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0NIQU5HRV9TRU5TSVRJVklUWV9TRUwsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTlZJUk9OTUVOVEFMX1JFTEFUSVZFX0hVTUlESVRZLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweDEwLDB4MjcpLCAvLyAxMDAwMCA9IDAuMDAgdG8gMTAwLjAwIHBlcmNlbnQgd2l0aCAyIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCAicGVyY2VudCIKKyAgICAvLyB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKworICAgIEhJRF9FTkRfQ09MTEVDVElPTgorfTsKKworCisvKioKKyAqIFRlbXBlcmF0dXJlIHNlbnNvciBleGFtcGxlLgorICovCitjb25zdCB1bnNpZ25lZCBjaGFyIHRlbXBfcmVwb3J0X2Rlc2NyaXB0b3JbXSA9IHsKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0VOVklST05NRU5UQUxfVEVNUEVSQVRVUkUsCisgICAgSElEX0NPTExFQ1RJT04oUGh5c2ljYWwpLAorCisgICAgLy9mZWF0dXJlIHJlcG9ydHMgKHhtaXQvcmVjZWl2ZSkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9TRU5TT1JfQ09OTkVDVElPTl9UWVBFLCAgLy8gTkFyeQorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDIpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0lOVEVHUkFURURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0FUVEFDSEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19FWFRFUk5BTF9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9VTkRFRklORURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDBfRlVMTF9QT1dFUl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMV9MT1dfUE9XRVJfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDJfU1RBTkRCWV9XSVRIX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDNfU0xFRVBfV0lUSF9XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0Q0X1BPV0VSX09GRl9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVF9JTlRFUlZBTCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMzIoMHhGRiwweEZGLDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDMyKSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDApLAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTlZJUk9OTUVOVEFMX1RFTVBFUkFUVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX0NIQU5HRV9TRU5TSVRJVklUWV9BQlMpLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0ICJDZWxzaXVzIgorICAgIC8vIHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTlZJUk9OTUVOVEFMX1RFTVBFUkFUVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01BWCksCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0ICJDZWxzaXVzIgorICAgIC8vIHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTlZJUk9OTUVOVEFMX1RFTVBFUkFUVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01JTiksCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0ICJDZWxzaXVzIgorICAgIC8vIHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisKKyAgICAvL2lucHV0IHJlcG9ydHMgKHRyYW5zbWl0KQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5ULAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDE2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfU1RBVEVfQ0hBTkdFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QUk9QRVJUWV9DSEFOR0VEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RBVEFfVVBEQVRFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QT0xMX1JFU1BPTlNFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0NIQU5HRV9TRU5TSVRJVklUWV9TRUwsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTlZJUk9OTUVOVEFMX1RFTVBFUkFUVVJFLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCAiQ2Vsc2l1cyIKKyAgICAvLyB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKworICAgIEhJRF9FTkRfQ09MTEVDVElPTgorfTsKKworCisvKioKKyAqIEFtYmllbnQgbGlnaHQgc2Vuc29yIGV4YW1wbGUuCisgKi8KK2NvbnN0IHVuc2lnbmVkIGNoYXIgYWxzX3JlcG9ydF9kZXNjcmlwdG9yW10gPSB7CisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLCAgICAgICAgIC8vIFVTQUdFX1BBR0UgKFNlbnNvcikKKyAgICBISURfVVNBR0VfU0VOU09SX1RZUEVfTElHSFRfQU1CSUVOVExJR0hULCAvLyBVU0FHRSAoQW1iaWVudExpZ2h0KQorICAgIEhJRF9DT0xMRUNUSU9OKFBoeXNpY2FsKSwKKworICAgIC8vZmVhdHVyZSByZXBvcnRzICh4bWl0L3JlY2VpdmUpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfU0VOU09SX0NPTk5FQ1RJT05fVFlQRSwgIC8vIE5BcnkKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCgyKSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19JTlRFR1JBVEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19BVFRBQ0hFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfRVhURVJOQUxfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfVU5ERUZJTkVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QwX0ZVTExfUE9XRVJfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDFfTE9XX1BPV0VSX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QyX1NUQU5EQllfV0lUSF9XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QzX1NMRUVQX1dJVEhfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9ENF9QT1dFUl9PRkZfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRfSU5URVJWQUwsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzMyKDB4RkYsMHhGRiwweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgzMiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgwKSwKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfTElHSFRfSUxMVU1JTkFOQ0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfQ0hBTkdFX1NFTlNJVElWSVRZX1JFTF9QQ1QpLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweDEwLDB4MjcpLCAvLyAxMDAwMCA9IDAuMDAgdG8gMTAwLjAwIHBlcmNlbnQgd2l0aCAyIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksICAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfTElHSFRfSUxMVU1JTkFOQ0UsSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NQVgpLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBGKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMSBkaWdpdCBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfTElHSFRfSUxMVU1JTkFOQ0UsSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NSU4pLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBGKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMSBkaWdpdCBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorCisgICAgLy9hZGQgdGhpcyBkZWZpbml0aW9uIGlmIHJlcXVpcmVkIGJ5IHRoZSBzcGVjaWZpYyBhcHBsaWNhdGlvbgorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVTUE9OU0VfQ1VSVkUsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxMCksIC8vYXMgcmVxdWlyZWQgZm9yIG4gcGFpciBvZiB2YWx1ZXMKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDApLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAwIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKworICAgIC8vaW5wdXQgcmVwb3J0cyAodHJhbnNtaXQpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlQsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1NUQVRFX0NIQU5HRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9EQVRBX1VQREFURURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUE9MTF9SRVNQT05TRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9DSEFOR0VfU0VOU0lUSVZJVFlfU0VMLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTElHSFRfSUxMVU1JTkFOQ0UsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRiksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDEgZGlnaXQgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MSUdIVF9DT0xPUl9URU1QRVJBVFVSRSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgwKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xJR0hUX0NIUk9NQVRJQ0lUWV9YLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEMpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSA0IGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xJR0hUX0NIUk9NQVRJQ0lUWV9ZLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEMpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSA0IGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisKKyAgICBISURfRU5EX0NPTExFQ1RJT04KK307CisKKworLyoqCisgKiAzRCBhY2NlbGVyb21ldGVyIHNlbnNvciBleGFtcGxlLgorICovCitjb25zdCB1bnNpZ25lZCBjaGFyIGFjY2VsM19yZXBvcnRfZGVzY3JpcHRvcltdID0geworICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1RZUEVfTU9USU9OX0FDQ0VMRVJPTUVURVJfM0QsCisgICAgSElEX0NPTExFQ1RJT04oUGh5c2ljYWwpLAorCisgICAgLy9mZWF0dXJlIHJlcG9ydHMgKHhtaXQvcmVjZWl2ZSkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9TRU5TT1JfQ09OTkVDVElPTl9UWVBFLCAgLy8gTkFyeQorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDIpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0lOVEVHUkFURURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0FUVEFDSEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19FWFRFUk5BTF9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9VTkRFRklORURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDBfRlVMTF9QT1dFUl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMV9MT1dfUE9XRVJfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDJfU1RBTkRCWV9XSVRIX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDNfU0xFRVBfV0lUSF9XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0Q0X1BPV0VSX09GRl9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVF9JTlRFUlZBTCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMzIoMHhGRiwweEZGLDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDMyKSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDApLAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9BQ0NFTEVSQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfQ0hBTkdFX1NFTlNJVElWSVRZX0FCUyksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAgLy8gc2NhbGUgZGVmYXVsdCB1bml0IEdzIHRvIGNlbnRpLUdzCisgICAgLy8gdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IEdzIGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fQUNDRUxFUkFUSU9OLEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUFYKSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAgLy8gc2NhbGUgZGVmYXVsdCB1bml0IEdzIHRvIGNlbnRpLUdzCisgICAgLy8gdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IEdzIGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fQUNDRUxFUkFUSU9OLEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUlOKSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAgLy8gc2NhbGUgZGVmYXVsdCB1bml0IEdzIHRvIGNlbnRpLUdzCisgICAgLy8gdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IEdzIGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorCisgICAgLy9pbnB1dCByZXBvcnRzICh0cmFuc21pdCkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfU1RBVEVfQ0hBTkdFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QUk9QRVJUWV9DSEFOR0VEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RBVEFfVVBEQVRFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QT0xMX1JFU1BPTlNFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0NIQU5HRV9TRU5TSVRJVklUWV9TRUwsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fQUNDRUxFUkFUSU9OX1hfQVhJUywKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAgLy8gc2NhbGUgZGVmYXVsdCB1bml0IEdzIHRvIGNlbnRpLUdzCisgICAgLy8gdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IEdzIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX0FDQ0VMRVJBVElPTl9ZX0FYSVMsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCBHcyB0byBjZW50aS1HcworICAgIC8vIHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCBHcyBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9BQ0NFTEVSQVRJT05fWl9BWElTLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksICAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgR3MgdG8gY2VudGktR3MKKyAgICAvLyB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgR3MgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorCisgICAgLy9pbmNsdWRlIHRoZSBmb2xsb3dpbmcgZGF0YWZpZWxkIGlmIHJlcXVpcmVkIHRvIHN1cHBvcnQgdGhlIJNzaGFrZZQgZXZlbnQKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLCAvLyBGYWxzZSA9IFN0aWxsCisgICAgSElEX0xPR0lDQUxfTUFYXzgoMSksIC8vIFRydWUgPSBJbiBNb3Rpb24KKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKworICAgIEhJRF9FTkRfQ09MTEVDVElPTgorfTsKKworCisvKioKKyAqIDNEIGd5cm9zY29wZSBzZW5zb3IgZXhhbXBsZS4KKyAqLworY29uc3QgdW5zaWduZWQgY2hhciBneXJvM19yZXBvcnRfZGVzY3JpcHRvcltdID0geworICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1RZUEVfTU9USU9OX0dZUk9NRVRFUl8zRCwKKyAgICBISURfQ09MTEVDVElPTihQaHlzaWNhbCksCisKKyAgICAvL2ZlYXR1cmUgcmVwb3J0cyAoeG1pdC9yZWNlaXZlKQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1NFTlNPUl9DT05ORUNUSU9OX1RZUEUsICAvLyBOQXJ5CisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoMiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfSU5URUdSQVRFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfQVRUQUNIRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0VYVEVSTkFMX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX1VOREVGSU5FRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMF9GVUxMX1BPV0VSX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QxX0xPV19QT1dFUl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMl9TVEFOREJZX1dJVEhfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EM19TTEVFUF9XSVRIX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDRfUE9XRVJfT0ZGX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUX0lOVEVSVkFMLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8zMigweEZGLDB4RkYsMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMzIpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMCksCisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9BTkdVTEFSX1ZFTE9DSVRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX0NIQU5HRV9TRU5TSVRJVklUWV9BQlMpLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9BTkdVTEFSX1ZFTE9DSVRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01BWCksCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9BTkdVTEFSX1ZFTE9DSVRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01JTiksCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKworICAgIC8vaW5wdXQgcmVwb3J0cyAodHJhbnNtaXQpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlQsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1NUQVRFX0NIQU5HRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9EQVRBX1VQREFURURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUE9MTF9SRVNQT05TRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9DSEFOR0VfU0VOU0lUSVZJVFlfU0VMLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX0FOR1VMQVJfVkVMT0NJVFlfWF9BWElTLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fQU5HVUxBUl9WRUxPQ0lUWV9ZX0FYSVMsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9BTkdVTEFSX1ZFTE9DSVRZX1pfQVhJUywKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKworICAgIEhJRF9FTkRfQ09MTEVDVElPTgorfTsKKworCisvKioKKyAqIDNEIGNvbXBhc3Mgc2Vuc29yIGV4YW1wbGUuCisgKi8KK2NvbnN0IHVuc2lnbmVkIGNoYXIgY29tcDNfcmVwb3J0X2Rlc2NyaXB0b3JbXSA9IHsKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9UWVBFX09SSUVOVEFUSU9OX0NPTVBBU1NfM0QsCisgICAgSElEX0NPTExFQ1RJT04oUGh5c2ljYWwpLAorCisgICAgLy9mZWF0dXJlIHJlcG9ydHMgKHhtaXQvcmVjZWl2ZSkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9TRU5TT1JfQ09OTkVDVElPTl9UWVBFLCAgLy8gTkFyeQorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDIpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0lOVEVHUkFURURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0FUVEFDSEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19FWFRFUk5BTF9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9VTkRFRklORURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDBfRlVMTF9QT1dFUl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMV9MT1dfUE9XRVJfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDJfU1RBTkRCWV9XSVRIX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDNfU0xFRVBfV0lUSF9XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0Q0X1BPV0VSX09GRl9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVF9JTlRFUlZBTCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMzIoMHhGRiwweEZGLDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDMyKSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDApLAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRJQ19IRUFESU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX0NIQU5HRV9TRU5TSVRJVklUWV9BQlMpLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVElDX0hFQURJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUFYKSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEYpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAxIGRpZ2l0IHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRJQ19IRUFESU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01JTiksCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBGKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMSBkaWdpdCBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUSUNfRkxVWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9DSEFOR0VfU0VOU0lUSVZJVFlfQUJTKSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRJQ19GTFVYLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01BWCksCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBGKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMSBkaWdpdCBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUSUNfRkxVWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NSU4pLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRiksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDEgZGlnaXQgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKworICAgIC8vaW5wdXQgcmVwb3J0cyAodHJhbnNtaXQpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlQsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1NUQVRFX0NIQU5HRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9EQVRBX1VQREFURURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUE9MTF9SRVNQT05TRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9DSEFOR0VfU0VOU0lUSVZJVFlfU0VMLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fQ09NUEVOU0FURURfTUFHTkVUSUNfTk9SVEgsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBGKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMSBkaWdpdCBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fQ09NUEVOU0FURURfVFJVRV9OT1JUSCwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEYpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAxIGRpZ2l0IHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRJQ19OT1JUSCwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEYpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAxIGRpZ2l0IHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9UUlVFX05PUlRILAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRiksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDEgZGlnaXQgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVElDX0ZMVVhfWF9BWElTLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRCksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byAibWlsbGlHYXVzcyIKKyAgICAvLyB0byBwcm92aWRlIDMgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRJQ19GTFVYX1lfQVhJUywKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEQpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gIm1pbGxpR2F1c3MiCisgICAgLy8gdG8gcHJvdmlkZSAzIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUSUNfRkxVWF9aX0FYSVMsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBEKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvICJtaWxsaUdhdXNzIgorICAgIC8vIHRvIHByb3ZpZGUgMyBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVE9NRVRFUl9BQ0NVUkFDWSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCgyKSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUT01FVEVSX0FDQ1VSQUNZX0xPVywKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUT01FVEVSX0FDQ1VSQUNZX01FRElVTSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUT01FVEVSX0FDQ1VSQUNZX0hJR0gsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorCisgICAgSElEX0VORF9DT0xMRUNUSU9OCit9OworCisKKy8qKgorICogM0QgaW5jbGlub21hdGVyIGV4YW1wbGUuCisgKi8KK2NvbnN0IHVuc2lnbmVkIGNoYXIgaW5jM19yZXBvcnRfZGVzY3JpcHRvcltdID0geworICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1RZUEVfT1JJRU5UQVRJT05fSU5DTElOT01FVEVSXzNELAorICAgIEhJRF9DT0xMRUNUSU9OKFBoeXNpY2FsKSwKKworICAgIC8vZmVhdHVyZSByZXBvcnRzICh4bWl0L3JlY2VpdmUpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfU0VOU09SX0NPTk5FQ1RJT05fVFlQRSwgIC8vIE5BcnkKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCgyKSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19JTlRFR1JBVEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19BVFRBQ0hFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfRVhURVJOQUxfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfVU5ERUZJTkVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QwX0ZVTExfUE9XRVJfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDFfTE9XX1BPV0VSX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QyX1NUQU5EQllfV0lUSF9XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QzX1NMRUVQX1dJVEhfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9ENF9QT1dFUl9PRkZfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRfSU5URVJWQUwsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzMyKDB4RkYsMHhGRiwweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgzMiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgwKSwKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fVElMVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9DSEFOR0VfU0VOU0lUSVZJVFlfQUJTKSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9USUxULEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUFYKSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fVElMVCxISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01JTiksCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKworICAgIC8vaW5wdXQgcmVwb3J0cyAodHJhbnNtaXQpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlQsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1NUQVRFX0NIQU5HRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9EQVRBX1VQREFURURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUE9MTF9SRVNQT05TRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9DSEFOR0VfU0VOU0lUSVZJVFlfU0VMLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fVElMVF9YLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9USUxUX1ksCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX1RJTFRfWiwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUT01FVEVSX0FDQ1VSQUNZLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDIpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRPTUVURVJfQUNDVVJBQ1lfTE9XLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRPTUVURVJfQUNDVVJBQ1lfTUVESVVNLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRPTUVURVJfQUNDVVJBQ1lfSElHSCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisKKyAgICBISURfRU5EX0NPTExFQ1RJT04KK307CisKKworLyoqCisgKiBEZXZpY2Ugb3JpZW50YXRpb24gc2Vuc29yIGV4YW1wbGUuIE5vdGUgdGhpcyBtYXBzIHRvIHJvdGF0aW9uIHZlY3RvciBzZW5zb3IgaW4gYW5kcm9pZC4KKyAqLworY29uc3QgdW5zaWduZWQgY2hhciBkZXZvcl9yZXBvcnRfZGVzY3JpcHRvcltdID0geworICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1RZUEVfT1JJRU5UQVRJT05fREVWSUNFX09SSUVOVEFUSU9OLAorICAgIEhJRF9DT0xMRUNUSU9OKFBoeXNpY2FsKSwKKworICAgIC8vZmVhdHVyZSByZXBvcnRzICh4bWl0L3JlY2VpdmUpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfU0VOU09SX0NPTk5FQ1RJT05fVFlQRSwgIC8vIE5BcnkKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCgyKSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19JTlRFR1JBVEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19BVFRBQ0hFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfRVhURVJOQUxfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfVU5ERUZJTkVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QwX0ZVTExfUE9XRVJfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDFfTE9XX1BPV0VSX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QyX1NUQU5EQllfV0lUSF9XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QzX1NMRUVQX1dJVEhfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9ENF9QT1dFUl9PRkZfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRfSU5URVJWQUwsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzMyKDB4RkYsMHhGRiwweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgzMiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgwKSwKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ0hBTkdFX1NFTlNJVElWSVRZX0FCUywKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCAibWV0ZXIiIHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9RVUFURVJOSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX0NIQU5HRV9TRU5TSVRJVklUWV9BQlMpLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX1FVQVRFUk5JT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUFYKSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MDEpLAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9RVUFURVJOSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01JTiksCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDAxKSwKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorCisgICAgLy9pbmNsdWRlIHRoaXMgaWYgdGhlIHZhbHVlcyBhcmUgY2FsY3VsYXRlZCBpbiBmaXJtd2FyZQorICAgIC8vb3RoZXJ3aXNlLCB0aGUgZHJpdmVyIHdpbGwgY2FsY3VsYXRlIHRoZXNlIHZhbHVlcyBmcm9tIHRoZSBRdWF0ZXJuaW9uCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9ST1RBVElPTl9NQVRSSVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfQ0hBTkdFX1NFTlNJVElWSVRZX0FCUyksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9ST1RBVElPTl9NQVRSSVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUFYKSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9ST1RBVElPTl9NQVRSSVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUlOKSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisKKyAgICAvL2lucHV0IHJlcG9ydHMgKHRyYW5zbWl0KQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5ULAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9TVEFURV9DSEFOR0VEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BST1BFUlRZX0NIQU5HRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREFUQV9VUERBVEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BPTExfUkVTUE9OU0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfQ0hBTkdFX1NFTlNJVElWSVRZX1NFTCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX1FVQVRFUk5JT04sCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCg0KSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKworICAgIC8vaW5jbHVkZSB0aGlzIGlmIHRoZSB2YWx1ZXMgYXJlIGNhbGN1bGF0ZWQgaW4gZmlybXdhcmUKKyAgICAvL290aGVyd2lzZSwgdGhlIGRyaXZlciB3aWxsIGNhbGN1bGF0ZSB0aGVzZSB2YWx1ZXMgZnJvbSB0aGUgUXVhdGVybmlvbgorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9ST1RBVElPTl9NQVRSSVgsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCg5KSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBGKSwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKworICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRPTUVURVJfQUNDVVJBQ1ksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoMiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVE9NRVRFUl9BQ0NVUkFDWV9MT1csCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVE9NRVRFUl9BQ0NVUkFDWV9NRURJVU0sCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVE9NRVRFUl9BQ0NVUkFDWV9ISUdILAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKworICAgIEhJRF9FTkRfQ09MTEVDVElPTgorfTsKK30gLy8gYW5ub3ltb3VzIG5hbWVzcGFjZQorCisvKioKKyAqIEdsb2JhbCB0ZXN0IHZlY3RvciBlbnRyeS4KKyAqLworI2RlZmluZSBURVNUX0RFU0NSSVBUT1IobmFtZSkgXAorICAgIHsgbmFtZSAjIyBfcmVwb3J0X2Rlc2NyaXB0b3IsIHNpemVvZihuYW1lICMjIF9yZXBvcnRfZGVzY3JpcHRvciksICNuYW1lIH0KKworY29uc3QgVGVzdEhpZERlc2NyaXB0b3IgZ0Rlc2NyaXB0b3JBcnJheVtdID0geworICAgIFRFU1RfREVTQ1JJUFRPUihhY2NlbDMpLAorICAgIFRFU1RfREVTQ1JJUFRPUihjb2wxKSwKKyAgICBURVNUX0RFU0NSSVBUT1IoY29sMiksCisgICAgVEVTVF9ERVNDUklQVE9SKGNvbDMpLAorICAgIFRFU1RfREVTQ1JJUFRPUihjdXMxKSwKKyAgICBURVNUX0RFU0NSSVBUT1IoY3VzMiksCisgICAgVEVTVF9ERVNDUklQVE9SKGN1czMpLAorICAgIFRFU1RfREVTQ1JJUFRPUihjdXM0KSwKKyAgICBURVNUX0RFU0NSSVBUT1IocHJlcyksCisgICAgVEVTVF9ERVNDUklQVE9SKHByb3gpLAorICAgIFRFU1RfREVTQ1JJUFRPUihiYXIpLAorICAgIFRFU1RfREVTQ1JJUFRPUihodW1pKSwKKyAgICBURVNUX0RFU0NSSVBUT1IodGVtcCksCisgICAgVEVTVF9ERVNDUklQVE9SKGFscyksCisgICAgVEVTVF9ERVNDUklQVE9SKGd5cm8zKSwKKyAgICBURVNUX0RFU0NSSVBUT1IoY29tcDMpLAorICAgIFRFU1RfREVTQ1JJUFRPUihpbmMzKSwKKyAgICBURVNUX0RFU0NSSVBUT1IoZGV2b3IpLAorICAgIHtudWxscHRyLCAwLCBudWxscHRyfSAvL3NlbnRpbmVsCit9OworI3VuZGVmIFRFU1RfREVTQ1JJUFRPUgorCitjb25zdCBUZXN0SGlkRGVzY3JpcHRvciAqZmluZFRlc3REZXNjcmlwdG9yKGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgICBpZiAobmFtZSA9PSBudWxscHRyKSB7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGZvciAoY29uc3QgVGVzdEhpZERlc2NyaXB0b3IgKnAgPSBnRGVzY3JpcHRvckFycmF5OyA7ICsrcCkgeworICAgICAgICBpZiAocC0+ZGF0YSA9PSBudWxscHRyIHx8IHAtPmxlbiA9PSAwKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RyY21wKHAtPm5hbWUsIG5hbWUpID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL3Rlc3QvVGVzdEhpZERlc2NyaXB0b3IuaCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy90ZXN0L1Rlc3RIaWREZXNjcmlwdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE3Y2I3MgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy90ZXN0L1Rlc3RIaWREZXNjcmlwdG9yLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaWZuZGVmIEhJRFVUSUxfVEVTVF9ISURERVNDUklQVE9SX0hfCisjZGVmaW5lIEhJRFVUSUxfVEVTVF9ISURERVNDUklQVE9SX0hfCisKKyNpbmNsdWRlIDxjc3RkZGVmPgorCitzdHJ1Y3QgVGVzdEhpZERlc2NyaXB0b3IgeworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGE7CisgICAgc2l6ZV90IGxlbjsKKyAgICBjb25zdCBjaGFyICpuYW1lOworfTsKKworZXh0ZXJuIGNvbnN0IFRlc3RIaWREZXNjcmlwdG9yIGdEZXNjcmlwdG9yQXJyYXlbXTsKK2NvbnN0IFRlc3RIaWREZXNjcmlwdG9yICpmaW5kVGVzdERlc2NyaXB0b3IoY29uc3QgY2hhciAqbmFtZSk7CisKKyNlbmRpZiAvLyBISURVVElMX1RFU1RfSElEREVTQ1JJUFRPUl9IXwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL3Rlc3QvVGVzdEhpZFNlbnNvclNwZWMuaCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy90ZXN0L1Rlc3RIaWRTZW5zb3JTcGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIyY2I2YwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy90ZXN0L1Rlc3RIaWRTZW5zb3JTcGVjLmgKQEAgLTAsMCArMSw4NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2lmbmRlZiBISURVVElMX1RFU1RfSElEU0VOU09SU1BFQ19ICisjZGVmaW5lIEhJRFVUSUxfVEVTVF9ISURTRU5TT1JTUEVDX0gKKy8qKgorICogRXhhbXBsZSBISUQgc2Vuc29yIGRlZmluaXRpb24gaW4gZnJvbSBwdWJsaXNoZWQgZG9jdW1lbnQgIkhJRCBTZW5zb3JzIFVzYWdlIgorICogKGhpZC1zZW5zb3JzLXVzYWdlLmRvY3gpLiBUaGlzIGZpbGUgaXMgYWRkZWQgYXMgcGFydCBvZiB0aGUgdGVzdCBjYXNlLgorICoKKyAqIEl0IGlzIHNsaWdodGx5IG1vZGlmaWVkIGluIG9yZGVyIHRvIGNvbXBpbGUuCisgKi8KKyNkZWZpbmUgSElEX1VTQUdFX1BBR0VfU0VOU09SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1LDB4MjAKKworLy9zZW5zb3IgY2F0ZWdvcnkgdXNhZ2VzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9DT0xMRUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDAxCisvL3NlbnNvciBjYXRlZ29yeSBiaW9tZXRyaWMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9DQVRFR09SWV9CSU9NRVRSSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4MTAKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0JJT01FVFJJQ19QUkVTRU5DRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4MTEKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0JJT01FVFJJQ19QUk9YSU1JVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4MTIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0JJT01FVFJJQ19UT1VDSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4MTMKKy8vc2Vuc29yIGNhdGVnb3J5IGVsZWN0cmljYWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9DQVRFR09SWV9FTEVDVFJJQ0FMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4MjAKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0VMRUNUUklDQUxfQ0FQQUNJVEFOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4MjEKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0VMRUNUUklDQUxfQ1VSUkVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4MjIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0VMRUNUUklDQUxfUE9XRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4MjMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0VMRUNUUklDQUxfSU5EVUNUQU5DRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4MjQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0VMRUNUUklDQUxfUkVTSVNUQU5DRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4MjUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0VMRUNUUklDQUxfVk9MVEFHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4MjYKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0VMRUNUUklDQUxfUE9URU5USU9NRVRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4MjcKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0VMRUNUUklDQUxfRlJFUVVFTkNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4MjgKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0VMRUNUUklDQUxfUEVSSU9EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4MjkKKy8vc2Vuc29yIGNhdGVnb3J5IGVudmlyb25tZW50YWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9DQVRFR09SWV9FTlZJUk9OTUVOVEFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4MzAKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0VOVklST05NRU5UQUxfQVRNT1NQSEVSSUNfUFJFU1NVUkUgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4MzEKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0VOVklST05NRU5UQUxfSFVNSURJVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4MzIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0VOVklST05NRU5UQUxfVEVNUEVSQVRVUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4MzMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0VOVklST05NRU5UQUxfV0lORF9ESVJFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4MzQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0VOVklST05NRU5UQUxfV0lORF9TUEVFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4MzUKKy8vc2Vuc29yIGNhdGVnb3J5IGxpZ2h0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfQ0FURUdPUllfTElHSFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDQwCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9MSUdIVF9BTUJJRU5UTElHSFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDQxCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9MSUdIVF9DT05TVU1FUl9JTkZSQVJFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDQyCisvL3NlbnNvciBjYXRlZ29yeSBsb2NhdGlvbgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0NBVEVHT1JZX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg1MAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTE9DQVRJT05fQlJPQURDQVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg1MQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTE9DQVRJT05fREVBRF9SRUNLT05JTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg1MgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTE9DQVRJT05fR1BTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg1MworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTE9DQVRJT05fTE9PS1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg1NAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTE9DQVRJT05fT1RIRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg1NQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTE9DQVRJT05fU1RBVElDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg1NgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTE9DQVRJT05fVFJJQU5HVUxBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg1NworLy9zZW5zb3IgY2F0ZWdvcnkgbWVjaGFuaWNhbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0NBVEVHT1JZX01FQ0hBTklDQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg2MAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTUVDSEFOSUNBTF9CT09MRUFOX1NXSVRDSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg2MQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTUVDSEFOSUNBTF9CT09MRUFOX1NXSVRDSF9BUlJBWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg2MgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTUVDSEFOSUNBTF9NVUxUSVZBTFVFX1NXSVRDSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg2MworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTUVDSEFOSUNBTF9GT1JDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg2NAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTUVDSEFOSUNBTF9QUkVTU1VSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg2NQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTUVDSEFOSUNBTF9TVFJBSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg2NgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTUVDSEFOSUNBTF9TQ0FMRV9XRUlHSFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg2NworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTUVDSEFOSUNBTF9WSUJSQVRPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg2OAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTUVDSEFOSUNBTF9IQUxMX0VGRkVDVF9TV0lUQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg2OQorLy9zZW5zb3IgY2F0ZWdvcnkgbW90aW9uCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfQ0FURUdPUllfTU9USU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDcwCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NT1RJT05fQUNDRUxFUk9NRVRFUl8xRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDcxCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NT1RJT05fQUNDRUxFUk9NRVRFUl8yRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDcyCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NT1RJT05fQUNDRUxFUk9NRVRFUl8zRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDczCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NT1RJT05fR1lST01FVEVSXzFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDc0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NT1RJT05fR1lST01FVEVSXzJEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDc1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NT1RJT05fR1lST01FVEVSXzNEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDc2CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NT1RJT05fTU9USU9OX0RFVEVDVE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDc3CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NT1RJT05fU1BFRURPTUVURVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDc4CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NT1RJT05fQUNDRUxFUk9NRVRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDc5CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NT1RJT05fR1lST01FVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDdBCisvL3NlbnNvciBjYXRlZ29yeSBvcmllbnRhdGlvbgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0NBVEVHT1JZX09SSUVOVEFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg4MAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfT1JJRU5UQVRJT05fQ09NUEFTU18xRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg4MQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfT1JJRU5UQVRJT05fQ09NUEFTU18yRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg4MgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfT1JJRU5UQVRJT05fQ09NUEFTU18zRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg4MworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfT1JJRU5UQVRJT05fSU5DTElOT01FVEVSXzFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg4NAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfT1JJRU5UQVRJT05fSU5DTElOT01FVEVSXzJEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg4NQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfT1JJRU5UQVRJT05fSU5DTElOT01FVEVSXzNEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg4NgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfT1JJRU5UQVRJT05fRElTVEFOQ0VfMUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg4NworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfT1JJRU5UQVRJT05fRElTVEFOQ0VfMkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg4OAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfT1JJRU5UQVRJT05fRElTVEFOQ0VfM0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg4OQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfT1JJRU5UQVRJT05fREVWSUNFX09SSUVOVEFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg4QQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfT1JJRU5UQVRJT05fQ09NUEFTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg4QgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfT1JJRU5UQVRJT05fSU5DTElOT01FVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg4QworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfT1JJRU5UQVRJT05fRElTVEFOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg4RAorLy9zZW5zb3IgY2F0ZWdvcnkgc2Nhbm5lcgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0NBVEVHT1JZX1NDQU5ORVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg5MAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfU0NBTk5FUl9CQVJDT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg5MQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfU0NBTk5FUl9SRklEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg5MgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfU0NBTk5FUl9ORkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg5MworLy9zZW5zb3IgY2F0ZWdvcnkgdGltZQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0NBVEVHT1JZX1RJTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHhBMAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfVElNRV9BTEFSTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHhBMQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfVElNRV9SVEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHhBMgorLy9zZW5zb3IgY2F0ZWdvcnkgb3RoZXIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9DQVRFR09SWV9PVEhFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4RTAKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX09USEVSX0NVU1RPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4RTEKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX09USEVSX0dFTkVSSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4RTIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX09USEVSX0dFTkVSSUNfRU5VTUVSQVRPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4RTMKKworLy91bml0IHVzYWdlcworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX05PVF9TUEVDSUZJRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjUsMHgwMCAgICAgICAgICAgICAgICAvLyBVbml0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfTFVYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NywweEUxLDB4MDAsMHgwMCwweDAxIC8vIFVuaXQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19LRUxWSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY3LDB4MDEsMHgwMCwweDAxLDB4MDAgLy8gVW5pdAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0ZBSFJFTkhFSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjcsMHgwMywweDAwLDB4MDEsMHgwMCAvLyBVbml0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfUEFTQ0FMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NiwweEYxLDB4RTEgICAgICAgICAgIC8vIFVuaXQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ORVdUT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY2LDB4MTEsMHhFMSAgICAgICAgICAgLy8gVW5pdAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX01FVEVSU19QRVJfU0VDT05EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjYsMHgxMSwweEYwICAgICAgICAgICAvLyBVbml0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfTUVURVJTX1BFUl9TRUNfU1FSRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NiwweDExLDB4RTAgICAgICAgICAgIC8vIFVuaXQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19GQVJBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY3LDB4RTEsMHg0RiwweDIwLDB4MDAgLy8gVW5pdAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0FNUEVSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjcsMHgwMSwweDAwLDB4MTAsMHgwMCAvLyBVbml0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfV0FUVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NiwweDIxLDB4RDEgICAgICAgICAgIC8vIFVuaXQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19IRU5SWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY3LDB4MjEsMHhFMSwweEUwLDB4MDAgLy8gVW5pdAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX09ITSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjcsMHgyMSwweEQxLDB4RTAsMHgwMCAvLyBVbml0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfVk9MVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NywweDIxLDB4RDEsMHhGMCwweDAwIC8vIFVuaXQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19IRVJUWiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY2LDB4MDEsMHhGMCAgICAgICAgICAgLy8gVW5pdAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFR1JFRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjUsMHgxNCAgICAgICAgICAgICAgICAvLyBVbml0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVHUkVFU19QRVJfU0VDT05EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NiwweDE0LDB4RjAgICAgICAgICAgIC8vIFVuaXQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERUdSRUVTX1BFUl9TRUNfU1FSRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY2LDB4MTQsMHhFMCAgICAgICAgICAgLy8gVW5pdAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX1JBRElBTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjUsMHgxMiAgICAgICAgICAgICAgICAvLyBVbml0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfUkFESUFOU19QRVJfU0VDT05EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NiwweDEyLDB4RjAgICAgICAgICAgIC8vIFVuaXQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19SQURJQU5TX1BFUl9TRUNfU1FSRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY2LDB4MTIsMHhFMCAgICAgICAgICAgLy8gVW5pdAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX1NFQ09ORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjYsMHgwMSwweDEwICAgICAgICAgICAvLyBVbml0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfR0FVU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NywweDAxLDB4RTEsMHhGMCwweDAwIC8vIFVuaXQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19HUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY2LDB4MDEsMHgwMSAgICAgICAgICAgLy8gVW5pdAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0NFTlRJTUVURVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjUsMHgxMSAgICAgICAgICAgICAgICAvLyBVbml0CisjaWZkZWYgREVGSU5FX05PTl9ISURfVU5JVFMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19DRUxTSVVTICAgICAgICAgICAgICAiVXNlIFVuaXQoS2VsdmluKSBhbmQgc3VidHJhY3QgMjczLjE1IgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0tJTE9HUkFNICAgICAgICAgICAgICJVc2UgVW5pdChncmFtKSBhbmQgVW5pdEV4cG9uZW50KDB4MDMpIgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX01FVEVSICAgICAgICAgICAgICAgICJVc2UgVW5pdChjZW50aW1ldGVyKSBhbmQgVW5pdEV4cG9uZW50KDB4MDIpIgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0JBUiAgICAgICAgICAgICAgICAgICJVc2UgVW5pdChQYXNjYWwpIGFuZCBVbml0RXhwb25lbnQoMHgwNSkiCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfS05PVCAgICAgICAgICAgICAgICAgIlVzZSBVbml0KG0vcykgYW5kIG11bHRpcGx5IGJ5IDE4NTIvMzYwMCIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19QRVJDRU5UICAgICAgICAgICAgICAiVXNlIFVuaXQoTm90X1NwZWNpZmllZCkiCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfRyAgICAgICAgICAgICAgICAgICAgIlVzZSBVbml0KG0vczIpIGFuZCBkaXZpZGUgYnkgOS44IgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX01JTExJU0VDT05EICAgICAgICAgICJVc2UgVW5pdChzZWNvbmQpIGFuZCBVbml0RXhwb25lbnQoMHgwRCkiCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfTUlMTElHQVVTUyAgICAgICAgICAgIlVzZSBVbml0KEdhdXNzKSBhbmQgVW5pdEV4cG9uZW50KDB4MEQpIgorI2VuZGlmCisvL3VuaXQgZGVwcmVjYXRlZCB1c2FnZXMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX0xVWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9LRUxWSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfQ0VMU0lVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX1BBU0NBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9ORVdUT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfTUVURVJTX1BFUl9TRUNPTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX0tJTE9HUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9NRVRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfTUVURVJTX1BFUl9TRUNfU1FSRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDkKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX0ZBUkFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9BTVBFUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfV0FUVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX0hFTlJZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBECisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9PSE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfVk9MVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX0hFUlRaICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9CQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfREVHUkVFU19BTlRJX0NMT0NLV0lTRSAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX0RFR1JFRVNfQ0xPQ0tXSVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9ERUdSRUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfREVHUkVFU19QRVJfU0VDT05EICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX0tOT1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE2CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9QRVJDRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfU0VDT05EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX01JTExJU0VDT05EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE5CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfQllURVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX01JTExJR0FVU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDCisKKy8vZGF0YSB0eXBlIHVzYWdlIG1vZGlmaWVycyAtLSB3ZSB1c2UgdGhlbSBhcyBtb2RpZmllcnMgZm9yIHNlbnNvciBwcm9wZXJ0aWVzICYgZGF0YSBmaWVsZHMKKy8vdG8gY3JlYXRlIHRocmVzaG9sZHMsIGZvciBleGFtcGxlLgorLy9OT1RFOiB0aGUgdXNhZ2UgdGFibGVzIGFjdHVhbGx5IGRlZmluZSB0aGVzZSBhcyB0d28gYnl0ZXMsIGJ1dCBpbiBvcmRlcgorLy90byBnZXQgdGhlIGRlZmluZSBtYWNyb3MgdG8gd29yayBzbyB0aGVzZSBhcmUgkW9yLWVkkiB0aGVzZSBhcmUgZGVmaW5lZAorLy9oZXJlIGFzIG9ubHkgb25lIGJ5dGUuCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCAvLyBVUworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX0NIQU5HRV9TRU5TSVRJVklUWV9BQlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAgLy8gVVMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwIC8vIFVTCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMCAvLyBVUworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX0FDQ1VSQUNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAgLy8gVVMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9SRVNPTFVUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwIC8vIFVTCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfVEhSRVNIT0xEX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MCAvLyBVUworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX1RIUkVTSE9MRF9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzAgLy8gVVMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9DQUxJQlJBVElPTl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwIC8vIFVTCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfQ0FMSUJSQVRJT05fTVVMVElQTElFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MCAvLyBVUworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX1JFUE9SVF9JTlRFUlZBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QTAgLy8gVVMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9GUkVRVUVOQ1lfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEIwIC8vIFVTCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfUEVSSU9EX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhDMCAvLyBVUworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX0NIQU5HRV9TRU5TSVRJVklUWV9SQU5HRV9QQ1QgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RDAgLy8gVVMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9DSEFOR0VfU0VOU0lUSVZJVFlfUkVMX1BDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEUwIC8vIFVTCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfVkVORE9SX1JFU0VSVkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGMCAvLyBVUworCisKKy8vc3RhdGUgdXNhZ2VzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDAxLDB4MDIgLy8gTkFyeQorLy9zdGF0ZSBzZWxlY3RvcnMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDAsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDEsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDIsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDMsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDQsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDUsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDYsMHgwOCAvLyBTZWwKKy8vc3RhdGUgZW51bXMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0IC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1IC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2IC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3IC8vIEVudW0KKy8vc3RhdGUgZGVwcmVjYXRlZCBlbnVtcworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1NUQVRFX0RFUFJFQ0FURURfVU5LTk9XTl9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9ERVBSRUNBVEVEX05PVF9BVkFJTEFCTEVfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfREVQUkVDQVRFRF9SRUFEWV9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1NUQVRFX0RFUFJFQ0FURURfTk9fREFUQV9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9ERVBSRUNBVEVEX0lOSVRJQUxJWklOR19FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfREVQUkVDQVRFRF9BQ0NFU1NfREVOSUVEX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1NUQVRFX0RFUFJFQ0FURURfRVJST1JfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYKKworLy9ldmVudCB1c2FnZXMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDIsMHgwMiAvLyBOQXJ5CisvL2V2ZW50IHNlbGVjdG9ycworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX1VOS05PV05fU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxMCwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX1NUQVRFX0NIQU5HRURfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxMSwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BST1BFUlRZX0NIQU5HRURfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxMiwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RBVEFfVVBEQVRFRF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxMywweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BPTExfUkVTUE9OU0VfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxNCwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0NIQU5HRV9TRU5TSVRJVklUWV9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxNSwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX01BWF9SRUFDSEVEX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxNiwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX01JTl9SRUFDSEVEX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxNywweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0hJR0hfVEhSRVNIT0xEX0NST1NTX1VQV0FSRF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxOCwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0hJR0hfVEhFU0hPTERfQ1JPU1NfQUJPVkVfU0VMICAgICAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0hJR0hfVEhSRVNIT0xEX0NST1NTX1VQV0FSRF9TRUwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ISUdIX1RIUkVTSE9MRF9DUk9TU19ET1dOV0FSRF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTksMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ISUdIX1RIUkVTSE9MRF9DUk9TU19CRUxPV19TRUwgICAgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ISUdIX1RIUkVTSE9MRF9DUk9TU19ET1dOV0FSRF9TRUwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9MT1dfVEhSRVNIT0xEX0NST1NTX1VQV0FSRF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MUEsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9MT1dfVEhSRVNIT0xEX0NST1NTX0FCT1ZFX1NFTCAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9MT1dfVEhSRVNIT0xEX0NST1NTX1VQV0FSRF9TRUwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9MT1dfVEhSRVNIT0xEX0NST1NTX0RPV05XQVJEX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MUIsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9MT1dfVEhSRVNIT0xEX0NST1NTX0JFTE9XX1NFTCAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9MT1dfVEhSRVNIT0xEX0NST1NTX0RPV05XQVJEX1NFTAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX1pFUk9fVEhSRVNIT0xEX0NST1NTX1VQV0FSRF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxQywweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX1pFUk9fVEhSRVNIT0xEX0NST1NTX0FCT1ZFX1NFTCAgICAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1pFUk9fVEhSRVNIT0xEX0NST1NTX1VQV0FSRF9TRUwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9aRVJPX1RIUkVTSE9MRF9DUk9TU19ET1dOV0FSRF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MUQsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9aRVJPX1RIUkVTSE9MRF9DUk9TU19CRUxPV19TRUwgICAgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9aRVJPX1RIUkVTSE9MRF9DUk9TU19ET1dOV0FSRF9TRUwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QRVJJT0RfRVhDRUVERURfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MUUsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9GUkVRVUVOQ1lfRVhDRUVERURfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MUYsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9DT01QTEVYX1RSSUdHRVJfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjAsMHgwOCAvLyBTZWwKKy8vZXZlbnQgZW51bXMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9VTktOT1dOX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9TVEFURV9DSEFOR0VEX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QUk9QRVJUWV9DSEFOR0VEX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9EQVRBX1VQREFURURfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0IC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QT0xMX1JFU1BPTlNFX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1IC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9DSEFOR0VfU0VOU0lUSVZJVFlfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2IC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9NQVhfUkVBQ0hFRF9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3IC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9NSU5fUkVBQ0hFRF9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4IC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ISUdIX1RIUkVTSE9MRF9DUk9TU19VUFdBUkRfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAweDA5IC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ISUdIX1RIRVNIT0xEX0NST1NTX0FCT1ZFX0VOVU0gICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0hJR0hfVEhSRVNIT0xEX0NST1NTX1VQV0FSRF9FTlVNCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfSElHSF9USFJFU0hPTERfQ1JPU1NfRE9XTldBUkRfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgMHgwQSAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfSElHSF9USFJFU0hPTERfQ1JPU1NfQkVMT1dfRU5VTSAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ISUdIX1RIUkVTSE9MRF9DUk9TU19ET1dOV0FSRF9FTlVNCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfTE9XX1RIUkVTSE9MRF9DUk9TU19VUFdBUkRfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQiAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfTE9XX1RIUkVTSE9MRF9DUk9TU19BQk9WRV9FTlVNICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9MT1dfVEhSRVNIT0xEX0NST1NTX1VQV0FSRF9FTlVNCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfTE9XX1RIUkVTSE9MRF9DUk9TU19ET1dOV0FSRF9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgMHgwQyAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfTE9XX1RIUkVTSE9MRF9DUk9TU19CRUxPV19FTlVNICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9MT1dfVEhSRVNIT0xEX0NST1NTX0RPV05XQVJEX0VOVU0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9aRVJPX1RIUkVTSE9MRF9DUk9TU19VUFdBUkRfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAweDBEIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9aRVJPX1RIUkVTSE9MRF9DUk9TU19BQk9WRV9FTlVNICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1pFUk9fVEhSRVNIT0xEX0NST1NTX1VQV0FSRF9FTlVNCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfWkVST19USFJFU0hPTERfQ1JPU1NfRE9XTldBUkRfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgMHgwRSAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfWkVST19USFJFU0hPTERfQ1JPU1NfQkVMT1dfRU5VTSAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9aRVJPX1RIUkVTSE9MRF9DUk9TU19ET1dOV0FSRF9FTlVNCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUEVSSU9EX0VYQ0VFREVEX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRiAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfRlJFUVVFTkNZX0VYQ0VFREVEX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfQ09NUExFWF9UUklHR0VSX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSAvLyBFbnVtCisvL2V2ZW50IGRlcHJlY2F0ZWQgZW51bXMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ERVBSRUNBVEVEX1VOS05PV05fRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREVQUkVDQVRFRF9TVEFURV9DSEFOR0VEX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RFUFJFQ0FURURfUFJPUEVSVFlfQ0hBTkdFRF9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ERVBSRUNBVEVEX0RBVEFfVVBEQVRFX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREVQUkVDQVRFRF9QT0xMX1JFU1BPTlNFX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RFUFJFQ0FURURfQ0hBTkdFX1NFTlNJVElWSVRZX0VOVU0gICAgICAgICAgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ERVBSRUNBVEVEX01BWF9SRUFDSEVEX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREVQUkVDQVRFRF9NSU5fUkVBQ0hFRF9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RFUFJFQ0FURURfSElHSF9USFJFU0hIT0xEX0NST1NTX0FCT1ZFX0VOVU0gICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ERVBSRUNBVEVEX0hJR0hfVEhSRVNISE9MRF9DUk9TU19CRUxPV19FTlVNICAgICAgICAgICAgICAweDA5CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREVQUkVDQVRFRF9MT1dfVEhSRVNISE9MRF9DUk9TU19BQk9WRV9FTlVNICAgICAgICAgICAgICAgMHgwQQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RFUFJFQ0FURURfTE9XX1RIUkVTSEhPTERfQ1JPU1NfQkVMT1dfRU5VTSAgICAgICAgICAgICAgIDB4MEIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ERVBSRUNBVEVEX1pFUk9fVEhSRVNIT0xEX0NST1NTX0FCT1ZFX0VOVU0gICAgICAgICAgICAgICAweDBDCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREVQUkVDQVRFRF9aRVJPX1RIUkVTSE9MRF9DUk9TU19CRUxPV19FTlVNICAgICAgICAgICAgICAgMHgwRAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RFUFJFQ0FURURfUEVSSU9EX0VYQ0VFREVEX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ERVBSRUNBVEVEX0ZSRVFVRU5DWV9FWENFRURFRF9FTlVNICAgICAgICAgICAgICAgICAgICAgICAweDBGCisKKy8vcHJvcGVydHkgdXNhZ2VzIChnZXQvc2V0IGZlYXR1cmUgcmVwb3J0KQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwMCwweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfRlJJRU5ETFlfTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDAxLDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QRVJTSVNURU5UX1VOSVFVRV9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDIsMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1NFTlNPUl9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwMywweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfTUlOSU1VTV9SRVBPUlRfSU5URVJWQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA0LDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9TRU5TT1JfTUFOVUZBQ1RVUkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDUsMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1NFTlNPUl9NT0RFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwNiwweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfU0VOU09SX1NFUklBTF9OVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA3LDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9TRU5TT1JfREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDgsMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1NFTlNPUl9DT05ORUNUSU9OX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwOSwweDAzIC8vIE5BcnkKKy8vYmVnaW4gY29ubmVjdGlvbiB0eXBlIHNlbGVjdG9ycworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19JTlRFR1JBVEVEX1NFTCAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgzMCwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19BVFRBQ0hFRF9TRUwgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgzMSwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19FWFRFUk5BTF9TRUwgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgzMiwweDA4IC8vIFNlbAorLy9lbmQgY29ubmVjdGlvbiB0eXBlIHNlbGVjdG9ycworLy9iZWdpbiBjb25uZWN0aW9uIHR5cGUgZW51bXMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfSU5URUdSQVRFRF9FTlVNICAgICAgICAgICAgICAgICAgICAweDAxIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfQVRUQUNIRURfRU5VTSAgICAgICAgICAgICAgICAgICAgICAweDAyIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfRVhURVJOQUxfRU5VTSAgICAgICAgICAgICAgICAgICAgICAweDAzIC8vIEVudW0KKy8vZW5kIGNvbm5lY3Rpb24gdHlwZSBlbnVtcworLy9iZWdpbiBjb25uZWN0aW9uIHR5cGUgZGVwcmVjYXRlZCBlbnVtcworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0RFUFJFQ0FURURfQ09OTkVDVElPTl9UWVBFX1BDX0lOVEVHUkFURURfRU5VTSAgICAgICAgIDB4MDAgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0RFUFJFQ0FURURfQ09OTkVDVElPTl9UWVBFX1BDX0FUVEFDSEVEX0VOVU0gICAgICAgICAgIDB4MDEgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0RFUFJFQ0FURURfQ09OTkVDVElPTl9UWVBFX1BDX0VYVEVSTkFMX0VOVU0gICAgICAgICAgIDB4MDIgLy8gRW51bQorLy9lbmQgY29ubmVjdGlvbiB0eXBlIGRlcHJlY2F0ZWQgZW51bXMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9TRU5TT1JfREVWSUNFX1BBVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MEEsMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0hBUkRXQVJFX1JFVklTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwQiwweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfRklSTVdBUkVfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDBDLDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRUxFQVNFX0RBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MEQsMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVF9JTlRFUlZBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwRSwweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ0hBTkdFX1NFTlNJVElWSVRZX0FCUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDBGLDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DSEFOR0VfU0VOU0lUSVZJVFlfUkFOR0VfUENUICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTAsMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NIQU5HRV9TRU5TSVRJVklUWV9SRUxfUENUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxMSwweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQUNDVVJBQ1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDEyLDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVNPTFVUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTMsMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JBTkdFX01BWElNVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxNCwweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkFOR0VfTUlOSU1VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDE1LDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTYsMHgwMyAvLyBOQXJ5CisvL2JlZ2luIHJlcG9ydGluZyBzdGF0ZSBzZWxlY3RvcnMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NDAsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1JFUE9SVElOR19TVEFURV9PTl9OT05FX1NFTCAgICAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfU0VMCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfU0VMICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDQxLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9SRVBPUlRJTkdfU1RBVEVfT05fQUxMX1NFTCAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19TRUwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19TRUwgICAgICAgICAgICAgICAgICAweDBBLDB4NDIsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1JFUE9SVElOR19TVEFURV9PTl9USFJFU0hPTERfU0VMICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1NFTAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfV0FLRV9TRUwgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0MywweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1dBS0VfU0VMICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0NCwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1dBS0VfU0VMICAgICAgICAgICAgIDB4MEEsMHg0NSwweDA4IC8vIFNlbAorLy9lbmQgcmVwb3J0aW5nIHN0YXRlIHNlbGVjdG9ycworLy9iZWdpbiByZXBvcnRpbmcgc3RhdGUgZW51bXMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAweDAxIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1JFUE9SVElOR19TVEFURV9PTl9OT05FX0VOVU0gICAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfRU5VTQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX0VOVU0gICAgICAgICAgICAgICAgICAgICAgIDB4MDIgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfUkVQT1JUSU5HX1NUQVRFX09OX0FMTF9FTlVNICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfRU5VTQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX0VOVU0gICAgICAgICAgICAgICAgIDB4MDMgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfUkVQT1JUSU5HX1NUQVRFX09OX1RIUkVTSE9MRF9FTlVNIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfRU5VTQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfU0VMX1dBS0VfRU5VTSAgICAgICAgICAgICAgICAgICAweDA0IC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19TRUxfV0FLRV9FTlVNICAgICAgICAgICAgICAgICAgMHgwNSAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfV0FLRV9FTlVNICAgICAgICAgICAgMHgwNiAvLyBFbnVtCisvL2VuZCByZXBvcnRpbmcgc3RhdGUgZW51bXMKKy8vYmVnaW4gcmVwb3J0aW5nIHN0YXRlIGRlcHJlY2F0ZWQgZW51bXMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9ERVBSRUNBVEVEX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfRU5VTSAgICAgICAgICAgICAweDAwIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX0RFUFJFQ0FURURfUkVQT1JUSU5HX1NUQVRFX09OX05PTkVfRU5VTSAgICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfREVQUkVDQVRFRF9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX0VOVU0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9ERVBSRUNBVEVEX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX0VOVU0gICAgICAgICAgICAweDAxIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX0RFUFJFQ0FURURfUkVQT1JUSU5HX1NUQVRFX09OX0FMTF9FTlVNICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfREVQUkVDQVRFRF9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19FTlVNCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfREVQUkVDQVRFRF9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19FTlVNICAgICAgMHgwMiAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9ERVBSRUNBVEVEX1JFUE9SVElOR19TVEFURV9PTl9USFJFU0hPTERfRU5VTSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0RFUFJFQ0FURURfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfRU5VTQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0RFUFJFQ0FURURfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19XQUtFX0VOVU0gICAgICAgIDB4MDMgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0RFUFJFQ0FURURfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfV0FLRV9FTlVNICAgICAgIDB4MDQgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0RFUFJFQ0FURURfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfV0FLRV9FTlVNIDB4MDUgLy8gRW51bQorLy9lbmQgcmVwb3J0aW5nIHN0YXRlIGRlcHJlY2F0ZWQgZW51bXMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9TQU1QTElOR19SQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTcsMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFU1BPTlNFX0NVUlZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxOCwweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDE5LDB4MDMgLy8gTkFyeQorLy9iZWdpbiBwb3dlciBzdGF0ZSBzZWxlY3RvcnMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9VTkRFRklORURfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTAsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMF9GVUxMX1BPV0VSX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTEsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMV9MT1dfUE9XRVJfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTIsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMl9TVEFOREJZX1dJVEhfV0FLRV9TRUwgICAgICAgICAgICAgICAgICAweDBBLDB4NTMsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EM19TTEVFUF9XSVRIX1dBS0VfU0VMICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTQsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9ENF9QT1dFUl9PRkZfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTUsMHgwOCAvLyBTZWwKKy8vZW5kIHBvd2VyIHN0YXRlIHNlbGVjdG9ycworLy9iZWdpbiBwb3dlciBzdGF0ZSBlbnVtcworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX1VOREVGSU5FRF9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QwX0ZVTExfUE9XRVJfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QxX0xPV19QT1dFUl9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QyX1NUQU5EQllfV0lUSF9XQUtFX0VOVU0gICAgICAgICAgICAgICAgIDB4MDQgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QzX1NMRUVQX1dJVEhfV0FLRV9FTlVNICAgICAgICAgICAgICAgICAgIDB4MDUgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0Q0X1BPV0VSX09GRl9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYgLy8gRW51bQorLy9lbmQgcG93ZXIgc3RhdGUgZW51bXMKKy8vYmVnaW4gZGVwcmVjYXRlZCBwb3dlciBzdGF0ZSBlbnVtcworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0RFUFJFQ0FURURfUE9XRVJfU1RBVEVfVU5ERUZJTkVEX0VOVU0gICAgICAgICAgICAgICAgIDB4MDAgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0RFUFJFQ0FURURfUE9XRVJfU1RBVEVfRDBfRlVMTF9QT1dFUl9FTlVNICAgICAgICAgICAgIDB4MDEgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0RFUFJFQ0FURURfUE9XRVJfU1RBVEVfRDFfTE9XX1BPV0VSX0VOVU0gICAgICAgICAgICAgIDB4MDIgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0RFUFJFQ0FURURfUE9XRVJfU1RBVEVfRDJfU1RBTkRCWV9XSVRIX1dBS0VfRU5VTSAgICAgIDB4MDMgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0RFUFJFQ0FURURfUE9XRVJfU1RBVEVfRDNfU0xFRVBfV0lUSF9XQUtFX0VOVU0gICAgICAgIDB4MDQgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0RFUFJFQ0FURURfUE9XRVJfU1RBVEVfRDRfUE9XRVJfT0ZGX0VOVU0gICAgICAgICAgICAgIDB4MDUgLy8gRW51bQorLy9lbmQgZGVwcmVjYXRlZCBwb3dlciBzdGF0ZSBlbnVtcworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0RFUFJFQ0FURURfRkVBVFVSRV9QQUdFX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxQSwweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfREVQUkVDQVRFRF9GRUFUVVJFX1BBR0VfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDFCLDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9ERVBSRUNBVEVEX0lOUFVUX1BBR0VfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MUMsMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0RFUFJFQ0FURURfSU5QVVRfUEFHRV9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxRCwweDAzCisKKy8vZGF0YSB0eXBlIGxvY2F0aW9uCisvL2RhdGEgZmllbGQgdXNhZ2VzIChpbnB1dCByZXBvcnQpCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDAwLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX0RFU0lSRURfQUNDVVJBQ1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDEsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fQUxUSVRVREVfQU5URU5OQV9TRUFMRVZFTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwMiwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9ESUZGRVJFTlRJQUxfUkVGRVJFTkNFX1NUQVRJT05fSUQgICAgICAgICAgICAgICAgMHgwQSwweDAzLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX0FMVElUSURFX0VMSVBTT0lEX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDQsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fQUxUSVRJREVfRUxJUFNPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwNSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9BTFRJVFVERV9TRUFMRVZFTF9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA2LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX0FMVElUVURFX1NFQUxFVkVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDcsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fREdQU19EQVRBX0FHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwOCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9FUlJPUl9SQURJVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA5LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX0ZJWF9RVUFMSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MEEsMHgwNCAvLyBOQXJ5CisvL2JlZ2luIGZpeCBxdWFsaXR5IHNlbGVjdG9ycworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRklYX1FVQUxJVFlfTk9fRklYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3MCwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRklYX1FVQUxJVFlfR1BTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3MSwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRklYX1FVQUxJVFlfREdQUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3MiwweDA4IC8vIFNlbAorLy9lbmQgZml4IHF1YWxpdHkgc2VsZWN0b3JzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9GSVhfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDBCLDB4MDQgLy8gTkFyeQorLy9iZWdpbiBmaXggdHlwZSBzZWxlY3RvcnMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0ZJWF9UWVBFX05PX0ZJWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4ODAsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0ZJWF9UWVBFX0dQU19TUFNfTU9ERV9GSVhfVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4ODEsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0ZJWF9UWVBFX0RHUFNfU1BTX01PREVfRklYX1ZBTElEICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4ODIsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0ZJWF9UWVBFX0dQU19QUFNfTU9ERV9GSVhfVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4ODMsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0ZJWF9UWVBFX1JFQUxfVElNRV9LSU5FTUFUSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4ODQsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0ZJWF9UWVBFX0ZMT0FUX1JUSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4ODUsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0ZJWF9UWVBFX0VTVElNQVRFRF9ERUFEX1JFQ0tPTklORyAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4ODYsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0ZJWF9UWVBFX01BTlVBTF9JTlBVVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4ODcsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0ZJWF9UWVBFX1NJTVVMQVRPUl9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4ODgsMHgwOCAvLyBTZWwKKy8vZW5kIGZpeCB0eXBlIHNlbGVjdG9ycworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fR0VPSURBTF9TRVBBUkFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwQywweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9HUFNfT1BFUkFUSU9OX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDBELDB4MDQgLy8gTkFyeQorLy9iZWdpbiBncHMgb3BlcmF0aW9uIG1vZGUgc2VsZWN0b3JzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HUFNfT1BfTU9ERV9NQU5VQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDkwLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HUFNfT1BfTU9ERV9BVVRPTUFUSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDkxLDB4MDggLy8gU2VsCisvL2VuZCBncHMgb3BlcmF0aW9uIG1vZGUgc2VsZWN0b3JzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9HUFNfU0VMRUNUSU9OX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDBFLDB4MDQgLy8gTkFyeQorLy9iZWdpbiBncHMgc2VsZWN0aW9uIG1vZGUgc2VsZWN0b3JzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HUFNfU0VMX01PREVfQVVUT05PTU9VUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEEwLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HUFNfU0VMX01PREVfREdQUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEExLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HUFNfU0VMX01PREVfRVNUSU1BVEVEX0RFQURfUkVDS09OSU5HICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEEyLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HUFNfU0VMX01PREVfTUFOVUFMX0lOUFVUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEEzLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HUFNfU0VMX01PREVfU0lNVUxBVE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEE0LDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HUFNfU0VMX01PREVfREFUQV9OT1RfVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEE1LDB4MDggLy8gU2VsCisvL2VuZCBncHMgc2VsZWN0aW9uIG1vZGUgc2VsZWN0b3JzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9HUFNfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDBGLDB4MDQgLy8gTkFyeQorLy9iZWdpbiBncHMgc3RhdHVzIHNlbGVjdG9ycworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR1BTX1NUQVRVU19EQVRBX1ZBTElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhCMCwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR1BTX1NUQVRVU19EQVRBX05PVF9WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhCMSwweDA4IC8vIFNlbAorLy9lbmQgZ3BzIHN0YXR1cyBzZWxlY3RvcnMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX1BPU0lUSU9OX0RJTFVUSU9OX09GX1BSRUNJU0lPTiAgICAgICAgICAgICAgICAgICAweDBBLDB4MTAsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fSE9SSVpPTlRBTF9ESUxVVElPTl9PRl9QUkVDSVNJT04gICAgICAgICAgICAgICAgIDB4MEEsMHgxMSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9WRVJUSUNBTF9ESUxVVElPTl9PRl9QUkVDSVNJT04gICAgICAgICAgICAgICAgICAgMHgwQSwweDEyLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX0xBVElUVURFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTMsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fTE9OR0lUVURFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxNCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9UUlVFX0hFQURJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDE1LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX01BR05FVElDX0hFQURJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTYsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fTUFHTkVUSUNfVkFSSUFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxNywweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9TUEVFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDE4LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX1NBVEVMTElURVNfSU5fVklFVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTksMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fU0FURUxMSVRFU19JTl9WSUVXX0FaSU1VVEggICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxQSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9TQVRFTExJVEVTX0lOX1ZJRVdfRUxFVkFUSU9OICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDFCLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX1NBVEVMTElURVNfSU5fVklFV19JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MUMsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fU0FURUxMSVRFU19JTl9WSUVXX1BSTnMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxRCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9TQVRFTExJVEVTX0lOX1ZJRVdfU1ROX1JBVElPICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDFFLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX1NBVEVMTElURVNfVVNFRF9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MUYsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fU0FURUxMSVRFU19VU0VEX1BSTnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyMCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9OTUVBX1NFTlRFTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDIxLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX0FERFJFU1NfTElORV8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjIsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fQUREUkVTU19MSU5FXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyMywweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9DSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDI0LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX1NUQVRFX09SX1BST1ZJTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjUsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fQ09VTlRSWV9PUl9SRUdJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyNiwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9QT1NUQUxfQ09ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDI3LDB4MDQKKy8vcHJvcGVydHkgdXNhZ2VzIChnZXQvc2V0IGZlYXR1cmUgcmVwb3J0KQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyQSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfTE9DQVRJT05fREVTSVJFRF9BQ0NVUkFDWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDJCLDB4MDQgLy8gTkFyeQorLy9iZWdpbiBsb2NhdGlvbiBkZXNpcmVkIGFjY3VyYWN5IHNlbGVjdG9ycworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RFU0lSRURfQUNDVVJBQ1lfREVGQVVMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg2MCwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RFU0lSRURfQUNDVVJBQ1lfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg2MSwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RFU0lSRURfQUNDVVJBQ1lfTUVESVVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg2MiwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RFU0lSRURfQUNDVVJBQ1lfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg2MywweDA4IC8vIFNlbAorLy9lbmQgbG9jYXRpb24gZGVzaXJlZCBhY2N1cmFjeSBzZWxlY3RvcnMKKworLy9kYXRhIHR5cGUgZW52aXJvbm1lbnRhbAorLy9kYXRhIGZpZWxkIHVzYWdlcyAoaW5wdXQgcmVwb3J0KQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRU5WSVJPTk1FTlRBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgzMCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTlZJUk9OTUVOVEFMX0FUTU9TUEhFUklDX1BSRVNTVVJFICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDMxLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VOVklST05NRU5UQUxfUkVGRVJFTkNFX1BSRVNTVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MzIsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRU5WSVJPTk1FTlRBTF9SRUxBVElWRV9IVU1JRElUWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgzMywweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTlZJUk9OTUVOVEFMX1RFTVBFUkFUVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDM0LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VOVklST05NRU5UQUxfV0lORF9ESVJFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MzUsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRU5WSVJPTk1FTlRBTF9XSU5EX1NQRUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgzNiwweDA0CisvL3Byb3BlcnR5IHVzYWdlcyAoZ2V0L3NldCBmZWF0dXJlIHJlcG9ydCkKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9FTlZJUk9OTUVOVEFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NDAsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0VOVklST05NRU5UQUxfUkVGRVJFTkNFX1BSRVNTVVJFICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0MSwweDA0CisKKy8vZGF0YSB0eXBlIG1vdGlvbgorLy9kYXRhIGZpZWxkIHVzYWdlcyAoaW5wdXQgcmVwb3J0KQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1MCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fU1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDUxLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9BQ0NFTEVSQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTIsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX0FDQ0VMRVJBVElPTl9YX0FYSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1MywweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fQUNDRUxFUkFUSU9OX1lfQVhJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDU0LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9BQ0NFTEVSQVRJT05fWl9BWElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTUsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX0FOR1VMQVJfVkVMT0NJVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1NiwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fQU5HVUxBUl9WRUxPQ0lUWV9YX0FYSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDU3LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9BTkdVTEFSX1ZFTE9DSVRZX1lfQVhJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTgsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX0FOR1VMQVJfVkVMT0NJVFlfWl9BWElTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1OSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fQU5HVUxBUl9QT1NJVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDVBLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9BTkdVTEFSX1BPU0lUSU9OX1hfQVhJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NUIsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX0FOR1VMQVJfUE9TSVRJT05fWV9BWElTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1QywweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fQU5HVUxBUl9QT1NJVElPTl9aX0FYSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDVELDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9TUEVFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NUUsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX0lOVEVOU0lUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1RiwweDA0CisKKy8vZGF0YSB0eXBlIG9yaWVudGF0aW9uCisvL2RhdGEgZmllbGQgdXNhZ2VzIChpbnB1dCByZXBvcnQpCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDcwLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVElDX0hFQURJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzEsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUSUNfSEVBRElOR19YICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3MiwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRJQ19IRUFESU5HX1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDczLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVElDX0hFQURJTkdfWiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzQsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fQ09NUEVOU0FURURfTUFHTkVUSUNfTk9SVEggICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3NSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9DT01QRU5TQVRFRF9UUlVFX05PUlRIICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDc2LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVElDX05PUlRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzcsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fVFJVRV9OT1JUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3OCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9ESVNUQU5DRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDc5LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX0RJU1RBTkNFX1ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4N0EsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fRElTVEFOQ0VfWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3QiwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9ESVNUQU5DRV9aICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDdDLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX0RJU1RBTkNFX09VVF9PRl9SQU5HRSAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4N0QsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fVElMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3RSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9USUxUX1ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDdGLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX1RJTFRfWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4ODAsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fVElMVF9aICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg4MSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9ST1RBVElPTl9NQVRSSVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDgyLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX1FVQVRFUk5JT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4ODMsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUSUNfRkxVWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg4NCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRJQ19GTFVYX1hfQVhJUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDg1LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVElDX0ZMVVhfWV9BWElTICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4ODYsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUSUNfRkxVWF9aX0FYSVMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg4NywweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRPTUVURVJfQUNDVVJBQ1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg4OCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRPTUVURVJfQUNDVVJBQ1lfTE9XICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhFMCwweDA4CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRPTUVURVJfQUNDVVJBQ1lfTUVESVVNICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhFMSwweDA4CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRPTUVURVJfQUNDVVJBQ1lfSElHSCAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhFMiwweDA4CisKKy8vZGF0YSB0eXBlIG1lY2hhbmljYWwKKy8vZGF0YSBmaWVsZCB1c2FnZXMgKGlucHV0IHJlcG9ydCkKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01FQ0hBTklDQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4OTAsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTUVDSEFOSUNBTF9CT09MRUFOX1NXSVRDSF9TVEFURSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg5MSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NRUNIQU5JQ0FMX0JPT0xFQU5fU1dJVENIX0FSUkFZX1NUQVRFUyAgICAgICAgICAgICAgICAgICAgMHgwQSwweDkyLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01FQ0hBTklDQUxfTVVMVElWQUxVRV9TV0lUQ0hfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4OTMsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTUVDSEFOSUNBTF9GT1JDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg5NCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NRUNIQU5JQ0FMX0FCU09MVVRFX1BSRVNTVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDk1LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01FQ0hBTklDQUxfR0FVR0VfUFJFU1NVUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4OTYsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTUVDSEFOSUNBTF9TVFJBSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg5NywweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NRUNIQU5JQ0FMX1dFSUdIVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDk4LDB4MDQKKy8vcHJvcGVydHkgdXNhZ2VzIChnZXQvc2V0IGZlYXR1cmUgcmVwb3J0KQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX01FQ0hBTklDQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhBMCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfTUVDSEFOSUNBTF9WSUJSQVRJT05fU1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEExLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01FQ0hBTklDQUxfVklCUkFUSU9OX1NQRUVEX0ZPUldBUkQgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4QTIsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTUVDSEFOSUNBTF9WSUJSQVRJT05fU1BFRURfQkFDS1dBUkQgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhBMywweDA0CisKKy8vZGF0YSB0eXBlIGJpb21ldHJpYworLy9kYXRhIGZpZWxkIHVzYWdlcyAoaW5wdXQgcmVwb3J0KQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQklPTUVUUklDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhCMCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9CSU9NRVRSSUNfSFVNQU5fUFJFU0VOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEIxLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0JJT01FVFJJQ19IVU1BTl9QUk9YSU1JVFlfUkFOR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4QjIsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQklPTUVUUklDX0hVTUFOX1BST1hJTUlUWV9PVVRfT0ZfUkFOR0UgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhCMywweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9CSU9NRVRSSUNfSFVNQU5fVE9VQ0hfU1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEI0LDB4MDQKKworLy9kYXRhIHR5cGUgbGlnaHQgc2Vuc29yCisvL2RhdGEgZmllbGQgdXNhZ2VzIChpbnB1dCByZXBvcnQpCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MSUdIVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEQwLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xJR0hUX0lMTFVNSU5BTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4RDEsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTElHSFRfQ09MT1JfVEVNUEVSQVRVUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhEMiwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MSUdIVF9DSFJPTUFUSUNJVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEQzLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xJR0hUX0NIUk9NQVRJQ0lUWV9YICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4RDQsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTElHSFRfQ0hST01BVElDSVRZX1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhENSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MSUdIVF9DT05TVU1FUl9JUl9TRU5URU5DRV9SRUNFSVZFICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEQ2LDB4MDQKKy8vcHJvcGVydHkgdXNhZ2VzIChnZXQvc2V0IGZlYXR1cmUgcmVwb3J0KQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0xJR0hUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhFMCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfTElHSFRfQ09OU1VNRVJfSVJfU0VOVEVOQ0VfU0VORCAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEUxLDB4MDQKKworLy9kYXRhIHR5cGUgc2Nhbm5lcgorLy9kYXRhIGZpZWxkIHVzYWdlcyAoaW5wdXQgcmVwb3J0KQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfU0NBTk5FUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhGMCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9TQ0FOTkVSX1JGSURfVEFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEYxLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX1NDQU5ORVJfTkZDX1NFTlRFTkNFX1JFQ0VJVkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4RjIsMHgwNAorLy9wcm9wZXJ0eSB1c2FnZXMgKGdldC9zZXQgZmVhdHVyZSByZXBvcnQpCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfU0NBTk5FUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEY4LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9TQ0FOTkVSX05GQ19TRU5URU5DRV9TRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4RjksMHgwNAorCisvL2RhdGEgdHlwZSBlbGVjdHJpY2FsCisvL2RhdGEgZmllbGQgdXNhZ2VzIChpbnB1dCByZXBvcnQpCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTEVDVFJJQ0FMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDAwLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VMRUNUUklDQUxfQ0FQQUNJVEFOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDEsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRUxFQ1RSSUNBTF9DVVJSRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwMiwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTEVDVFJJQ0FMX1BPV0VSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDAzLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VMRUNUUklDQUxfSU5EVUNUQU5DRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDQsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRUxFQ1RSSUNBTF9SRVNJU1RBTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwNSwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTEVDVFJJQ0FMX1ZPTFRBR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA2LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VMRUNUUklDQUxfRlJFUVVFTkNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDcsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRUxFQ1RSSUNBTF9QRVJJT0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwOCwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTEVDVFJJQ0FMX1BFUkNFTlRfT0ZfUkFOR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA5LDB4MDUKKworLy9kYXRhIHR5cGUgdGltZQorLy9kYXRhIGZpZWxkIHVzYWdlcyAoaW5wdXQgcmVwb3J0KQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfVElNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyMCwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9USU1FX1lFQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDIxLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX1RJTUVfTU9OVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjIsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfVElNRV9EQVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyMywweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9USU1FX0RBWV9PRl9XRUVLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDI0LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX1RJTUVfSE9VUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjUsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfVElNRV9NSU5VVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyNiwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9USU1FX1NFQ09ORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDI3LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX1RJTUVfTUlMTElTRUNPTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjgsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfVElNRV9USU1FU1RBTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyOSwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9USU1FX0pVTElBTl9EQVlfT0ZfWUVBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDJBLDB4MDUKKy8vcHJvcGVydHkgdXNhZ2VzIChnZXQvc2V0IGZlYXR1cmUgcmVwb3J0KQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1RJTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgzMCwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfVElNRV9USU1FX1pPTkVfT0ZGU0VUX0ZST01fVVRDICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDMxLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9USU1FX1RJTUVfWk9ORV9OQU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MzIsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1RJTUVfREFZTElHSFRfU0FWSU5HU19USU1FX09CU0VSVkVEICAgICAgICAgICAgICAgICAgIDB4MEEsMHgzMywweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfVElNRV9USU1FX1RSSU1fQURKVVNUTUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDM0LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9USU1FX0FSTV9BTEFSTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MzUsMHgwNQorCisvL2RhdGEgdHlwZSBjdXN0b20KKy8vZGF0YSBmaWVsZCB1c2FnZXMgKGlucHV0IHJlcG9ydCkKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NDAsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1VTQUdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0MSwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fQk9PTEVBTl9BUlJBWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDQyLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NDMsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0NCwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDQ1LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NDYsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0NywweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDQ4LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV82ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NDksMHgwNQorCisjaWYgMSAvL2RlZmluZSB2ZW5kb3Itc3BlY2lmaWMgKG5vbi1zcGVjKSBjdXN0b20gZGF0YWZpZWxkcworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0QSwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDRCLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV85ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NEMsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0RCwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDRFLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8xMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NEYsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1MCwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDUxLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8xNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTIsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1MywweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDU0LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8xOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTUsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1NiwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDU3LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8yMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTgsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1OSwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDVBLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8yNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NUIsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1QywweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDVELDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8yNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NUUsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1RiwweDA1CisjZW5kaWYKKworLy9kYXRhIHR5cGUgZ2VuZXJpYworLy9kYXRhIGZpZWxkIHVzYWdlcyAoaW5wdXQgcmVwb3J0KQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR0VORVJJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg2MCwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HRU5FUklDX0dVSURfT1JfUFJPUEVSVFlLRVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDYxLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dFTkVSSUNfQ0FURUdPUllfR1VJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NjIsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR0VORVJJQ19UWVBFX0dVSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg2MywweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HRU5FUklDX0VWRU5UX1BST1BFUlRZS0VZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDY0LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dFTkVSSUNfUFJPUEVSVFlfUFJPUEVSVFlLRVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NjUsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR0VORVJJQ19EQVRBRklFTERfUFJPUEVSVFlLRVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg2NiwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HRU5FUklDX0VWRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDY3LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dFTkVSSUNfUFJPUEVSVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NjgsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR0VORVJJQ19EQVRBRklFTEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg2OSwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTlVNRVJBVE9SX1RBQkxFX1JPV19JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDZBLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VOVU1FUkFUT1JfVEFCTEVfUk9XX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NkIsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR0VORVJJQ19HVUlEX09SX1BST1BFUlRZS0VZX0tJTkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg2QywweDA1IC8vIE5BcnkKKy8vYmVnaW4gR29yUEsga2luZCBzZWxlY3RvcnMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HT1JQS19LSU5EX0NBVEVHT1JZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4RDAsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HT1JQS19LSU5EX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4RDEsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HT1JQS19LSU5EX0VWRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4RDIsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HT1JQS19LSU5EX1BST1BFUlRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4RDMsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HT1JQS19LSU5EX0RBVEFGSUVMRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4RDQsMHgwOCAvLyBTZWwKKy8vZW5kIEdvclBLIGtpbmQgc2VsZWN0b3JzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HRU5FUklDX0dVSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDZELDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dFTkVSSUNfUFJPUEVSVFlLRVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NkUsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR0VORVJJQ19UT1BfTEVWRUxfQ09MTEVDVElPTl9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg2RiwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HRU5FUklDX1JFUE9SVF9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDcwLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dFTkVSSUNfUkVQT1JUX0lURU1fUE9TSVRJT05fSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzEsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR0VORVJJQ19GSVJNV0FSRV9WQVJUWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3MiwweDA1IC8vIE5BcnkKKy8vYmVnaW4gZmlybXdhcmUgdmFydHlwZSBzZWxlY3RvcnMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX05VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDAsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0JPT0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDEsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX1VJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDIsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0kxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDMsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX1VJMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDQsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0kyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDUsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX1VJNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDYsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0k0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDcsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX1VJOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDgsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0k4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDksMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX1I0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MEEsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX1I4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MEIsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX1dTVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MEMsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX1NUUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MEQsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0NMU0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MEUsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX1ZFQ1RPUl9WVF9VSTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MEYsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YxNkUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTAsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YxNkUxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTEsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YxNkUyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTIsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YxNkUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTMsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YxNkU0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTQsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YxNkU1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTUsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YxNkU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTYsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YxNkU3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTcsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YxNkU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTgsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YxNkU5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTksMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YxNkVBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MUEsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YxNkVCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MUIsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YxNkVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MUMsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YxNkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MUQsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YxNkVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MUUsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YxNkVGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MUYsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YzMkUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjAsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YzMkUxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjEsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YzMkUyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjIsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YzMkUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjMsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YzMkU0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjQsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YzMkU1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjUsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YzMkU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjYsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YzMkU3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjcsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YzMkU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjgsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YzMkU5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjksMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YzMkVBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MkEsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YzMkVCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MkIsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YzMkVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MkMsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YzMkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MkQsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YzMkVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MkUsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9GSVJNV0FSRV9WQVJUWVBFX1ZUX0YzMkVGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MkYsMHgwOSAvLyBTZWwKKy8vZW5kIGZpcm13YXJlIHZhcnR5cGUgc2VsZWN0b3JzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HRU5FUklDX1VOSVRfT0ZfTUVBU1VSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDczLDB4MDUgLy8gTkFyeQorLy9iZWdpbiB1bml0IG9mIG1lYXN1cmUgc2VsZWN0b3JzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX05PVF9TUEVDSUZJRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDQwLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX0xVWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDQxLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX0RFR1JFRVNfS0VMVklOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDQyLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX0RFR1JFRVNfQ0VMU0lVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDQzLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX1BBU0NBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDQ0LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX05FV1RPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDQ1LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX01FVEVSU19QRVJfU0VDT05EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDQ2LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX0tJTE9HUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDQ3LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX01FVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDQ4LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX01FVEVSU19QRVJfU0VDX1NRUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDQ5LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX0ZBUkFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDRBLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX0FNUEVSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDRCLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX1dBVFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDRDLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX0hFTlJZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDRELDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX09ITSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDRFLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX1ZPTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDRGLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX0hFUlRaICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDUwLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX0JBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDUxLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX0RFR1JFRVNfQU5USV9DTE9DS1dJU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDUyLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX0RFR1JFRVNfQ0xPQ0tXSVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDUzLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX0RFR1JFRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDU0LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX0RFR1JFRVNfUEVSX1NFQ09ORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDU1LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX0RFR1JFRVNfUEVSX1NFQ19TUVJEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDU2LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX0tOT1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDU3LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX1BFUkNFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDU4LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX1NFQ09ORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDU5LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX01JTExJU0VDT05EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDVBLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX0cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDVCLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX0JZVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDVDLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX01JTExJR0FVU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDVELDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19VTklUX0JJVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDVFLDB4MDkgLy8gU2VsCisvL2VuZCB1bml0IG9mIG1lYXN1cmUgc2VsZWN0b3JzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HRU5FUklDX1VOSVRfRVhQT05FTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDc0LDB4MDUgLy8gTkFyeQorLy9iZWdpbiB1bml0IGV4cG9uZW50IHNlbGVjdG9ycworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfRVhQT05FTlRfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3MCwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfRVhQT05FTlRfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3MSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfRVhQT05FTlRfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3MiwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfRVhQT05FTlRfMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3MywweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfRVhQT05FTlRfNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3NCwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfRVhQT05FTlRfNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3NSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfRVhQT05FTlRfNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3NiwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfRVhQT05FTlRfNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3NywweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfRVhQT05FTlRfOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3OCwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfRVhQT05FTlRfOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3OSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfRVhQT05FTlRfQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3QSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfRVhQT05FTlRfQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3QiwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfRVhQT05FTlRfQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3QywweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfRVhQT05FTlRfRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3RCwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfRVhQT05FTlRfRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3RSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfRVhQT05FTlRfRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3RiwweDA5IC8vIFNlbAorLy9lbmQgdW5pdCBleHBvbmVudCBzZWxlY3RvcnMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dFTkVSSUNfUkVQT1JUX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzUsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR0VORVJJQ19SRVBPUlRfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3NiwweDA1CisvL3Byb3BlcnR5IHVzYWdlcyAoZ2V0L3NldCBmZWF0dXJlIHJlcG9ydCkKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9HRU5FUklDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4ODAsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0VOVU1FUkFUT1JfVEFCTEVfUk9XX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg4MSwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfRU5VTUVSQVRPUl9UQUJMRV9ST1dfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDgyLDB4MDUKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBPdGhlciBISUQgZGVmaW5pdGlvbnMKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy9OT1RFOiBUaGVzZSBkZWZpbml0aW9ucyBhcmUgZGVzaWduZWQgdG8gcGVybWl0IGNvbXBpbGluZyB0aGUgSElEIHJlcG9ydCBkZXNjcmlwdG9ycworLy8gd2l0aCBzb21ld2hhdCBzZWxmLWV4cGxhbmF0b3J5IGluZm9ybWF0aW9uIHRvIGhlbHAgcmVhZGFiaWxpdHkgYW5kIHJlZHVjZSBlcnJvcnMKKworLy9pbnB1dCxvdXRwdXQsZmVhdHVyZSBmbGFncworI2RlZmluZSBEYXRhX0Fycl9BYnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBDb25zdF9BcnJfQWJzICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBEYXRhX1Zhcl9BYnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBDb25zdF9WYXJfQWJzICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBEYXRhX1Zhcl9SZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNgorLy9jb2xsZWN0aW9uIGZsYWdzCisjZGVmaW5lIFBoeXNpY2FsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIEFwcGxpY2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIExvZ2ljYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIE5hbWVkQXJyYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIFVzYWdlU3dpdGNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1CisvL290aGVyCisjZGVmaW5lIFVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwCisKKyNkZWZpbmUgSElEX1VTQUdFX1BBR0UoYSkgICAgICAgICAgICAgICAgICAgICAgIDB4MDUsYQorI2RlZmluZSBISURfVVNBR0UoYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSxhCisjZGVmaW5lIEhJRF9VU0FHRTE2KGEsYikgICAgICAgICAgICAgICAgICAgICAgICAweDBBLGEsYgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEEoYSxiKSAgICAgICAgICAgICAgYXxiICAgICAvL1RoaXMgb3ItcyB0aGUgbW9kIGludG8gdXNhZ2UKKyNkZWZpbmUgSElEX0NPTExFQ1RJT04oYSkgICAgICAgICAgICAgICAgICAgICAgIDB4QTEsYQorI2RlZmluZSBISURfUkVQT1JUX0lEKGEpICAgICAgICAgICAgICAgICAgICAgICAgMHg4NSxhCisjZGVmaW5lIEhJRF9SRVBPUlRfU0laRShhKSAgICAgICAgICAgICAgICAgICAgICAweDc1LGEKKyNkZWZpbmUgSElEX1JFUE9SVF9DT1VOVChhKSAgICAgICAgICAgICAgICAgICAgIDB4OTUsYQorI2RlZmluZSBISURfVVNBR0VfTUlOXzgoYSkgICAgICAgICAgICAgICAgICAgICAgMHgxOSxhCisjZGVmaW5lIEhJRF9VU0FHRV9NSU5fMTYoYSxiKSAgICAgICAgICAgICAgICAgICAweDFBLGEsYgorI2RlZmluZSBISURfVVNBR0VfTUFYXzgoYSkgICAgICAgICAgICAgICAgICAgICAgMHgyOSxhCisjZGVmaW5lIEhJRF9VU0FHRV9NQVhfMTYoYSxiKSAgICAgICAgICAgICAgICAgICAweDJBLGEsYgorI2RlZmluZSBISURfTE9HSUNBTF9NSU5fOChhKSAgICAgICAgICAgICAgICAgICAgMHgxNSxhCisjZGVmaW5lIEhJRF9MT0dJQ0FMX01JTl8xNihhLGIpICAgICAgICAgICAgICAgICAweDE2LGEsYgorI2RlZmluZSBISURfTE9HSUNBTF9NSU5fMzIoYSxiLGMsZCkgICAgICAgICAgICAgMHgxNyxhLGIsYyxkCisjZGVmaW5lIEhJRF9MT0dJQ0FMX01BWF84KGEpICAgICAgICAgICAgICAgICAgICAweDI1LGEKKyNkZWZpbmUgSElEX0xPR0lDQUxfTUFYXzE2KGEsYikgICAgICAgICAgICAgICAgIDB4MjYsYSxiCisjZGVmaW5lIEhJRF9MT0dJQ0FMX01BWF8zMihhLGIsYyxkKSAgICAgICAgICAgICAweDI3LGEsYixjLGQKKyNkZWZpbmUgSElEX1VOSVRfRVhQT05FTlQoYSkgICAgICAgICAgICAgICAgICAgIDB4NTUsYQorI2RlZmluZSBISURfSU5QVVQoYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MSxhCisjZGVmaW5lIEhJRF9PVVRQVVQoYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxLGEKKyNkZWZpbmUgSElEX0ZFQVRVUkUoYSkgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QjEsYQorI2RlZmluZSBISURfRU5EX0NPTExFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgMHhDMAorCisjZW5kaWYgLy8gSElEVVRJTF9URVNUX0hJRFNFTlNPUlNQRUNfSApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL3Rlc3QvVHJpU3RhdGVUZXN0LmNwcCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy90ZXN0L1RyaVN0YXRlVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRjZGYwYgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy90ZXN0L1RyaVN0YXRlVGVzdC5jcHAKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2luY2x1ZGUgIlRyaVN0YXRlLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8Y3N0ZGludD4KKyNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisKK3VzaW5nIEhpZFV0aWw6OlRyaVN0YXRlOwordHlwZWRlZiBUcmlTdGF0ZTx1aW50MzJfdD4gdHJpX3VpbnQzMl90OwordHlwZWRlZiBUcmlTdGF0ZTxpbnQzMl90PiB0cmlfaW50MzJfdDsKK3R5cGVkZWYgVHJpU3RhdGU8aW50MTZfdD4gdHJpX2ludDE2X3Q7CisKK1RFU1QoVHJpU3RhdGVUZXN0LCBDb25zdHJ1Y3RvcikgeworICAgIHRyaV91aW50MzJfdCBhOworICAgIEVYUEVDVF9GQUxTRShhLmlzU2V0KCkpOworCisgICAgYSArPSAxOworICAgIEVYUEVDVF9GQUxTRShhLmlzU2V0KCkpOworCisgICAgYSAtPSAxOworICAgIEVYUEVDVF9GQUxTRShhLmlzU2V0KCkpOworCisgICAgYSAqPSAxOworICAgIEVYUEVDVF9GQUxTRShhLmlzU2V0KCkpOworCisgICAgYSAvPSAxOworICAgIEVYUEVDVF9GQUxTRShhLmlzU2V0KCkpOworCisgICAgdHJpX3VpbnQzMl90IGI7CisgICAgYiA9IGE7CisgICAgRVhQRUNUX0ZBTFNFKGIuaXNTZXQoKSk7CisKKyAgICBhID0gMTsKKyAgICBFWFBFQ1RfVFJVRShhLmlzU2V0KCkpOworCisgICAgYiA9IGE7CisgICAgRVhQRUNUX1RSVUUoYi5pc1NldCgpKTsKKworICAgIGEuY2xlYXIoKTsKKyAgICBFWFBFQ1RfRkFMU0UoYS5pc1NldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShiLmlzU2V0KCkpOworCisgICAgdHJpX3VpbnQzMl90IGMoYik7CisgICAgRVhQRUNUX1RSVUUoYy5pc1NldCgpKTsKKworICAgIGMuY2xlYXIoKTsKKyAgICBFWFBFQ1RfRkFMU0UoYy5pc1NldCgpKTsKKworICAgIHRyaV91aW50MzJfdCBkKGEpOworICAgIEVYUEVDVF9GQUxTRShjLmlzU2V0KCkpOworfQorCitURVNUKFRyaVN0YXRlVGVzdCwgSW5jQW5kRGVjT3BlcmF0aW9uKSB7CisgICAgdHJpX2ludDMyX3QgYSgxKTsKKworICAgIEVYUEVDVF9FUSgyLCAoKythKS5nZXQoMCkpOworICAgIEVYUEVDVF9FUSgyLCAoYSsrKS5nZXQoMCkpOworICAgIEVYUEVDVF9FUSgzLCBhLmdldCgwKSk7CisKKyAgICBFWFBFQ1RfRVEoMiwgKC0tYSkuZ2V0KDApKTsKKyAgICBFWFBFQ1RfRVEoMiwgKGEtLSkuZ2V0KDApKTsKKyAgICBFWFBFQ1RfRVEoMSwgYS5nZXQoMCkpOworCisgICAgdHJpX3VpbnQzMl90IGI7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHVpbnQzMl90PigxMDApLCAoKytiKS5nZXQoMTAwKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHVpbnQzMl90PigxMDEpLCAoYisrKS5nZXQoMTAxKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHVpbnQzMl90PigxMDIpLCBiLmdldCgxMDIpKTsKKyAgICBFWFBFQ1RfRkFMU0UoYi5pc1NldCgpKTsKKworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDx1aW50MzJfdD4oMTAzKSwgKC0tYikuZ2V0KDEwMykpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDx1aW50MzJfdD4oMTA0KSwgKGItLSkuZ2V0KDEwNCkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDx1aW50MzJfdD4oMTA1KSwgYi5nZXQoMTA1KSk7CisgICAgRVhQRUNUX0ZBTFNFKGIuaXNTZXQoKSk7Cit9CisKK1RFU1QoVHJpU3RhdGVUZXN0LCBDb21wYXJpc29uKSB7CisgICAgdHJpX2ludDMyX3QgYSgxKTsKKyAgICB0cmlfaW50MzJfdCBiKDEpOworICAgIHRyaV9pbnQzMl90IGMoMik7CisgICAgdHJpX2ludDMyX3QgZDsKKworICAgIEVYUEVDVF9FUShhLCBiKTsKKyAgICBFWFBFQ1RfRkFMU0UoKGEgIT0gYikpOworICAgIEVYUEVDVF9UUlVFKCEoYSAhPSBiKSk7CisgICAgRVhQRUNUX05FKC0xLCBhKTsKKworICAgIEVYUEVDVF9MVChhLCBjKTsKKyAgICBFWFBFQ1RfTFQoYSwgMyk7CisKKyAgICBFWFBFQ1RfR1QoYywgYik7CisgICAgRVhQRUNUX0dUKGMsIDApOworCisgICAgRVhQRUNUX0xFKGEsIDEpOworICAgIEVYUEVDVF9MRShhLCBjKTsKKyAgICBFWFBFQ1RfTEUoYSwgMyk7CisgICAgRVhQRUNUX0xFKGEsIGIpOworCisgICAgRVhQRUNUX0dFKGMsIGIpOworICAgIEVYUEVDVF9HRShiLCBhKTsKKyAgICBFWFBFQ1RfR0UoYywgMCk7CisgICAgRVhQRUNUX0dFKGMsIDIpOworCisgICAgRVhQRUNUX0ZBTFNFKChhID09IGQpLmlzU2V0KCkpOworICAgIEVYUEVDVF9GQUxTRSgoYSA+PSBkKS5pc1NldCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoKGEgPD0gZCkuaXNTZXQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKChhICE9IGQpLmlzU2V0KCkpOworICAgIEVYUEVDVF9GQUxTRSgoYSA+IGQpLmlzU2V0KCkpOworICAgIEVYUEVDVF9GQUxTRSgoYSA8IGQpLmlzU2V0KCkpOworCisgICAgLy9FWFBFQ1RfRVEoYSwgZCk7IC8vIHdpbGwgY2F1c2UgcnVudGltZSBmYWlsdXJlCisgICAgLy8gZHVlIHRvIGNvbnZlcnRpbmcgYSBub3Qtc2V0IFRyaVN0YXRlPGJvb2w+IHRvIGJvb2wKK30KKworVEVTVChUcmlTdGF0ZVRlc3QsIENvbXBvdW5kQXNzaWduKSB7CisgICAgdHJpX3VpbnQzMl90IHg7CisKKyAgICB4ICs9IDEwOworICAgIEVYUEVDVF9GQUxTRSh4LmlzU2V0KCkpOworICAgIHggLT0gMTA7CisgICAgRVhQRUNUX0ZBTFNFKHguaXNTZXQoKSk7CisgICAgeCAqPSAxMDsKKyAgICBFWFBFQ1RfRkFMU0UoeC5pc1NldCgpKTsKKyAgICB4IC89IDEwOworICAgIEVYUEVDVF9GQUxTRSh4LmlzU2V0KCkpOworICAgIHggJj0gMTA7CisgICAgRVhQRUNUX0ZBTFNFKHguaXNTZXQoKSk7CisgICAgeCB8PSAxMDsKKyAgICBFWFBFQ1RfRkFMU0UoeC5pc1NldCgpKTsKKyAgICB4ICU9IDEwOworICAgIEVYUEVDVF9GQUxTRSh4LmlzU2V0KCkpOworICAgIHggPDw9IDEwOworICAgIEVYUEVDVF9GQUxTRSh4LmlzU2V0KCkpOworICAgIHggPj49IDEwOworICAgIEVYUEVDVF9GQUxTRSh4LmlzU2V0KCkpOworCisgICAgdHJpX2ludDMyX3QgeSwgeiwgdzsKKyNkZWZpbmUgVEVTVF9DT01QT1VORF9BU1NJR04oYSwgb3AsIG9wX2MsIGIpIFwKKyAgICB5ID0geiA9IGE7IFwKKyAgICB3ID0gYjsgXAorICAgIHkgb3BfYyBiOyBcCisgICAgRVhQRUNUX1RSVUUoeS5pc1NldCgpKTsgXAorICAgIEVYUEVDVF9FUSh5LCAoYSBvcCBiKSk7IFwKKyAgICBFWFBFQ1RfRVEoeSwgKHogb3AgYikpOyBcCisgICAgRVhQRUNUX0VRKHksIChhIG9wIHcpKTsKKworICAgIFRFU1RfQ09NUE9VTkRfQVNTSUdOKDEyMywgKywgKz0sIDQ1Nik7CisgICAgVEVTVF9DT01QT1VORF9BU1NJR04oMTIzLCAtLCAtPSwgNDU2KTsKKyAgICBURVNUX0NPTVBPVU5EX0FTU0lHTigxMjMsICosICo9LCA0NTYpOworICAgIFRFU1RfQ09NUE9VTkRfQVNTSUdOKDEyMywgLywgLz0sIDQ1Nik7CisgICAgVEVTVF9DT01QT1VORF9BU1NJR04oMTIzLCB8LCB8PSwgNDU2KTsKKyAgICBURVNUX0NPTVBPVU5EX0FTU0lHTigxMjMsICYsICY9LCA0NTYpOworICAgIFRFU1RfQ09NUE9VTkRfQVNTSUdOKDEyMywgXiwgXj0sIDQ1Nik7CisgICAgVEVTVF9DT01QT1VORF9BU1NJR04oMTIzLCAlLCAlPSwgNDU2KTsKKyN1bmRlZiBURVNUX0NPTVBPVU5EX0FTU0lHTgorICAgIHkgPSB6ID0gMTIzOworICAgIHcgPSAxMDsKKyAgICB5IDw8PSAxMDsKKyAgICBFWFBFQ1RfVFJVRSh5LmlzU2V0KCkpOworICAgIEVYUEVDVF9FUSgxMjMgPDwgMTAsIHkpOworCisgICAgeSA9IHogPSAxMjM0NTsKKyAgICB3ID0gMTA7CisgICAgeSA+Pj0gMTA7CisgICAgRVhQRUNUX1RSVUUoeS5pc1NldCgpKTsKKyAgICBFWFBFQ1RfRVEoMTIzNDUgPj4gMTAsIHkpOworfQorCitURVNUKFRyaVN0YXRlVGVzdCwgVW5hcnlPcGVyYXRpb24pIHsKKyAgICB0cmlfaW50MTZfdCBwOworICAgIEVYUEVDVF9GQUxTRSgoIXApLmlzU2V0KCkpOworICAgIEVYUEVDVF9GQUxTRSgoLXApLmlzU2V0KCkpOworICAgIEVYUEVDVF9GQUxTRSgofnApLmlzU2V0KCkpOworCisgICAgdHJpX2ludDE2X3QgcSgxMjM0KTsKKyAgICBFWFBFQ1RfVFJVRSgoIXEpLmlzU2V0KCkpOworICAgIEVYUEVDVF9FUSghc3RhdGljX2Nhc3Q8aW50MTZfdD4oMTIzNCksICghcSkpOworCisgICAgdHJpX2ludDE2X3QgcigxMjM0KTsKKyAgICBFWFBFQ1RfVFJVRSgoLXIpLmlzU2V0KCkpOworICAgIEVYUEVDVF9FUSgtMTIzNCwgKC1yKSk7CisKKyAgICB0cmlfaW50MTZfdCBzKDEyMzQpOworICAgIEVYUEVDVF9UUlVFKCh+cykuaXNTZXQoKSk7CisgICAgRVhQRUNUX0VRKH5zdGF0aWNfY2FzdDxpbnQxNl90PigxMjM0KSwgfnMpOworfQorCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvUmluZ0J1ZmZlci5jcHAgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvUmluZ0J1ZmZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg1N2E3YwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9SaW5nQnVmZmVyLmNwcApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJSaW5nQnVmZmVyLmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitSaW5nQnVmZmVyOjpSaW5nQnVmZmVyKHNpemVfdCBzaXplKQorICAgIDogbVNpemUoc2l6ZSksCisgICAgICBtRGF0YSgoc2Vuc29yc19ldmVudF90ICopbWFsbG9jKHNpemVvZihzZW5zb3JzX2V2ZW50X3QpICogbVNpemUpKSwKKyAgICAgIG1SZWFkUG9zKDApLAorICAgICAgbVdyaXRlUG9zKDApIHsKK30KKworUmluZ0J1ZmZlcjo6flJpbmdCdWZmZXIoKSB7CisgICAgZnJlZShtRGF0YSk7CisgICAgbURhdGEgPSBOVUxMOworfQorCitzc2l6ZV90IFJpbmdCdWZmZXI6OndyaXRlKGNvbnN0IHNlbnNvcnNfZXZlbnRfdCAqZXYsIHNpemVfdCBzaXplKSB7CisgICAgTXV0ZXg6OkF1dG9sb2NrIGF1dG9Mb2NrKG1Mb2NrKTsKKworICAgIHNpemVfdCBudW1BdmFpbGFibGVUb1JlYWQgPSBtV3JpdGVQb3MgLSBtUmVhZFBvczsKKyAgICBzaXplX3QgbnVtQXZhaWxhYmxlVG9Xcml0ZSA9IG1TaXplIC0gbnVtQXZhaWxhYmxlVG9SZWFkOworCisgICAgaWYgKHNpemUgPiBudW1BdmFpbGFibGVUb1dyaXRlKSB7CisgICAgICAgIHNpemUgPSBudW1BdmFpbGFibGVUb1dyaXRlOworICAgIH0KKworICAgIHNpemVfdCB3cml0ZVBvcyA9IChtV3JpdGVQb3MgJSBtU2l6ZSk7CisgICAgc2l6ZV90IGNvcHkgPSBtU2l6ZSAtIHdyaXRlUG9zOworCisgICAgaWYgKGNvcHkgPiBzaXplKSB7CisgICAgICAgIGNvcHkgPSBzaXplOworICAgIH0KKworICAgIG1lbWNweSgmbURhdGFbd3JpdGVQb3NdLCBldiwgY29weSAqIHNpemVvZihzZW5zb3JzX2V2ZW50X3QpKTsKKworICAgIGlmIChzaXplID4gY29weSkgeworICAgICAgICBtZW1jcHkobURhdGEsICZldltjb3B5XSwgKHNpemUgLSBjb3B5KSAqIHNpemVvZihzZW5zb3JzX2V2ZW50X3QpKTsKKyAgICB9CisKKyAgICBtV3JpdGVQb3MgKz0gc2l6ZTsKKworICAgIGlmIChudW1BdmFpbGFibGVUb1JlYWQgPT0gMCAmJiBzaXplID4gMCkgeworICAgICAgICBtTm90RW1wdHlDb25kaXRpb24uYnJvYWRjYXN0KCk7CisgICAgfQorCisgICAgcmV0dXJuIHNpemU7Cit9CisKK3NzaXplX3QgUmluZ0J1ZmZlcjo6cmVhZChzZW5zb3JzX2V2ZW50X3QgKmV2LCBzaXplX3Qgc2l6ZSkgeworICAgIE11dGV4OjpBdXRvbG9jayBhdXRvTG9jayhtTG9jayk7CisKKyAgICBzaXplX3QgbnVtQXZhaWxhYmxlVG9SZWFkOworICAgIGZvciAoOzspIHsKKyAgICAgICAgbnVtQXZhaWxhYmxlVG9SZWFkID0gbVdyaXRlUG9zIC0gbVJlYWRQb3M7CisgICAgICAgIGlmIChudW1BdmFpbGFibGVUb1JlYWQgPiAwKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIG1Ob3RFbXB0eUNvbmRpdGlvbi53YWl0KG1Mb2NrKTsKKyAgICB9CisKKyAgICBpZiAoc2l6ZSA+IG51bUF2YWlsYWJsZVRvUmVhZCkgeworICAgICAgICBzaXplID0gbnVtQXZhaWxhYmxlVG9SZWFkOworICAgIH0KKworICAgIHNpemVfdCByZWFkUG9zID0gKG1SZWFkUG9zICUgbVNpemUpOworICAgIHNpemVfdCBjb3B5ID0gbVNpemUgLSByZWFkUG9zOworCisgICAgaWYgKGNvcHkgPiBzaXplKSB7CisgICAgICAgIGNvcHkgPSBzaXplOworICAgIH0KKworICAgIG1lbWNweShldiwgJm1EYXRhW3JlYWRQb3NdLCBjb3B5ICogc2l6ZW9mKHNlbnNvcnNfZXZlbnRfdCkpOworCisgICAgaWYgKHNpemUgPiBjb3B5KSB7CisgICAgICAgIG1lbWNweSgmZXZbY29weV0sIG1EYXRhLCAoc2l6ZSAtIGNvcHkpICogc2l6ZW9mKHNlbnNvcnNfZXZlbnRfdCkpOworICAgIH0KKworICAgIG1SZWFkUG9zICs9IHNpemU7CisKKyAgICByZXR1cm4gc2l6ZTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL1JpbmdCdWZmZXIuaCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9SaW5nQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE2YjhjOQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9SaW5nQnVmZmVyLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgUklOR19CVUZGRVJfSF8KKworI2RlZmluZSBSSU5HX0JVRkZFUl9IXworCisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BQmFzZS5oPgorCisjaW5jbHVkZSA8aGFyZHdhcmUvc2Vuc29ycy5oPgorI2luY2x1ZGUgPHV0aWxzL3RocmVhZHMuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitjbGFzcyBSaW5nQnVmZmVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBSaW5nQnVmZmVyKHNpemVfdCBzaXplKTsKKyAgICB+UmluZ0J1ZmZlcigpOworCisgICAgc3NpemVfdCB3cml0ZShjb25zdCBzZW5zb3JzX2V2ZW50X3QgKmV2LCBzaXplX3Qgc2l6ZSk7CisgICAgc3NpemVfdCByZWFkKHNlbnNvcnNfZXZlbnRfdCAqZXYsIHNpemVfdCBzaXplKTsKKworcHJpdmF0ZToKKyAgICBNdXRleCBtTG9jazsKKyAgICBDb25kaXRpb24gbU5vdEVtcHR5Q29uZGl0aW9uOworCisgICAgc2l6ZV90IG1TaXplOworICAgIHNlbnNvcnNfZXZlbnRfdCAqbURhdGE7CisgICAgc2l6ZV90IG1SZWFkUG9zLCBtV3JpdGVQb3M7CisKKyAgICBESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhSaW5nQnVmZmVyKTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAgLy8gUklOR19CVUZGRVJfSF8KZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9TZW5zb3JFdmVudENhbGxiYWNrLmggYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvU2Vuc29yRXZlbnRDYWxsYmFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5OGNkN2YKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvU2Vuc29yRXZlbnRDYWxsYmFjay5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfU0VOU09SSEFMX0RTRV9TRU5TT1JfRVZFTlRfQ0FMTEJBQ0tfSAorI2RlZmluZSBBTkRST0lEX1NFTlNPUkhBTF9EU0VfU0VOU09SX0VWRU5UX0NBTExCQUNLX0gKKworI2luY2x1ZGUgPGhhcmR3YXJlL3NlbnNvcnMuaD4KKyNpbmNsdWRlIDx1dGlscy9SZWZCYXNlLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBTZW5zb3JIYWxFeHQgeworCitjbGFzcyBCYXNlU2Vuc29yT2JqZWN0OworCisvLyBpZiB0aW1lc3RhbXAgaW4gc2Vuc29yc19ldmVudF90IGhhcyB0aGlzIHZhbHVlLCBpdCB3aWxsIGJlIGZpbGxlZCBhdCBkaXNwYXRjaGVyLgorY29uc3RleHByIGludDY0X3QgVElNRVNUQU1QX0FVVE9fRklMTCA9IC0xOworCitjbGFzcyBTZW5zb3JFdmVudENhbGxiYWNrIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGludCBzdWJtaXRFdmVudChzcDxCYXNlU2Vuc29yT2JqZWN0PiBzZW5zb3IsIGNvbnN0IHNlbnNvcnNfZXZlbnRfdCAmZSkgPSAwOworICAgIHZpcnR1YWwgflNlbnNvckV2ZW50Q2FsbGJhY2soKSA9IGRlZmF1bHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBTZW5zb3JIYWxFeHQKK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmIC8vIEFORFJPSURfU0VOU09SSEFMX0RTRV9TRU5TT1JfRVZFTlRfQ0FMTEJBQ0tfSApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL3NlbnNvcnMuY3BwIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL3NlbnNvcnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMjAzYjIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3Ivc2Vuc29ycy5jcHAKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisKKyNpbmNsdWRlICJEeW5hbWljU2Vuc29yTWFuYWdlci5oIgorI2luY2x1ZGUgInNlbnNvcnMuaCIKKworI2luY2x1ZGUgPGN1dGlscy9wcm9wZXJ0aWVzLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BRGVidWcuaD4KKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+Cit1c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworU2Vuc29yQ29udGV4dDo6U2Vuc29yQ29udGV4dChjb25zdCBzdHJ1Y3QgaHdfbW9kdWxlX3QgKm1vZHVsZSkgeworICAgIG1lbXNldCgmZGV2aWNlLCAwLCBzaXplb2YoZGV2aWNlKSk7CisKKyAgICBkZXZpY2UuY29tbW9uLnRhZyA9IEhBUkRXQVJFX0RFVklDRV9UQUc7CisgICAgZGV2aWNlLmNvbW1vbi52ZXJzaW9uID0gU0VOU09SU19ERVZJQ0VfQVBJX1ZFUlNJT05fMV8zOworICAgIGRldmljZS5jb21tb24ubW9kdWxlID0gY29uc3RfY2FzdDxod19tb2R1bGVfdCAqPihtb2R1bGUpOworICAgIGRldmljZS5jb21tb24uY2xvc2UgPSBDbG9zZVdyYXBwZXI7CisgICAgZGV2aWNlLmFjdGl2YXRlID0gQWN0aXZhdGVXcmFwcGVyOworICAgIGRldmljZS5zZXREZWxheSA9IFNldERlbGF5V3JhcHBlcjsKKyAgICBkZXZpY2UucG9sbCA9IFBvbGxXcmFwcGVyOworICAgIGRldmljZS5iYXRjaCA9IEJhdGNoV3JhcHBlcjsKKyAgICBkZXZpY2UuZmx1c2ggPSBGbHVzaFdyYXBwZXI7CisKKyAgICAvLyBpbml0aWFsaXplIGR5bmFtaWMgc2Vuc29yIG1hbmFnZXIKKyAgICBpbnQzMl90IGJhc2UgPSBwcm9wZXJ0eV9nZXRfaW50MzIoInNlbnNvci5keW5hbWljX3NlbnNvcl9oYWwuaGFuZGxlX2Jhc2UiLCBrRHluYW1pY0hhbmRsZUJhc2UpOworICAgIGludDMyX3QgY291bnQgPQorICAgICAgICAgICAgcHJvcGVydHlfZ2V0X2ludDMyKCJzZW5zb3IuZHluYW1pY19zZW5zb3JfaGFsLmhhbmRsZV9jb3VudCIsIGtNYXhEeW5hbWljSGFuZGxlQ291bnQpOworICAgIG1EeW5hbWljU2Vuc29yTWFuYWdlci5yZXNldChEeW5hbWljU2Vuc29yTWFuYWdlcjo6Y3JlYXRlSW5zdGFuY2UoYmFzZSwgY291bnQsIG51bGxwdHIpKTsKK30KKworaW50IFNlbnNvckNvbnRleHQ6OmNsb3NlKCkgeworICAgIGRlbGV0ZSB0aGlzOworICAgIHJldHVybiAwOworfQorCitpbnQgU2Vuc29yQ29udGV4dDo6YWN0aXZhdGUoaW50IGhhbmRsZSwgaW50IGVuYWJsZWQpIHsKKyAgICByZXR1cm4gbUR5bmFtaWNTZW5zb3JNYW5hZ2VyLT5hY3RpdmF0ZShoYW5kbGUsIGVuYWJsZWQpOworfQorCitpbnQgU2Vuc29yQ29udGV4dDo6c2V0RGVsYXkoaW50IGhhbmRsZSwgaW50NjRfdCBkZWxheU5zKSB7CisgICAgcmV0dXJuIG1EeW5hbWljU2Vuc29yTWFuYWdlci0+c2V0RGVsYXkoaGFuZGxlLCBkZWxheU5zKTsKK30KKworaW50IFNlbnNvckNvbnRleHQ6OnBvbGwoc2Vuc29yc19ldmVudF90ICpkYXRhLCBpbnQgY291bnQpIHsKKyAgICByZXR1cm4gbUR5bmFtaWNTZW5zb3JNYW5hZ2VyLT5wb2xsKGRhdGEsIGNvdW50KTsKK30KKworaW50IFNlbnNvckNvbnRleHQ6OmJhdGNoKAorICAgICAgICBpbnQgaGFuZGxlLAorICAgICAgICBpbnQ2NF90IHNhbXBsaW5nX3BlcmlvZF9ucywKKyAgICAgICAgaW50NjRfdCBtYXhfcmVwb3J0X2xhdGVuY3lfbnMpIHsKKyAgICByZXR1cm4gbUR5bmFtaWNTZW5zb3JNYW5hZ2VyLT5iYXRjaChoYW5kbGUsIHNhbXBsaW5nX3BlcmlvZF9ucywgbWF4X3JlcG9ydF9sYXRlbmN5X25zKTsKK30KKworaW50IFNlbnNvckNvbnRleHQ6OmZsdXNoKGludCBoYW5kbGUpIHsKKyAgICByZXR1cm4gbUR5bmFtaWNTZW5zb3JNYW5hZ2VyLT5mbHVzaChoYW5kbGUpOworfQorCisvLyBzdGF0aWMKK2ludCBTZW5zb3JDb250ZXh0OjpDbG9zZVdyYXBwZXIoc3RydWN0IGh3X2RldmljZV90ICpkZXYpIHsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTZW5zb3JDb250ZXh0ICo+KGRldiktPmNsb3NlKCk7Cit9CisKKy8vIHN0YXRpYworaW50IFNlbnNvckNvbnRleHQ6OkFjdGl2YXRlV3JhcHBlcigKKyAgICAgICAgc3RydWN0IHNlbnNvcnNfcG9sbF9kZXZpY2VfdCAqZGV2LCBpbnQgaGFuZGxlLCBpbnQgZW5hYmxlZCkgeworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFNlbnNvckNvbnRleHQgKj4oZGV2KS0+YWN0aXZhdGUoaGFuZGxlLCBlbmFibGVkKTsKK30KKworLy8gc3RhdGljCitpbnQgU2Vuc29yQ29udGV4dDo6U2V0RGVsYXlXcmFwcGVyKAorICAgICAgICBzdHJ1Y3Qgc2Vuc29yc19wb2xsX2RldmljZV90ICpkZXYsIGludCBoYW5kbGUsIGludDY0X3QgZGVsYXlOcykgeworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFNlbnNvckNvbnRleHQgKj4oZGV2KS0+c2V0RGVsYXkoaGFuZGxlLCBkZWxheU5zKTsKK30KKworLy8gc3RhdGljCitpbnQgU2Vuc29yQ29udGV4dDo6UG9sbFdyYXBwZXIoCisgICAgICAgIHN0cnVjdCBzZW5zb3JzX3BvbGxfZGV2aWNlX3QgKmRldiwgc2Vuc29yc19ldmVudF90ICpkYXRhLCBpbnQgY291bnQpIHsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTZW5zb3JDb250ZXh0ICo+KGRldiktPnBvbGwoZGF0YSwgY291bnQpOworfQorCisvLyBzdGF0aWMKK2ludCBTZW5zb3JDb250ZXh0OjpCYXRjaFdyYXBwZXIoCisgICAgICAgIHN0cnVjdCBzZW5zb3JzX3BvbGxfZGV2aWNlXzEgKmRldiwKKyAgICAgICAgaW50IGhhbmRsZSwKKyAgICAgICAgaW50IGZsYWdzLAorICAgICAgICBpbnQ2NF90IHNhbXBsaW5nX3BlcmlvZF9ucywKKyAgICAgICAgaW50NjRfdCBtYXhfcmVwb3J0X2xhdGVuY3lfbnMpIHsKKyAgICAodm9pZCkgZmxhZ3M7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U2Vuc29yQ29udGV4dCAqPihkZXYpLT5iYXRjaCgKKyAgICAgICAgICAgIGhhbmRsZSwgc2FtcGxpbmdfcGVyaW9kX25zLCBtYXhfcmVwb3J0X2xhdGVuY3lfbnMpOworfQorCisvLyBzdGF0aWMKK2ludCBTZW5zb3JDb250ZXh0OjpGbHVzaFdyYXBwZXIoc3RydWN0IHNlbnNvcnNfcG9sbF9kZXZpY2VfMSAqZGV2LCBpbnQgaGFuZGxlKSB7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U2Vuc29yQ29udGV4dCAqPihkZXYpLT5mbHVzaChoYW5kbGUpOworfQorCitzaXplX3QgU2Vuc29yQ29udGV4dDo6Z2V0U2Vuc29yTGlzdChzZW5zb3JfdCBjb25zdCAqKmxpc3QpIHsKKyAgICAqbGlzdCA9ICYobUR5bmFtaWNTZW5zb3JNYW5hZ2VyLT5nZXREeW5hbWljTWV0YVNlbnNvcigpKTsKKyAgICByZXR1cm4gMTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworc3RhdGljIHNlbnNvcl90IGNvbnN0ICpzZW5zb3JfbGlzdDsKKworc3RhdGljIGludCBvcGVuX3NlbnNvcnMoCisgICAgICAgIGNvbnN0IHN0cnVjdCBod19tb2R1bGVfdCAqbW9kdWxlLAorICAgICAgICBjb25zdCBjaGFyICosCisgICAgICAgIHN0cnVjdCBod19kZXZpY2VfdCAqKmRldikgeworICAgIFNlbnNvckNvbnRleHQgKmN0eCA9IG5ldyBTZW5zb3JDb250ZXh0KG1vZHVsZSk7CisgICAgY3R4LT5nZXRTZW5zb3JMaXN0KCZzZW5zb3JfbGlzdCk7CisgICAgKmRldiA9ICZjdHgtPmRldmljZS5jb21tb247CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaHdfbW9kdWxlX21ldGhvZHNfdCBzZW5zb3JzX21vZHVsZV9tZXRob2RzID0geworICAgIC5vcGVuID0gb3Blbl9zZW5zb3JzCit9OworCitzdGF0aWMgaW50IGdldF9zZW5zb3JzX2xpc3QoCisgICAgICAgIHN0cnVjdCBzZW5zb3JzX21vZHVsZV90ICosCisgICAgICAgIHN0cnVjdCBzZW5zb3JfdCBjb25zdCAqKmxpc3QpIHsKKyAgICAqbGlzdCA9IHNlbnNvcl9saXN0OworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IHNldF9vcGVyYXRpb25fbW9kZSh1bnNpZ25lZCBpbnQgbW9kZSkgeworICAgIHJldHVybiAobW9kZSkgPyAtRUlOVkFMIDogMDsKK30KKworc3RydWN0IHNlbnNvcnNfbW9kdWxlX3QgSEFMX01PRFVMRV9JTkZPX1NZTSA9IHsKKyAgICAuY29tbW9uID0geworICAgICAgICAgICAgLnRhZyA9IEhBUkRXQVJFX01PRFVMRV9UQUcsCisgICAgICAgICAgICAudmVyc2lvbl9tYWpvciA9IDEsCisgICAgICAgICAgICAudmVyc2lvbl9taW5vciA9IDAsCisgICAgICAgICAgICAuaWQgPSBTRU5TT1JTX0hBUkRXQVJFX01PRFVMRV9JRCwKKyAgICAgICAgICAgIC5uYW1lID0gIkdvb2dsZSBEeW5hbWljIFNlbnNvciBNYW5hZ2VyIiwKKyAgICAgICAgICAgIC5hdXRob3IgPSAiR29vZ2xlIiwKKyAgICAgICAgICAgIC5tZXRob2RzID0gJnNlbnNvcnNfbW9kdWxlX21ldGhvZHMsCisgICAgICAgICAgICAuZHNvICA9IE5VTEwsCisgICAgICAgICAgICAucmVzZXJ2ZWQgPSB7MH0sCisgICAgfSwKKyAgICAuZ2V0X3NlbnNvcnNfbGlzdCA9IGdldF9zZW5zb3JzX2xpc3QsCisgICAgLnNldF9vcGVyYXRpb25fbW9kZSA9IHNldF9vcGVyYXRpb25fbW9kZSwKK307CmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3Ivc2Vuc29ycy5oIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL3NlbnNvcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmQ4NzA4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL3NlbnNvcnMuaApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBTRU5TT1JTX0hfCisjZGVmaW5lIFNFTlNPUlNfSF8KKworI2luY2x1ZGUgPGhhcmR3YXJlL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8aGFyZHdhcmUvc2Vuc29ycy5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUJhc2UuaD4KKyNpbmNsdWRlIDx1dGlscy9SZWZCYXNlLmg+CisKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKyAgICBuYW1lc3BhY2UgU2Vuc29ySGFsRXh0IHsKKyAgICAgICAgY2xhc3MgRHluYW1pY1NlbnNvck1hbmFnZXI7CisgICAgfSAvLyBuYW1lc3BhY2UgQmFzZVNlbnNvck9iamVjdAorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCit1c2luZyBhbmRyb2lkOjpTZW5zb3JIYWxFeHQ6OkR5bmFtaWNTZW5zb3JNYW5hZ2VyOworCitjbGFzcyBTZW5zb3JDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3Qgc2Vuc29yc19wb2xsX2RldmljZV8xIGRldmljZTsKKworICAgIGV4cGxpY2l0IFNlbnNvckNvbnRleHQoY29uc3Qgc3RydWN0IGh3X21vZHVsZV90ICptb2R1bGUpOworCisgICAgc2l6ZV90IGdldFNlbnNvckxpc3Qoc2Vuc29yX3QgY29uc3QgKipsaXN0KTsKKworcHJpdmF0ZToKKworICAgIGludCBjbG9zZSgpOworICAgIGludCBhY3RpdmF0ZShpbnQgaGFuZGxlLCBpbnQgZW5hYmxlZCk7CisgICAgaW50IHNldERlbGF5KGludCBoYW5kbGUsIGludDY0X3QgZGVsYXlOcyk7CisgICAgaW50IHBvbGwoc2Vuc29yc19ldmVudF90ICpkYXRhLCBpbnQgY291bnQpOworCisgICAgaW50IGJhdGNoKGludCBoYW5kbGUsIGludDY0X3Qgc2FtcGxpbmdfcGVyaW9kX25zLAorICAgICAgICAgICAgICBpbnQ2NF90IG1heF9yZXBvcnRfbGF0ZW5jeV9ucyk7CisKKyAgICBpbnQgZmx1c2goaW50IGhhbmRsZSk7CisKKyAgICAvLyBzdGF0aWMgd3JhcHBlcnMKKyAgICBzdGF0aWMgaW50IENsb3NlV3JhcHBlcihzdHJ1Y3QgaHdfZGV2aWNlX3QgKmRldik7CisKKyAgICBzdGF0aWMgaW50IEFjdGl2YXRlV3JhcHBlcigKKyAgICAgICAgICAgIHN0cnVjdCBzZW5zb3JzX3BvbGxfZGV2aWNlX3QgKmRldiwgaW50IGhhbmRsZSwgaW50IGVuYWJsZWQpOworCisgICAgc3RhdGljIGludCBTZXREZWxheVdyYXBwZXIoCisgICAgICAgICAgICBzdHJ1Y3Qgc2Vuc29yc19wb2xsX2RldmljZV90ICpkZXYsIGludCBoYW5kbGUsIGludDY0X3QgZGVsYXlOcyk7CisKKyAgICBzdGF0aWMgaW50IFBvbGxXcmFwcGVyKAorICAgICAgICAgICAgc3RydWN0IHNlbnNvcnNfcG9sbF9kZXZpY2VfdCAqZGV2LCBzZW5zb3JzX2V2ZW50X3QgKmRhdGEsIGludCBjb3VudCk7CisKKyAgICBzdGF0aWMgaW50IEJhdGNoV3JhcHBlcigKKyAgICAgICAgICAgIHN0cnVjdCBzZW5zb3JzX3BvbGxfZGV2aWNlXzEgKmRldiwKKyAgICAgICAgICAgIGludCBoYW5kbGUsCisgICAgICAgICAgICBpbnQgZmxhZ3MsCisgICAgICAgICAgICBpbnQ2NF90IHNhbXBsaW5nX3BlcmlvZF9ucywKKyAgICAgICAgICAgIGludDY0X3QgbWF4X3JlcG9ydF9sYXRlbmN5X25zKTsKKworICAgIHN0YXRpYyBpbnQgRmx1c2hXcmFwcGVyKHN0cnVjdCBzZW5zb3JzX3BvbGxfZGV2aWNlXzEgKmRldiwgaW50IGhhbmRsZSk7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGludDMyX3Qga0R5bmFtaWNIYW5kbGVCYXNlID0gMHgxMDAwMDsKKyAgICBzdGF0aWMgY29uc3RleHByIGludDMyX3Qga0R5bmFtaWNIYW5kbGVFbmQgPSAweDEwMDAwMDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQzMl90IGtNYXhEeW5hbWljSGFuZGxlQ291bnQgPSBrRHluYW1pY0hhbmRsZUVuZCAtIGtEeW5hbWljSGFuZGxlQmFzZTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxEeW5hbWljU2Vuc29yTWFuYWdlcj4gbUR5bmFtaWNTZW5zb3JNYW5hZ2VyOworCisgICAgRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoU2Vuc29yQ29udGV4dCk7Cit9OworCisjZW5kaWYgIC8vIFNFTlNPUlNfSF8KZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9tdWx0aWhhbC5jcHAgYi9tb2R1bGVzL3NlbnNvcnMvbXVsdGloYWwuY3BwCmluZGV4IGYzOGQ5MGQuLjI4MTAxMTggMTAwNjQ0Ci0tLSBhL21vZHVsZXMvc2Vuc29ycy9tdWx0aWhhbC5jcHAKKysrIGIvbW9kdWxlcy9zZW5zb3JzL211bHRpaGFsLmNwcApAQCAtMTQsMzMgKzE0LDMwIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCi0jaW5jbHVkZSA8aGFyZHdhcmUvc2Vuc29ycy5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxkaXJlbnQuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8cG9sbC5oPgotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNpbmNsdWRlIDxjdXRpbHMvYXRvbWljLmg+CisjaW5jbHVkZSAiU2Vuc29yRXZlbnRRdWV1ZS5oIgorI2luY2x1ZGUgIm11bHRpaGFsLmgiCiAKICNkZWZpbmUgTE9HX05ERUJVRyAxCiAjaW5jbHVkZSA8Y3V0aWxzL2xvZy5oPgorI2luY2x1ZGUgPGN1dGlscy9hdG9taWMuaD4KKyNpbmNsdWRlIDxoYXJkd2FyZS9zZW5zb3JzLmg+CiAKICNpbmNsdWRlIDx2ZWN0b3I+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPGZzdHJlYW0+CiAjaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHN0cmluZz4KIAotI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CiAjaW5jbHVkZSA8ZGxmY24uaD4KLSNpbmNsdWRlIDxTZW5zb3JFdmVudFF1ZXVlLmg+Ci0KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHBvbGwuaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KIAotc3RhdGljIGNvbnN0IGNoYXIqIENPTkZJR19GSUxFTkFNRSA9ICIvc3lzdGVtL2V0Yy9zZW5zb3JzL2hhbHMuY29uZiI7Ci1zdGF0aWMgY29uc3QgaW50IE1BWF9DT05GX0xJTkVfTEVOR1RIID0gMTAyNDsKIAogc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBpbml0X21vZHVsZXNfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwogc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBpbml0X3NlbnNvcnNfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwpAQCAtMjU4LDkgKzI1NSw5IEBACiAgICAgfQogfQogCi0vLyBBbmRyb2lkIEwgcmVxdWlyZXMgc2Vuc29yIEhBTHMgdG8gYmUgZWl0aGVyIDFfMCBvciAxXzMgY29tcGxpYW50CisvLyBBbmRyb2lkIE4gYW5kIGhpcmUgcmVxdWlyZSBzZW5zb3IgSEFMcyB0byBiZSBhdCBsZWFzdCAxXzMgY29tcGxpYW50CiAjZGVmaW5lIEhBTF9WRVJTSU9OX0lTX0NPTVBMSUFOVCh2ZXJzaW9uKSAgXAotICAgICh2ZXJzaW9uID09IFNFTlNPUlNfREVWSUNFX0FQSV9WRVJTSU9OXzFfMCB8fCB2ZXJzaW9uID49IFNFTlNPUlNfREVWSUNFX0FQSV9WRVJTSU9OXzFfMykKKyAgICAodmVyc2lvbiA+PSBTRU5TT1JTX0RFVklDRV9BUElfVkVSU0lPTl8xXzMpCiAKIC8vIFJldHVybnMgdHJ1ZSBpZiBIQUwgaXMgY29tcGxpYW50LCBmYWxzZSBpZiBIQUwgaXMgbm90IGNvbXBsaWFudCBvciBpZiBoYW5kbGUgaXMgaW52YWxpZAogc3RhdGljIGJvb2wgaGFsSXNDb21wbGlhbnQoc2Vuc29yc19wb2xsX2NvbnRleHRfdCAqY3R4LCBpbnQgaGFuZGxlKSB7CkBAIC01MDQsMTMgKzUwMSwxMyBAQAogICovCiBzdGF0aWMgdm9pZCBnZXRfc29fcGF0aHMoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICpzb19wYXRocykgewogICAgIHN0ZDo6c3RyaW5nIGxpbmU7Ci0gICAgc3RkOjppZnN0cmVhbSBjb25mX2ZpbGUoQ09ORklHX0ZJTEVOQU1FKTsKKyAgICBzdGQ6Omlmc3RyZWFtIGNvbmZfZmlsZShNVUxUSV9IQUxfQ09ORklHX0ZJTEVfUEFUSCk7CiAKICAgICBpZighY29uZl9maWxlKSB7Ci0gICAgICAgIEFMT0dXKCJObyBtdWx0aWhhbCBjb25maWcgZmlsZSBmb3VuZCBhdCAlcyIsIENPTkZJR19GSUxFTkFNRSk7CisgICAgICAgIEFMT0dXKCJObyBtdWx0aWhhbCBjb25maWcgZmlsZSBmb3VuZCBhdCAlcyIsIE1VTFRJX0hBTF9DT05GSUdfRklMRV9QQVRIKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBBTE9HVigiTXVsdGloYWwgY29uZmlnIGZpbGUgZm91bmQgYXQgJXMiLCBDT05GSUdfRklMRU5BTUUpOworICAgIEFMT0dWKCJNdWx0aWhhbCBjb25maWcgZmlsZSBmb3VuZCBhdCAlcyIsIE1VTFRJX0hBTF9DT05GSUdfRklMRV9QQVRIKTsKICAgICB3aGlsZSAoc3RkOjpnZXRsaW5lKGNvbmZfZmlsZSwgbGluZSkpIHsKICAgICAgICAgQUxPR1YoImNvbmZpZyBmaWxlIGxpbmU6ICclcyciLCBsaW5lLmNfc3RyKCkpOwogICAgICAgICBzb19wYXRocy0+cHVzaF9iYWNrKGxpbmUpOwpAQCAtNjYwLDYgKzY1NywxMCBAQAogICAgIC5nZXRfc2Vuc29yc19saXN0ID0gbW9kdWxlX19nZXRfc2Vuc29yc19saXN0CiB9OwogCitzdHJ1Y3Qgc2Vuc29yc19tb2R1bGVfdCAqZ2V0X211bHRpX2hhbF9tb2R1bGVfaW5mbygpIHsKKyAgICByZXR1cm4gKCZIQUxfTU9EVUxFX0lORk9fU1lNKTsKK30KKwogc3RhdGljIGludCBvcGVuX3NlbnNvcnMoY29uc3Qgc3RydWN0IGh3X21vZHVsZV90KiBod19tb2R1bGUsIGNvbnN0IGNoYXIqIG5hbWUsCiAgICAgICAgIHN0cnVjdCBod19kZXZpY2VfdCoqIGh3X2RldmljZV9vdXQpIHsKICAgICBBTE9HVigib3Blbl9zZW5zb3JzIGJlZ2luLi4uIik7CmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvbXVsdGloYWwuaCBiL21vZHVsZXMvc2Vuc29ycy9tdWx0aWhhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMGM3Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvbXVsdGloYWwuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpZm5kZWYgSEFSRFdBUkVfTElCSEFSRFdBUkVfTU9EVUxFU19TRU5TT1JTX01VTFRJSEFMX0hfCisjZGVmaW5lIEhBUkRXQVJFX0xJQkhBUkRXQVJFX01PRFVMRVNfU0VOU09SU19NVUxUSUhBTF9IXworCisjaW5jbHVkZSA8aGFyZHdhcmUvc2Vuc29ycy5oPgorI2luY2x1ZGUgPGhhcmR3YXJlL2hhcmR3YXJlLmg+CisKK3N0YXRpYyBjb25zdCBjaGFyKiBNVUxUSV9IQUxfQ09ORklHX0ZJTEVfUEFUSCA9ICIvc3lzdGVtL2V0Yy9zZW5zb3JzL2hhbHMuY29uZiI7CisKK3N0cnVjdCBzZW5zb3JzX21vZHVsZV90ICpnZXRfbXVsdGlfaGFsX21vZHVsZV9pbmZvKHZvaWQpOworCisjZW5kaWYgLy8gSEFSRFdBUkVfTElCSEFSRFdBUkVfTU9EVUxFU19TRU5TT1JTX01VTFRJSEFMX0hfCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvdGVzdHMvU2Vuc29yRXZlbnRRdWV1ZV90ZXN0LmNwcCBiL21vZHVsZXMvc2Vuc29ycy90ZXN0cy9TZW5zb3JFdmVudFF1ZXVlX3Rlc3QuY3BwCmluZGV4IDMyMThiYjkuLmQzZDc1ZWUgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvc2Vuc29ycy90ZXN0cy9TZW5zb3JFdmVudFF1ZXVlX3Rlc3QuY3BwCisrKyBiL21vZHVsZXMvc2Vuc29ycy90ZXN0cy9TZW5zb3JFdmVudFF1ZXVlX3Rlc3QuY3BwCkBAIC0zMiw3ICszMiw3IEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgY2hlY2tJbnQoY2hhciogbXNnLCBpbnQgZXhwZWN0ZWQsIGludCBhY3R1YWwpIHsKK2Jvb2wgY2hlY2tJbnQoY29uc3QgY2hhciogbXNnLCBpbnQgZXhwZWN0ZWQsIGludCBhY3R1YWwpIHsKICAgICBpZiAoYWN0dWFsICE9IGV4cGVjdGVkKSB7CiAgICAgICAgIHByaW50ZigiJXM7IGV4cGVjdGVkICVkOyBhY3R1YWwgd2FzICVkXG4iLCBtc2csIGV4cGVjdGVkLCBhY3R1YWwpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xODcsNyArMTg3LDcgQEAKIH0KIAogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKK2ludCBtYWluKGludCBhcmdjIF9fYXR0cmlidXRlKCh1bnVzZWQpKSwgY2hhciAqKmFyZ3YgX19hdHRyaWJ1dGUoKHVudXNlZCkpKSB7CiAgICAgaWYgKHRlc3RTaW1wbGVXcml0ZVNpemVDb3VudHMoKSAmJgogICAgICAgICAgICAgdGVzdFdyYXBwaW5nV3JpdGVTaXplQ291bnRzKCkgJiYKICAgICAgICAgICAgIHRlc3RGdWxsUXVldWVJbygpKSB7CmRpZmYgLS1naXQgYS9tb2R1bGVzL3NvdW5kdHJpZ2dlci9BbmRyb2lkLm1rIGIvbW9kdWxlcy9zb3VuZHRyaWdnZXIvQW5kcm9pZC5tawppbmRleCBiYjU4MDUzLi44MjUwZjliIDEwMDY0NAotLS0gYS9tb2R1bGVzL3NvdW5kdHJpZ2dlci9BbmRyb2lkLm1rCisrKyBiL21vZHVsZXMvc291bmR0cmlnZ2VyL0FuZHJvaWQubWsKQEAgLTE5LDYgKzE5LDcgQEAKIAogTE9DQUxfTU9EVUxFIDo9IHNvdW5kX3RyaWdnZXIuc3R1Yi5kZWZhdWx0CiBMT0NBTF9NT0RVTEVfUkVMQVRJVkVfUEFUSCA6PSBodworTE9DQUxfUFJPUFJJRVRBUllfTU9EVUxFIDo9IHRydWUKIExPQ0FMX1NSQ19GSUxFUyA6PSBzb3VuZF90cmlnZ2VyX2h3LmMKIExPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGlibG9nIGxpYmN1dGlscwogTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKZGlmZiAtLWdpdCBhL21vZHVsZXMvdGhlcm1hbC9BbmRyb2lkLm1rIGIvbW9kdWxlcy90aGVybWFsL0FuZHJvaWQubWsKaW5kZXggODBhZDc4YS4uZmY1MTE0NSAxMDA2NDQKLS0tIGEvbW9kdWxlcy90aGVybWFsL0FuZHJvaWQubWsKKysrIGIvbW9kdWxlcy90aGVybWFsL0FuZHJvaWQubWsKQEAgLTE4LDYgKzE4LDcgQEAKIAogTE9DQUxfTU9EVUxFIDo9IHRoZXJtYWwuZGVmYXVsdAogTE9DQUxfTU9EVUxFX1JFTEFUSVZFX1BBVEggOj0gaHcKK0xPQ0FMX1BST1BSSUVUQVJZX01PRFVMRSA6PSB0cnVlCiBMT0NBTF9TUkNfRklMRVMgOj0gdGhlcm1hbC5jCiBMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmxvZyBsaWJjdXRpbHMKIExPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCmRpZmYgLS1naXQgYS9tb2R1bGVzL3R2X2lucHV0L0FuZHJvaWQuYnAgYi9tb2R1bGVzL3R2X2lucHV0L0FuZHJvaWQuYnAKaW5kZXggYmVhYzEzMi4uNTA5MTk4ZCAxMDA2NDQKLS0tIGEvbW9kdWxlcy90dl9pbnB1dC9BbmRyb2lkLmJwCisrKyBiL21vZHVsZXMvdHZfaW5wdXQvQW5kcm9pZC5icApAQCAtMTUsNiArMTUsNyBAQAogY2NfbGlicmFyeV9zaGFyZWQgewogICAgIG5hbWU6ICJ0dl9pbnB1dC5kZWZhdWx0IiwKICAgICByZWxhdGl2ZV9pbnN0YWxsX3BhdGg6ICJodyIsCisgICAgcHJvcHJpZXRhcnk6IHRydWUsCiAgICAgc2hhcmVkX2xpYnM6IFsKICAgICAgICAgImxpYmN1dGlscyIsCiAgICAgICAgICJsaWJsb2ciLApkaWZmIC0tZ2l0IGEvbW9kdWxlcy90dl9pbnB1dC90dl9pbnB1dC5jcHAgYi9tb2R1bGVzL3R2X2lucHV0L3R2X2lucHV0LmNwcAppbmRleCBmOTNjYjIwLi40YzQyNTE4IDEwMDY0NAotLS0gYS9tb2R1bGVzL3R2X2lucHV0L3R2X2lucHV0LmNwcAorKysgYi9tb2R1bGVzL3R2X2lucHV0L3R2X2lucHV0LmNwcApAQCAtMzcsMTggKzM3LDE4IEBACiAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUsIHN0cnVjdCBod19kZXZpY2VfdCoqIGRldmljZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgaHdfbW9kdWxlX21ldGhvZHNfdCB0dl9pbnB1dF9tb2R1bGVfbWV0aG9kcyA9IHsKLSAgICBvcGVuOiB0dl9pbnB1dF9kZXZpY2Vfb3BlbgorICAgIC5vcGVuID0gdHZfaW5wdXRfZGV2aWNlX29wZW4KIH07CiAKIHR2X2lucHV0X21vZHVsZV90IEhBTF9NT0RVTEVfSU5GT19TWU0gPSB7Ci0gICAgY29tbW9uOiB7Ci0gICAgICAgIHRhZzogSEFSRFdBUkVfTU9EVUxFX1RBRywKLSAgICAgICAgdmVyc2lvbl9tYWpvcjogMCwKLSAgICAgICAgdmVyc2lvbl9taW5vcjogMSwKLSAgICAgICAgaWQ6IFRWX0lOUFVUX0hBUkRXQVJFX01PRFVMRV9JRCwKLSAgICAgICAgbmFtZTogIlNhbXBsZSBUViBpbnB1dCBtb2R1bGUiLAotICAgICAgICBhdXRob3I6ICJUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IiwKLSAgICAgICAgbWV0aG9kczogJnR2X2lucHV0X21vZHVsZV9tZXRob2RzLAorICAgIC5jb21tb24gPSB7CisgICAgICAgIC50YWcgPSBIQVJEV0FSRV9NT0RVTEVfVEFHLAorICAgICAgICAudmVyc2lvbl9tYWpvciA9IDAsCisgICAgICAgIC52ZXJzaW9uX21pbm9yID0gMSwKKyAgICAgICAgLmlkID0gVFZfSU5QVVRfSEFSRFdBUkVfTU9EVUxFX0lELAorICAgICAgICAubmFtZSA9ICJTYW1wbGUgVFYgaW5wdXQgbW9kdWxlIiwKKyAgICAgICAgLmF1dGhvciA9ICJUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IiwKKyAgICAgICAgLm1ldGhvZHMgPSAmdHZfaW5wdXRfbW9kdWxlX21ldGhvZHMsCiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvbW9kdWxlcy91c2JhdWRpby9BbmRyb2lkLm1rIGIvbW9kdWxlcy91c2JhdWRpby9BbmRyb2lkLm1rCmluZGV4IDlkZjFlNzkuLmIzNmJmOWYgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvdXNiYXVkaW8vQW5kcm9pZC5taworKysgYi9tb2R1bGVzL3VzYmF1ZGlvL0FuZHJvaWQubWsKQEAgLTE4LDYgKzE4LDcgQEAKIAogTE9DQUxfTU9EVUxFIDo9IGF1ZGlvLnVzYi5kZWZhdWx0CiBMT0NBTF9NT0RVTEVfUkVMQVRJVkVfUEFUSCA6PSBodworTE9DQUxfUFJPUFJJRVRBUllfTU9EVUxFIDo9IHRydWUKIExPQ0FMX1NSQ19GSUxFUyA6PSBcCiAJYXVkaW9faGFsLmMKIExPQ0FMX0NfSU5DTFVERVMgKz0gXApkaWZmIC0tZ2l0IGEvbW9kdWxlcy91c2JjYW1lcmEvQ2FtZXJhLmNwcCBiL21vZHVsZXMvdXNiY2FtZXJhL0NhbWVyYS5jcHAKaW5kZXggNTAwYTk4Mi4uMDMyNGRhOCAxMDA2NDQKLS0tIGEvbW9kdWxlcy91c2JjYW1lcmEvQ2FtZXJhLmNwcAorKysgYi9tb2R1bGVzL3VzYmNhbWVyYS9DYW1lcmEuY3BwCkBAIC00OTEsOSArNDkxLDkgQEAKICAgICAvLyBUT0RPOiBkdW1wIGFsbCBzZXR0aW5ncwogICAgIGRwcmludGYoZmQsICJNb3N0IFJlY2VudCBTZXR0aW5nczogKCVwKVxuIiwgbVNldHRpbmdzKTsKIAotICAgIGRwcmludGYoZmQsICJOdW1iZXIgb2Ygc3RyZWFtczogJWRcbiIsIG1TdHJlYW1zLnNpemUoKSk7CisgICAgZHByaW50ZihmZCwgIk51bWJlciBvZiBzdHJlYW1zOiAlenVcbiIsIG1TdHJlYW1zLnNpemUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtU3RyZWFtcy5zaXplKCk7IGkrKykgewotICAgICAgICBkcHJpbnRmKGZkLCAiU3RyZWFtICVkLyVkOlxuIiwgaSwgbVN0cmVhbXMuc2l6ZSgpKTsKKyAgICAgICAgZHByaW50ZihmZCwgIlN0cmVhbSAlenUvJXp1OlxuIiwgaSwgbVN0cmVhbXMuc2l6ZSgpKTsKICAgICAgICAgbVN0cmVhbXNbaV0tPmR1bXAoZmQpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvdXNiY2FtZXJhL0NhbWVyYUhBTC5jcHAgYi9tb2R1bGVzL3VzYmNhbWVyYS9DYW1lcmFIQUwuY3BwCmluZGV4IGVlYzEwNDQuLjFhNWViM2EgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvdXNiY2FtZXJhL0NhbWVyYUhBTC5jcHAKKysrIGIvbW9kdWxlcy91c2JjYW1lcmEvQ2FtZXJhSEFMLmNwcApAQCAtNjksNyArNjksNyBAQAogCiBpbnQgQ2FtZXJhSEFMOjpnZXROdW1iZXJPZkNhbWVyYXMoKSB7CiAgICAgYW5kcm9pZDo6TXV0ZXg6OkF1dG9sb2NrIGFsKG1Nb2R1bGVMb2NrKTsKLSAgICBBTE9HVigiJXM6ICVkIiwgX19mdW5jX18sIG1DYW1lcmFzLnNpemUoKSk7CisgICAgQUxPR1YoIiVzOiAlenUiLCBfX2Z1bmNfXywgbUNhbWVyYXMuc2l6ZSgpKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihtQ2FtZXJhcy5zaXplKCkpOwogfQogCkBAIC0xMzAsMjkgKzEzMCwyOSBAQAogfQogCiBzdGF0aWMgaHdfbW9kdWxlX21ldGhvZHNfdCBnQ2FtZXJhTW9kdWxlTWV0aG9kcyA9IHsKLSAgICBvcGVuIDogb3Blbl9kZXYKKyAgICAub3BlbiA9IG9wZW5fZGV2CiB9OwogCiBjYW1lcmFfbW9kdWxlX3QgSEFMX01PRFVMRV9JTkZPX1NZTSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgPSB7Ci0gICAgY29tbW9uIDogewotICAgICAgICB0YWcgICAgICAgICAgICAgICAgOiBIQVJEV0FSRV9NT0RVTEVfVEFHLAotICAgICAgICBtb2R1bGVfYXBpX3ZlcnNpb24gOiBDQU1FUkFfTU9EVUxFX0FQSV9WRVJTSU9OXzJfNCwKLSAgICAgICAgaGFsX2FwaV92ZXJzaW9uICAgIDogSEFSRFdBUkVfSEFMX0FQSV9WRVJTSU9OLAotICAgICAgICBpZCAgICAgICAgICAgICAgICAgOiBDQU1FUkFfSEFSRFdBUkVfTU9EVUxFX0lELAotICAgICAgICBuYW1lICAgICAgICAgICAgICAgOiAiRGVmYXVsdCBVU0IgQ2FtZXJhIEhBTCIsCi0gICAgICAgIGF1dGhvciAgICAgICAgICAgICA6ICJUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IiwKLSAgICAgICAgbWV0aG9kcyAgICAgICAgICAgIDogJmdDYW1lcmFNb2R1bGVNZXRob2RzLAotICAgICAgICBkc28gICAgICAgICAgICAgICAgOiBOVUxMLAotICAgICAgICByZXNlcnZlZCAgICAgICAgICAgOiB7MH0sCisgICAgLmNvbW1vbiA9IHsKKyAgICAgICAgLnRhZyAgICAgICAgICAgICAgICA9IEhBUkRXQVJFX01PRFVMRV9UQUcsCisgICAgICAgIC5tb2R1bGVfYXBpX3ZlcnNpb24gPSBDQU1FUkFfTU9EVUxFX0FQSV9WRVJTSU9OXzJfNCwKKyAgICAgICAgLmhhbF9hcGlfdmVyc2lvbiAgICA9IEhBUkRXQVJFX0hBTF9BUElfVkVSU0lPTiwKKyAgICAgICAgLmlkICAgICAgICAgICAgICAgICA9IENBTUVSQV9IQVJEV0FSRV9NT0RVTEVfSUQsCisgICAgICAgIC5uYW1lICAgICAgICAgICAgICAgPSAiRGVmYXVsdCBVU0IgQ2FtZXJhIEhBTCIsCisgICAgICAgIC5hdXRob3IgICAgICAgICAgICAgPSAiVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCIsCisgICAgICAgIC5tZXRob2RzICAgICAgICAgICAgPSAmZ0NhbWVyYU1vZHVsZU1ldGhvZHMsCisgICAgICAgIC5kc28gICAgICAgICAgICAgICAgPSBOVUxMLAorICAgICAgICAucmVzZXJ2ZWQgICAgICAgICAgID0gezB9LAogICAgIH0sCi0gICAgZ2V0X251bWJlcl9vZl9jYW1lcmFzIDogZ2V0X251bWJlcl9vZl9jYW1lcmFzLAotICAgIGdldF9jYW1lcmFfaW5mbyAgICAgICA6IGdldF9jYW1lcmFfaW5mbywKLSAgICBzZXRfY2FsbGJhY2tzICAgICAgICAgOiBzZXRfY2FsbGJhY2tzLAotICAgIGdldF92ZW5kb3JfdGFnX29wcyAgICA6IE5VTEwsCi0gICAgb3Blbl9sZWdhY3kgICAgICAgICAgIDogTlVMTCwKLSAgICBzZXRfdG9yY2hfbW9kZSAgICAgICAgOiBOVUxMLAotICAgIGluaXQgICAgICAgICAgICAgICAgICA6IE5VTEwsCi0gICAgcmVzZXJ2ZWQgICAgICAgICAgICAgIDogezB9LAorICAgIC5nZXRfbnVtYmVyX29mX2NhbWVyYXMgPSBnZXRfbnVtYmVyX29mX2NhbWVyYXMsCisgICAgLmdldF9jYW1lcmFfaW5mbyAgICAgICA9IGdldF9jYW1lcmFfaW5mbywKKyAgICAuc2V0X2NhbGxiYWNrcyAgICAgICAgID0gc2V0X2NhbGxiYWNrcywKKyAgICAuZ2V0X3ZlbmRvcl90YWdfb3BzICAgID0gTlVMTCwKKyAgICAub3Blbl9sZWdhY3kgICAgICAgICAgID0gTlVMTCwKKyAgICAuc2V0X3RvcmNoX21vZGUgICAgICAgID0gTlVMTCwKKyAgICAuaW5pdCAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAucmVzZXJ2ZWQgICAgICAgICAgICAgID0gezB9LAogfTsKIH0gLy8gZXh0ZXJuICJDIgogCmRpZmYgLS1naXQgYS9tb2R1bGVzL3VzYmNhbWVyYS9Ib3RwbHVnVGhyZWFkLmNwcCBiL21vZHVsZXMvdXNiY2FtZXJhL0hvdHBsdWdUaHJlYWQuY3BwCmluZGV4IDgwZjE4YzguLjYxODhlZGUgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvdXNiY2FtZXJhL0hvdHBsdWdUaHJlYWQuY3BwCisrKyBiL21vZHVsZXMvdXNiY2FtZXJhL0hvdHBsdWdUaHJlYWQuY3BwCkBAIC00MCw2ICs0MCw3IEBACiB9CiAKIGJvb2wgSG90cGx1Z1RocmVhZDo6dGhyZWFkTG9vcCgpIHsKKyAgICAodm9pZCltTW9kdWxlOyAgLy8gc2lsZW5jZSB3YXJuaW5nIGFib3V0IHVudXNlZCBtZW1iZXIuCiAKICAgICAvKioKICAgICAgKiBDaGVjayBjYW1lcmEgY29ubmVjdGlvbiBzdGF0dXMgY2hhbmdlLCBpZiBjb25uZWN0ZWQsIGRvIGJlbG93OgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy91c2JjYW1lcmEvU3RyZWFtLmNwcCBiL21vZHVsZXMvdXNiY2FtZXJhL1N0cmVhbS5jcHAKaW5kZXggNDVlN2ZjMi4uZDQxODc5OCAxMDA2NDQKLS0tIGEvbW9kdWxlcy91c2JjYW1lcmEvU3RyZWFtLmNwcAorKysgYi9tb2R1bGVzL3VzYmNhbWVyYS9TdHJlYW0uY3BwCkBAIC0xNzIsMTAgKzE3Miw5IEBACiAgICAgLy8gVG9EbzogcHJldHR5cHJpbnQgdXNhZ2UgbWFzayBmbGFncwogICAgIGRwcmludGYoZmQsICJHcmFsbG9jIFVzYWdlIE1hc2s6ICUjIiBQUkl4MzIgIlxuIiwgbVN0cmVhbS0+dXNhZ2UpOwogICAgIGRwcmludGYoZmQsICJNYXggQnVmZmVyIENvdW50OiAlIiBQUkl1MzIgIlxuIiwgbVN0cmVhbS0+bWF4X2J1ZmZlcnMpOwotICAgIGRwcmludGYoZmQsICJOdW1iZXIgb2YgQnVmZmVycyBpbiB1c2UgYnkgSEFMOiAlIiBQUkl1MzIgIlxuIiwgbUJ1ZmZlcnMuc2l6ZSgpKTsKKyAgICBkcHJpbnRmKGZkLCAiTnVtYmVyIG9mIEJ1ZmZlcnMgaW4gdXNlIGJ5IEhBTDogJXp1XG4iLCBtQnVmZmVycy5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUJ1ZmZlcnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgZHByaW50ZihmZCwgIkJ1ZmZlciAlIiBQUkl1MzIgIi8lIiBQUkl1MzIgIjogJXBcbiIsIGksIG1CdWZmZXJzLnNpemUoKSwKLSAgICAgICAgICAgICAgICBtQnVmZmVyc1tpXSk7CisgICAgICAgIGRwcmludGYoZmQsICJCdWZmZXIgJXp1LyV6dTogJXBcbiIsIGksIG1CdWZmZXJzLnNpemUoKSwgbUJ1ZmZlcnNbaV0pOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvbW9kdWxlcy91c2JjYW1lcmEvVXNiQ2FtZXJhLmNwcCBiL21vZHVsZXMvdXNiY2FtZXJhL1VzYkNhbWVyYS5jcHAKaW5kZXggZWM5NDlhZS4uNjVjYmVjOSAxMDA2NDQKLS0tIGEvbW9kdWxlcy91c2JjYW1lcmEvVXNiQ2FtZXJhLmNwcAorKysgYi9tb2R1bGVzL3VzYmNhbWVyYS9Vc2JDYW1lcmEuY3BwCkBAIC0zMTYsNyArMzE2LDcgQEAKICAgICByZXR1cm4gc2V0VGVtcGxhdGUoQ0FNRVJBM19URU1QTEFURV9NQU5VQUwsIG0uZ2V0KCkpOwogfQogCi1ib29sIFVzYkNhbWVyYTo6aXNWYWxpZENhcHR1cmVTZXR0aW5ncyhjb25zdCBjYW1lcmFfbWV0YWRhdGFfdCogc2V0dGluZ3MpIHsKK2Jvb2wgVXNiQ2FtZXJhOjppc1ZhbGlkQ2FwdHVyZVNldHRpbmdzKGNvbnN0IGNhbWVyYV9tZXRhZGF0YV90KiAvKnNldHRpbmdzKi8pIHsKICAgICAvLyBUT0RPOiByZWplY3Qgc2V0dGluZ3MgdGhhdCBjYW5ub3QgYmUgY2FwdHVyZWQKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvdmVoaWNsZS9BbmRyb2lkLm1rIGIvbW9kdWxlcy92ZWhpY2xlL0FuZHJvaWQubWsKaW5kZXggYTY2NmJjNi4uOWZkNDlkYSAxMDA2NDQKLS0tIGEvbW9kdWxlcy92ZWhpY2xlL0FuZHJvaWQubWsKKysrIGIvbW9kdWxlcy92ZWhpY2xlL0FuZHJvaWQubWsKQEAgLTE5LDYgKzE5LDcgQEAKIExPQ0FMX01PRFVMRSA6PSB2ZWhpY2xlLmRlZmF1bHQKIAogTE9DQUxfTU9EVUxFX1JFTEFUSVZFX1BBVEggOj0gaHcKK0xPQ0FMX1BST1BSSUVUQVJZX01PRFVMRSA6PSB0cnVlCiBMT0NBTF9DX0lOQ0xVREVTIDo9IGhhcmR3YXJlL2xpYmhhcmR3YXJlCiBMT0NBTF9TUkNfRklMRVMgOj0gdmVoaWNsZS5jIHRpbWVVdGlsLmNwcAogTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJsb2cgbGliY3V0aWxzIGxpYnV0aWxzCmRpZmYgLS1naXQgYS9tb2R1bGVzL3ZlaGljbGUvdmVoaWNsZS5jIGIvbW9kdWxlcy92ZWhpY2xlL3ZlaGljbGUuYwppbmRleCA3ODU0NWFmLi42NmUyOWMwIDEwMDY0NAotLS0gYS9tb2R1bGVzL3ZlaGljbGUvdmVoaWNsZS5jCisrKyBiL21vZHVsZXMvdmVoaWNsZS92ZWhpY2xlLmMKQEAgLTI3OSwxMCArMjc5LDEwIEBACiAgICAgICAgICAgICBBTE9HRCgiVmFsdWUgdHlwZTogRkxPQVRcblZhbHVlOiAlZlxuIiwgZGF0YS0+dmFsdWUuZmxvYXRfdmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVkVISUNMRV9WQUxVRV9UWVBFX0lOVDMyOgotICAgICAgICAgICAgQUxPR0QoIlZhbHVlIHR5cGU6IElOVDMyXG5WYWx1ZTogJWRcbiIsIGRhdGEtPnZhbHVlLmludDMyX3ZhbHVlKTsKKyAgICAgICAgICAgIEFMT0dEKCJWYWx1ZSB0eXBlOiBJTlQzMlxuVmFsdWU6ICUiIFBSSWQzMiAiXG4iLCBkYXRhLT52YWx1ZS5pbnQzMl92YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfSU5UNjQ6Ci0gICAgICAgICAgICBBTE9HRCgiVmFsdWUgdHlwZTogSU5UNjRcblZhbHVlOiAlbGxkXG4iLCBkYXRhLT52YWx1ZS5pbnQ2NF92YWx1ZSk7CisgICAgICAgICAgICBBTE9HRCgiVmFsdWUgdHlwZTogSU5UNjRcblZhbHVlOiAlIiBQUklkNjQgIlxuIiwgZGF0YS0+dmFsdWUuaW50NjRfdmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVkVISUNMRV9WQUxVRV9UWVBFX0JPT0xFQU46CiAgICAgICAgICAgICBBTE9HRCgiVmFsdWUgdHlwZTogQk9PTEVBTlxuVmFsdWU6ICVkXG4iLCBkYXRhLT52YWx1ZS5ib29sZWFuX3ZhbHVlKTsKQEAgLTMzMSwyMiArMzMxLDYgQEAKICAgICAgICAgZXZlbnQucHJvcCA9IHN1Yi0+cHJvcDsKICAgICAgICAgZXZlbnQudGltZXN0YW1wID0gZWxhcHNlZFJlYWx0aW1lTmFubygpOwogICAgICAgICBzd2l0Y2ggKHN1Yi0+cHJvcCkgewotICAgICAgICAgICAgY2FzZSBWRUhJQ0xFX1BST1BFUlRZX0RSSVZJTkdfU1RBVFVTOgotICAgICAgICAgICAgICAgIGV2ZW50LnZhbHVlX3R5cGUgPSBWRUhJQ0xFX1ZBTFVFX1RZUEVfSU5UMzI7Ci0gICAgICAgICAgICAgICAgc3dpdGNoICgoZXZlbnQudGltZXN0YW1wICYgMHgzMDAwMDAwMCk+PjI4KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnZhbHVlLmRyaXZpbmdfc3RhdHVzID0gVkVISUNMRV9EUklWSU5HX1NUQVRVU19VTlJFU1RSSUNURUQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQudmFsdWUuZHJpdmluZ19zdGF0dXMgPSBWRUhJQ0xFX0RSSVZJTkdfU1RBVFVTX05PX1ZJREVPOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnZhbHVlLmRyaXZpbmdfc3RhdHVzID0gVkVISUNMRV9EUklWSU5HX1NUQVRVU19OT19LRVlCT0FSRF9JTlBVVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQudmFsdWUuZHJpdmluZ19zdGF0dXMgPSBWRUhJQ0xFX0RSSVZJTkdfU1RBVFVTX05PX0NPTkZJRzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFZFSElDTEVfUFJPUEVSVFlfR0VBUl9TRUxFQ1RJT046CiAgICAgICAgICAgICAgICAgZXZlbnQudmFsdWVfdHlwZSA9IFZFSElDTEVfVkFMVUVfVFlQRV9JTlQzMjsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKChldmVudC50aW1lc3RhbXAgJiAweDMwMDAwMDAwKT4+MjgpIHsKZGlmZiAtLWdpdCBhL21vZHVsZXMvdmlicmF0b3IvQW5kcm9pZC5icCBiL21vZHVsZXMvdmlicmF0b3IvQW5kcm9pZC5icAppbmRleCBmOWFmZDQ1Li4zYzRhZWJmIDEwMDY0NAotLS0gYS9tb2R1bGVzL3ZpYnJhdG9yL0FuZHJvaWQuYnAKKysrIGIvbW9kdWxlcy92aWJyYXRvci9BbmRyb2lkLmJwCkBAIC0xOCw2ICsxOCw3IEBACiAgICAgLy8gSEFMIG1vZHVsZSBpbXBsZW1lbnRhdGlvbiBzdG9yZWQgaW4KICAgICAvLyBody88VklCUkFUT1JfSEFSRFdBUkVfTU9EVUxFX0lEPi5kZWZhdWx0LnNvCiAgICAgcmVsYXRpdmVfaW5zdGFsbF9wYXRoOiAiaHciLAorICAgIHByb3ByaWV0YXJ5OiB0cnVlLAogICAgIGluY2x1ZGVfZGlyczogWyJoYXJkd2FyZS9saWJoYXJkd2FyZSJdLAogICAgIHNyY3M6IFsidmlicmF0b3IuYyJdLAogICAgIHNoYXJlZF9saWJzOiBbImxpYmxvZyJdLApkaWZmIC0tZ2l0IGEvbW9kdWxlcy92ci9BbmRyb2lkLm1rIGIvbW9kdWxlcy92ci9BbmRyb2lkLm1rCmluZGV4IDQzYzhlOTIuLmUwNGMwZGEgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvdnIvQW5kcm9pZC5taworKysgYi9tb2R1bGVzL3ZyL0FuZHJvaWQubWsKQEAgLTE4LDYgKzE4LDcgQEAKIAogTE9DQUxfTU9EVUxFIDo9IHZyLmRlZmF1bHQKIExPQ0FMX01PRFVMRV9SRUxBVElWRV9QQVRIIDo9IGh3CitMT0NBTF9QUk9QUklFVEFSWV9NT0RVTEUgOj0gdHJ1ZQogTE9DQUxfU1JDX0ZJTEVTIDo9IHZyLmMKIExPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGliY3V0aWxzCiBMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbApkaWZmIC0tZ2l0IGEvdGVzdHMvY2FtZXJhMi9BbmRyb2lkLm1rIGIvdGVzdHMvY2FtZXJhMi9BbmRyb2lkLm1rCmluZGV4IGU0NWY0NjcuLmU0Zjk2NDAgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2NhbWVyYTIvQW5kcm9pZC5taworKysgYi90ZXN0cy9jYW1lcmEyL0FuZHJvaWQubWsKQEAgLTI1LDEwICsyNSwxMiBAQAogCWxpYmd1aSBcCiAJbGlic3luYyBcCiAJbGlidWkgXAotCWxpYmRsCisJbGliZGwgXAorCWFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLmRldmljZUAzLjIKIAogTE9DQUxfQ19JTkNMVURFUyArPSBcCiAJc3lzdGVtL21lZGlhL2NhbWVyYS9pbmNsdWRlIFwKKwlzeXN0ZW0vbWVkaWEvcHJpdmF0ZS9jYW1lcmEvaW5jbHVkZSBcCiAJZnJhbWV3b3Jrcy9hdi9pbmNsdWRlLyBcCiAJZnJhbWV3b3Jrcy9hdi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZSBcCiAJZnJhbWV3b3Jrcy9uYXRpdmUvaW5jbHVkZSBcCmRpZmYgLS1naXQgYS90ZXN0cy9jYW1lcmEyL0NhbWVyYU1vZHVsZUZpeHR1cmUuaCBiL3Rlc3RzL2NhbWVyYTIvQ2FtZXJhTW9kdWxlRml4dHVyZS5oCmluZGV4IDI1NTEzYWYuLmIwZDQ5ZTIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2NhbWVyYTIvQ2FtZXJhTW9kdWxlRml4dHVyZS5oCisrKyBiL3Rlc3RzL2NhbWVyYTIvQ2FtZXJhTW9kdWxlRml4dHVyZS5oCkBAIC03NCw3ICs3NCw2IEBACiAgICAgdm9pZCBUZWFyRG93bigpIHsKICAgICAgICAgVEVTVF9FWFRFTlNJT05fRk9SS0lOR19URUFSX0RPV047CiAKLSAgICAgICAgZGVsZXRlIG1Nb2R1bGU7CiAgICAgICAgIFRlYXJEb3duTWl4aW4oKTsKIAogICAgICAgICAvKiBpbXBvcnRhbnQ6IGRldmljZSBtdXN0IGJlIGRlc3RydWN0ZWQgYmVmb3JlIGNsb3NpbmcgbW9kdWxlLApAQCAtODUsNiArODQsNyBAQAogICAgICAgICAgICAgQVNTRVJUX0VRKDAsIEhXTW9kdWxlSGVscGVyczo6Y2xvc2VNb2R1bGUobU1vZHVsZS0+Z2V0RHNvKCkpKQogICAgICAgICAgICAgICAgIDw8ICJGYWlsZWQgdG8gY2xvc2UgY2FtZXJhIEhBTCBtb2R1bGUiOwogICAgICAgICB9CisgICAgICAgIGRlbGV0ZSBtTW9kdWxlOwogICAgIH0KIAogICAgIHZvaWQgQ3JlYXRlQ2FtZXJhKGludCBjYW1lcmFJRCwgLypvdXQqLyBzcDxDYW1lcmFEZXZpY2VCYXNlPiAqZGV2aWNlKSB7CkBAIC05OCw3ICs5OCw3IEBACiAgICAgICAgICAgICBjYXNlIENBTUVSQV9ERVZJQ0VfQVBJX1ZFUlNJT05fM18wOgogICAgICAgICAgICAgY2FzZSBDQU1FUkFfREVWSUNFX0FQSV9WRVJTSU9OXzNfMToKICAgICAgICAgICAgIGNhc2UgQ0FNRVJBX0RFVklDRV9BUElfVkVSU0lPTl8zXzI6Ci0gICAgICAgICAgICAgICAgKmRldmljZSA9IG5ldyBDYW1lcmEzRGV2aWNlKGNhbWVyYUlEKTsKKyAgICAgICAgICAgICAgICAqZGV2aWNlID0gbmV3IENhbWVyYTNEZXZpY2UoU3RyaW5nODo6Zm9ybWF0KCIlZCIsIGNhbWVyYUlEKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGRldmljZS0+Y2xlYXIoKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2hhcmR3YXJlL0FuZHJvaWQuYnAgYi90ZXN0cy9oYXJkd2FyZS9BbmRyb2lkLmJwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjhlMjhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2hhcmR3YXJlL0FuZHJvaWQuYnAKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1jY19saWJyYXJ5X3N0YXRpYyB7Ci0gICAgbmFtZTogInN0YXRpYy1oYWwtY2hlY2siLAotICAgIHNyY3M6IFsKLSAgICAgICAgInN0cnVjdC1zaXplLmNwcCIsCi0gICAgICAgICJzdHJ1Y3Qtb2Zmc2V0LmNwcCIsCi0gICAgICAgICJzdHJ1Y3QtbGFzdC5jcHAiLAotICAgIF0sCi0gICAgc2hhcmVkX2xpYnM6IFsibGliaGFyZHdhcmUiXSwKLSAgICBjZmxhZ3M6IFsKLSAgICAgICAgIi1zdGQ9Z251KysxMSIsCi0gICAgICAgICItTzAiLAotICAgIF0sCi0KLSAgICBpbmNsdWRlX2RpcnM6IFsic3lzdGVtL21lZGlhL2NhbWVyYS9pbmNsdWRlIl0sCi19CmRpZmYgLS1naXQgYS90ZXN0cy9oYXJkd2FyZS9BbmRyb2lkLm1rIGIvdGVzdHMvaGFyZHdhcmUvQW5kcm9pZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjU0MGM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaGFyZHdhcmUvQW5kcm9pZC5tawpAQCAtMCwwICsxLDEyIEBACitMT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9NT0RVTEUgOj0gc3RhdGljLWhhbC1jaGVjaworTE9DQUxfU1JDX0ZJTEVTIDo9IHN0cnVjdC1zaXplLmNwcCBzdHJ1Y3Qtb2Zmc2V0LmNwcCBzdHJ1Y3QtbGFzdC5jcHAKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGliaGFyZHdhcmUKK0xPQ0FMX0NGTEFHUyA6PSAtc3RkPWdudSsrMTEgLU8wCisKK0xPQ0FMX0NfSU5DTFVERVMgKz0gXAorICAgIHN5c3RlbS9tZWRpYS9jYW1lcmEvaW5jbHVkZQorCitpbmNsdWRlICQoQlVJTERfU1RBVElDX0xJQlJBUlkpCmRpZmYgLS1naXQgYS90ZXN0cy9oYXJkd2FyZS9zdHJ1Y3Qtb2Zmc2V0LmNwcCBiL3Rlc3RzL2hhcmR3YXJlL3N0cnVjdC1vZmZzZXQuY3BwCmluZGV4IDEwYzA4OTUuLjdmN2YyZTAgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2hhcmR3YXJlL3N0cnVjdC1vZmZzZXQuY3BwCisrKyBiL3Rlc3RzL2hhcmR3YXJlL3N0cnVjdC1vZmZzZXQuY3BwCkBAIC0xMTYsNyArMTE2LDkgQEAKICAgICBDSEVDS19NRU1CRVJfQVQoc2Vuc29yc19wb2xsX2RldmljZV8xX3QsIGJhdGNoLCA3NiwgMTQ0KTsKICAgICBDSEVDS19NRU1CRVJfQVQoc2Vuc29yc19wb2xsX2RldmljZV8xX3QsIGZsdXNoLCA4MCwgMTUyKTsKICAgICBDSEVDS19NRU1CRVJfQVQoc2Vuc29yc19wb2xsX2RldmljZV8xX3QsIGluamVjdF9zZW5zb3JfZGF0YSwgODQsIDE2MCk7Ci0gICAgQ0hFQ0tfTUVNQkVSX0FUKHNlbnNvcnNfcG9sbF9kZXZpY2VfMV90LCByZXNlcnZlZF9wcm9jcywgODgsIDE2OCk7CisgICAgQ0hFQ0tfTUVNQkVSX0FUKHNlbnNvcnNfcG9sbF9kZXZpY2VfMV90LCByZWdpc3Rlcl9kaXJlY3RfY2hhbm5lbCwgODgsIDE2OCk7CisgICAgQ0hFQ0tfTUVNQkVSX0FUKHNlbnNvcnNfcG9sbF9kZXZpY2VfMV90LCBjb25maWdfZGlyZWN0X3JlcG9ydCwgOTIsIDE3Nik7CisgICAgQ0hFQ0tfTUVNQkVSX0FUKHNlbnNvcnNfcG9sbF9kZXZpY2VfMV90LCByZXNlcnZlZF9wcm9jcywgOTYsIDE4NCk7CiAKICAgICAvL1R5cGVzIGRlZmluZWQgaW4gZmIuaAogICAgIENIRUNLX01FTUJFUl9BVChmcmFtZWJ1ZmZlcl9kZXZpY2VfdCwgY29tbW9uLCAwLCAwKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL3ZlaGljbGUvUkVBRE1FIGIvdGVzdHMvdmVoaWNsZS9SRUFETUUKaW5kZXggYjhmYzdkNC4uNDJkMjIxMCAxMDA2NDQKLS0tIGEvdGVzdHMvdmVoaWNsZS9SRUFETUUKKysrIGIvdGVzdHMvdmVoaWNsZS9SRUFETUUKQEAgLTQ5LDEzICs0OSwxMyBAQAogJCBtbW0gaGFyZHdhcmUvbGliaGFyZHdhcmUKIAogVGhpcyB3aWxsIGdlbmVyYXRlIHRoZSBmb2xsb3dpbmcgYmluYXJpZXMgdGhhdCB3ZSBjYXJlIGFib3V0OgotaSkgb3V0L3RhcmdldC9wcm9kdWN0L1hYWC9zeXN0ZW0vbGliL2h3L3ZlaGljbGUuZGVmYXVsdC5zbworaSkgb3V0L3RhcmdldC9wcm9kdWN0L1hYWC92ZW5kb3IvbGliL2h3L3ZlaGljbGUuZGVmYXVsdC5zbwogaWkpIG91dC90YXJnZXQvcHJvZHVjdC9YWFgvZGF0YS9uYXRpdmV0ZXN0L3ZlaGljbGVfdGVzdHMKIGlpaSkgb3V0L3RhcmdldC9wcm9kdWN0L1hYWC9zeXN0ZW0vYmluL3ZlaGljbGUtaGFsLXRvb2wKIAogVGhlIGxvY2F0aW9uIGZvciB0aGUgZmlyc3Qgc2hhcmVkIGxpYnJhcnkgd291bGQgYmU6Ci0kIGFkYiBwdXNoIG91dC90YXJnZXQvcHJvZHVjdC9YWFgvc3lzdGVtL2xpYi9ody92ZWhpY2xlLmRlZmF1bHQuc28KLS9zeXN0ZW0vbGliL2h3CiskIGFkYiBwdXNoIG91dC90YXJnZXQvcHJvZHVjdC9YWFgvdmVuZG9yL2xpYi9ody92ZWhpY2xlLmRlZmF1bHQuc28KKy92ZW5kb3IvbGliL2h3CiBZb3UgY2FuIGFsc28gdXNlICdhZGIgc3luYycgaWYgeW91IGxpa2UsIGFsdGhvdWdoIHRoaXMgaXMgdGhlIGVhc2llc3QgbGVhc3QKIGhhc3NsZSB3YXkgb2YgcHV0dGluZyBpdCBpbiBwbGFjZS4KIApkaWZmIC0tZ2l0IGEvdGVzdHMvdmVoaWNsZS92ZWhpY2xlLWhhbC10b29sLmMgYi90ZXN0cy92ZWhpY2xlL3ZlaGljbGUtaGFsLXRvb2wuYwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0Cg==