LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpDb3B5cmlnaHQgKGMpIDIwMDktMjAxNiwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgpSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBMaW51eCBGb3VuZGF0aW9uIG5vcgogICAgICB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKICAgICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCiAgICAgIHBlcm1pc3Npb24uCgpUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQpJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKTk9OLUlORlJJTkdFTUVOVCBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCkVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7Ck9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLApXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgpPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCkFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiNpZm5kZWYgX19PTVhfUUNPTV9FWFRFTlNJT05TX0hfXwojZGVmaW5lIF9fT01YX1FDT01fRVhURU5TSU9OU19IX18KCiNpZmRlZiBfX2NwbHVzcGx1cwpleHRlcm4gIkMiIHsKI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCgovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKi8vKiogQGZpbGUgT01YX1FDT01FeHRucy5oCiAgVGhpcyBoZWFkZXIgY29udGFpbnMgY29uc3RhbnRzIGFuZCB0eXBlIGRlZmluaXRpb25zIHRoYXQgc3BlY2lmeSB0aGUKICBleHRlbnNpb25zIGFkZGVkIHRvIHRoZSBPcGVuTUFYIFZlbmRvciBzcGVjaWZpYyBBUElzLgoKKi8vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCgoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZSBGaWxlcwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiNpbmNsdWRlICJPTVhfQ29yZS5oIgojaW5jbHVkZSAiT01YX1ZpZGVvLmgiCgovKioKICogVGhpcyBleHRlbnNpb24gaXMgdXNlZCB0byByZWdpc3RlciBtYXBwaW5nIG9mIGEgdmlydHVhbAogKiBhZGRyZXNzIHRvIGEgcGh5c2ljYWwgYWRkcmVzcy4gVGhpcyBleHRlbnNpb24gaXMgYSBwYXJhbWV0ZXIKICogd2hpY2ggY2FuIGJlIHNldCB1c2luZyB0aGUgT01YX1NldFBhcmFtZXRlciBtYWNyby4gVGhlIGRhdGEKICogcG9pbnRlciBjb3JyZXNwb25kaW5nIHRvIHRoaXMgZXh0ZW5zaW9uIGlzCiAqIE9NWF9RQ09NX01lbU1hcEVudHJ5LiBUaGlzIHBhcmFtZXRlciBpcyBhICd3cml0ZSBvbmx5JwogKiBwYXJhbWV0ZXIgKEN1cnJlbnQgdmFsdWUgY2Fubm90IGJlIHF1ZXJpZWQgdXNpbmcKICogT01YX0dldFBhcmFtZXRlciBtYWNybykuCiAqLwojZGVmaW5lIE9NWF9RQ09NX0VYVE5fUkVHSVNURVJfTU1BUCAgICAgIk9NWC5RQ09NLmluZGV4LnBhcmFtLnJlZ2lzdGVyX21tYXAiCgovKioKICogVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBkYXRhIHBvaW50ZXIgY29ycmVzcG9uZGluZyB0bwogKiB0aGUgT01YX1FDT01fTU1BUF9SRUdJU1RFUl9FWFROIGV4dGVuc2lvbi4gVGhpcyBwYXJhbWV0ZXIKICogbXVzdCBiZSBzZXQgb25seSAnYWZ0ZXInIHBvcHVsYXRpbmcgYSBwb3J0IHdpdGggYSBidWZmZXIKICogdXNpbmcgT01YX1VzZUJ1ZmZlciwgd2hlcmVpbiB0aGUgZGF0YSBwb2ludGVyIG9mIHRoZSBidWZmZXIKICogY29ycmVzcG9uZHMgdG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBhcyBzcGVjaWZpZWQgaW4gdGhpcwogKiBzdHJ1Y3R1cmUuCiAqLwpzdHJ1Y3QgT01YX1FDT01fUEFSQU1fTUVNTUFQRU5UUllUWVBFCnsKICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAvKiogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCiAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAgLyoqPCBQb3J0IG51bWJlciB0aGUgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KCiAgICAvKioKICAgICAqIFRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgbWVtb3J5IGJsb2NrCiAgICAgKi8KICAgIE9NWF9VNjQgblZpcnR1YWxBZGRyZXNzOwoKICAgIC8qKgogICAgICogVGhlIHBoeXNpY2FsIGFkZHJlc3MgY29ycmVzcG9uZGluZyB0byB0aGUgdmlydHVhbCBhZGRyZXNzLiBUaGUgcGh5c2ljYWwKICAgICAqIGFkZHJlc3MgaXMgY29udGlndW91cyBmb3IgdGhlIGVudGlyZSB2YWxpZCByYW5nZSBvZiB0aGUgdmlydHVhbAogICAgICogYWRkcmVzcy4KICAgICAqLwogICAgT01YX1U2NCBuUGh5c2ljYWxBZGRyZXNzOwp9OwoKI2RlZmluZSBRT01YX1ZJREVPX0ludHJhUmVmcmVzaFJhbmRvbSAoT01YX1ZJREVPX0ludHJhUmVmcmVzaFZlbmRvclN0YXJ0VW51c2VkICsgMCkKCi8qIFRoaXMgZXJyb3IgZXZlbnQgaXMgdXNlZCBmb3IgSC4yNjQgbG9uZy10ZXJtIHJlZmVyZW5jZSAoTFRSKSBlbmNvZGluZy4KICogV2hlbiBJTCBjbGllbnQgc3BlY2lmaWVzIGFuIExUUiBmcmFtZSB3aXRoIGl0cyBpZGVudGlmaWVyIHZpYQogKiBPTVhfUUNPTV9JTkRFWF9DT05GSUdfVklERU9fTFRSVVNFIHRvIHRoZSBlbmNvZGVyLCBpZiB0aGUgc3BlY2lmaWVkCiAqIExUUiBmcmFtZSBjYW4gbm90IGJlIGxvY2F0ZWQgYnkgdGhlIGVuY29kZXIgaW4gaXRzIExUUiBsaXN0LCB0aGUgZW5jb2RlcgogKiBpc3N1ZXMgdGhpcyBlcnJvciBldmVudCB0byBJTCBjbGllbnQgdG8gbm90aWZ5IHRoZSBmYWlsdXJlIG9mIExUUlVzZSBjb25maWcuCiAqLwojZGVmaW5lIFFPTVhfRXJyb3JMVFJVc2VGYWlsZWQgICAgICAgIChPTVhfRXJyb3JWZW5kb3JTdGFydFVudXNlZCArIDEpCgojZGVmaW5lIFFPTVhfVklERU9fQlVGRkVSRkxBR19CRlJBTUUgMHgwMDEwMDAwMAoKI2RlZmluZSBRT01YX1ZJREVPX0JVRkZFUkZMQUdfRU9TRVEgIDB4MDAyMDAwMDAKCiNkZWZpbmUgUU9NWF9WSURFT19CVUZGRVJGTEFHX01CQUZGICAweDAwNDAwMDAwCgojZGVmaW5lIE9NWF9RQ09NX1BPUlRERUZOX0VYVE4gICAiT01YLlFDT00uaW5kZXgucGFyYW0ucG9ydGRlZm4iCi8qIEFsbG93ZWQgQVBJcyBvbiB0aGUgYWJvdmUgSW5kZXg6IE9NWF9HZXRQYXJhbWV0ZXIoKSBhbmQgT01YX1NldFBhcmFtZXRlcigpICovCgp0eXBlZGVmIGVudW0gT01YX1FDT01NZW1vcnlSZWdpb24KewogICAgT01YX1FDT01fTWVtUmVnaW9uSW52YWxpZCwKICAgIE9NWF9RQ09NX01lbVJlZ2lvbkVCSTEsCiAgICBPTVhfUUNPTV9NZW1SZWdpb25TTUksCiAgICBPTVhfUUNPTV9NZW1SZWdpb25NYXggPSAwWDdGRkZGRkZGCn0gT01YX1FDT01NZW1vcnlSZWdpb247Cgp0eXBlZGVmIGVudW0gT01YX1FDT01DYWNoZUF0dHIKewogICAgT01YX1FDT01fQ2FjaGVBdHRyTm9uZSwKICAgIE9NWF9RQ09NX0NhY2hlQXR0cldyaXRlQmFjaywKICAgIE9NWF9RQ09NX0NhY2hlQXR0cldyaXRlVGhyb3VnaCwKICAgIE9NWF9RQ09NX0NhY2hlQXR0ck1BWCA9IDBYN0ZGRkZGRkYKfSBPTVhfUUNPTUNhY2hlQXR0cjsKCnR5cGVkZWYgc3RydWN0IE9NWF9RQ09NUmVjdGFuZ2xlCnsKICAgT01YX1MzMiB4OwogICBPTVhfUzMyIHk7CiAgIE9NWF9TMzIgZHg7CiAgIE9NWF9TMzIgZHk7Cn0gT01YX1FDT01SZWN0YW5nbGU7CgovKiogT01YX1FDT01GcmFtZVBhY2tpbmdGb3JtYXQKICAqIElucHV0IG9yIG91dHB1dCBidWZmZXIgZm9ybWF0CiAgKi8KdHlwZWRlZiBlbnVtIE9NWF9RQ09NRnJhbWVQYWNraW5nRm9ybWF0CnsKICAvKiAwIC0gdW5zcGVjaWZpZWQKICAgKi8KICBPTVhfUUNPTV9GcmFtZVBhY2tpbmdfVW5zcGVjaWZpZWQsCgogIC8qICAxIC0gUGFydGlhbCBmcmFtZXMgbWF5IGJlIHByZXNlbnQgT01YIElMIDEuMS4xIEZpZ3VyZSAyLTEwOgogICAqICBDYXNlIDE/P0VhY2ggQnVmZmVyIEZpbGxlZCBJbiBXaG9sZSBvciBJbiBQYXJ0CiAgICovCiAgT01YX1FDT01fRnJhbWVQYWNraW5nX0FyYml0cmFyeSwKCiAgLyogIDIgLSBNdWx0aXBsZSBjb21wbGV0ZSBmcmFtZXMgcGVyIGJ1ZmZlciAoaW50ZWdlciBudW1iZXIpCiAgICogIE9NWCBJTCAxLjEuMSBGaWd1cmUgMi0xMTogQ2FzZSAyl0VhY2ggQnVmZmVyIEZpbGxlZCB3aXRoCiAgICogIE9ubHkgQ29tcGxldGUgRnJhbWVzIG9mIERhdGEKICAgKi8KICBPTVhfUUNPTV9GcmFtZVBhY2tpbmdfQ29tcGxldGVGcmFtZXMsCgogIC8qICAzIC0gT25seSBvbmUgY29tcGxldGUgZnJhbWUgcGVyIGJ1ZmZlciwgbm8gcGFydGlhbCBmcmFtZQogICAqICBPTVggSUwgMS4xLjEgRmlndXJlIDItMTI6IENhc2UgM5dFYWNoIEJ1ZmZlciBGaWxsZWQgd2l0aAogICAqICBPbmx5IE9uZSBGcmFtZSBvZiBDb21wcmVzc2VkIERhdGEuIFVzdWFsbHkgYXQgbGVhc3Qgb25lCiAgICogIGNvbXBsZXRlIHVuaXQgb2YgZGF0YSB3aWxsIGJlIGRlbGl2ZXJlZCBpbiBhIGJ1ZmZlciBmb3IKICAgKiAgdW5jb21wcmVzc2VkIGRhdGEgZm9ybWF0cy4KICAgKi8KICBPTVhfUUNPTV9GcmFtZVBhY2tpbmdfT25seU9uZUNvbXBsZXRlRnJhbWUsCgogIC8qICA0IC0gT25seSBvbmUgY29tcGxldGUgc3ViZnJhbWUgcGVyIGJ1ZmZlciwgbm8gcGFydGlhbCBzdWJmcmFtZQogICAqICBFeGFtcGxlOiBJbiBIMjY0LCBvbmUgY29tcGxldGUgTkFMIHBlciBidWZmZXIsIHdoZXJlIG9uZSBmcmFtZQogICAqICBjYW4gY29udGF0aW4gbXVsdGlwbGUgTkFMCiAgICovCiAgT01YX1FDT01fRnJhbWVQYWNraW5nX09ubHlPbmVDb21wbGV0ZVN1YkZyYW1lLAoKICBPTVhfUUNPTV9GcmFtZVBhY2tpbmdfTUFYID0gMFg3RkZGRkZGRgp9IE9NWF9RQ09NRnJhbWVQYWNraW5nRm9ybWF0OwoKdHlwZWRlZiBzdHJ1Y3QgT01YX1FDT01fUEFSQU1fUE9SVERFRklOSVRJT05UWVBFIHsKIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAvKiogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247LyoqIE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KIE9NWF9VMzIgblBvcnRJbmRleDsgICAgLyoqIFBvcnRpbmRleCB3aGljaCBpcyBleHRlbmRlZCBieSB0aGlzIHN0cnVjdHVyZSAqLwoKIC8qKiBQbGF0Zm9ybSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9uIEVCSTEsIFNNSSwgZXRjLiwqLwogT01YX1FDT01NZW1vcnlSZWdpb24gbk1lbVJlZ2lvbjsKCiBPTVhfUUNPTUNhY2hlQXR0ciBuQ2FjaGVBdHRyOyAvKiogQ2FjaGUgYXR0cmlidXRlcyAqLwoKIC8qKiBJbnB1dCBvciBvdXRwdXQgYnVmZmVyIGZvcm1hdCAqLwogT01YX1UzMiBuRnJhbWVQYWNraW5nRm9ybWF0OwoKfSBPTVhfUUNPTV9QQVJBTV9QT1JUREVGSU5JVElPTlRZUEU7Cgp0eXBlZGVmIHN0cnVjdCBPTVhfUUNPTV9WSURFT19QQVJBTV9RUFJBTkdFVFlQRSB7CiAgICBPTVhfVTMyIG5TaXplOwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogICAgT01YX1UzMiBuUG9ydEluZGV4OwogICAgT01YX1UzMiBtaW5RUDsKICAgIE9NWF9VMzIgbWF4UVA7Cn0gT01YX1FDT01fVklERU9fUEFSQU1fUVBSQU5HRVRZUEU7CgojZGVmaW5lIE9NWF9RQ09NX1BMQVRGT1JNUFZUX0VYVE4gICAiT01YLlFDT00uaW5kZXgucGFyYW0ucGxhdGZvcm1wcml2YXRlIgovKiogQWxsb3dlZCBBUElzIG9uIHRoZSBhYm92ZSBJbmRleDogT01YX1NldFBhcmFtZXRlcigpICovCgp0eXBlZGVmIGVudW0gT01YX1FDT01fUExBVEZPUk1fUFJJVkFURV9FTlRSWV9UWVBFCnsKICAgIC8qKiBFbnVtIGZvciBQTUVNIGluZm9ybWF0aW9uICovCiAgICBPTVhfUUNPTV9QTEFURk9STV9QUklWQVRFX1BNRU0gPSAweDEKfSBPTVhfUUNPTV9QTEFURk9STV9QUklWQVRFX0VOVFJZX1RZUEU7CgovKiogSUwgY2xpZW50IHdpbGwgc2V0IHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlLiBBIGZhaWx1cmUKICogIGNvZGUgd2lsbCBiZSByZXR1cm5lZCBpZiBjb21wb25lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUKICogIHZhbHVlIHByb3ZpZGVkIGZvciAndHlwZScuCiAqLwpzdHJ1Y3QgT01YX1FDT01fUExBVEZPUk1QUklWQVRFX0VYVE4KewogICAgT01YX1UzMiBuU2l6ZTsgICAgICAgIC8qKiBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgLyoqIE9NWCBzcGVjIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KICAgIE9NWF9VMzIgblBvcnRJbmRleDsgIC8qKiBQb3J0IG51bWJlciBvbiB3aGljaCB1c2VidWZmZXIgZXh0biBpcyBhcHBsaWVkICovCgogICAgLyoqIFR5cGUgb2YgZXh0ZW5zaW9ucyBzaG91bGQgbWF0Y2ggYW4gZW50cnkgZnJvbQogICAgIE9NWF9RQ09NX1BMQVRGT1JNX1BSSVZBVEVfRU5UUllfVFlQRQogICAgKi8KICAgIE9NWF9RQ09NX1BMQVRGT1JNX1BSSVZBVEVfRU5UUllfVFlQRSB0eXBlOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgT01YX1FDT01fUExBVEZPUk1fUFJJVkFURV9QTUVNX0lORk8KewogICAgLyoqIHBtZW0gZmlsZSBkZXNjcmlwdG9yICovCiAgICB1bnNpZ25lZCBsb25nIHBtZW1fZmQ7CiAgICAvKiogT2Zmc2V0IGZyb20gcG1lbSBkZXZpY2UgYmFzZSBhZGRyZXNzICovCiAgICBPTVhfVTMyIG9mZnNldDsKICAgIE9NWF9VMzIgc2l6ZTsKICAgIE9NWF9VMzIgbWFwcGVkX3NpemU7CiAgICBPTVhfUFRSIGJ1ZmZlcjsKfU9NWF9RQ09NX1BMQVRGT1JNX1BSSVZBVEVfUE1FTV9JTkZPOwoKdHlwZWRlZiBzdHJ1Y3QgT01YX1FDT01fUExBVEZPUk1fUFJJVkFURV9FTlRSWQp7CiAgICAvKiogRW50cnkgdHlwZSAqLwogICAgT01YX1FDT01fUExBVEZPUk1fUFJJVkFURV9FTlRSWV9UWVBFIHR5cGU7CgogICAgLyoqIFBvaW50ZXIgdG8gcGxhdGZvcm0gc3BlY2lmaWMgZW50cnkgKi8KICAgIE9NWF9QVFIgZW50cnk7Cn1PTVhfUUNPTV9QTEFURk9STV9QUklWQVRFX0VOVFJZOwoKdHlwZWRlZiBzdHJ1Y3QgT01YX1FDT01fUExBVEZPUk1fUFJJVkFURV9MSVNUCnsKICAgIC8qKiBOdW1iZXIgb2YgZW50cmllcyAqLwogICAgT01YX1UzMiBuRW50cmllczsKCiAgICAvKiogUG9pbnRlciB0byBhcnJheSBvZiBwbGF0Zm9ybSBzcGVjaWZpYyBlbnRyaWVzICoKICAgICAqIENvbnRpZ3VvdXMgYmxvY2sgb2YgT01YX1FDT01fUExBVEZPUk1fUFJJVkFURV9FTlRSWSBlbGVtZW50CiAgICAqLwogICAgT01YX1FDT01fUExBVEZPUk1fUFJJVkFURV9FTlRSWSogZW50cnlMaXN0Owp9T01YX1FDT01fUExBVEZPUk1fUFJJVkFURV9MSVNUOwoKI2RlZmluZSBPTVhfUUNPTV9GUkFNRV9QQUNLSU5HX0ZPUk1BVCAgICJPTVguUUNPTS5pbmRleC5wYXJhbS5mcmFtZXBhY2tmbXQiCi8qIEFsbG93ZWQgQVBJIGNhbGw6IE9NWF9HZXRQYXJhbWV0ZXIoKSAqLwovKiBJTCBjbGllbnQgY2FuIHVzZSB0aGlzIGluZGV4IHRvIHJlcmlldmUgdGhlIGxpc3Qgb2YgZnJhbWUgZm9ybWF0cyAqCiAqIHN1cHBvcnRlZCBieSB0aGUgY29tcG9uZW50ICovCgp0eXBlZGVmIHN0cnVjdCBPTVhfUUNPTV9GUkFNRV9QQUNLSU5HRk9STUFUX1RZUEUgewogICAgT01YX1UzMiBuU2l6ZTsKICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKICAgIE9NWF9VMzIgblBvcnRJbmRleDsKICAgIE9NWF9VMzIgbkluZGV4OwogICAgT01YX1FDT01GcmFtZVBhY2tpbmdGb3JtYXQgZWZyYW1lUGFja2luZ0Zvcm1hdDsKfSBPTVhfUUNPTV9GUkFNRV9QQUNLSU5HRk9STUFUX1RZUEU7CgoKLyoqCiAqIEZvbGxvd2luZyBpcyB0aGUgZW51bSBmb3IgY29sb3IgZm9ybWF0cyBzdXBwb3J0ZWQgb24gUXVhbGNvbW0KICogTVNNcyBZVlU0MjBTZW1pUGxhbmFyIGNvbG9yIGZvcm1hdCBpcyBub3QgZGVmaW5lZCBpbiBPcGVuTUFYCiAqIDEuMS4xIGFuZCBwcmlvciB2ZXJzaW9ucyBvZiBPcGVuTUFYIHNwZWNpZmljYXRpb24uCiAqLwoKZW51bSBPTVhfUUNPTV9DT0xPUl9GT1JNQVRUWVBFCnsKCi8qKiBZVlU0MjBTZW1pUGxhbmFyOiBZVlUgcGxhbmFyIGZvcm1hdCwgb3JnYW5pemVkIHdpdGggYSBmaXJzdAogKiAgcGxhbmUgY29udGFpbmluZyBZIHBpeGVscywgYW5kIGEgc2Vjb25kIHBsYW5lIGNvbnRhaW5pbmcKICogIGludGVybGVhdmVkIFYgYW5kIFUgcGl4ZWxzLiBWIGFuZCBVIHBpeGVscyBhcmUgc3ViLXNhbXBsZWQKICogIGJ5IGEgZmFjdG9yIG9mIHR3byBib3RoIGhvcml6b250YWxseSBhbmQgdmVydGljYWxseS4KICovCiAgICBRT01YX0NPTE9SX0Zvcm1hdFlWVTQyMFNlbWlQbGFuYXIgPSAweDdGQTMwQzAwLAogICAgUU9NWF9DT0xPUl9Gb3JtYXRZVlU0MjBQYWNrZWRTZW1pUGxhbmFyMzJtNGthLAogICAgUU9NWF9DT0xPUl9Gb3JtYXRZVVY0MjBQYWNrZWRTZW1pUGxhbmFyMTZtMmthLAogICAgUU9NWF9DT0xPUl9Gb3JtYXRZVVY0MjBQYWNrZWRTZW1pUGxhbmFyNjR4MzJUaWxlMm04a2EsCiAgICBRT01YX0NPTE9SX0ZPUk1BVFlVVjQyMFBhY2tlZFNlbWlQbGFuYXIzMm0sCiAgICBRT01YX0NPTE9SX0ZPUk1BVFlVVjQyMFBhY2tlZFNlbWlQbGFuYXIzMm1NdWx0aVZpZXcsCiAgICBRT01YX0NPTE9SX0Zvcm1hdEFuZHJvaWRPcGFxdWUgPSAoT01YX0NPTE9SX0ZPUk1BVFRZUEUpIE9NWF9DT0xPUl9Gb3JtYXRWZW5kb3JTdGFydFVudXNlZCAgKyAweDc4OSwKfTsKCmVudW0gT01YX1FDT01fVklERU9fQ09ESU5HVFlQRQp7Ci8qKiBDb2RlY3Mgc3VwcG9ydCBieSBxdWFsY29tbSB3aGljaCBhcmUgbm90IGxpc3RlZCBpbiBPTVggMS4xLngKICogIHNwZWMKICogICAqLwogICAgT01YX1FDT01fVklERU9fQ29kaW5nVkMxICA9IDB4N0ZBMzBDMDAgLAogICAgT01YX1FDT01fVklERU9fQ29kaW5nV01WOSA9IDB4N0ZBMzBDMDEsCiAgICBRT01YX1ZJREVPX0NvZGluZ0RpdnggPSAweDdGQTMwQzAyLCAgICAgLyoqPCBWYWx1ZSB3aGVuIGNvZGluZyBpcyBEaXZ4ICovCiAgICBRT01YX1ZJREVPX0NvZGluZ1NwYXJrID0gMHg3RkEzMEMwMywgICAgIC8qKjwgVmFsdWUgd2hlbiBjb2RpbmcgaXMgU29yZW5zb24gU3BhcmsgKi8KICAgIFFPTVhfVklERU9fQ29kaW5nVnAgPSAweDdGQTMwQzA0LAogICAgUU9NWF9WSURFT19Db2RpbmdWcDggPSBPTVhfVklERU9fQ29kaW5nVlA4LCAgIC8qKjwga2VlcGluZyBvbGQgZW51bSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkqLwogICAgUU9NWF9WSURFT19Db2RpbmdIZXZjID0gT01YX1ZJREVPX0NvZGluZ0hFVkMsIC8qKjwga2VlcGluZyBvbGQgZW51bSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkqLwogICAgUU9NWF9WSURFT19Db2RpbmdNVkMgPSAweDdGQTMwQzA3LAp9OwoKZW51bSBPTVhfUUNPTV9FWFROX0lOREVYVFlQRQp7CiAgICAvKiogUWNvbSBwcm9wcmlldGFyeSBleHRlbnNpb24gaW5kZXggbGlzdCAqLwoKICAgIC8qICJPTVguUUNPTS5pbmRleC5wYXJhbS5yZWdpc3Rlcl9tbWFwIiAqLwogICAgT01YX1Fjb21JbmRleFJlZ21tYXAgPSAweDdGMDAwMDAwLAoKICAgIC8qICJPTVguUUNPTS5pbmRleC5wYXJhbS5wbGF0Zm9ybXByaXZhdGUiICovCiAgICBPTVhfUWNvbUluZGV4UGxhdGZvcm1QdnQgPSAweDdGMDAwMDAxLAoKICAgIC8qICJPTVguUUNPTS5pbmRleC5wYXJhbS5wb3J0ZGVmbiIgKi8KICAgIE9NWF9RY29tSW5kZXhQb3J0RGVmbiA9IDB4N0YwMDAwMDIsCgogICAgLyogIk9NWC5RQ09NLmluZGV4LnBhcmFtLmZyYW1lcGFja2luZ2Zvcm1hdCIgKi8KICAgIE9NWF9RY29tSW5kZXhQb3J0RnJhbWVQYWNrRm10ID0gMHg3RjAwMDAwMywKCiAgICAvKiJPTVguUUNPTS5pbmRleC5wYXJhbS5JbnRlcmxhY2VkICovCiAgICBPTVhfUWNvbUluZGV4UGFyYW1JbnRlcmxhY2VkID0gMHg3RjAwMDAwNCwKCiAgICAvKiJPTVguUUNPTS5pbmRleC5jb25maWcuaW50ZXJsYWNlZm9ybWF0ICovCiAgICBPTVhfUWNvbUluZGV4Q29uZmlnSW50ZXJsYWNlZCA9IDB4N0YwMDAwMDUsCgogICAgLyoiT01YLlFDT00uaW5kZXgucGFyYW0uc3ludGF4aGRyIiAqLwogICAgUU9NWF9JbmRleFBhcmFtVmlkZW9TeW50YXhIZHIgPSAweDdGMDAwMDA2LAoKICAgIC8qIk9NWC5RQ09NLmluZGV4LmNvbmZpZy5pbnRyYXBlcmlvZCIgKi8KICAgIFFPTVhfSW5kZXhDb25maWdWaWRlb0ludHJhcGVyaW9kID0gMHg3RjAwMDAwNywKCiAgICAvKiJPTVguUUNPTS5pbmRleC5jb25maWcucmFuZG9tSW50cmFyZWZyZXNoIiAqLwogICAgUU9NWF9JbmRleENvbmZpZ1ZpZGVvSW50cmFSZWZyZXNoID0gMHg3RjAwMDAwOCwKCiAgICAvKiJPTVguUUNPTS5pbmRleC5jb25maWcudmlkZW8uVGVtcG9yYWxTcGF0aWFsVHJhZGVPZmYiICovCiAgICBRT01YX0luZGV4Q29uZmlnVmlkZW9UZW1wb3JhbFNwYXRpYWxUcmFkZU9mZiA9IDB4N0YwMDAwMDksCgogICAgLyoiT01YLlFDT00uaW5kZXgucGFyYW0udmlkZW8uRW5jb2Rlck1vZGUiICovCiAgICBRT01YX0luZGV4UGFyYW1WaWRlb0VuY29kZXJNb2RlID0gMHg3RjAwMDAwQSwKCiAgICAvKiJPTVguUUNPTS5pbmRleC5wYXJhbS5EaXZ4dHlwZSAqLwogICAgT01YX1Fjb21JbmRleFBhcmFtVmlkZW9EaXZ4ID0gMHg3RjAwMDAwQiwKCiAgICAvKiJPTVguUUNPTS5pbmRleC5wYXJhbS5TcGFya3R5cGUgKi8KICAgIE9NWF9RY29tSW5kZXhQYXJhbVZpZGVvU3BhcmsgPSAweDdGMDAwMDBDLAoKICAgIC8qIk9NWC5RQ09NLmluZGV4LnBhcmFtLlZwdHlwZSAqLwogICAgT01YX1Fjb21JbmRleFBhcmFtVmlkZW9WcCA9IDB4N0YwMDAwMEQsCgogICAgT01YX1Fjb21JbmRleFF1ZXJ5TnVtYmVyT2ZWaWRlb0RlY0luc3RhbmNlID0gMHg3RjAwMDAwRSwKCiAgICBPTVhfUWNvbUluZGV4UGFyYW1WaWRlb1N5bmNGcmFtZURlY29kaW5nTW9kZSA9IDB4N0YwMDAwMEYsCgogICAgT01YX1Fjb21JbmRleFBhcmFtVmlkZW9EZWNvZGVyUGljdHVyZU9yZGVyID0gMHg3RjAwMDAxMCwKCiAgICAvKiAiT01YLlFDT00uaW5kZXguY29uZmlnLnZpZGVvLkZyYW1lUGFja2luZ0luZm8iICovCiAgICBPTVhfUWNvbUluZGV4Q29uZmlnVmlkZW9GcmFtZVBhY2tpbmdBcnJhbmdlbWVudCA9IDB4N0YwMDAwMTEsCgogICAgT01YX1Fjb21JbmRleFBhcmFtQ29uY2VhbE1CTWFwRXh0cmFEYXRhID0gMHg3RjAwMDAxMiwKCiAgICBPTVhfUWNvbUluZGV4UGFyYW1GcmFtZUluZm9FeHRyYURhdGEgPSAweDdGMDAwMDEzLAoKICAgIE9NWF9RY29tSW5kZXhQYXJhbUludGVybGFjZUV4dHJhRGF0YSA9IDB4N0YwMDAwMTQsCgogICAgT01YX1Fjb21JbmRleFBhcmFtSDI2NFRpbWVJbmZvID0gMHg3RjAwMDAxNSwKCiAgICBPTVhfUWNvbUluZGV4UGFyYW1JbmRleEV4dHJhRGF0YVR5cGUgPSAweDdGMDAwMDE2LAoKICAgIE9NWF9Hb29nbGVBbmRyb2lkSW5kZXhFbmFibGVBbmRyb2lkTmF0aXZlQnVmZmVycyA9IDB4N0YwMDAwMTcsCgogICAgT01YX0dvb2dsZUFuZHJvaWRJbmRleFVzZUFuZHJvaWROYXRpdmVCdWZmZXIgPSAweDdGMDAwMDE4LAoKICAgIE9NWF9Hb29nbGVBbmRyb2lkSW5kZXhHZXRBbmRyb2lkTmF0aXZlQnVmZmVyVXNhZ2UgPSAweDdGMDAwMDE5LAoKICAgIC8qIk9NWC5RQ09NLmluZGV4LmNvbmZpZy52aWRlby5RUFJhbmdlIiAqLwogICAgT01YX1Fjb21JbmRleENvbmZpZ1ZpZGVvUVBSYW5nZSA9IDB4N0YwMDAwMUEsCgogICAgLyoiT01YLlFDT00uaW5kZXgucGFyYW0uRW5hYmxlVGltZVN0YW1wUmVvZGVyIiovCiAgICBPTVhfUWNvbUluZGV4UGFyYW1FbmFibGVUaW1lU3RhbXBSZW9yZGVyID0gMHg3RjAwMDAxQiwKCiAgICAvKiJPTVguZ29vZ2xlLmFuZHJvaWQuaW5kZXguc3RvcmVNZXRhRGF0YUluQnVmZmVycyIqLwogICAgT01YX1Fjb21JbmRleFBhcmFtVmlkZW9NZXRhQnVmZmVyTW9kZSA9IDB4N0YwMDAwMUMsCgogICAgLyoiT01YLmdvb2dsZS5hbmRyb2lkLmluZGV4LnVzZUFuZHJvaWROYXRpdmVCdWZmZXIyIiovCiAgICBPTVhfR29vZ2xlQW5kcm9pZEluZGV4VXNlQW5kcm9pZE5hdGl2ZUJ1ZmZlcjIgPSAweDdGMDAwMDFELAoKICAgIC8qIk9NWC5RQ09NLmluZGV4LnBhcmFtLlZpZGVvTWF4QWxsb3dlZEJpdHJhdGVDaGVjayIqLwogICAgT01YX1Fjb21JbmRleFBhcmFtVmlkZW9NYXhBbGxvd2VkQml0cmF0ZUNoZWNrID0gMHg3RjAwMDAxRSwKCiAgICBPTVhfUWNvbUluZGV4RW5hYmxlU2xpY2VEZWxpdmVyeU1vZGUgPSAweDdGMDAwMDFGLAoKICAgIC8qICJPTVguUUNPTS5pbmRleC5wYXJhbS52aWRlby5FeHRuVXNlckV4dHJhRGF0YSIgKi8KICAgIE9NWF9RY29tSW5kZXhFbmFibGVFeHRuVXNlckRhdGEgPSAweDdGMDAwMDIwLAoKICAgIC8qIk9NWC5RQ09NLmluZGV4LnBhcmFtLnZpZGVvLkVuYWJsZVNtb290aFN0cmVhbWluZyIqLwogICAgT01YX1Fjb21JbmRleFBhcmFtRW5hYmxlU21vb3RoU3RyZWFtaW5nID0gMHg3RjAwMDAyMSwKCiAgICAvKiJPTVguUUNPTS5pbmRleC5wYXJhbS52aWRlby5RUFJhbmdlIiAqLwogICAgT01YX1Fjb21JbmRleFBhcmFtVmlkZW9RUFJhbmdlID0gMHg3RjAwMDAyMiwKCiAgICBPTVhfUWNvbUluZGV4RW5hYmxlSDI2M1BsdXNQVHlwZSA9IDB4N0YwMDAwMjMsCgogICAgLyoiT01YLlFDT00uaW5kZXgucGFyYW0udmlkZW8uTFRSQ291bnRSYW5nZVN1cHBvcnRlZCIqLwogICAgUU9NWF9JbmRleFBhcmFtVmlkZW9MVFJDb3VudFJhbmdlU3VwcG9ydGVkID0gMHg3RjAwMDAyNCwKCiAgICAvKiJPTVguUUNPTS5pbmRleC5wYXJhbS52aWRlby5MVFJNb2RlIiovCiAgICBRT01YX0luZGV4UGFyYW1WaWRlb0xUUk1vZGUgPSAweDdGMDAwMDI1LAoKICAgIC8qIk9NWC5RQ09NLmluZGV4LnBhcmFtLnZpZGVvLkxUUkNvdW50IiovCiAgICBRT01YX0luZGV4UGFyYW1WaWRlb0xUUkNvdW50ID0gMHg3RjAwMDAyNiwKCiAgICAvKiJPTVguUUNPTS5pbmRleC5jb25maWcudmlkZW8uTFRSUGVyaW9kIiovCiAgICBRT01YX0luZGV4Q29uZmlnVmlkZW9MVFJQZXJpb2QgPSAweDdGMDAwMDI3LAoKICAgIC8qIk9NWC5RQ09NLmluZGV4LmNvbmZpZy52aWRlby5MVFJVc2UiKi8KICAgIFFPTVhfSW5kZXhDb25maWdWaWRlb0xUUlVzZSA9IDB4N0YwMDAwMjgsCgogICAgLyoiT01YLlFDT00uaW5kZXguY29uZmlnLnZpZGVvLkxUUk1hcmsiKi8KICAgIFFPTVhfSW5kZXhDb25maWdWaWRlb0xUUk1hcmsgPSAweDdGMDAwMDI5LAoKICAgIC8qIE9NWC5nb29nbGUuYW5kcm9pZC5pbmRleC5wcmVwZW5kU1BTUFBTVG9JRFJGcmFtZXMgKi8KICAgIE9NWF9RY29tSW5kZXhQYXJhbVNlcXVlbmNlSGVhZGVyV2l0aElEUiA9IDB4N0YwMDAwMkEsCgogICAgLyogYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KICAgIE9NWF9RY29tSW5kZXhQYXJhbUVuYWJsZVZVSVN0cmVhbVJlc3RyaWN0RmxhZyA9IDB4N0YxMDAwMkIsCgogICAgT01YX1Fjb21JbmRleFBhcmFtSDI2NEFVRGVsaW1pdGVyID0gMHg3RjAwMDAyQiwKCiAgICBPTVhfUWNvbUluZGV4UGFyYW1WaWRlb0Rvd25TY2FsYXIgPSAweDdGMDAwMDJDLAoKICAgIC8qICJPTVguUUNPTS5pbmRleC5wYXJhbS52aWRlby5GcmFtZVBhY2tpbmdFeHRyYWRhdGEiICovCiAgICBPTVhfUWNvbUluZGV4UGFyYW1WaWRlb0ZyYW1lUGFja2luZ0V4dHJhZGF0YSA9IDB4N0YwMDAwMkQsCgogICAgLyogIk9NWC5RQ09NLmluZGV4LmNvbmZpZy5hY3RpdmVyZWdpb25kZXRlY3Rpb24iICovCiAgICBPTVhfUWNvbUluZGV4Q29uZmlnQWN0aXZlUmVnaW9uRGV0ZWN0aW9uID0gMHg3RjAwMDAyRSwKCiAgICAvKiAiT01YLlFDT00uaW5kZXguY29uZmlnLmFjdGl2ZXJlZ2lvbmRldGVjdGlvbnN0YXR1cyIgKi8KICAgIE9NWF9RY29tSW5kZXhDb25maWdBY3RpdmVSZWdpb25EZXRlY3Rpb25TdGF0dXMgPSAweDdGMDAwMDJGLAoKICAgIC8qICJPTVguUUNPTS5pbmRleC5jb25maWcuc2NhbGluZ21vZGUiICovCiAgICBPTVhfUWNvbUluZGV4Q29uZmlnU2NhbGluZ01vZGUgPSAweDdGMDAwMDMwLAoKICAgIC8qICJPTVguUUNPTS5pbmRleC5jb25maWcubm9pc2VyZWR1Y3Rpb24iICovCiAgICBPTVhfUWNvbUluZGV4Q29uZmlnTm9pc2VSZWR1Y3Rpb24gPSAweDdGMDAwMDMxLAoKICAgIC8qICJPTVguUUNPTS5pbmRleC5jb25maWcuaW1hZ2VlbmhhbmNlbWVudCIgKi8KICAgIE9NWF9RY29tSW5kZXhDb25maWdJbWFnZUVuaGFuY2VtZW50ID0gMHg3RjAwMDAzMiwKCiAgICAvKiBnb29nbGUgc21vb3RoLXN0cmVhbWluZyBzdXBwb3J0ICovCiAgICBPTVhfUWNvbUluZGV4UGFyYW1WaWRlb0FkYXB0aXZlUGxheWJhY2tNb2RlID0gMHg3RjAwMDAzMywKCiAgICAvKiBILjI2NCBNVkMgY29kZWMgaW5kZXggKi8KICAgIFFPTVhfSW5kZXhQYXJhbVZpZGVvTXZjID0gMHg3RjAwMDAzNCwKCiAgICAvKiAiT01YLlFDT00uaW5kZXgucGFyYW0udmlkZW8uUVBFeHRyYWRhdGEiICovCiAgICBPTVhfUWNvbUluZGV4UGFyYW1WaWRlb1FQRXh0cmFEYXRhID0gMHg3RjAwMDAzNSwKCiAgICAvKiAiT01YLlFDT00uaW5kZXgucGFyYW0udmlkZW8uSW5wdXRCaXRzSW5mb0V4dHJhZGF0YSIgKi8KICAgIE9NWF9RY29tSW5kZXhQYXJhbVZpZGVvSW5wdXRCaXRzSW5mb0V4dHJhRGF0YSA9IDB4N0YwMDAwMzYsCgogICAgLyogVlA4IEhpZXJhcmNoaWNhbCBQIHN1cHBvcnQgKi8KICAgIE9NWF9RY29tSW5kZXhIaWVyYXJjaGljYWxTdHJ1Y3R1cmUgPSAweDdGMDAwMDM3LAoKICAgIE9NWF9RY29tSW5kZXhQYXJhbVBlcmZMZXZlbCA9IDB4N0YwMDAwMzgsCgogICAgT01YX1Fjb21JbmRleFBhcmFtSDI2NFZVSVRpbWluZ0luZm8gPSAweDdGMDAwMDM5LAoKICAgIE9NWF9RY29tSW5kZXhQYXJhbVBlYWtCaXRyYXRlID0gMHg3RjAwMDAzQSwKCiAgICAvKiBFbmFibGUgSW5pdGlhbFFQIGluZGV4ICovCiAgICBRT01YX0luZGV4UGFyYW1WaWRlb0luaXRpYWxRcCA9IDB4N0YwMDAwM0IsCgogICAgT01YX1Fjb21JbmRleFBhcmFtU2V0TVZTZWFyY2hyYW5nZSA9IDB4N0YwMDAwM0MsCgogICAgT01YX1Fjb21JbmRleENvbmZpZ1BlcmZMZXZlbCA9IDB4N0YwMDAwM0QsCgogICAgLyoiT01YLlFDT00uaW5kZXgucGFyYW0udmlkZW8uTFRSQ291bnQiKi8KICAgIE9NWF9RY29tSW5kZXhQYXJhbVZpZGVvTFRSQ291bnQgPSBRT01YX0luZGV4UGFyYW1WaWRlb0xUUkNvdW50LAoKICAgIC8qIk9NWC5RQ09NLmluZGV4LmNvbmZpZy52aWRlby5MVFJVc2UiKi8KICAgIE9NWF9RY29tSW5kZXhDb25maWdWaWRlb0xUUlVzZSA9IFFPTVhfSW5kZXhDb25maWdWaWRlb0xUUlVzZSwKCiAgICAvKiJPTVguUUNPTS5pbmRleC5jb25maWcudmlkZW8uTFRSTWFyayIqLwogICAgT01YX1Fjb21JbmRleENvbmZpZ1ZpZGVvTFRSTWFyayA9IFFPTVhfSW5kZXhDb25maWdWaWRlb0xUUk1hcmssCgogICAgLyoiT01YLlFDT00uaW5kZXgucGFyYW0udmlkZW8uQ3VzdG9tQnVmZmVyU2l6ZSIqLwogICAgT01YX1Fjb21JbmRleFBhcmFtVmlkZW9DdXN0b21CdWZmZXJTaXplID0gMHg3RjAwMDAzRSwKCiAgICAvKiJPTVguUUNPTS5pbmRleC5wYXJhbS52aWRlby5NcGVnMlNlcURpc3BFeHRyYURhdGEiKi8KICAgIE9NWF9RY29tSW5kZXhQYXJhbU1wZWcyU2VxRGlzcEV4dHJhRGF0YSA9IDB4N0YwMDAwNDAsCgogICAgLyogTWF4IEhpZXJhcmNoaWNhbCBQIGxheWVycyAqLwogICAgT01YX1Fjb21JbmRleE1heEhpZXJhcmNoaWNhbGxheWVycyA9IDB4N0YwMDAwNDEsCgogICAgLyogU2V0IEVuY29kZXIgUGVyZm9ybWFuY2UgSW5kZXggKi8KICAgIE9NWF9RY29tSW5kZXhDb25maWdWaWRlb1ZlbmNQZXJmTW9kZSA9IDB4N0YwMDAwNDIsCgogICAgLyogU2V0IEh5YnJpZCBIaWVyLXAgbGF5ZXJzICovCiAgICBPTVhfUWNvbUluZGV4UGFyYW1WaWRlb0h5YnJpZEhpZXJwTW9kZSA9IDB4N0YwMDAwNDMsCgogICAgT01YX1Fjb21JbmRleEZsZXhpYmxlWVVWRGVzY3JpcHRpb24gPSAweDdGMDAwMDQ0LAp9OwoKLyoqCiogVGhpcyBpcyBjdXN0b20gZXh0ZW5zaW9uIHRvIGNvbmZpZ3VyZSBIeWJyaWQgSGllci1wIHNldHRpbmdzLgoqIFRoaXMgbW9kZSBpcyBkaWZmZXJlbnQgZnJvbSBlbmFibGluZyBIaWVyLXAgbW9kZS4gVGhpcwoqIHByb3BlcnR5IGVuYWJsZXMgSGllci1wIGVuY29kaW5nIHdpdGggTFRSIHJlZmVyZW5jaW5nIGluIGVhY2gKKiBzdWItR09QLgoqCiogU1RSVUNUIE1FTUJFUlMKKgoqIG5TaXplICAgICAgICAgOiBTaXplIG9mIFN0cnVjdHVyZSBpbiBieXRlcwoqIG5WZXJzaW9uICAgICAgOiBPcGVuTUFYIElMIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgoqIG5IcExheWVycyAgICAgOiBTZXQgdGhlIG51bWJlciBvZiBIaWVyLXAgbGF5ZXJzIGZvciB0aGUgc2Vzc2lvbgoqICAgICAgICAgICAgICAgICAgLSBUaGlzIHNob3VsZCBiZSA8PSA2LiAoMSBCYXNlIGxheWVyICsKKiAgICAgICAgICAgICAgICAgICAgNSBFbmhhbmNlbWVudCBsYXllcnMpCiovCgp0eXBlZGVmIHN0cnVjdCBRT01YX0VYVE5JTkRFWF9WSURFT19IWUJSSURfSFBfTU9ERSB7CiAgIE9NWF9VMzIgblNpemU7CiAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKICAgT01YX1UzMiBuSHBMYXllcnM7Cn0gUU9NWF9FWFROSU5ERVhfVklERU9fSFlCUklEX0hQX01PREU7CgovKioKICogRW5jb2RlciBQZXJmb3JtYW5jZSBNb2RlLiAgVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBzZXQKICogcGVyZm9ybWFuY2UgbW9kZSBvciBwb3dlciBzYXZlIG1vZGUgd2hlbiBlbmNvZGluZy4gVGhlIHNlYXJjaAogKiByYW5nZSBpcyBtb2RpZmllZCB0byBzYXZlIHBvd2VyIG9yIGltcHJvdmUgcXVhbGl0eS4KICoKICogU1RSVUNUIE1FTUJFUlM6CiAqIE9NWF9VMzIgblBlcmZNb2RlICA6IFBlcmZvcm1hbmNlIG1vZGU6CiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOiBNQVhfUVVBTElUWQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjogUE9XRVJfU0FWRQogKi8KCnR5cGVkZWYgc3RydWN0IFFPTVhfRVhUTklOREVYX1ZJREVPX1BFUkZNT0RFIHsKICAgIE9NWF9VMzIgblNpemU7CiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CiAgICBPTVhfVTMyIG5QZXJmTW9kZTsKfSBRT01YX0VYVE5JTkRFWF9WSURFT19QRVJGTU9ERTsKCi8qKgogKiBJbml0aWFsIFFQIHBhcmFtZXRlci4gIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gZW5hYmxlCiAqIHZlbmRvciBzcGVjaWZpYyBleHRlbnNpb24gdG8gbGV0IGNsaWVudCBlbmFibGUgc2V0dGluZwogKiBpbml0aWFsIFFQIHZhbHVlcyB0byBJIFAgQiBGcmFtZXMKICoKICogU1RSVUNUIE1FTUJFUlM6CiAqICBuU2l6ZSAgICAgICAgICAgICAgOiBTaXplIG9mIFN0cnVjdHVyZSBpbiBieXRlcwogKiAgblZlcnNpb24gICAgICAgICAgIDogT3Blbk1BWCBJTCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24KICogIG5Qb3J0SW5kZXggICAgICAgICA6IEluZGV4IG9mIHRoZSBwb3J0IHRvIHdoaWNoIHRoaXMgc3RydWN0dXJlIGFwcGxpZXMKICogIE9NWF9VMzIgblFwSSAgICAgICA6IEZpcnN0IElmcmFtZSBRUAogKiAgT01YX1UzMiBuUXBQICAgICAgIDogRmlyc3QgUGZyYW1lIFFQCiAqICBPTVhfVTMyIG5RcEIgICAgICAgOiBGaXJzdCBCZnJhbWUgUVAKICogIE9NWF9VMzIgYkVuYWJsZUluaXRRcCA6IEJpdCBmaWVsZCBpbmRpY2F0aW5nIHdoaWNoIGZyYW1lIHR5cGUocykgc2hhbGwKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSB0aGUgc3BlY2lmaWVkIGluaXRpYWwgUVAuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMDogRW5hYmxlIGluaXRpYWwgUVAgZm9yIEkvSURSCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHVzZSB2YWx1ZSBzcGVjaWZpZWQgaW4gbkluaXRRcEkKICogICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAxOiBFbmFibGUgaW5pdGlhbCBRUCBmb3IgUAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB1c2UgdmFsdWUgc3BlY2lmaWVkIGluIG5Jbml0UXBQCiAqICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMjogRW5hYmxlIGluaXRpYWwgUVAgZm9yIEIKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdXNlIHZhbHVlIHNwZWNpZmllZCBpbiBuSW5pdFFwQgogKi8KCnR5cGVkZWYgc3RydWN0IFFPTVhfRVhUTklOREVYX1ZJREVPX0lOSVRJQUxRUCB7CiAgICBPTVhfVTMyIG5TaXplOwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogICAgT01YX1UzMiBuUG9ydEluZGV4OwogICAgT01YX1UzMiBuUXBJOwogICAgT01YX1UzMiBuUXBQOwogICAgT01YX1UzMiBuUXBCOwogICAgT01YX1UzMiBiRW5hYmxlSW5pdFFwOwp9IFFPTVhfRVhUTklOREVYX1ZJREVPX0lOSVRJQUxRUDsKCi8qKgogKiBFeHRlbnNpb24gaW5kZXggcGFyYW1ldGVyLiAgVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBlbmFibGUKICogdmVuZG9yIHNwZWNpZmljIGV4dGVuc2lvbiBvbiBpbnB1dC9vdXRwdXQgcG9ydCBhbmQKICogdG8gcGFzcyB0aGUgcmVxdWlyZWQgZmxhZ3MgYW5kIGRhdGEsIGlmIGFueS4KICogVGhlIGZvcm1hdCBvZiBmbGFncyBhbmQgZGF0YSBiZWluZyBwYXNzZWQgaXMga25vd24gdG8KICogdGhlIGNsaWVudCBhbmQgY29tcG9uZW50IGFwcmlvcmkuCiAqCiAqIFNUUlVDVCBNRU1CRVJTOgogKiAgblNpemUgICAgICAgICAgICAgIDogU2l6ZSBvZiBTdHJ1Y3R1cmUgcGx1cyBwRGF0YSBzaXplCiAqICBuVmVyc2lvbiAgICAgICAgICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uCiAqICBuUG9ydEluZGV4ICAgICAgICAgOiBJbmRpY2F0ZXMgd2hpY2ggcG9ydCB0byBzZXQKICogIGJFbmFibGUgICAgICAgICAgICA6IEV4dGVuc2lvbiBpbmRleCBlbmFibGUgKDEpIG9yIGRpc2FibGUgKDApCiAqICBuRmxhZ3MgICAgICAgICAgICAgOiBFeHRlbnNpb24gaW5kZXggZmxhZ3MsIGlmIGFueQogKiAgbkRhdGFTaXplICAgICAgICAgIDogU2l6ZSBvZiB0aGUgZXh0ZW5zaW9uIGluZGV4IGRhdGEgdG8gZm9sbG93CiAqICBwRGF0YSAgICAgICAgICAgICAgOiBFeHRlbnNpb24gaW5kZXggZGF0YSwgaWYgcHJlc2VudC4KICovCnR5cGVkZWYgc3RydWN0IFFPTVhfRVhUTklOREVYX1BBUkFNVFlQRSB7CiAgICBPTVhfVTMyIG5TaXplOwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogICAgT01YX1UzMiBuUG9ydEluZGV4OwogICAgT01YX0JPT0wgYkVuYWJsZTsKICAgIE9NWF9VMzIgbkZsYWdzOwogICAgT01YX1UzMiBuRGF0YVNpemU7CiAgICBPTVhfUFRSIHBEYXRhOwp9IFFPTVhfRVhUTklOREVYX1BBUkFNVFlQRTsKCi8qKgogKiBSYW5nZSBpbmRleCBwYXJhbWV0ZXIuICBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIGVuYWJsZQogKiB2ZW5kb3Igc3BlY2lmaWMgZXh0ZW5zaW9uIG9uIGlucHV0L291dHB1dCBwb3J0IGFuZAogKiB0byBwYXNzIHRoZSByZXF1aXJlZCBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcwogKgogKiBTVFJVQ1QgTUVNQkVSUzoKICogIG5TaXplICAgICAgICAgICAgICA6IFNpemUgb2YgU3RydWN0dXJlIGluIGJ5dGVzCiAqICBuVmVyc2lvbiAgICAgICAgICAgOiBPcGVuTUFYIElMIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgogKiAgblBvcnRJbmRleCAgICAgICAgIDogSW5kZXggb2YgdGhlIHBvcnQgdG8gd2hpY2ggdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcwogKiAgbk1pbiAgICAgICAgICAgICAgIDogTWluaW11bSB2YWx1ZQogKiAgbk1heCAgICAgICAgICAgICAgIDogTWF4aW11bSB2YWx1ZQogKiAgblN0ZVNpemUgICAgICAgICAgIDogU3RlcCBzaXplCiAqLwp0eXBlZGVmIHN0cnVjdCBRT01YX0VYVE5JTkRFWF9SQU5HRVRZUEUgewogICAgT01YX1UzMiBuU2l6ZTsKICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKICAgIE9NWF9VMzIgblBvcnRJbmRleDsKICAgIE9NWF9TMzIgbk1pbjsKICAgIE9NWF9TMzIgbk1heDsKICAgIE9NWF9TMzIgblN0ZXBTaXplOwp9IFFPTVhfRVhUTklOREVYX1JBTkdFVFlQRTsKCi8qKgogKiAgIFNwZWNpZmllcyBMVFIgbW9kZSB0eXBlcy4KICovCnR5cGVkZWYgZW51bSBRT01YX1ZJREVPX0xUUk1PREVUWVBFCnsKICAgIFFPTVhfVklERU9fTFRSTW9kZV9EaXNhYmxlICAgID0gMHgwLCAvKio8IExUUiBlbmNvZGluZyBpcyBkaXNhYmxlZCAqLwogICAgUU9NWF9WSURFT19MVFJNb2RlX01hbnVhbCAgICAgPSAweDEsIC8qKjwgSW4gdGhpcyBtb2RlLCBJTCBjbGllbnQgY29uZmlndXJlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiogIHRoZSBlbmNvZGVyIHRoZSBMVFIgY291bnQgYW5kIG1hbnVhbGx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKiAgY29udHJvbHMgdGhlIG1hcmtpbmcgYW5kIHVzZSBvZiBMVFIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqICBmcmFtZXMgZHVyaW5nIHZpZGVvIGVuY29kaW5nLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgIFFPTVhfVklERU9fTFRSTW9kZV9BdXRvICAgICAgID0gMHgyLCAvKio8IEluIHRoaXMgbW9kZSwgSUwgY2xpZW50IGNvbmZpZ3VyZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqICB0aGUgZW5jb2RlciB0aGUgTFRSIGNvdW50IGFuZCBMVFIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqICBwZXJpb2QuIFRoZSBlbmNvZGVyIG1hcmtzIExUUiBmcmFtZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqICBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIHRoZSBMVFIgcGVyaW9kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKiAgZHVyaW5nIHZpZGVvIGVuY29kaW5nLiBJTCBjbGllbnQgY29udHJvbHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqICB0aGUgdXNlIG9mIExUUiBmcmFtZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgUU9NWF9WSURFT19MVFJNb2RlX01BWCAgICA9IDB4N0ZGRkZGRkYgLyoqIE1heGltdW0gTFRSIE1vZGUgdHlwZSAqLwp9IFFPTVhfVklERU9fTFRSTU9ERVRZUEU7CgovKioKICogTFRSIG1vZGUgaW5kZXggcGFyYW1ldGVyLiAgVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZAogKiB0byBlbmFibGUgdmVuZG9yIHNwZWNpZmljIGV4dGVuc2lvbiBvbiBvdXRwdXQgcG9ydAogKiB0byBwYXNzIHRoZSBMVFIgbW9kZSBpbmZvcm1hdGlvbi4KICoKICogU1RSVUNUIE1FTUJFUlM6CiAqICBuU2l6ZSAgICAgICAgICAgICAgOiBTaXplIG9mIFN0cnVjdHVyZSBpbiBieXRlcwogKiAgblZlcnNpb24gICAgICAgICAgIDogT3Blbk1BWCBJTCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24KICogIG5Qb3J0SW5kZXggICAgICAgICA6IEluZGV4IG9mIHRoZSBwb3J0IHRvIHdoaWNoIHRoaXMgc3RydWN0dXJlIGFwcGxpZXMKICogIGVMVFJNb2RlICAgICAgICAgICA6IFNwZWNpZmllcyB0aGUgTFRSIG1vZGUgdXNlZCBpbiBlbmNvZGVyCiAqLwp0eXBlZGVmIHN0cnVjdCBRT01YX1ZJREVPX1BBUkFNX0xUUk1PREVfVFlQRSB7CiAgICBPTVhfVTMyIG5TaXplOwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogICAgT01YX1UzMiBuUG9ydEluZGV4OwogICAgUU9NWF9WSURFT19MVFJNT0RFVFlQRSBlTFRSTW9kZTsKfSBRT01YX1ZJREVPX1BBUkFNX0xUUk1PREVfVFlQRTsKCi8qKgogKiBMVFIgY291bnQgaW5kZXggcGFyYW1ldGVyLiAgVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZAogKiB0byBlbmFibGUgdmVuZG9yIHNwZWNpZmljIGV4dGVuc2lvbiBvbiBvdXRwdXQgcG9ydAogKiB0byBwYXNzIHRoZSBMVFIgY291bnQgaW5mb3JtYXRpb24uCiAqCiAqIFNUUlVDVCBNRU1CRVJTOgogKiAgblNpemUgICAgICAgICAgICAgIDogU2l6ZSBvZiBTdHJ1Y3R1cmUgaW4gYnl0ZXMKICogIG5WZXJzaW9uICAgICAgICAgICA6IE9wZW5NQVggSUwgc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uCiAqICBuUG9ydEluZGV4ICAgICAgICAgOiBJbmRleCBvZiB0aGUgcG9ydCB0byB3aGljaCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzCiAqICBuQ291bnQgICAgICAgICAgICAgOiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBMVFIgZnJhbWVzIHN0b3JlZCBpbiB0aGUKICogICAgICAgICAgICAgICAgICAgICAgIGVuY29kZXIgY29tcG9uZW50CiAqLwp0eXBlZGVmIHN0cnVjdCBRT01YX1ZJREVPX1BBUkFNX0xUUkNPVU5UX1RZUEUgewogICAgT01YX1UzMiBuU2l6ZTsKICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKICAgIE9NWF9VMzIgblBvcnRJbmRleDsKICAgIE9NWF9VMzIgbkNvdW50Owp9IFFPTVhfVklERU9fUEFSQU1fTFRSQ09VTlRfVFlQRTsKCgovKioKICogVGhpcyBzaG91bGQgYmUgdXNlZCB3aXRoIE9NWF9RY29tSW5kZXhQYXJhbVZpZGVvTFRSQ291bnQgZXh0ZW5zaW9uLgogKi8KdHlwZWRlZiBRT01YX1ZJREVPX1BBUkFNX0xUUkNPVU5UX1RZUEUgT01YX1FDT01fVklERU9fUEFSQU1fTFRSQ09VTlRfVFlQRTsKCi8qKgogKiBMVFIgcGVyaW9kIGluZGV4IHBhcmFtZXRlci4gIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQKICogdG8gZW5hYmxlIHZlbmRvciBzcGVjaWZpYyBleHRlbnNpb24gb24gb3V0cHV0IHBvcnQKICogdG8gcGFzcyB0aGUgTFRSIHBlcmlvZCBpbmZvcm1hdGlvbi4KICoKICogU1RSVUNUIE1FTUJFUlM6CiAqICBuU2l6ZSAgICAgICAgICAgICAgOiBTaXplIG9mIFN0cnVjdHVyZSBpbiBieXRlcwogKiAgblZlcnNpb24gICAgICAgICAgIDogT3Blbk1BWCBJTCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24KICogIG5Qb3J0SW5kZXggICAgICAgICA6IEluZGV4IG9mIHRoZSBwb3J0IHRvIHdoaWNoIHRoaXMgc3RydWN0dXJlIGFwcGxpZXMKICogIG5GcmFtZXMgICAgICAgICAgICA6IFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGZyYW1lcyBiZXR3ZWVuIHR3byBjb25zZWN1dGl2ZQogKiAgICAgICAgICAgICAgICAgICAgICAgTFRSIGZyYW1lcy4KICovCnR5cGVkZWYgc3RydWN0IFFPTVhfVklERU9fQ09ORklHX0xUUlBFUklPRF9UWVBFIHsKICAgIE9NWF9VMzIgblNpemU7CiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CiAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CiAgICBPTVhfVTMyIG5GcmFtZXM7Cn0gUU9NWF9WSURFT19DT05GSUdfTFRSUEVSSU9EX1RZUEU7CgovKioKICogTWFya3MgdGhlIG5leHQgZW5jb2RlZCBmcmFtZSBhcyBhbiBMVFIgZnJhbWUuCiAqIFNUUlVDVCBNRU1CRVJTOgogKiAgblNpemUgICAgICAgICAgICAgIDogU2l6ZSBvZiBTdHJ1Y3R1cmUgaW4gYnl0ZXMKICogIG5WZXJzaW9uICAgICAgICAgICA6IE9wZW5NQVggSUwgc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uCiAqICBuUG9ydEluZGV4ICAgICAgICAgOiBJbmRleCBvZiB0aGUgcG9ydCB0byB3aGljaCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzCiAqICBuSUQgICAgICAgICAgICAgICAgOiBTcGVjaWZpZXMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIExUUiBmcmFtZSB0byBiZSBtYXJrZWQKICogICAgICAgICAgICAgICAgICAgICAgIGFzIHJlZmVyZW5jZSBmcmFtZSBmb3IgZW5jb2Rpbmcgc3Vic2VxdWVudCBmcmFtZXMuCiAqLwp0eXBlZGVmIHN0cnVjdCBRT01YX1ZJREVPX0NPTkZJR19MVFJNQVJLX1RZUEUgewogICAgT01YX1UzMiBuU2l6ZTsKICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKICAgIE9NWF9VMzIgblBvcnRJbmRleDsKICAgIE9NWF9VMzIgbklEOwp9IFFPTVhfVklERU9fQ09ORklHX0xUUk1BUktfVFlQRTsKCi8qKgogKiBUaGlzIHNob3VsZCBiZSB1c2VkIHdpdGggT01YX1Fjb21JbmRleENvbmZpZ1ZpZGVvTFRSTWFyayBleHRlbnNpb24uCiAqLwp0eXBlZGVmIFFPTVhfVklERU9fQ09ORklHX0xUUk1BUktfVFlQRSBPTVhfUUNPTV9WSURFT19DT05GSUdfTFRSTUFSS19UWVBFOwoKLyoqCiAqIFNwZWNpZmllcyBhbiBMVFIgZnJhbWUgdG8gZW5jb2RlIHN1YnNlcXVlbnQgZnJhbWVzLgogKiBTVFJVQ1QgTUVNQkVSUzoKICogIG5TaXplICAgICAgICAgICAgICA6IFNpemUgb2YgU3RydWN0dXJlIGluIGJ5dGVzCiAqICBuVmVyc2lvbiAgICAgICAgICAgOiBPcGVuTUFYIElMIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgogKiAgblBvcnRJbmRleCAgICAgICAgIDogSW5kZXggb2YgdGhlIHBvcnQgdG8gd2hpY2ggdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcwogKiAgbklEICAgICAgICAgICAgICAgIDogU3BlY2lmaWVzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBMVFIgZnJhbWUgdG8gYmUgdXNlZAogICAgICAgICAgICAgICAgICAgICAgICAgYXMgcmVmZXJlbmNlIGZyYW1lIGZvciBlbmNvZGluZyBzdWJzZXF1ZW50IGZyYW1lcy4KICogIG5GcmFtZXMgICAgICAgICAgICA6IFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHN1YnNlcXVlbnQgZnJhbWVzIHRvIGJlCiAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVkIHVzaW5nIHRoZSBMVFIgZnJhbWUgd2l0aCBpdHMgaWRlbnRpZmllcgogICAgICAgICAgICAgICAgICAgICAgICAgbklEIGFzIHJlZmVyZW5jZSBmcmFtZS4gU2hvcnQtdGVybSByZWZlcmVuY2UgZnJhbWVzCiAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHVzZWQgdGhlcmVhZnRlci4gVGhlIHZhbHVlIG9mIDB4RkZGRkZGRkYKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljYXRlcyB0aGF0IGFsbCBzdWJzZXF1ZW50IGZyYW1lcyB3aWxsIGJlCiAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVkdXNpbmcgdGhpcyBMVFIgZnJhbWUgYXMgcmVmZXJlbmNlIGZyYW1lLgogKi8KdHlwZWRlZiBzdHJ1Y3QgUU9NWF9WSURFT19DT05GSUdfTFRSVVNFX1RZUEUgewogICAgT01YX1UzMiBuU2l6ZTsKICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKICAgIE9NWF9VMzIgblBvcnRJbmRleDsKICAgIE9NWF9VMzIgbklEOwogICAgT01YX1UzMiBuRnJhbWVzOwp9IFFPTVhfVklERU9fQ09ORklHX0xUUlVTRV9UWVBFOwoKLyoqCiAqIFRoaXMgc2hvdWxkIGJlIHVzZWQgd2l0aCBPTVhfUWNvbUluZGV4Q29uZmlnVmlkZW9MVFJVc2UgZXh0ZW5zaW9uLgogKi8KdHlwZWRlZiBRT01YX1ZJREVPX0NPTkZJR19MVFJVU0VfVFlQRSBPTVhfUUNPTV9WSURFT19DT05GSUdfTFRSVVNFX1RZUEU7CgovKioKICogRW51bWVyYXRpb24gdXNlZCB0byBkZWZpbmUgdGhlIHZpZGVvIGVuY29kZXIgbW9kZXMKICoKICogRU5VTVM6CiAqICBFbmNvZGVyTW9kZURlZmF1bHQgOiBEZWZhdWx0IHZpZGVvIHJlY29yZGluZyBtb2RlLgogKiAgICAgICAgICAgICAgICAgICAgICAgQWxsIGVuY29kZXIgc2V0dGluZ3MgbWFkZSB0aHJvdWdoCiAqICAgICAgICAgICAgICAgICAgICAgICBPTVhfU2V0UGFyYW1ldGVyL09NWF9TZXRDb25maWcgYXJlIGFwcGxpZWQuIE5vCiAqICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgaXMgb3ZlcnJpZGRlbi4KICogIEVuY29kZXJNb2RlTU1TIDogVmlkZW8gcmVjb3JkaW5nIG1vZGUgZm9yIE1NUyAoTXVsdGltZWRpYSBNZXNzYWdpbmcKICogICAgICAgICAgICAgICAgICAgU2VydmljZSkuIFRoaXMgbW9kZSBpcyBzaW1pbGFyIHRvIEVuY29kZXJNb2RlRGVmYXVsdAogKiAgICAgICAgICAgICAgICAgICBleGNlcHQgdGhhdCBoZXJlIHRoZSBSYXRlIGNvbnRyb2wgbW9kZSBpcyBvdmVycmlkZGVuCiAqICAgICAgICAgICAgICAgICAgIGludGVybmFsbHkgYW5kIHNldCBhcyBhIHZhcmlhbnQgb2YgdmFyaWFibGUgYml0cmF0ZSB3aXRoCiAqICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZyYW1lIHJhdGUuIEFmdGVyIHRoaXMgbW9kZSBpcyBzZXQgaWYgdGhlIElMCiAqICAgICAgICAgICAgICAgICAgIGNsaWVudCB0cmllcyB0byBzZXQgT01YX1ZJREVPX0NPTlRST0xSQVRFVFlQRSB2aWEKICogICAgICAgICAgICAgICAgICAgT01YX0luZGV4UGFyYW1WaWRlb0JpdHJhdGUgdGhhdCB3b3VsZCBiZSByZWplY3RlZC4gRm9yCiAqICAgICAgICAgICAgICAgICAgIHRoaXMsIGNsaWVudCBzaG91bGQgc2V0IG1vZGUgYmFjayB0byBFbmNvZGVyTW9kZURlZmF1bHQKICogICAgICAgICAgICAgICAgICAgZmlyc3QgYW5kIHRoZW4gY2hhbmdlIE9NWF9WSURFT19DT05UUk9MUkFURVRZUEUuCiAqLwp0eXBlZGVmIGVudW0gUU9NWF9WSURFT19FTkNPREVSTU9ERVRZUEUKewogICAgUU9NWF9WSURFT19FbmNvZGVyTW9kZURlZmF1bHQgICAgICAgID0gMHgwMCwKICAgIFFPTVhfVklERU9fRW5jb2Rlck1vZGVNTVMgICAgICAgICAgICA9IDB4MDEsCiAgICBRT01YX1ZJREVPX0VuY29kZXJNb2RlTWF4ICAgICAgICAgICAgPSAweDdGRkZGRkZGCn0gUU9NWF9WSURFT19FTkNPREVSTU9ERVRZUEU7CgovKioKICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBzZXQgdGhlIHZpZGVvIGVuY29kZXIgbW9kZS4KICoKICogU1RSVUNUIE1FTUJFUlM6CiAqICBuU2l6ZSAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCiAqICBuVmVyc2lvbiAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvCiAqICBuUG9ydEluZGV4IDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8KICogIG5Nb2RlIDogZGVmaW5lcyB0aGUgdmlkZW8gZW5jb2RlciBtb2RlCiAqLwp0eXBlZGVmIHN0cnVjdCBRT01YX1ZJREVPX1BBUkFNX0VOQ09ERVJNT0RFVFlQRSB7CiAgICBPTVhfVTMyIG5TaXplOwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogICAgT01YX1UzMiBuUG9ydEluZGV4OwogICAgUU9NWF9WSURFT19FTkNPREVSTU9ERVRZUEUgbk1vZGU7Cn0gUU9NWF9WSURFT19QQVJBTV9FTkNPREVSTU9ERVRZUEU7CgovKioKICogVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBwYXJhbWV0ZXJzIGNvcnJlc3BvbmRpbmcgdG8gdGhlCiAqIFFPTVhfVklERU9fU1lOVEFYSERSVFlQRSBleHRlbnNpb24uIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBxdWVyaWVkCiAqIGR1cmluZyB0aGUgbG9hZGVkIHN0YXRlLgogKi8KCnR5cGVkZWYgc3RydWN0IFFPTVhfVklERU9fU1lOVEFYSERSVFlQRQp7CiAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAvKiogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsvKiogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgLyoqIFBvcnRpbmRleCB3aGljaCBpcyBleHRlbmRlZCBieSB0aGlzIHN0cnVjdHVyZSAqLwogICBPTVhfVTMyIG5CeXRlczsgICAgCSAgICAvKiogVGhlIG51bWJlciBvZiBieXRlcyBmaWxsZWQgaW4gdG8gdGhlIGJ1ZmZlciAqLwogICBPTVhfVTggZGF0YVsxXTsgICAgICAgICAgLyoqIEJ1ZmZlciB0byBzdG9yZSB0aGUgaGVhZGVyIGluZm9ybWF0aW9uICovCn0gUU9NWF9WSURFT19TWU5UQVhIRFJUWVBFOwoKLyoqCiAqIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyB0aGUgcGFyYW1ldGVycyBjb3JyZXNwb25kaW5nIHRvIHRoZQogKiBRT01YX1ZJREVPX1RFTVBPUkFMU1BBVElBTFRZUEUgZXh0ZW5zaW9uLiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgc2V0CiAqIGR5bmFtaWNhbGx5IGR1cmluZyBhbnkgc3RhdGUgZXhjZXB0IHRoZSBzdGF0ZSBpbnZhbGlkLiAgVGhpcyBpcyBwcmltYXJpbHkKICogdXNlZCBmb3Igc2V0dGluZyBNYXhRUCBmcm9tIHRoZSBhcHBsaWNhdGlvbi4gIFRoaXMgaXMgc2V0IG9uIHRoZSBvdXQgcG9ydC4KICovCgp0eXBlZGVmIHN0cnVjdCBRT01YX1ZJREVPX1RFTVBPUkFMU1BBVElBTFRZUEUKewogICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgLyoqIFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLwogICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247LyoqIE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgIC8qKiBQb3J0aW5kZXggd2hpY2ggaXMgZXh0ZW5kZWQgYnkgdGhpcyBzdHJ1Y3R1cmUgKi8KICAgT01YX1UzMiBuVFNGYWN0b3I7ICAgICAgIC8qKiBUZW1vcmFsIHNwYXRpYWwgdHJhZGVvZmYgZmFjdG9yIHZhbHVlIGluIDAtMTAwICovCn0gUU9NWF9WSURFT19URU1QT1JBTFNQQVRJQUxUWVBFOwoKLyoqCiAqIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyB0aGUgcGFyYW1ldGVycyBjb3JyZXNwb25kaW5nIHRvIHRoZQogKiBPTVhfUUNPTV9WSURFT19DT05GSUdfSU5UUkFQRVJJT0RUWVBFIGV4dGVuc2lvbi4gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHNldAogKiBkeW5hbWljYWxseSBkdXJpbmcgYW55IHN0YXRlIGV4Y2VwdCB0aGUgc3RhdGUgaW52YWxpZC4gIFRoaXMgaXMgc2V0IG9uIHRoZSBvdXQgcG9ydC4KICovCgp0eXBlZGVmIHN0cnVjdCBRT01YX1ZJREVPX0lOVFJBUEVSSU9EVFlQRQp7CiAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAvKiogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsvKiogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgLyoqIFBvcnRpbmRleCB3aGljaCBpcyBleHRlbmRlZCBieSB0aGlzIHN0cnVjdHVyZSAqLwogICBPTVhfVTMyIG5JRFJQZXJpb2Q7ICAgICAgLyoqIFRoaXMgc3BlY2lmaWVzIGNvZGluZyBhIGZyYW1lIGFzIElEUiBhZnRlciBldmVyeSBuUEZyYW1lcwoJCQkgICAgICAgIG9mIGludHJhIGZyYW1lcy4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgc2V0IHRvIDAsIG9ubHkgdGhlCgkJCQlmaXJzdCBmcmFtZSBvZiB0aGUgZW5jb2RlIHNlc3Npb24gaXMgYW4gSURSIGZyYW1lLiBUaGlzCgkJCQlmaWVsZCBpcyBpZ25vcmVkIGZvciBub24tQVZDIGNvZGVjcyBhbmQgaXMgdXNlZCBvbmx5IGZvcgoJCQkJY29kZWNzIHRoYXQgc3VwcG9ydCBJRFIgUGVyaW9kICovCiAgIE9NWF9VMzIgblBGcmFtZXM7ICAgICAgICAgLyoqIFRoZSBudW1iZXIgb2YgIlAiIGZyYW1lcyBiZXR3ZWVuIHR3byAiSSIgZnJhbWVzICovCiAgIE9NWF9VMzIgbkJGcmFtZXM7ICAgICAgICAgLyoqIFRoZSBudW1iZXIgb2YgIkIiIGZyYW1lcyBiZXR3ZWVuIHR3byAiSSIgZnJhbWVzICovCn0gUU9NWF9WSURFT19JTlRSQVBFUklPRFRZUEU7CgovKioKICogVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBwYXJhbWV0ZXJzIGNvcnJlc3BvbmRpbmcgdG8gdGhlCiAqIE9NWF9RQ09NX1ZJREVPX0NPTkZJR19VTEJVRkZFUk9DQ1VQQU5DWVRZUEUgZXh0ZW5zaW9uLiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgc2V0CiAqIGR5bmFtaWNhbGx5IGR1cmluZyBhbnkgc3RhdGUgZXhjZXB0IHRoZSBzdGF0ZSBpbnZhbGlkLiBUaGlzIGlzIHVzZWQgZm9yIHRoZSBidWZmZXIgbmVnb3RpYXRpb24KICogd2l0aCBvdGhlciBjbGllbnRzLiAgVGhpcyBpcyBzZXQgb24gdGhlIG91dCBwb3J0LgogKi8KdHlwZWRlZiBzdHJ1Y3QgT01YX1FDT01fVklERU9fQ09ORklHX1VMQlVGRkVST0NDVVBBTkNZVFlQRQp7CiAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgLyoqIFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLwogICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247IC8qKiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCiAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgLyoqIFBvcnRpbmRleCB3aGljaCBpcyBleHRlbmRlZCBieSB0aGlzIHN0cnVjdHVyZSAqLwogICBPTVhfVTMyIG5CdWZmZXJPY2N1cGFuY3k7IC8qKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHNldCBmb3IgdGhlIGJ1ZmZlciBvY2N1cGFuY3kgKi8KfSBPTVhfUUNPTV9WSURFT19DT05GSUdfVUxCVUZGRVJPQ0NVUEFOQ1lUWVBFOwoKLyoqCiAqIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyB0aGUgcGFyYW1ldGVycyBjb3JyZXNwb25kaW5nIHRvIHRoZQogKiBPTVhfUUNPTV9WSURFT19DT05GSUdfUkFORE9NSU5UUkFSRUZSRVNIVFlQRSBleHRlbnNpb24uIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBzZXQKICogZHluYW1pY2FsbHkgZHVyaW5nIGFueSBzdGF0ZSBleGNlcHQgdGhlIHN0YXRlIGludmFsaWQuIFRoaXMgaXMgcHJpbWFyaWx5IHVzZWQgZm9yIHRoZSBkeW5hbWljL3JhbmRvbQogKiBpbnRyYXJlZnJlc2guICBUaGlzIGlzIHNldCBvbiB0aGUgb3V0IHBvcnQuCiAqLwp0eXBlZGVmIHN0cnVjdCBPTVhfUUNPTV9WSURFT19DT05GSUdfUkFORE9NSU5UUkFSRUZSRVNIVFlQRQp7CiAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAvKiogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsvKiogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgLyoqIFBvcnRpbmRleCB3aGljaCBpcyBleHRlbmRlZCBieSB0aGlzIHN0cnVjdHVyZSAqLwogICBPTVhfVTMyIG5SaXJNQnM7ICAgICAgICAgLyoqIFRoZSBudW1iZXIgb2YgTUJzIHRvIGJlIHNldCBmb3IgaW50cmFyZWZyZXNoICovCn0gT01YX1FDT01fVklERU9fQ09ORklHX1JBTkRPTUlOVFJBUkVGUkVTSFRZUEU7CgoKLyoqCiAqIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyB0aGUgcGFyYW1ldGVycyBjb3JyZXNwb25kaW5nIHRvIHRoZQogKiBPTVhfUUNPTV9WSURFT19DT05GSUdfUVBSQU5HRSBleHRlbnNpb24uIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBzZXQKICogZHluYW1pY2FsbHkgZHVyaW5nIGFueSBzdGF0ZSBleGNlcHQgdGhlIHN0YXRlIGludmFsaWQuIFRoaXMgaXMgcHJpbWFyaWx5CiAqIHVzZWQgZm9yIHRoZSBtaW4vbWF4IFFQIHRvIGJlIHNldCBmcm9tIHRoZSBhcHBsaWNhdGlvbi4gIFRoaXMKICogaXMgc2V0IG9uIHRoZSBvdXQgcG9ydC4KICovCnR5cGVkZWYgc3RydWN0IE9NWF9RQ09NX1ZJREVPX0NPTkZJR19RUFJBTkdFCnsKICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgIC8qKiBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOy8qKiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCiAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAvKiogUG9ydGluZGV4IHdoaWNoIGlzIGV4dGVuZGVkIGJ5IHRoaXMgc3RydWN0dXJlICovCiAgIE9NWF9VMzIgbk1pblFQOyAgICAgICAgICAvKiogVGhlIG51bWJlciBmb3IgbWluaW11bSBxdWFudGl6YXRpb24gcGFyYW1ldGVyICovCiAgIE9NWF9VMzIgbk1heFFQOyAgICAgICAgICAvKiogVGhlIG51bWJlciBmb3IgbWF4aW11bSBxdWFudGl6YXRpb24gcGFyYW1ldGVyICovCn0gT01YX1FDT01fVklERU9fQ09ORklHX1FQUkFOR0U7CgovKioKICogVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUKICogT01YX1Fjb21JbmRleFBhcmFtSDI2NEFVRGVsaW1pdGVyIGV4dGVuc2lvbi4gIEl0IGVuYWJsZXMvZGlzYWJsZXMKICogdGhlIEFVIGRlbGltaXRlcnMgaW4gdGhlIEgyNjQgc3RyZWFtLCB3aGljaCBpcyB1c2VkIGJ5IFdGRC4KICovCnR5cGVkZWYgc3RydWN0IE9NWF9RQ09NX1ZJREVPX0NPTkZJR19IMjY0X0FVRAp7CiAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAvKiogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsvKiogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogICBPTVhfQk9PTCBiRW5hYmxlOyAgICAgICAgLyoqIEVuYWJsZS9kaXNhYmxlIHRoZSBzZXR0aW5nICovCn0gT01YX1FDT01fVklERU9fQ09ORklHX0gyNjRfQVVEOwoKdHlwZWRlZiBlbnVtIFFPTVhfVklERU9fUEVSRl9MRVZFTAp7CiAgICBPTVhfUUNPTV9QZXJmTGV2ZWxOb21pbmFsLAogICAgT01YX1FDT01fUGVyZkxldmVsVHVyYm8KfSBRT01YX1ZJREVPX1BFUkZfTEVWRUw7CgovKioKICogVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBwYXJhbWV0ZXJzIGNvcnJlc3BvbmRpbmcKICogdG8gT01YX1Fjb21JbmRleFBhcmFtUGVyZkxldmVsIGV4dGVuc2lvbi4gSXQgd2lsbCBzZXQKICogdGhlIHBlcmZvcm1hbmNlIG1vZGUgc3BlY2lmaWVkIGFzIFFPTVhfVklERU9fUEVSRl9MRVZFTC4KICovCnR5cGVkZWYgc3RydWN0IE9NWF9RQ09NX1ZJREVPX1BBUkFNX1BFUkZfTEVWRUwgewogICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAgICAgICAgLyoqIFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgICAgICAgLyoqIE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KICAgIFFPTVhfVklERU9fUEVSRl9MRVZFTCBlUGVyZkxldmVsOyAgIC8qKiBQZXJmb3JtYW5jZSBsZXZlbCAqLwp9IE9NWF9RQ09NX1ZJREVPX1BBUkFNX1BFUkZfTEVWRUw7CgovKioKICogVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBwYXJhbWV0ZXJzIGNvcnJlc3BvbmRpbmcKICogdG8gT01YX1Fjb21JbmRleENvbmZpZ1BlcmZMZXZlbCBleHRlbnNpb24uIEl0IHdpbGwgc2V0CiAqIHRoZSBwZXJmb3JtYW5jZSBtb2RlIHNwZWNpZmllZCBhcyBRT01YX1ZJREVPX1BFUkZfTEVWRUwuCiAqLwp0eXBlZGVmIHN0cnVjdCBPTVhfUUNPTV9WSURFT19DT05GSUdfUEVSRl9MRVZFTCB7CiAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgICAgICAvKiogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAgICAgICAvKiogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogICAgUU9NWF9WSURFT19QRVJGX0xFVkVMIGVQZXJmTGV2ZWw7ICAgLyoqIFBlcmZvcm1hbmNlIGxldmVsICovCn0gT01YX1FDT01fVklERU9fQ09ORklHX1BFUkZfTEVWRUw7CgovKioKICogVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBwYXJhbWV0ZXJzIGNvcnJlc3BvbmRpbmcKICogdG8gT01YX1Fjb21JbmRleFBhcmFtSDI2NFZVSVRpbWluZ0luZm8gZXh0ZW5zaW9uLiBJdAogKiB3aWxsIGVuYWJsZS9kaXNhYmxlIHRoZSBWVUkgdGltaW5nIGluZm8uCiAqLwp0eXBlZGVmIHN0cnVjdCBPTVhfUUNPTV9WSURFT19QQVJBTV9WVUlfVElNSU5HX0lORk8gewogICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgIC8qKiBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAvKiogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogICAgT01YX0JPT0wgYkVuYWJsZTsgICAgICAgICAgIC8qKiBFbmFibGUvZGlzYWJsZSB0aGUgc2V0dGluZyAqLwp9IE9NWF9RQ09NX1ZJREVPX1BBUkFNX1ZVSV9USU1JTkdfSU5GTzsKCi8qKgogKiBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgdGhlIHBhcmFtZXRlcnMgY29ycmVzcG9uZGluZwogKiB0byBPTVhfUWNvbUluZGV4UGFyYW1QZWFrQml0cmF0ZSBleHRlbnNpb24uIEl0IHdpbGwKICogc2V0IHRoZSBwZWFrIGJpdHJhdGUgc3BlY2lmaWVkIGJ5IG5QZWFrQml0cmF0ZS4KICovCnR5cGVkZWYgc3RydWN0IE9NWF9RQ09NX1ZJREVPX1BBUkFNX1BFQUtfQklUUkFURSB7CiAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgLyoqIFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgIC8qKiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCiAgICBPTVhfVTMyIG5QZWFrQml0cmF0ZTsgICAgICAgLyoqIFBlYWsgYml0cmF0ZSB2YWx1ZSAqLwp9IE9NWF9RQ09NX1ZJREVPX1BBUkFNX1BFQUtfQklUUkFURTsKCnR5cGVkZWYgc3RydWN0IE9NWF9WRU5ET1JfRVhUUkFEQVRBVFlQRSAgewogICAgT01YX1UzMiBuUG9ydEluZGV4OwogICAgT01YX1UzMiBuRGF0YVNpemU7CiAgICBPTVhfVTggICpwRGF0YTsgICAgIC8vIGNkYXRhIChjb2RlY19kYXRhL2V4dHJhZGF0YSkKfSBPTVhfVkVORE9SX0VYVFJBREFUQVRZUEU7CgovKioKICogVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBwYXJhbWV0ZXJzIGNvcnJlc3BvbmRpbmcgdG8gdGhlCiAqIE9NWF9WRU5ET1JfVklERU9GUkFNRVJBVEUgZXh0ZW5zaW9uLiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgc2V0CiAqIGR5bmFtaWNhbGx5IGR1cmluZyBhbnkgc3RhdGUgZXhjZXB0IHRoZSBzdGF0ZSBpbnZhbGlkLiBUaGlzIGlzCiAqIHVzZWQgZm9yIGZyYW1lIHJhdGUgdG8gYmUgc2V0IGZyb20gdGhlIGFwcGxpY2F0aW9uLiBUaGlzCiAqIGlzIHNldCBvbiB0aGUgaW4gcG9ydC4KICovCnR5cGVkZWYgc3RydWN0IE9NWF9WRU5ET1JfVklERU9GUkFNRVJBVEUgIHsKICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgIC8qKiBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOy8qKiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCiAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAvKiogUG9ydGluZGV4IHdoaWNoIGlzIGV4dGVuZGVkIGJ5IHRoaXMgc3RydWN0dXJlICovCiAgIE9NWF9VMzIgbkZwczsgICAgICAgICAgICAvKiogRnJhbWUgcmF0ZSB2YWx1ZSAqLwogICBPTVhfQk9PTCBiRW5hYmxlZDsgICAgICAgLyoqIEZsYWcgdG8gZW5hYmxlIG9yIGRpc2FibGUgY2xpZW50J3MgZnJhbWUgcmF0ZSB2YWx1ZSAqLwp9IE9NWF9WRU5ET1JfVklERU9GUkFNRVJBVEU7Cgp0eXBlZGVmIGVudW0gT01YX0lOREVYVkVORE9SVFlQRSB7CiAgICBPTVhfSW5kZXhWZW5kb3JGaWxlUmVhZElucHV0RmlsZW5hbWUgPSAweEZGMDAwMDAxLAogICAgT01YX0luZGV4VmVuZG9yUGFyc2VyM2dwSW5wdXRGaWxlbmFtZSA9IDB4RkYwMDAwMDIsCiAgICBPTVhfSW5kZXhWZW5kb3JWaWRlb0V4dHJhRGF0YSA9IDB4RkYwMDAwMDMsCiAgICBPTVhfSW5kZXhWZW5kb3JBdWRpb0V4dHJhRGF0YSA9IDB4RkYwMDAwMDQsCiAgICBPTVhfSW5kZXhWZW5kb3JWaWRlb0ZyYW1lUmF0ZSA9IDB4RkYwMDAwMDUsCn0gT01YX0lOREVYVkVORE9SVFlQRTsKCnR5cGVkZWYgZW51bSBPTVhfUUNPTV9WQzFSRVNPTFVUSU9OVFlQRQp7CiAgIE9NWF9RQ09NX1ZDMV9QSUNUVVJFX1JFU18xeDEsCiAgIE9NWF9RQ09NX1ZDMV9QSUNUVVJFX1JFU18yeDEsCiAgIE9NWF9RQ09NX1ZDMV9QSUNUVVJFX1JFU18xeDIsCiAgIE9NWF9RQ09NX1ZDMV9QSUNUVVJFX1JFU18yeDIKfSBPTVhfUUNPTV9WQzFSRVNPTFVUSU9OVFlQRTsKCnR5cGVkZWYgZW51bSBPTVhfUUNPTV9JTlRFUkxBQ0VUWVBFCnsKICAgIE9NWF9RQ09NX0ludGVybGFjZUZyYW1lUHJvZ3Jlc3NpdmUsCiAgICBPTVhfUUNPTV9JbnRlcmxhY2VJbnRlcmxlYXZlRnJhbWVUb3BGaWVsZEZpcnN0LAogICAgT01YX1FDT01fSW50ZXJsYWNlSW50ZXJsZWF2ZUZyYW1lQm90dG9tRmllbGRGaXJzdCwKICAgIE9NWF9RQ09NX0ludGVybGFjZUZyYW1lVG9wRmllbGRGaXJzdCwKICAgIE9NWF9RQ09NX0ludGVybGFjZUZyYW1lQm90dG9tRmllbGRGaXJzdCwKICAgIE9NWF9RQ09NX0ludGVybGFjZUZpZWxkVG9wLAogICAgT01YX1FDT01fSW50ZXJsYWNlRmllbGRCb3R0b20KfU9NWF9RQ09NX0lOVEVSTEFDRVRZUEU7Cgp0eXBlZGVmIHN0cnVjdCBPTVhfUUNPTV9QQVJBTV9WSURFT19JTlRFUkxBQ0VUWVBFCnsKICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAvKiogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247LyoqIE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgLyoqIFBvcnRpbmRleCB3aGljaCBpcyBleHRlbmRlZCBieSB0aGlzIHN0cnVjdHVyZSAqLwogICAgT01YX0JPT0wgYkludGVybGFjZTsgIC8qKiBJbnRlcmxhY2UgY29udGVudCAqKi8KfU9NWF9RQ09NX1BBUkFNX1ZJREVPX0lOVEVSTEFDRVRZUEU7Cgp0eXBlZGVmIHN0cnVjdCBPTVhfUUNPTV9DT05GSUdfSU5URVJMQUNFVFlQRQp7CiAgICBPTVhfVTMyIG5TaXplOwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogICAgT01YX1UzMiBuUG9ydEluZGV4OwogICAgT01YX1UzMiBuSW5kZXg7CiAgICBPTVhfUUNPTV9JTlRFUkxBQ0VUWVBFIGVJbnRlcmxhY2VUeXBlOwp9T01YX1FDT01fQ09ORklHX0lOVEVSTEFDRVRZUEU7CgojZGVmaW5lIE1BWF9QQU5fU0NBTl9XSU5ET1dTIDQKCnR5cGVkZWYgc3RydWN0IE9NWF9RQ09NX1BBTlNDQU4KewogICBPTVhfVTMyIG51bVdpbmRvd3M7CiAgIE9NWF9RQ09NUmVjdGFuZ2xlIHdpbmRvd1tNQVhfUEFOX1NDQU5fV0lORE9XU107Cn0gT01YX1FDT01fUEFOU0NBTjsKCnR5cGVkZWYgc3RydWN0IE9NWF9RQ09NX0FTUEVDVF9SQVRJTwp7CiAgIE9NWF9VMzIgYXNwZWN0UmF0aW9YOwogICBPTVhfVTMyIGFzcGVjdFJhdGlvWTsKfSBPTVhfUUNPTV9BU1BFQ1RfUkFUSU87Cgp0eXBlZGVmIHN0cnVjdCBPTVhfUUNPTV9ESVNQTEFZX0FTUEVDVF9SQVRJTwp7CiAgIE9NWF9VMzIgZGlzcGxheVZlcnRpY2FsU2l6ZTsKICAgT01YX1UzMiBkaXNwbGF5SG9yaXpvbnRhbFNpemU7Cn0gT01YX1FDT01fRElTUExBWV9BU1BFQ1RfUkFUSU87Cgp0eXBlZGVmIHN0cnVjdCBPTVhfUUNPTV9GUkFNRV9QQUNLX0FSUkFOR0VNRU5UCnsKICBPTVhfVTMyIG5TaXplOwogIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKICBPTVhfVTMyIG5Qb3J0SW5kZXg7CiAgT01YX1UzMiBpZDsKICBPTVhfVTMyIGNhbmNlbF9mbGFnOwogIE9NWF9VMzIgdHlwZTsKICBPTVhfVTMyIHF1aW5jdW54X3NhbXBsaW5nX2ZsYWc7CiAgT01YX1UzMiBjb250ZW50X2ludGVycHJldGF0aW9uX3R5cGU7CiAgT01YX1UzMiBzcGF0aWFsX2ZsaXBwaW5nX2ZsYWc7CiAgT01YX1UzMiBmcmFtZTBfZmxpcHBlZF9mbGFnOwogIE9NWF9VMzIgZmllbGRfdmlld3NfZmxhZzsKICBPTVhfVTMyIGN1cnJlbnRfZnJhbWVfaXNfZnJhbWUwX2ZsYWc7CiAgT01YX1UzMiBmcmFtZTBfc2VsZl9jb250YWluZWRfZmxhZzsKICBPTVhfVTMyIGZyYW1lMV9zZWxmX2NvbnRhaW5lZF9mbGFnOwogIE9NWF9VMzIgZnJhbWUwX2dyaWRfcG9zaXRpb25feDsKICBPTVhfVTMyIGZyYW1lMF9ncmlkX3Bvc2l0aW9uX3k7CiAgT01YX1UzMiBmcmFtZTFfZ3JpZF9wb3NpdGlvbl94OwogIE9NWF9VMzIgZnJhbWUxX2dyaWRfcG9zaXRpb25feTsKICBPTVhfVTMyIHJlc2VydmVkX2J5dGU7CiAgT01YX1UzMiByZXBldGl0aW9uX3BlcmlvZDsKICBPTVhfVTMyIGV4dGVuc2lvbl9mbGFnOwp9IE9NWF9RQ09NX0ZSQU1FX1BBQ0tfQVJSQU5HRU1FTlQ7Cgp0eXBlZGVmIHN0cnVjdCBPTVhfUUNPTV9FWFRSQURBVEFfUVAKewogICBPTVhfVTMyICAgICAgICBuUVA7Cn0gT01YX1FDT01fRVhUUkFEQVRBX1FQOwoKdHlwZWRlZiBzdHJ1Y3QgT01YX1FDT01fRVhUUkFEQVRBX0JJVFNfSU5GTwp7CiAgIE9NWF9VMzIgaGVhZGVyX2JpdHM7CiAgIE9NWF9VMzIgZnJhbWVfYml0czsKfSBPTVhfUUNPTV9FWFRSQURBVEFfQklUU19JTkZPOwoKdHlwZWRlZiBzdHJ1Y3QgT01YX1FDT01fRVhUUkFEQVRBX1VTRVJEQVRBIHsKICAgT01YX1UzMiB0eXBlOwogICBPTVhfVTMyIGRhdGFbMV07Cn0gT01YX1FDT01fRVhUUkFEQVRBX1VTRVJEQVRBOwoKdHlwZWRlZiBzdHJ1Y3QgT01YX1FDT01fRVhUUkFEQVRBX0ZSQU1FSU5GTwp7CiAgIC8vIGNvbW1vbiBmcmFtZSBtZXRhIGRhdGEuIGludGVybGFjZSByZWxhdGVkIGluZm8gcmVtb3ZlZAogICBPTVhfVklERU9fUElDVFVSRVRZUEUgIGVQaWNUeXBlOwogICBPTVhfUUNPTV9JTlRFUkxBQ0VUWVBFIGludGVybGFjZVR5cGU7CiAgIE9NWF9RQ09NX1BBTlNDQU4gICAgICAgcGFuU2NhbjsKICAgT01YX1FDT01fQVNQRUNUX1JBVElPICBhc3BlY3RSYXRpbzsKICAgT01YX1FDT01fRElTUExBWV9BU1BFQ1RfUkFUSU8gZGlzcGxheUFzcGVjdFJhdGlvOwogICBPTVhfVTMyICAgICAgICAgICAgICAgIG5Db25jZWFsZWRNYWNyb2Jsb2NrczsKICAgT01YX1UzMiAgICAgICAgICAgICAgICBuRnJhbWVSYXRlOwogICBPTVhfVElDS1MgICAgICAgICAgICAgIG5UaW1lU3RhbXA7Cn0gT01YX1FDT01fRVhUUkFEQVRBX0ZSQU1FSU5GTzsKCnR5cGVkZWYgc3RydWN0IE9NWF9RQ09NX0VYVFJBREFUQV9GUkFNRURJTUVOU0lPTgp7CiAgIC8qKiBGcmFtZSBEaW1lbnNpb25zIGFkZGVkIHRvIGVhY2ggWVVWIGJ1ZmZlciAqLwogICBPTVhfVTMyICAgbkRlY1dpZHRoOyAgLyoqIFdpZHRoICByb3VuZGVkIHRvIG11bHRpcGxlIG9mIDE2ICovCiAgIE9NWF9VMzIgICBuRGVjSGVpZ2h0OyAvKiogSGVpZ2h0IHJvdW5kZWQgdG8gbXVsdGlwbGUgb2YgMTYgKi8KICAgT01YX1UzMiAgIG5BY3R1YWxXaWR0aDsgLyoqIEFjdHVhbCBGcmFtZSBXaWR0aCAqLwogICBPTVhfVTMyICAgbkFjdHVhbEhlaWdodDsgLyoqIEFjdHVhbCBGcmFtZSBIZWlnaHQgKi8KCn1PTVhfUUNPTV9FWFRSQURBVEFfRlJBTUVESU1FTlNJT047Cgp0eXBlZGVmIHN0cnVjdCBPTVhfUUNPTV9IMjY0RVhUUkFEQVRBCnsKICAgT01YX1U2NCBzZWlUaW1lU3RhbXA7Cn0gT01YX1FDT01fSDI2NEVYVFJBREFUQTsKCnR5cGVkZWYgc3RydWN0IE9NWF9RQ09NX1ZDMUVYVFJBREFUQQp7CiAgIE9NWF9VMzIgICAgICAgICAgICAgICAgICAgICBuVkMxUmFuZ2VZOwogICBPTVhfVTMyICAgICAgICAgICAgICAgICAgICAgblZDMVJhbmdlVVY7CiAgIE9NWF9RQ09NX1ZDMVJFU09MVVRJT05UWVBFIGVWQzFQaWNSZXNvbHV0aW9uOwp9IE9NWF9RQ09NX1ZDMUVYVFJBREFUQTsKCnR5cGVkZWYgdW5pb24gT01YX1FDT01fRVhUUkFEQVRBX0NPREVDX0RBVEEKewogICBPTVhfUUNPTV9IMjY0RVhUUkFEQVRBIGgyNjRFeHRyYURhdGE7CiAgIE9NWF9RQ09NX1ZDMUVYVFJBREFUQSB2YzFFeHRyYURhdGE7Cn0gT01YX1FDT01fRVhUUkFEQVRBX0NPREVDX0RBVEE7Cgp0eXBlZGVmIHN0cnVjdCBPTVhfUUNPTV9FWFRSQURBVEFfTUJJTkZPCnsKICAgT01YX1UzMiBuRm9ybWF0OwogICBPTVhfVTMyIG5EYXRhU2l6ZTsKICAgT01YX1U4ICBkYXRhWzBdOwp9IE9NWF9RQ09NX0VYVFJBREFUQV9NQklORk87Cgp0eXBlZGVmIHN0cnVjdCBPTVhfUUNPTV9FWFRSQURBVEFfTVBFRzJTRVFESVNQTEFZIHsKICAgIE9NWF9VMzIgZGlzcF93aWR0aDsKICAgIE9NWF9VMzIgZGlzcF9oZWlnaHQ7Cn0gT01YX1FDT01fRVhUUkFEQVRBX01QRUcyU0VRRElTUExBWTsKCnR5cGVkZWYgZW51bSBPTVhfUUNPTV9FWFRSQURBVEFUWVBFCnsKICAgT01YX0V4dHJhRGF0YUZyYW1lSW5mbyA9IDB4N0YwMDAwMDEsCiAgIE9NWF9FeHRyYURhdGFIMjY0ID0gMHg3RjAwMDAwMiwKICAgT01YX0V4dHJhRGF0YVZDMSA9IDB4N0YwMDAwMDMsCiAgIE9NWF9FeHRyYURhdGFGcmFtZURpbWVuc2lvbiA9IDB4N0YwMDAwMDQsCiAgIE9NWF9FeHRyYURhdGFWaWRlb0VuY29kZXJTbGljZUluZm8gPSAweDdGMDAwMDA1LAogICBPTVhfRXh0cmFEYXRhQ29uY2VhbE1CID0gMHg3RjAwMDAwNiwKICAgT01YX0V4dHJhRGF0YUludGVybGFjZUZvcm1hdCA9IDB4N0YwMDAwMDcsCiAgIE9NWF9FeHRyYURhdGFQb3J0RGVmID0gMHg3RjAwMDAwOCwKICAgT01YX0V4dHJhRGF0YU1QMkV4dG5EYXRhID0gMHg3RjAwMDAwOSwKICAgT01YX0V4dHJhRGF0YU1QMlVzZXJEYXRhID0gMHg3RjAwMDAwYSwKICAgT01YX0V4dHJhRGF0YVZpZGVvTFRSSW5mbyA9IDB4N0YwMDAwMGIsCiAgICBPTVhfRXh0cmFEYXRhRnJhbWVQYWNraW5nQXJyYW5nZW1lbnQgPSAweDdGMDAwMDBjLAogICAgT01YX0V4dHJhRGF0YVFQID0gICAgICAgICAgICAgICAgICAgICAgMHg3RjAwMDAwZCwKICAgIE9NWF9FeHRyYURhdGFJbnB1dEJpdHNJbmZvID0gICAgICAgICAgIDB4N0YwMDAwMGUsCiAgICBPTVhfRXh0cmFEYXRhVmlkZW9FbmNvZGVyTUJJbmZvID0gICAgICAweDdGMDAwMDBmLAogICAgT01YX0V4dHJhRGF0YU1wZWcyU2VxRGlzcGxheSA9ICAgICAgICAgMHg3RjAwMDAxMCwKfSBPTVhfUUNPTV9FWFRSQURBVEFUWVBFOwoKdHlwZWRlZiBzdHJ1Y3QgIE9NWF9TVFJFQU1JTlRFUkxBQ0VGT1JNQVRUWVBFIHsKICAgIE9NWF9VMzIgblNpemU7CiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CiAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CiAgICBPTVhfQk9PTCBiSW50ZXJsYWNlRm9ybWF0OwogICAgT01YX1UzMiBuSW50ZXJsYWNlRm9ybWF0czsKfSBPTVhfU1RSRUFNSU5URVJMQUNFRk9STUFUOwoKdHlwZWRlZiBlbnVtIE9NWF9JTlRFUkxBQ0VUWVBFCnsKICAgT01YX0ludGVybGFjZUZyYW1lUHJvZ3Jlc3NpdmUsCiAgIE9NWF9JbnRlcmxhY2VJbnRlcmxlYXZlRnJhbWVUb3BGaWVsZEZpcnN0LAogICBPTVhfSW50ZXJsYWNlSW50ZXJsZWF2ZUZyYW1lQm90dG9tRmllbGRGaXJzdCwKICAgT01YX0ludGVybGFjZUZyYW1lVG9wRmllbGRGaXJzdCwKICAgT01YX0ludGVybGFjZUZyYW1lQm90dG9tRmllbGRGaXJzdAp9T01YX0lOVEVSTEFDRXM7CgoKI2RlZmluZSBPTVhfRVhUUkFEQVRBX0hFQURFUl9TSVpFIDIwCgovKioKICogQVZDIHByb2ZpbGUgdHlwZXMsIGVhY2ggcHJvZmlsZSBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgdmFyaW91cwogKiBwZXJmb3JtYW5jZSBib3VuZHMgYW5kIGRpZmZlcmVudCBhbm5leGVzLgogKi8KdHlwZWRlZiBlbnVtIFFPTVhfVklERU9fQVZDUFJPRklMRVRZUEUgewogICAgUU9NWF9WSURFT19BVkNQcm9maWxlQmFzZWxpbmUgICAgICA9IE9NWF9WSURFT19BVkNQcm9maWxlQmFzZWxpbmUsCiAgICBRT01YX1ZJREVPX0FWQ1Byb2ZpbGVNYWluICAgICAgICAgID0gT01YX1ZJREVPX0FWQ1Byb2ZpbGVNYWluLAogICAgUU9NWF9WSURFT19BVkNQcm9maWxlRXh0ZW5kZWQgICAgICA9IE9NWF9WSURFT19BVkNQcm9maWxlRXh0ZW5kZWQsCiAgICBRT01YX1ZJREVPX0FWQ1Byb2ZpbGVIaWdoICAgICAgICAgID0gT01YX1ZJREVPX0FWQ1Byb2ZpbGVIaWdoLAogICAgUU9NWF9WSURFT19BVkNQcm9maWxlSGlnaDEwICAgICAgICA9IE9NWF9WSURFT19BVkNQcm9maWxlSGlnaDEwLAogICAgUU9NWF9WSURFT19BVkNQcm9maWxlSGlnaDQyMiAgICAgICA9IE9NWF9WSURFT19BVkNQcm9maWxlSGlnaDQyMiwKICAgIFFPTVhfVklERU9fQVZDUHJvZmlsZUhpZ2g0NDQgICAgICAgPSBPTVhfVklERU9fQVZDUHJvZmlsZUhpZ2g0NDQsCiAgICAvKiBRQ29tIHNwZWNpZmljIHByb2ZpbGUgaW5kZXhlcyAqLwogICAgUU9NWF9WSURFT19BVkNQcm9maWxlQ29uc3RyYWluZWRCYXNlbGluZSAgID0gT01YX1ZJREVPX0FWQ1Byb2ZpbGVWZW5kb3JTdGFydFVudXNlZCArIDEsCn0gUU9NWF9WSURFT19BVkNQUk9GSUxFVFlQRTsKCgovKioKICogSC4yNjQgTVZDIFByb2ZpbGVzCiAgKi8KdHlwZWRlZiBlbnVtIFFPTVhfVklERU9fTVZDUFJPRklMRVRZUEUgewogICAgUU9NWF9WSURFT19NVkNQcm9maWxlU3RlcmVvSGlnaCA9IDB4MSwKICAgIFFPTVhfVklERU9fTVZDUHJvZmlsZU11bHRpVmlld0hpZ2ggPSAweDIsCiAgICBRT01YX1ZJREVPX01WQ1Byb2ZpbGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsCiAgICBRT01YX1ZJREVPX01WQ1Byb2ZpbGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsCiAgICBRT01YX1ZJREVPX01WQ1Byb2ZpbGVNYXggPSAweDdGRkZGRkZGCn0gUU9NWF9WSURFT19NVkNQUk9GSUxFVFlQRTsKCi8qKgogKiBILjI2NCBNVkMgTGV2ZWxzCiAgKi8KdHlwZWRlZiBlbnVtIFFPTVhfVklERU9fTVZDTEVWRUxUWVBFIHsKICAgIFFPTVhfVklERU9fTVZDTGV2ZWwxICAgPSAweDAxLCAgICAgLyoqPCBMZXZlbCAxICovCiAgICBRT01YX1ZJREVPX01WQ0xldmVsMWIgID0gMHgwMiwgICAgIC8qKjwgTGV2ZWwgMWIgKi8KICAgIFFPTVhfVklERU9fTVZDTGV2ZWwxMSAgPSAweDA0LCAgICAgLyoqPCBMZXZlbCAxLjEgKi8KICAgIFFPTVhfVklERU9fTVZDTGV2ZWwxMiAgPSAweDA4LCAgICAgLyoqPCBMZXZlbCAxLjIgKi8KICAgIFFPTVhfVklERU9fTVZDTGV2ZWwxMyAgPSAweDEwLCAgICAgLyoqPCBMZXZlbCAxLjMgKi8KICAgIFFPTVhfVklERU9fTVZDTGV2ZWwyICAgPSAweDIwLCAgICAgLyoqPCBMZXZlbCAyICovCiAgICBRT01YX1ZJREVPX01WQ0xldmVsMjEgID0gMHg0MCwgICAgIC8qKjwgTGV2ZWwgMi4xICovCiAgICBRT01YX1ZJREVPX01WQ0xldmVsMjIgID0gMHg4MCwgICAgIC8qKjwgTGV2ZWwgMi4yICovCiAgICBRT01YX1ZJREVPX01WQ0xldmVsMyAgID0gMHgxMDAsICAgIC8qKjwgTGV2ZWwgMyAqLwogICAgUU9NWF9WSURFT19NVkNMZXZlbDMxICA9IDB4MjAwLCAgICAvKio8IExldmVsIDMuMSAqLwogICAgUU9NWF9WSURFT19NVkNMZXZlbDMyICA9IDB4NDAwLCAgICAvKio8IExldmVsIDMuMiAqLwogICAgUU9NWF9WSURFT19NVkNMZXZlbDQgICA9IDB4ODAwLCAgICAvKio8IExldmVsIDQgKi8KICAgIFFPTVhfVklERU9fTVZDTGV2ZWw0MSAgPSAweDEwMDAsICAgLyoqPCBMZXZlbCA0LjEgKi8KICAgIFFPTVhfVklERU9fTVZDTGV2ZWw0MiAgPSAweDIwMDAsICAgLyoqPCBMZXZlbCA0LjIgKi8KICAgIFFPTVhfVklERU9fTVZDTGV2ZWw1ICAgPSAweDQwMDAsICAgLyoqPCBMZXZlbCA1ICovCiAgICBRT01YX1ZJREVPX01WQ0xldmVsNTEgID0gMHg4MDAwLCAgIC8qKjwgTGV2ZWwgNS4xICovCiAgICBRT01YX1ZJREVPX01WQ0xldmVsS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLAogICAgUU9NWF9WSURFT19NVkNMZXZlbFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwKICAgIFFPTVhfVklERU9fTVZDTGV2ZWxNYXggPSAweDdGRkZGRkZGCn0gUU9NWF9WSURFT19NVkNMRVZFTFRZUEU7CgovKioKICogRGl2WCBWZXJzaW9ucwogKi8KdHlwZWRlZiBlbnVtICBRT01YX1ZJREVPX0RJVlhGT1JNQVRUWVBFIHsKICAgIFFPTVhfVklERU9fRElWWEZvcm1hdFVudXNlZCA9IDB4MDEsIC8qKjwgRm9ybWF0IHVudXNlZCBvciB1bmtub3duICovCiAgICBRT01YX1ZJREVPX0RJVlhGb3JtYXQzMTEgICAgPSAweDAyLCAvKio8IERpdlggMy4xMSAqLwogICAgUU9NWF9WSURFT19ESVZYRm9ybWF0NCAgICAgID0gMHgwNCwgLyoqPCBEaXZYIDQgKi8KICAgIFFPTVhfVklERU9fRElWWEZvcm1hdDUgICAgICA9IDB4MDgsIC8qKjwgRGl2WCA1ICovCiAgICBRT01YX1ZJREVPX0RJVlhGb3JtYXQ2ICAgICAgPSAweDEwLCAvKio8IERpdlggNiAqLwogICAgUU9NWF9WSURFT19ESVZYRm9ybWF0S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLAogICAgUU9NWF9WSURFT19ESVZYRm9ybWF0VmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLAogICAgUU9NWF9WSURFT19ESVZYRm9ybWF0TWF4ID0gMHg3RkZGRkZGRgp9IFFPTVhfVklERU9fRElWWEZPUk1BVFRZUEU7CgovKioKICogRGl2WCBwcm9maWxlIHR5cGVzLCBlYWNoIHByb2ZpbGUgaW5kaWNhdGVzIHN1cHBvcnQgZm9yCiAqIHZhcmlvdXMgcGVyZm9ybWFuY2UgYm91bmRzLgogKi8KdHlwZWRlZiBlbnVtIFFPTVhfVklERU9fRElWWFBST0ZJTEVUWVBFIHsKICAgIFFPTVhfVklERU9fRGl2WFByb2ZpbGVxTW9iaWxlID0gMHgwMSwgLyoqPCBxTW9iaWxlIFByb2ZpbGUgKi8KICAgIFFPTVhfVklERU9fRGl2WFByb2ZpbGVNb2JpbGUgID0gMHgwMiwgLyoqPCBNb2JpbGUgUHJvZmlsZSAqLwogICAgUU9NWF9WSURFT19EaXZYUHJvZmlsZU1UICAgICAgPSAweDA0LCAvKio8IE1vYmlsZSBUaGVhdHJlIFByb2ZpbGUgKi8KICAgIFFPTVhfVklERU9fRGl2WFByb2ZpbGVIVCAgICAgID0gMHgwOCwgLyoqPCBIb21lIFRoZWF0cmUgUHJvZmlsZSAqLwogICAgUU9NWF9WSURFT19EaXZYUHJvZmlsZUhEICAgICAgPSAweDEwLCAvKio8IEhpZ2ggRGVmaW5pdGlvbiBQcm9maWxlICovCiAgICBRT01YX1ZJREVPX0RJVlhQcm9maWxlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLAogICAgUU9NWF9WSURFT19ESVZYUHJvZmlsZVZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwKICAgIFFPTVhfVklERU9fRElWWFByb2ZpbGVNYXggPSAweDdGRkZGRkZGCn0gUU9NWF9WSURFT19ESVZYUFJPRklMRVRZUEU7CgovKioKICogRGl2WCBWaWRlbyBQYXJhbXMKICoKICogIFNUUlVDVCBNRU1CRVJTOgogKiAgblNpemUgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcwogKiAgblZlcnNpb24gICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24KICogIG5Qb3J0SW5kZXggOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bwogKiAgZUZvcm1hdCAgICA6IFZlcnNpb24gb2YgRGl2WCBzdHJlYW0gLyBkYXRhCiAqICBlUHJvZmlsZSAgIDogUHJvZmlsZSBvZiBEaXZYIHN0cmVhbSAvIGRhdGEKICovCnR5cGVkZWYgc3RydWN0IFFPTVhfVklERU9fUEFSQU1fRElWWFRZUEUgewogICAgT01YX1UzMiBuU2l6ZTsKICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKICAgIE9NWF9VMzIgblBvcnRJbmRleDsKICAgIFFPTVhfVklERU9fRElWWEZPUk1BVFRZUEUgZUZvcm1hdDsKICAgIFFPTVhfVklERU9fRElWWFBST0ZJTEVUWVBFIGVQcm9maWxlOwp9IFFPTVhfVklERU9fUEFSQU1fRElWWFRZUEU7CgoKCi8qKgogKiAgVlAgVmVyc2lvbnMKICovCnR5cGVkZWYgZW51bSBRT01YX1ZJREVPX1ZQRk9STUFUVFlQRSB7CiAgICBRT01YX1ZJREVPX1ZQRm9ybWF0VW51c2VkID0gMHgwMSwgLyoqPCBGb3JtYXQgdW51c2VkIG9yIHVua25vd24gKi8KICAgIFFPTVhfVklERU9fVlBGb3JtYXQ2ICAgICAgPSAweDAyLCAvKio8IFZQNiBWaWRlbyBGb3JtYXQgKi8KICAgIFFPTVhfVklERU9fVlBGb3JtYXQ3ICAgICAgPSAweDA0LCAvKio8IFZQNyBWaWRlbyBGb3JtYXQgKi8KICAgIFFPTVhfVklERU9fVlBGb3JtYXQ4ICAgICAgPSAweDA4LCAvKio8IFZQOCBWaWRlbyBGb3JtYXQgKi8KICAgIFFPTVhfVklERU9fVlBGb3JtYXRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsCiAgICBRT01YX1ZJREVPX1ZQRm9ybWF0VmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLAogICAgUU9NWF9WSURFT19WUEZvcm1hdE1heCA9IDB4N0ZGRkZGRkYKfSBRT01YX1ZJREVPX1ZQRk9STUFUVFlQRTsKCi8qKgogKiBWUCBwcm9maWxlIHR5cGVzLCBlYWNoIHByb2ZpbGUgaW5kaWNhdGVzIHN1cHBvcnQgZm9yIHZhcmlvdXMKICogZW5jb2RpbmcgdG9vbHMuCiAqLwp0eXBlZGVmIGVudW0gUU9NWF9WSURFT19WUFBST0ZJTEVUWVBFIHsKICAgIFFPTVhfVklERU9fVlBQcm9maWxlU2ltcGxlICAgPSAweDAxLCAvKio8IFNpbXBsZSBQcm9maWxlLCBhcHBsaWVzIHRvIFZQNiBvbmx5ICovCiAgICBRT01YX1ZJREVPX1ZQUHJvZmlsZUFkdmFuY2VkID0gMHgwMiwgLyoqPCBBZHZhbmNlZCBQcm9maWxlLCBhcHBsaWVzIHRvIFZQNiBvbmx5ICovCiAgICBRT01YX1ZJREVPX1ZQUHJvZmlsZVZlcnNpb24wID0gMHgwNCwgLyoqPCBWZXJzaW9uIDAsIGFwcGxpZXMgdG8gVlA3IGFuZCBWUDggKi8KICAgIFFPTVhfVklERU9fVlBQcm9maWxlVmVyc2lvbjEgPSAweDA4LCAvKio8IFZlcnNpb24gMSwgYXBwbGllcyB0byBWUDcgYW5kIFZQOCAqLwogICAgUU9NWF9WSURFT19WUFByb2ZpbGVWZXJzaW9uMiA9IDB4MTAsIC8qKjwgVmVyc2lvbiAyLCBhcHBsaWVzIHRvIFZQOCBvbmx5ICovCiAgICBRT01YX1ZJREVPX1ZQUHJvZmlsZVZlcnNpb24zID0gMHgyMCwgLyoqPCBWZXJzaW9uIDMsIGFwcGxpZXMgdG8gVlA4IG9ubHkgKi8KICAgIFFPTVhfVklERU9fVlBQcm9maWxlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLAogICAgUU9NWF9WSURFT19WUFByb2ZpbGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsCiAgICBRT01YX1ZJREVPX1ZQUHJvZmlsZU1heCA9IDB4N0ZGRkZGRkYKfSBRT01YX1ZJREVPX1ZQUFJPRklMRVRZUEU7CgovKioKICogVlAgVmlkZW8gUGFyYW1zCiAqCiAqICBTVFJVQ1QgTUVNQkVSUzoKICogIG5TaXplICAgICAgOiBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMKICogIG5WZXJzaW9uICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uCiAqICBuUG9ydEluZGV4IDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8KICogIGVGb3JtYXQgICAgOiBGb3JtYXQgb2YgVlAgc3RyZWFtIC8gZGF0YQogKiAgZVByb2ZpbGUgICA6IFByb2ZpbGUgb3IgVmVyc2lvbiBvZiBWUCBzdHJlYW0gLyBkYXRhCiAqLwp0eXBlZGVmIHN0cnVjdCBRT01YX1ZJREVPX1BBUkFNX1ZQVFlQRSB7CiAgICBPTVhfVTMyIG5TaXplOwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogICAgT01YX1UzMiBuUG9ydEluZGV4OwogICAgUU9NWF9WSURFT19WUEZPUk1BVFRZUEUgZUZvcm1hdDsKICAgIFFPTVhfVklERU9fVlBQUk9GSUxFVFlQRSBlUHJvZmlsZTsKfSBRT01YX1ZJREVPX1BBUkFNX1ZQVFlQRTsKCi8qKgogKiBTcGFyayBWZXJzaW9ucwogKi8KdHlwZWRlZiBlbnVtIFFPTVhfVklERU9fU1BBUktGT1JNQVRUWVBFIHsKICAgIFFPTVhfVklERU9fU3BhcmtGb3JtYXRVbnVzZWQgPSAweDAxLCAvKio8IEZvcm1hdCB1bnVzZWQgb3IgdW5rbm93biAqLwogICAgUU9NWF9WSURFT19TcGFya0Zvcm1hdDAgICAgICA9IDB4MDIsIC8qKjwgVmlkZW8gRm9ybWF0IFZlcnNpb24gMCAqLwogICAgUU9NWF9WSURFT19TcGFya0Zvcm1hdDEgICAgICA9IDB4MDQsIC8qKjwgVmlkZW8gRm9ybWF0IFZlcnNpb24gMSAqLwogICAgUU9NWF9WSURFT19TcGFya0Zvcm1hdEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwKICAgIFFPTVhfVklERU9fU3BhcmtGb3JtYXRWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsCiAgICBRT01YX1ZJREVPX1NwYXJrRm9ybWF0TWF4ID0gMHg3RkZGRkZGRgp9IFFPTVhfVklERU9fU1BBUktGT1JNQVRUWVBFOwoKLyoqCiAqIFNwYXJrIFZpZGVvIFBhcmFtcwogKgogKiAgU1RSVUNUIE1FTUJFUlM6CiAqICBuU2l6ZSAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCiAqICBuVmVyc2lvbiAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgogKiAgblBvcnRJbmRleCA6IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvCiAqICBlRm9ybWF0ICAgIDogVmVyc2lvbiBvZiBTcGFyayBzdHJlYW0gLyBkYXRhCiAqLwp0eXBlZGVmIHN0cnVjdCBRT01YX1ZJREVPX1BBUkFNX1NQQVJLVFlQRSB7CiAgICBPTVhfVTMyIG5TaXplOwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogICAgT01YX1UzMiBuUG9ydEluZGV4OwogICAgUU9NWF9WSURFT19TUEFSS0ZPUk1BVFRZUEUgZUZvcm1hdDsKfSBRT01YX1ZJREVPX1BBUkFNX1NQQVJLVFlQRTsKCgp0eXBlZGVmIHN0cnVjdCBRT01YX1ZJREVPX1FVRVJZX0RFQ09ERVJfSU5TVEFOQ0VTIHsKICAgIE9NWF9VMzIgblNpemU7CiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CiAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CiAgICBPTVhfVTMyIG5OdW1PZkluc3RhbmNlczsKfSBRT01YX1ZJREVPX1FVRVJZX0RFQ09ERVJfSU5TVEFOQ0VTOwoKdHlwZWRlZiBzdHJ1Y3QgUU9NWF9FTkFCTEVUWVBFIHsKICAgIE9NWF9VMzIgblNpemU7CiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CiAgICBPTVhfQk9PTCBiRW5hYmxlOwp9IFFPTVhfRU5BQkxFVFlQRTsKCnR5cGVkZWYgZW51bSBRT01YX1ZJREVPX0VWRU5UUyB7CiAgICBPTVhfRXZlbnRJbmRleHNldHRpbmdDaGFuZ2VkID0gT01YX0V2ZW50VmVuZG9yU3RhcnRVbnVzZWQKfSBRT01YX1ZJREVPX0VWRU5UUzsKCnR5cGVkZWYgZW51bSBRT01YX1ZJREVPX1BJQ1RVUkVfT1JERVIgewogICAgUU9NWF9WSURFT19ESVNQTEFZX09SREVSID0gMHgxLAogICAgUU9NWF9WSURFT19ERUNPREVfT1JERVIgPSAweDIKfSBRT01YX1ZJREVPX1BJQ1RVUkVfT1JERVI7Cgp0eXBlZGVmIHN0cnVjdCBRT01YX1ZJREVPX0RFQ09ERVJfUElDVFVSRV9PUkRFUiB7CiAgICBPTVhfVTMyIG5TaXplOwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogICAgT01YX1UzMiBuUG9ydEluZGV4OwogICAgUU9NWF9WSURFT19QSUNUVVJFX09SREVSIGVPdXRwdXRQaWN0dXJlT3JkZXI7Cn0gUU9NWF9WSURFT19ERUNPREVSX1BJQ1RVUkVfT1JERVI7Cgp0eXBlZGVmIHN0cnVjdCBRT01YX0lOREVYRVhUUkFEQVRBVFlQRSB7CiAgICBPTVhfVTMyIG5TaXplOwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogICAgT01YX1UzMiBuUG9ydEluZGV4OwogICAgT01YX0JPT0wgYkVuYWJsZWQ7CiAgICBPTVhfSU5ERVhUWVBFIG5JbmRleDsKfSBRT01YX0lOREVYRVhUUkFEQVRBVFlQRTsKCnR5cGVkZWYgc3RydWN0IFFPTVhfSU5ERVhUSU1FU1RBTVBSRU9SREVSIHsKCU9NWF9VMzIgblNpemU7CglPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CglPTVhfVTMyIG5Qb3J0SW5kZXg7CglPTVhfQk9PTCBiRW5hYmxlOwp9IFFPTVhfSU5ERVhUSU1FU1RBTVBSRU9SREVSOwoKdHlwZWRlZiBzdHJ1Y3QgUU9NWF9JTkRFWERPV05TQ0FMQVIgewogICAgICAgIE9NWF9VMzIgblNpemU7CiAgICAgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogICAgICAgIE9NWF9VMzIgblBvcnRJbmRleDsKICAgICAgICBPTVhfQk9PTCBiRW5hYmxlOwp9IFFPTVhfSU5ERVhET1dOU0NBTEFSOwoKdHlwZWRlZiBzdHJ1Y3QgUU9NWF9WSURFT19DVVNUT01fQlVGRkVSU0laRSB7CiAgICAgICAgT01YX1UzMiBuU2l6ZTsKICAgICAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CiAgICAgICAgT01YX1UzMiBuUG9ydEluZGV4OwogICAgICAgIE9NWF9VMzIgbkJ1ZmZlclNpemU7Cn0gUU9NWF9WSURFT19DVVNUT01fQlVGRkVSU0laRTsKCiNkZWZpbmUgT01YX1FDT01fSU5ERVhfUEFSQU1fVklERU9fU1lOQ0ZSQU1FREVDT0RJTkdNT0RFICJPTVguUUNPTS5pbmRleC5wYXJhbS52aWRlby5TeW5jRnJhbWVEZWNvZGluZ01vZGUiCiNkZWZpbmUgT01YX1FDT01fSU5ERVhfUEFSQU1fSU5ERVhFWFRSQURBVEEgIk9NWC5RQ09NLmluZGV4LnBhcmFtLkluZGV4RXh0cmFEYXRhIgojZGVmaW5lIE9NWF9RQ09NX0lOREVYX1BBUkFNX1ZJREVPX1NMSUNFREVMSVZFUllNT0RFICJPTVguUUNPTS5pbmRleC5wYXJhbS5TbGljZURlbGl2ZXJ5TW9kZSIKI2RlZmluZSBPTVhfUUNPTV9JTkRFWF9QQVJBTV9WSURFT19GUkFNRVBBQ0tJTkdfRVhUUkFEQVRBICJPTVguUUNPTS5pbmRleC5wYXJhbS52aWRlby5GcmFtZVBhY2tpbmdFeHRyYWRhdGEiCiNkZWZpbmUgT01YX1FDT01fSU5ERVhfUEFSQU1fVklERU9fUVBfRVhUUkFEQVRBICJPTVguUUNPTS5pbmRleC5wYXJhbS52aWRlby5RUEV4dHJhZGF0YSIKI2RlZmluZSBPTVhfUUNPTV9JTkRFWF9QQVJBTV9WSURFT19JTlBVVEJJVFNJTkZPX0VYVFJBREFUQSAiT01YLlFDT00uaW5kZXgucGFyYW0udmlkZW8uSW5wdXRCaXRzSW5mb0V4dHJhZGF0YSIKI2RlZmluZSBPTVhfUUNPTV9JTkRFWF9QQVJBTV9WSURFT19FWFROVVNFUl9FWFRSQURBVEEgIk9NWC5RQ09NLmluZGV4LnBhcmFtLnZpZGVvLkV4dG5Vc2VyRXh0cmFEYXRhIgojZGVmaW5lIE9NWF9RQ09NX0lOREVYX0NPTkZJR19WSURFT19GUkFNRVBBQ0tJTkdfSU5GTyAiT01YLlFDT00uaW5kZXguY29uZmlnLnZpZGVvLkZyYW1lUGFja2luZ0luZm8iCiNkZWZpbmUgT01YX1FDT01fSU5ERVhfUEFSQU1fVklERU9fTVBFRzJTRVFESVNQX0VYVFJBREFUQSAiT01YLlFDT00uaW5kZXgucGFyYW0udmlkZW8uTXBlZzJTZXFEaXNwRXh0cmFEYXRhIgoKdHlwZWRlZiBlbnVtIHsKICAgIFFPTVhfVklERU9fRlJBTUVfUEFDS0lOR19DSEVDS0VSQk9BUkQgPSAwLAogICAgUU9NWF9WSURFT19GUkFNRV9QQUNLSU5HX0NPTFVNTl9JTlRFUkxFQVZFID0gMSwKICAgIFFPTVhfVklERU9fRlJBTUVfUEFDS0lOR19ST1dfSU5URVJMRUFWRSA9IDIsCiAgICBRT01YX1ZJREVPX0ZSQU1FX1BBQ0tJTkdfU0lERV9CWV9TSURFID0gMywKICAgIFFPTVhfVklERU9fRlJBTUVfUEFDS0lOR19UT1BfQk9UVE9NID0gNCwKICAgIFFPTVhfVklERU9fRlJBTUVfUEFDS0lOR19URU1QT1JBTCA9IDUsCn0gUU9NWF9WSURFT19GUkFNRV9QQUNLSU5HX0FSUkFOR0VNRU5UOwoKdHlwZWRlZiBlbnVtIHsKICAgIFFPTVhfVklERU9fQ09OVEVOVF9VTlNQRUNJRklFRCA9IDAsCiAgICBRT01YX1ZJREVPX0NPTlRFTlRfTFJfVklFVyA9IDEsCiAgICBRT01YX1ZJREVPX0NPTlRFTlRfUkxfVklFVyA9IDIsCn0gUU9NWF9WSURFT19DT05URU5UX0lOVEVSUFJFVEFUSU9OOwoKLy8gQSBwb2ludGVyIHRvIHRoaXMgc3RydWN0IGlzIHBhc3NlZCB0byBPTVhfU2V0UGFyYW1ldGVyIHdoZW4gdGhlIGV4dGVuc2lvbgovLyBpbmRleCBmb3IgdGhlICdPTVguZ29vZ2xlLmFuZHJvaWQuaW5kZXguc2V0VlVJU3RyZWFtUmVzdHJpY3RGbGFnJyBleHRlbnNpb24KLy8gaXMgZ2l2ZW4uCnR5cGVkZWYgc3RydWN0IFFPTVhfVlVJX0JJVFNUUkVBTV9SRVNUUklDVCB7CiAgICBPTVhfVTMyIG5TaXplOwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogICAgT01YX0JPT0wgYkVuYWJsZTsKfSBRT01YX1ZVSV9CSVRTVFJFQU1fUkVTVFJJQ1Q7CgovKioKICogU3BlY2lmaWVzIHRoZSBleHRlbmRlZCBwaWN0dXJlIHR5cGVzLiBUaGVzZSB2YWx1ZXMgc2hvdWxkIGJlCiAqIE9SJ2QgYWxvbmcgd2l0aCB0aGUgdHlwZXMgZGVmaW5lZCBpbiBPTVhfVklERU9fUElDVFVSRVRZUEUgdG8KICogc2lnbmFsIGFsbCBwaWN0dXJlcyB0eXBlcyB3aGljaCBhcmUgYWxsb3dlZC4KICoKICogRU5VTVM6CiAqICBILjI2NCBTcGVjaWZpYyBQaWN0dXJlIFR5cGVzOiAgIElEUgogKi8KdHlwZWRlZiBlbnVtIFFPTVhfVklERU9fUElDVFVSRVRZUEUgewogICAgUU9NWF9WSURFT19QaWN0dXJlVHlwZUlEUiA9IE9NWF9WSURFT19QaWN0dXJlVHlwZVZlbmRvclN0YXJ0VW51c2VkICsgMHgxMDAwCn0gUU9NWF9WSURFT19QSUNUVVJFVFlQRTsKCiNkZWZpbmUgT01YX1FDT01fSU5ERVhfQ09ORklHX0FDVElWRV9SRUdJT05fREVURUNUSU9OICAgICAgICAgICAiT01YLlFDT00uaW5kZXguY29uZmlnLmFjdGl2ZXJlZ2lvbmRldGVjdGlvbiIKI2RlZmluZSBPTVhfUUNPTV9JTkRFWF9DT05GSUdfQUNUSVZFX1JFR0lPTl9ERVRFQ1RJT05fU1RBVFVTICAgICJPTVguUUNPTS5pbmRleC5jb25maWcuYWN0aXZlcmVnaW9uZGV0ZWN0aW9uc3RhdHVzIgojZGVmaW5lIE9NWF9RQ09NX0lOREVYX0NPTkZJR19TQ0FMSU5HX01PREUgICAgICAgICAgICAgICAgICAgICAgIk9NWC5RQ09NLmluZGV4LmNvbmZpZy5zY2FsaW5nbW9kZSIKI2RlZmluZSBPTVhfUUNPTV9JTkRFWF9DT05GSUdfTk9JU0VSRURVQ1RJT04gICAgICAgICAgICAgICAgICAgICJPTVguUUNPTS5pbmRleC5jb25maWcubm9pc2VyZWR1Y3Rpb24iCiNkZWZpbmUgT01YX1FDT01fSU5ERVhfQ09ORklHX0lNQUdFRU5IQU5DRU1FTlQgICAgICAgICAgICAgICAgICAiT01YLlFDT00uaW5kZXguY29uZmlnLmltYWdlZW5oYW5jZW1lbnQiCiNkZWZpbmUgT01YX1FDT01fSU5ERVhfUEFSQU1fSEVMREJVRkZFUkNPVU5UICAgICAgICAgICAgICAgICAgICAiT01YLlFDT00uaW5kZXgucGFyYW0uSGVsZEJ1ZmZlckNvdW50IiAvKio8IHJlZmVyZW5jZTogUU9NWF9IRUxEQlVGRkVSQ09VTlRUWVBFICovCgoKdHlwZWRlZiBzdHJ1Y3QgUU9NWF9SRUNUVFlQRSB7CiAgICBPTVhfVTMyIG5TaXplOwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogICAgT01YX1MzMiBuTGVmdDsKICAgIE9NWF9TMzIgblRvcDsKICAgIE9NWF9VMzIgbldpZHRoOwogICAgT01YX1UzMiBuSGVpZ2h0Owp9IFFPTVhfUkVDVFRZUEU7Cgp0eXBlZGVmIHN0cnVjdCBRT01YX0FDVElWRVJFR0lPTkRFVEVDVElPTlRZUEUgewogICAgT01YX1UzMiBuU2l6ZTsKICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKICAgIE9NWF9VMzIgblBvcnRJbmRleDsKICAgIE9NWF9CT09MIGJFbmFibGU7CiAgICBRT01YX1JFQ1RUWVBFIHNST0k7CiAgICBPTVhfVTMyIG5OdW1FeGNsdXNpb25SZWdpb25zOwogICAgUU9NWF9SRUNUVFlQRSBzRXhjbHVzaW9uUmVnaW9uc1sxXTsKfSBRT01YX0FDVElWRVJFR0lPTkRFVEVDVElPTlRZUEU7Cgp0eXBlZGVmIHN0cnVjdCBRT01YX0FDVElWRVJFR0lPTkRFVEVDVElPTl9TVEFUVVNUWVBFIHsKICAgIE9NWF9VMzIgblNpemU7CiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CiAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CiAgICBPTVhfQk9PTCBiRGV0ZWN0ZWQ7CiAgICBRT01YX1JFQ1RUWVBFIHNEZXRlY3RlZFJlZ2lvbjsKfSBRT01YX0FDVElWRVJFR0lPTkRFVEVDVElPTl9TVEFUVVNUWVBFOwoKdHlwZWRlZiBlbnVtIFFPTVhfU0NBTEVfTU9ERVRZUEUgewogICAgUU9NWF9TQ0FMRV9NT0RFX05vcm1hbCwKICAgIFFPTVhfU0NBTEVfTU9ERV9BbmFtb3JwaGljLAogICAgUU9NWF9TQ0FMRV9NT0RFX01heCA9IDB4N0ZGRkZGRkYKfSBRT01YX1NDQUxFX01PREVUWVBFOwoKdHlwZWRlZiBzdHJ1Y3QgUU9NWF9TQ0FMSU5HTU9ERVRZUEUgewogICAgT01YX1UzMiBuU2l6ZTsKICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKICAgIFFPTVhfU0NBTEVfTU9ERVRZUEUgIGVTY2FsZU1vZGU7Cn0gUU9NWF9TQ0FMSU5HTU9ERVRZUEU7Cgp0eXBlZGVmIHN0cnVjdCBRT01YX05PSVNFUkVEVUNUSU9OVFlQRSB7CiAgICBPTVhfVTMyIG5TaXplOwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogICAgT01YX1UzMiBuUG9ydEluZGV4OwogICAgT01YX0JPT0wgYkVuYWJsZTsKICAgIE9NWF9CT09MIGJBdXRvTW9kZTsKICAgIE9NWF9TMzIgbk5vaXNlUmVkdWN0aW9uOwp9IFFPTVhfTk9JU0VSRURVQ1RJT05UWVBFOwoKdHlwZWRlZiBzdHJ1Y3QgUU9NWF9JTUFHRUVOSEFOQ0VNRU5UVFlQRSB7CiAgICBPTVhfVTMyIG5TaXplOwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogICAgT01YX1UzMiBuUG9ydEluZGV4OwogICAgT01YX0JPT0wgYkVuYWJsZTsKICAgIE9NWF9CT09MIGJBdXRvTW9kZTsKICAgIE9NWF9TMzIgbkltYWdlRW5oYW5jZW1lbnQ7Cn0gUU9NWF9JTUFHRUVOSEFOQ0VNRU5UVFlQRTsKCi8qCiAqIHRoZXNlIGFyZSBwYXJ0IG9mIE9NWDEuMiBidXQgSkIgTVIyIGJyYW5jaCBkb2Vzbid0IGhhdmUgdGhlbSBkZWZpbmVkCiAqIE9NWF9JbmRleFBhcmFtSW50ZXJsYWNlRm9ybWF0CiAqIE9NWF9JTlRFUkxBQ0VGT1JNQVRUWVBFCiAqLwojaWZuZGVmIE9NWF9JbmRleFBhcmFtSW50ZXJsYWNlRm9ybWF0CiNkZWZpbmUgT01YX0luZGV4UGFyYW1JbnRlcmxhY2VGb3JtYXQgKDB4N0ZGMDAwMDApCnR5cGVkZWYgc3RydWN0IE9NWF9JTlRFUkxBQ0VGT1JNQVRUWVBFIHsKICAgIE9NWF9VMzIgblNpemU7CiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CiAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CiAgICBPTVhfVTMyIG5Gb3JtYXQ7CiAgICBPTVhfVElDS1MgblRpbWVTdGFtcDsKfSBPTVhfSU5URVJMQUNFRk9STUFUVFlQRTsKI2VuZGlmCgovKioKICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnVmZmVycwogKiB0aGF0IGEgcG9ydCB3aWxsIGhvbGQgZHVyaW5nIGRhdGEgZmxvdy4KICoKICogU1RSVUNUIE1FTUJFUlM6CiAqICBuU2l6ZSAgICAgICAgICAgICAgOiBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMKICogIG5WZXJzaW9uICAgICAgICAgICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mbwogKiAgblBvcnRJbmRleCAgICAgICAgIDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8KICogIG5IZWxkQnVmZmVyQ291bnQgICA6IFJlYWQtb25seSwgbWF4aW11bSBudW1iZXIgb2YgYnVmZmVycyB0aGF0IHdpbGwgYmUgaGVsZAogKi8KdHlwZWRlZiBzdHJ1Y3QgUU9NWF9IRUxEQlVGRkVSQ09VTlRUWVBFIHsKICAgIE9NWF9VMzIgblNpemU7CiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CiAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CiAgICBPTVhfVTMyIG5IZWxkQnVmZmVyQ291bnQ7Cn0gUU9NWF9IRUxEQlVGRkVSQ09VTlRUWVBFOwoKdHlwZWRlZiBlbnVtIFFPTVhfVklERU9fSElFUkFSQ0hJQ0FMQ09ESU5HVFlQRSB7CiAgICBRT01YX0hJRVJBUkNISUNBTENPRElOR19QID0gMHgwMSwKICAgIFFPTVhfSElFUkFSQ0hJQ0FMQ09ESU5HX0IgPSAweDAyLAp9IFFPTVhfVklERU9fSElFUkFSQ0hJQ0FMQ09ESU5HVFlQRTsKCnR5cGVkZWYgc3RydWN0IFFPTVhfVklERU9fSElFUkFSQ0hJQ0FMTEFZRVJTIHsKICAgIE9NWF9VMzIgblNpemU7CiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CiAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CiAgICBPTVhfVTMyIG5OdW1MYXllcnM7CiAgICBRT01YX1ZJREVPX0hJRVJBUkNISUNBTENPRElOR1RZUEUgZUhpZXJhcmNoaWNhbENvZGluZ1R5cGU7Cn0gUU9NWF9WSURFT19ISUVSQVJDSElDQUxMQVlFUlM7CgojaWZkZWYgX19jcGx1c3BsdXMKfQojZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KCiNlbmRpZiAvKiBfX09NWF9RQ09NX0VYVEVOU0lPTlNfSF9fICovCg==