LyogSGV5LCBFbWFjcywgb3BlbiB0aGlzIGZpbGUgd2l0aCAtKi0gY29kaW5nOiBjcDEyNTAgLSotCiAqCiAqIFdpbmVGaWxlCiAqIEN6ZWNoIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDAgTWFydGluIEZ1Y2hzCiAqIENvcHlyaWdodCAyMDAyIFN0ZXZlbiBFZHdhcmRzCiAqIENvcHlyaWdodCAyMDAyIEFsZXhhbmRyZSBKdWxsaWFyZAogKiBDb3B5cmlnaHQgMjAwNCBEYXZpZCBLcmVkYmEKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgInJlc291cmNlLmgiCgpMQU5HVUFHRSBMQU5HX0NaRUNILCBTVUJMQU5HX0RFRkFVTFQKCi8qIEN6ZWNoIHN0cmluZ3MgaW4gQ1AxMjUwICovCgovKiBNZW51ICovCgpJRE1fV0lORUZJTEUgTUVOVQp7CiAgICBQT1BVUCAiJlNvdWJvciIgIHsKICAgICAgICBNRU5VSVRFTSAiJk90ZXb47XRcdEVudGVyIiwgICAgICAgICAgICAgSURfQUNUSVZBVEUKICAgICAgICBNRU5VSVRFTSAiJlD4ZXN1bm91dC4uLlx0RjciLCAgICAgICAgICAgSURfRklMRV9NT1ZFCiAgICAgICAgTUVOVUlURU0gIiZLb3Dtcm92YXQuLi5cdEY4IiwgICAgICAgICAgIElEX0ZJTEVfQ09QWQogICAgICAgIE1FTlVJVEVNICImVmUgc2NocuFuY2UuLi5cdEY5IiwgICAgICAgICAxMTgKICAgICAgICBNRU5VSVRFTSAiJlNtYXphdFx0RGVsIiwgICAgICAgICAgICAgICAgSURfRklMRV9ERUxFVEUKICAgICAgICBNRU5VSVRFTSAiUPgmZWptZW5vdmF0Li4uIiwgICAgICAgICAgICAgMTA5CiAgICAgICAgTUVOVUlURU0gIlYmbGFzdG5vc3RpLi4uXHRBbHQrRW50ZXIiLCAgIElEX0VESVRfUFJPUEVSVElFUwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImS29tcHJlc2UuLi4iLCAgICAgICAgICAgICAgICAxMTkKICAgICAgICBNRU5VSVRFTSAiJkRla29tcHJlc2UuLi4iLCAgICAgICAgICAgICAgMTIwCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZTcHVzdGl0Li4uIiwgICAgICAgICAgICAgICAgIElEX1JVTgogICAgICAgIE1FTlVJVEVNICImVGlza25vdXQuLi4iLCAgICAgICAgICAgICAgICAxMDIKICAgICAgICBNRU5VSVRFTSAiQXNvY2lvdmF0Li4uIiwgICAgICAgICAgICAgICAgMTAzCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIlYmeXR2b/hpdCBhZHJlc+H4Li4uIiwgICAgICAgIDExMQogICAgICAgIE1FTlVJVEVNICImSGxlZGF0Li4uIiwgICAgICAgICAgICAgICAgICAxMDQKICAgICAgICBNRU5VSVRFTSAiJlp2b2xpdCB2b3Vib3J5Li4uIiwgICAgICAgICAgMTE2CiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKICAgICAgICBNRU5VSVRFTSAiSyZvbmVjXHRBbHQrWCIsICAgICAgICAgICAgICAgSURfRklMRV9FWElUCiNlbHNlCiAgICAgICAgTUVOVUlURU0gIksmb25lYyIsICAgICAgICAgICAgICAgICAgICAgIElEX0ZJTEVfRVhJVAojZW5kaWYKICAgIH0KCiAgICBQT1BVUCAiJkRpc2siICB7CiAgICAgICAgTUVOVUlURU0gIiZLb3Dtcm92YXQgZGlzay4uLiIsICAgICAgICAgIDIwMQogICAgICAgIE1FTlVJVEVNICImSm1lbm92a2EgZGlzay4uLiIsICAgICAgICAgICAyMDIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkZvcm3hdG92YXQgZGlzay4uLiIsICAgICAgICAgSURfRk9STUFUX0RJU0sKI2lmZGVmIF9XSU45NQogICAgICAgIE1FTlVJVEVNICImVnl0dm/4aXQgc3lzdGVtb3b9IGRpc2suLi4iLCAtMSAgLypUT0RPKi8KI2VuZGlmCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIlD4aXBvaml0ICZz7Z1vdukgemH47Xplbu0iLCAgIElEX0NPTk5FQ1RfTkVUV09SS19EUklWRQogICAgICAgIE1FTlVJVEVNICImT2Rwb2ppdCAmc+2db3bpIHph+O16ZW7tIiwgICBJRF9ESVNDT05ORUNUX05FVFdPUktfRFJJVkUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiU2TtbGV0IGpha28uLi4iLCAgICAgICAgICAgICAgMjU0CiAgICAgICAgTUVOVUlURU0gIiZPZHN0cmFuaXQgc2TtbGVu7S4uLiIsICAgICAgIDI1NQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImWnZvbGl0IHph+O16ZW7tLi4uIiwgICAgICAgICAyNTEKICAgIH0KCiAgICBQT1BVUCAiJkFkcmVz4fhlIiAgewogICAgICAgIE1FTlVJVEVNICImRGFsmu0g+nJvdmXyXHQrIiwgICAgICAgICAgICAzMDEKICAgICAgICBNRU5VSVRFTSAiUm96YmFsaXQgJnN0cm9tXHQqIiwgICAgICAgICAgMzAyCiAgICAgICAgTUVOVUlURU0gIlJvemJhbGl0ICZ2mmVcdFN0cmcrKiIsICAgICAgIDMwMwogICAgICAgIE1FTlVJVEVNICJTYmFsaXQgJnN0cm9tXHQtIiwgICAgICAgICAgICAzMDQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJk96bmHoaXQgcG90b21reSIsICAgICAgICAgICAgNTA1CiAgICB9CgogICAgUE9QVVAgIiZab2JyYXplbu0iICB7CiAgICAgICAgTUVOVUlURU0gIiZTdHJvbSBhIGFkcmVz4fhlIiwgICAgICAgICAgIDQxMwogICAgICAgIE1FTlVJVEVNICImSmVuIHN0cm9tIiwgICAgICAgICAgICAgICAgICA0MTEKICAgICAgICBNRU5VSVRFTSAiSmVuICZhZHJlc+H4ZSIsICAgICAgICAgICAgICAgNDEyCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZSb3pk7GxpdCIsICAgICAgICAgICAgICAgICAgIElEX1ZJRVdfU1BMSVQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkpt6W5vIiwgICAgICAgICAgICAgICAgICAgICAgSURfVklFV19OQU1FCiAgICAgICAgTUVOVUlURU0gIiZEZXRhaWx5IHaaZWNoIHNvdWJvcvkiLCAgICAgIElEX1ZJRVdfQUxMX0FUVFJJQlVURVMsIENIRUNLRUQKICAgICAgICBNRU5VSVRFTSAiyOEmc3Rl6G7pIGRldGFpbHkuLi4iLCAgICAgICAgSURfVklFV19TRUxFQ1RFRF9BVFRSSUJVVEVTCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZU+O1kaXQgcG9kbGUgam3pbmEiLCAgICAgICAgIElEX1ZJRVdfU09SVF9OQU1FCiAgICAgICAgTUVOVUlURU0gIlT47WRpdCAmcG9kbGUgdHlwdSIsICAgICAgICAgIElEX1ZJRVdfU09SVF9UWVBFCiAgICAgICAgTUVOVUlURU0gIlT47WRpdCBwb2RsZSAmdmVsaWtvc3RpIiwgICAgIElEX1ZJRVdfU09SVF9TSVpFCiAgICAgICAgTUVOVUlURU0gIlT47WRpdCBwb2RsZSAmZGF0YSIsICAgICAgICAgIElEX1ZJRVdfU09SVF9EQVRFCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIlT47WRpdCBwb2RsZSAmLi4uIiwgICAgICAgICAgIElEX1ZJRVdfRklMVEVSCiAgICB9CgogICAgUE9QVVAgIiZOYXN0YXZlbu0iICB7CiAgICAgICAgTUVOVUlURU0gIiZQb3R2cnpvduFu7S4uLiIsICAgICAgICAgICAgIDUwMQogICAgICAgIE1FTlVJVEVNICImUO1zbW8uLi4iLCAgICAgICAgICAgICAgICAgICBJRF9TRUxFQ1RfRk9OVAogICAgICAgIE1FTlVJVEVNICJVcHJhdml0IHBhbmVsICZu4XN0cm9q+S4uLiIsICA1MTIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlBhbmVsIG7hc3Ryb2r5IiwgICAgICAgICAgICAgSURfVklFV19UT09MX0JBUiwgQ0hFQ0tFRAogICAgICAgIE1FTlVJVEVNICImUGFuZWwgemH47WVu7SIsICAgICAgICAgICAgICBJRF9WSUVXX0RSSVZFX0JBUiwgQ0hFQ0tFRAogICAgICAgIE1FTlVJVEVNICImU3Rhdm92/SD44WRlayIsICAgICAgICAgICAgICBJRF9WSUVXX1NUQVRVU0JBUiwgQ0hFQ0tFRAojaWZuZGVmIF9OT19FWFRFTlNJT05TCiAgICAgICAgTUVOVUlURU0gIiZDZWxh4SBvYnJhem92a2FcdEN0cmwrU2hpZnQrUyIsIElEX1ZJRVdfRlVMTFNDUkVFTgojZW5kaWYKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJk1pbmltYWxpem92YXQgcPhpIHNwdZp07G7tIiwgNTA0CiAgICAgICAgTUVOVUlURU0gIiZVbG+eaXQgbmFzdGF2ZW7tIHD4aSB2eXBudXTtIiw1MTEKICAgIH0KCgogICAgUE9QVVAgIiZaYWJlenBl6GVu7SIgIHsKICAgICAgICBNRU5VSVRFTSAiJlD47XN0dXAuLi4iLCAgICAgICAgICAgICAgICAgNjA1CiAgICAgICAgTUVOVUlURU0gIiZMb2dvduFu7S4uLiIsICAgICAgICAgICAgICAgIDYwNgogICAgICAgIE1FTlVJVEVNICImVmxhc3Ru7WsuLi4iLCAgICAgICAgICAgICAgICA2MDcKICAgIH0KCiAgICBQT1BVUCAiJk9rbm8iICB7CiAgICAgICAgTUVOVUlURU0gIk5vdukgJm9rbm8iLCAgICAgICAgICAgICAgICAgIElEX1dJTkRPV19ORVcKICAgICAgICBNRU5VSVRFTSAiS2Fza+Fkb3bhbu1cdEN0cmwrRjUiLCAgICAgICAgSURfV0lORE9XX0NBU0NBREUKICAgICAgICBNRU5VSVRFTSAiVXNwb/jhZGF0ICZob3Jpem9udOFsbuwiLCAgICAgSURfV0lORE9XX1RJTEVfSE9SWgogICAgICAgIE1FTlVJVEVNICJVc3Bv+OFkYXQgJnZlcnRpa+FsbuxcdEN0cmwrRjQiLElEX1dJTkRPV19USUxFX1ZFUlQKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwogICAgICAgIE1FTlVJVEVNICJaYXJvdm5hdCBhdXRvbWF0aWNreSIsICAgICAgICBJRF9XSU5ET1dfQVVUT1NPUlQKI2VuZGlmCiAgICAgICAgTUVOVUlURU0gIlphcm92bmF0ICZzeW1ib2x5IiwgICAgICAgICAgIElEX1dJTkRPV19BUlJBTkdFCiAgICAgICAgTUVOVUlURU0gIiZBa3R1YWxpem92YXRcdEY1IiwgICAgICAgICAgIElEX1JFRlJFU0gKICAgIH0KCiAgICBQT1BVUCAiJj8iICB7CiAgICAgICAgTUVOVUlURU0gIiZU6W1hdGEgbuFwb3bsZHlcdEYxIiwgICAgICAgIElEX0hFTFAKICAgICAgICBNRU5VSVRFTSAiSGxlZOFu7SB2ICZu4XBvduxk7C4uLlx0RjEiLCAgSURfSEVMUAogICAgICAgIE1FTlVJVEVNICImSmFrIHBvdZ7tdmF0IG7hcG927GR1XHRGMSIsICBJRF9IRUxQX1VTSU5HCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZJbmZvcm1hY2UgbyBXaW5lZmlsZS4uLiIsICAgIElEX0FCT1VUCiAgICB9Cn0KCklERF9TRUxFQ1RfREVTVElOQVRJT04gRElBTE9HIDE1LCAxMywgMjEwLCA2MwpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJadm9sdGUgY+1sIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKICAgIENPTlRST0wgICAgICAgICAiIiwgMTAxLCAiU3RhdGljIiwgU1NfU0lNUExFfFNTX05PUFJFRklYLCAzLCA2LCAxNjIsIDEwCiAgICBDT05UUk9MICAgICAgICAgIiZDZXN0YToiLCAtMSwgIlN0YXRpYyIsIFNTX0xFRlROT1dPUkRXUkFQfFdTX0dST1VQLCAzLCAxOCwgNjAsIDEwCiAgICBFRElUVEVYVCAgICAgICAgMjAxLCAzLCAyOSwgMTM0LCAxMiwgRVNfQVVUT0hTQ1JPTEwKICAgIERFRlBVU0hCVVRUT04gICAiT0siLCAxLCAxNTgsIDYsIDQ3LCAxNAogICAgUFVTSEJVVFRPTiAgICAgICJacnWaaXQiLCAyLCAxNTgsIDIzLCA0NywgMTQKICAgIFBVU0hCVVRUT04gICAgICAiJlByb2No4XpldCIsIDI1NCwgMTU4LCA0MywgNDcsIDE0Cn0KClNUUklOR1RBQkxFCnsKICAgIElEU19GT05UX1NFTF9ETEdfTkFNRSAgICJBcGxpa2924W7tIG5hc3RhdmVu7SBw7XNtYSIKICAgIElEU19GT05UX1NFTF9FUlJPUiAgICAgICJDaHliYSBw+Gkgdm9sYuwgbm926WhvIHDtc21hLiIKfQoKU1RSSU5HVEFCTEUKewogICAgSURTX1dJTkVGSUxFICAgICAgICAgICAgIldpbmVmaWxlIgogICAgSURTX0VSUk9SICAgICAgICAgICAgICAgIkNoeWJhIgogICAgSURTX1JPT1RfRlMgICAgICAgICAgICAgInJvb3QgZnMiCiAgICBJRFNfVU5JWEZTICAgICAgICAgICAgICAidW5peGZzIgogICAgSURTX0RFU0tUT1AgICAgICAgICAgICAgIlBsb2NoYSIKICAgIElEU19TSEVMTCAgICAgICAgICAgICAgICJQ+O1rYXpvdv0g+OFkZWsiCiAgICBJRFNfVElUTEVGTVQgICAgICAgICAgICAiJXMgLSAlcyIKICAgIElEU19OT19JTVBMICAgICAgICAgICAgICJaYXTtbSBuZWltcGxlbWVudG924W5vIgogICAgSURTX1dJTkVfRklMRSAgICAgICAgICAgIldpbmUgRmlsZSIKfQoKU1RSSU5HVEFCTEUKewogICAgSURTX0NPTF9OQU1FICAgICAgICAgICAgIkpt6W5vIgogICAgSURTX0NPTF9TSVpFICAgICAgICAgICAgIlZlbGlrb3N0IgogICAgSURTX0NPTF9DREFURSAgICAgICAgICAgIkRhdHVtIHZ5dHZv+GVu7SIKICAgIElEU19DT0xfQURBVEUgICAgICAgICAgICJEYXR1bSBwb3NsZWRu7WhvIHD47XN0dXB1IgogICAgSURTX0NPTF9NREFURSAgICAgICAgICAgIkRhdHVtIHBvc2xlZG7tIG1vZGlmaWthY2UiCiAgICBJRFNfQ09MX0lEWCAgICAgICAgICAgICAiSW5kZXgvSW5vZGUiCiAgICBJRFNfQ09MX0xJTktTICAgICAgICAgICAiTGlua3kiCiAgICBJRFNfQ09MX0FUVFIgICAgICAgICAgICAiQXRyaWJ1dHkiCiAgICBJRFNfQ09MX1NFQyAgICAgICAgICAgICAiWmFiZXpwZehlbu0iCgogICAgSURTX0ZSRUVfU1BBQ0VfRk1UICAgICAgIiVzIHogJXMgdm9sbulobyIKfQo=