Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uDSXt-00B6au-Pq for pgsql-hackers@arkaria.postgresql.org; Fri, 09 May 2025 18:34:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uDSXr-00DSmc-Ap for pgsql-hackers@arkaria.postgresql.org; Fri, 09 May 2025 18:34:03 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from <3danissimo@gmail.com>) id 1uDSXq-00DSmS-Ol for pgsql-hackers@lists.postgresql.org; Fri, 09 May 2025 18:34:02 +0000 Received: from mail-yw1-x112a.google.com ([2607:f8b0:4864:20::112a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from <3danissimo@gmail.com>) id 1uDSXn-0014CL-0j for pgsql-hackers@lists.postgresql.org; Fri, 09 May 2025 18:34:02 +0000 Received: by mail-yw1-x112a.google.com with SMTP id 00721157ae682-70427fb838cso21101497b3.2 for ; Fri, 09 May 2025 11:33:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746815638; x=1747420438; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=oodMHB4pZNuXkNXVVTwsHPtsz6AkCTjyFEUEwJASnvA=; b=SiboQcmsELTIo38p/6MJeakRE8WXNU5m6qCk/f/kY0SJElxttIOy3RzTEdCWDMKNnn kA5oJzZ/7h72EV5+5KXLDOjsgyOjah+rf6uHeO2IWvA5QwxV4Z9ZABYfz8jIBYIkbCne Ilnzb0iP2E7+1WqbsGqdAbUAzfsP8F9UBh565t8KghQVRKvS/5q5NgJeZT9sHB8He+Rb kWQpriofUVARHONhIkHzzCaG4IzTxx9BCPFZE8Ki/5/FKlVFF1LH8UlOmoT1fdBnAc8Q 4IBKlwfkZWb7Yqk+QZ09tv1E054EwC/IUrdf6prs5oXRh57Nw+7OYJMW1qWipU6tbLB0 eHWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746815638; x=1747420438; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=oodMHB4pZNuXkNXVVTwsHPtsz6AkCTjyFEUEwJASnvA=; b=YBsXNpvC+MDmIkuQN9izKPwmTizWEeS9MPAm+D8kZg/hhFxDIIZnzTkeyruQ3qyofI HVHiATWXi+aqOwfMhq88RWgOK3+HbgWepfr5tiqzspXgBXl/r/pTU4FQzPdD/U2oSvsB e84/H3CtUFmlVovzAoLD47+8hxpNoH7KPxxQSj+9KccpZ9k85gKFuMFS7IEsJSxTlJy0 Tp1nicgfYHBcd4mUtPkLlsyHdVvwFaR6pAI5o7Dvn9+fcQ7+1jUgh0/1qjZqn4NAsgj7 PcmlFfuuiDDJFkHxqID+OPtCHiKP7LRbYoPRQ6qComzpUavzk1o4gfxrLqNi+WL4hBmT m5mw== X-Forwarded-Encrypted: i=1; AJvYcCXKicNn6wRCx4iPL84hLVj6mfB1jMLYLJaTn129lNb5WZ+tDRMbC0YGKqHowwxlPH0GuTZA3gkxC5h5P45q@lists.postgresql.org X-Gm-Message-State: AOJu0YzAgjdAeIYL4yKFDXzB8QB32R0MbMVAjflUwaBUYVjQ0qABmFCC U9+RM2SmFKr8Pmk7zp4cgDYMt38VefYYNuzv0AsWLk9q/bx0WDqp95JsTTYCM5Py3WtsW2jQ/5H 67wsKsmBQwJDqZgSHm10UXFztOFs= X-Gm-Gg: ASbGncsxxOQwmE2hRH3p15KeetD/IE3l9jUE2KH2OBnXdxDCEwmZwxZoXL5UZ+zeTqc mmSUYXz99a87m/BnMiRWvQQh4lW/+oFwck8fpmEZuxJgkIfzjH//M9vnxXEZ87t/qYHWXgkfJyr mg6cr0kaTTmi/dCSSm6jb90vsrYOqQ53Q= X-Google-Smtp-Source: AGHT+IGrxAd0eCOjvSfxb/3ZRac86qzfJC0kT8ZJfzKKaqqwjJOyTKrlT9DAC3u7Yd6MV7QfEUH1SM846OfaAQd0/oc= X-Received: by 2002:a05:690c:480a:b0:6fe:b88e:4d94 with SMTP id 00721157ae682-70a3fa411f6mr66241437b3.19.1746815637850; Fri, 09 May 2025 11:33:57 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Daniil Davydov <3danissimo@gmail.com> Date: Sat, 10 May 2025 01:33:45 +0700 X-Gm-Features: ATxdqUHEwRIhKsFg2NN38mBrukl-y3Ivb2oviFzLS3fi9uM0pmp9V3wfTaCIU44 Message-ID: Subject: Re: POC: Parallel processing of indexes in autovacuum To: Sami Imseih Cc: Masahiko Sawada , Maxim Orlov , Postgres hackers Content-Type: multipart/mixed; boundary="000000000000959d520634b8357c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000959d520634b8357c Content-Type: text/plain; charset="UTF-8" Hi, As I promised - meet parallel index autovacuum with bgworkers (Parallel-index-autovacuum-with-bgworkers.patch). This is pretty simple implementation : 1) Added new table option `parallel_idx_autovac_enabled` that must be set to `true` if user wants autovacuum to process table in parallel. 2) Added new GUC variable `autovacuum_reserved_workers_num`. This is number of parallel workers from bgworkers pool that can be used only by autovacuum workers. The `autovacuum_reserved_workers_num` parameter actually reserves a requested part of the processes, the total number of which is equal to `max_worker_processes`. 3) When an autovacuum worker decides to process some table in parallel, it just sets `VacuumParams->nworkers` to appropriate value (> 0) and then the code is executed as if it were a regular VACUUM PARALLEL. 4) I kept test/modules/autovacuum as sandbox where you can play with parallel index autovacuum a bit. What do you think about this implementation? P.S. I also improved "self-managed" parallel autovacuum implementation (Self-managed-parallel-index-autovacuum.patch). For now it needs a lot of refactoring, but all features are working good. Both patches are targeting on master branch (bc35adee8d7ad38e7bef40052f196be55decddec) -- Best regards, Daniil Davydov --000000000000959d520634b8357c Content-Type: text/x-patch; charset="US-ASCII"; name="v1-0001-Parallel-index-autovacuum-with-bgworkers.patch" Content-Disposition: attachment; filename="v1-0001-Parallel-index-autovacuum-with-bgworkers.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mah4vc6y0 RnJvbSBjZmI3ZTY3NWQ5YTFiMDVhZWYwY2RhZWVjYTVmNmVkZDRiY2QzYjcwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYW5paWwgRGF2aWRvdiA8ZC5kYXZ5ZG92QHBvc3RncmVzcHJv LnJ1PgpEYXRlOiBTYXQsIDEwIE1heSAyMDI1IDAxOjA3OjQyICswNzAwClN1YmplY3Q6IFtQQVRD SCB2MV0gUGFyYWxsZWwgaW5kZXggYXV0b3ZhY3V1bSB3aXRoIGJnd29ya2VycwoKLS0tCiBzcmMv YmFja2VuZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlvbnMuYyAgICAgICAgfCAgMTEgKysKIHNyYy9i YWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jICAgICAgICAgICAgICAgICB8ICA1NSArKysrKysrKwog c3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtcGFyYWxsZWwuYyAgICAgICAgIHwgIDQ2ICsrKyst LS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jICAgICAgICAgICB8ICAgOSAr Kwogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jICAgICAgICAgICAgIHwgIDMzICsr KystCiBzcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYyAgICAgICAgICAgICAgfCAgIDEg Kwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgICAgICAgICAgIHwgIDEzICsr CiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgfCAgIDEgKwog c3JjL2luY2x1ZGUvbWlzY2FkbWluLmggICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNy Yy9pbmNsdWRlL3V0aWxzL2d1Y19ob29rcy5oICAgICAgICAgICAgICAgICB8ICAgMiArCiBzcmMv aW5jbHVkZS91dGlscy9yZWwuaCAgICAgICAgICAgICAgICAgICAgICAgfCAgMTAgKysKIHNyYy90 ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS8uZ2l0aWdub3JlICAgICAgICB8ICAgMSArCiBzcmMvdGVz dC9tb2R1bGVzL2F1dG92YWN1dW0vTWFrZWZpbGUgICAgICAgICAgfCAgMTQgKysKIC4uLi9hdXRv dmFjdXVtL3QvMDAxX2F1dG92YWNfcGFyYWxsZWwucGwgICAgICB8IDEyOSArKysrKysrKysrKysr KysrKysKIDE0IGZpbGVzIGNoYW5nZWQsIDMwNyBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMo LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL2F1dG92YWN1dW0vLmdpdGln bm9yZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS9NYWtl ZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS90LzAw MV9hdXRvdmFjX3BhcmFsbGVsLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2Nv bW1vbi9yZWxvcHRpb25zLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlvbnMu YwppbmRleCA0NmMxZGNlMjIyZC4uY2NmNTkyMDg3ODMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21t b24vcmVsb3B0aW9ucy5jCkBAIC0xNjYsNiArMTY2LDE1IEBAIHN0YXRpYyByZWxvcHRfYm9vbCBi b29sUmVsT3B0c1tdID0KIAkJfSwKIAkJdHJ1ZQogCX0sCisJeworCQl7CisJCQkicGFyYWxsZWxf aWR4X2F1dG92YWNfZW5hYmxlZCIsCisJCQkiQWxsb3dzIGF1dG92YWN1dW0gdG8gcHJvY2VzcyBp bmRleGVzIG9mIHRoaXMgdGFibGUgaW4gcGFyYWxsZWwgbW9kZSIsCisJCQlSRUxPUFRfS0lORF9I RUFQLAorCQkJU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrCisJCX0sCisJCWZhbHNlCisJfSwKIAkv KiBsaXN0IHRlcm1pbmF0b3IgKi8KIAl7e05VTEx9fQogfTsKQEAgLTE4NjMsNiArMTg3Miw4IEBA IGRlZmF1bHRfcmVsb3B0aW9ucyhEYXR1bSByZWxvcHRpb25zLCBib29sIHZhbGlkYXRlLCByZWxv cHRfa2luZCBraW5kKQogCQl7ImZpbGxmYWN0b3IiLCBSRUxPUFRfVFlQRV9JTlQsIG9mZnNldG9m KFN0ZFJkT3B0aW9ucywgZmlsbGZhY3Rvcil9LAogCQl7ImF1dG92YWN1dW1fZW5hYmxlZCIsIFJF TE9QVF9UWVBFX0JPT0wsCiAJCW9mZnNldG9mKFN0ZFJkT3B0aW9ucywgYXV0b3ZhY3V1bSkgKyBv ZmZzZXRvZihBdXRvVmFjT3B0cywgZW5hYmxlZCl9LAorCQl7InBhcmFsbGVsX2lkeF9hdXRvdmFj X2VuYWJsZWQiLCBSRUxPUFRfVFlQRV9CT09MLAorCQlvZmZzZXRvZihTdGRSZE9wdGlvbnMsIGF1 dG92YWN1dW0pICsgb2Zmc2V0b2YoQXV0b1ZhY09wdHMsIHBhcmFsbGVsX2lkeF9hdXRvdmFjX2Vu YWJsZWQpfSwKIAkJeyJhdXRvdmFjdXVtX3ZhY3V1bV90aHJlc2hvbGQiLCBSRUxPUFRfVFlQRV9J TlQsCiAJCW9mZnNldG9mKFN0ZFJkT3B0aW9ucywgYXV0b3ZhY3V1bSkgKyBvZmZzZXRvZihBdXRv VmFjT3B0cywgdmFjdXVtX3RocmVzaG9sZCl9LAogCQl7ImF1dG92YWN1dW1fdmFjdXVtX21heF90 aHJlc2hvbGQiLCBSRUxPUFRfVFlQRV9JTlQsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy92YWN1dW0uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCmluZGV4IDMzYTMz YmY2YjFjLi5mNzY2N2YxNDE0NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFj dXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKQEAgLTU3LDkgKzU3LDIx IEBACiAjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjX2hvb2tzLmgi CiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNp bmNsdWRlICJ1dGlscy9zbmFwbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIAor LyoKKyAqIE1pbmltdW0gbnVtYmVyIG9mIGRlYWQgdHVwbGVzIHJlcXVpcmVkIGZvciB0aGUgdGFi bGUncyBpbmRleGVzIHRvIGJlCisgKiBwcm9jZXNzZWQgaW4gcGFyYWxsZWwgZHVyaW5nIGF1dG92 YWN1dW0uCisgKi8KKyNkZWZpbmUgQVZfUEFSQUxMRUxfREVBRFRVUF9USFJFU0hPTEQJMTAyNAor CisvKgorICogSG93IG1hbnkgaW5kZXhlcyBzaG91bGQgcHJvY2VzcyBlYWNoIHBhcmFsbGVsIHdv cmtlciBkdXJpbmcgYXV0b3ZhY3V1bS4KKyAqLworI2RlZmluZSBOVU1fSU5ERVhFU19QRVJfUEFS QUxMRUxfV09SS0VSIDMwCisKIC8qCiAgKiBNaW5pbXVtIGludGVydmFsIGZvciBjb3N0LWJhc2Vk IHZhY3V1bSBkZWxheSByZXBvcnRzIGZyb20gYSBwYXJhbGxlbCB3b3JrZXIuCiAgKiBUaGlzIGFp bXMgdG8gYXZvaWQgc2VuZGluZyB0b28gbWFueSBtZXNzYWdlcyBhbmQgd2FraW5nIHVwIHRoZSBs ZWFkZXIgdG9vCkBAIC0yMjM0LDYgKzIyNDYsNDkgQEAgdmFjdXVtX3JlbChPaWQgcmVsaWQsIFJh bmdlVmFyICpyZWxhdGlvbiwgVmFjdXVtUGFyYW1zICpwYXJhbXMsCiAJZWxzZQogCQl0b2FzdF9y ZWxpZCA9IEludmFsaWRPaWQ7CiAKKwkvKgorCSAqIElmIHdlIGFyZSBydW5uaW5nIGF1dG92YWN1 dW0gLSBkZWNpZGUgd2hldGhlciB3ZSBuZWVkIHRvIHByb2Nlc3MgaW5kZXhlcworCSAqIG9mIHRh YmxlIHdpdGggZ2l2ZW4gb2lkIGluIHBhcmFsbGVsLgorCSAqLworCWlmIChBbUF1dG9WYWN1dW1X b3JrZXJQcm9jZXNzKCkgJiYKKwkJcGFyYW1zLT5pbmRleF9jbGVhbnVwICE9IFZBQ09QVFZBTFVF X0RJU0FCTEVEICYmCisJCVJlbGF0aW9uQWxsb3dzUGFyYWxsZWxJZHhBdXRvdmFjKHJlbCkpCisJ eworCQlQZ1N0YXRfU3RhdFRhYkVudHJ5ICp0YWJlbnRyeTsKKworCQkvKiBmZXRjaCB0aGUgcGdz dGF0IHRhYmxlIGVudHJ5ICovCisJCXRhYmVudHJ5ID0gcGdzdGF0X2ZldGNoX3N0YXRfdGFiZW50 cnlfZXh0KHJlbC0+cmRfcmVsLT5yZWxpc3NoYXJlZCwKKwkJCQkJCQkJCQkJCSAgcmVsLT5yZF9p ZCk7CisJCWlmICh0YWJlbnRyeSAmJiB0YWJlbnRyeS0+ZGVhZF90dXBsZXMgPj0gQVZfUEFSQUxM RUxfREVBRFRVUF9USFJFU0hPTEQpCisJCXsKKwkJCUxpc3QgICAqaW5kZXhlcyA9IFJlbGF0aW9u R2V0SW5kZXhMaXN0KHJlbCk7CisJCQlpbnQJCW51bV9pbmRleGVzID0gbGlzdF9sZW5ndGgoaW5k ZXhlcyk7CisKKwkJCWxpc3RfZnJlZShpbmRleGVzKTsKKworCQkJaWYgKGF2X3Jlc2VydmVkX3dv cmtlcnNfbnVtID4gMCkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFdlIHJlcXVlc3QgYXQgbGVhc3Qg b25lIHBhcmFsbGVsIHdvcmtlciwgaWYgdXNlciBzZXQKKwkJCQkgKiAncGFyYWxsZWxfaWR4X2F1 dG92YWNfZW5hYmxlZCcgb3B0aW9uLiBUaGUgdG90YWwgbnVtYmVyIG9mCisJCQkJICogYWRkaXRp b25hbCBwYXJhbGxlbCB3b3JrZXJzIGRlcGVuZHMgb24gaG93IG1hbnkgaW5kZXhlcyB0aGUKKwkJ CQkgKiB0YWJsZSBoYXMuIEZvciBub3cgd2UgYXNzdW1lIHRoYXQgZWFjaCBwYXJhbGxlbCB3b3Jr ZXIgc2hvdWxkCisJCQkJICogcHJvY2VzcyBOVU1fSU5ERVhFU19QRVJfUEFSQUxMRUxfV09SS0VS IGluZGV4ZXMuCisJCQkJICovCisJCQkJcGFyYW1zLT5ud29ya2VycyA9CisJCQkJCU1pbigobnVt X2luZGV4ZXMgLyBOVU1fSU5ERVhFU19QRVJfUEFSQUxMRUxfV09SS0VSKSArIDEsCisJCQkJCQlh dl9yZXNlcnZlZF93b3JrZXJzX251bSk7CisJCQl9CisJCQllbHNlCisJCQkJZXJlcG9ydChXQVJO SU5HLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0NPTkZJR1VSQVRJT05fTElNSVRfRVhDRUVERUQp LAorCQkJCQkgZXJybXNnKCJDYW5ub3QgbGF1bmNoIGFueSBzdXBwb3J0aXZlIHdvcmtlcnMgZm9y IHBhcmFsbGVsIGluZGV4IGNsZWFudXAgb2YgcmVsICVzIiwKKwkJCQkJCQlSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShyZWwpKSwKKwkJCQkJZXJyaGludCgiWW91IG1pZ2h0IG5lZWQgdG8gc2V0IHBh cmFtZXRlciBcImF2X3Jlc2VydmVkX3dvcmtlcnNfbnVtXCIgdG8gYSB2YWx1ZSA+IDAiKSkpOwor CisJCX0KKwl9CisKIAkvKgogCSAqIFN3aXRjaCB0byB0aGUgdGFibGUgb3duZXIncyB1c2VyaWQs IHNvIHRoYXQgYW55IGluZGV4IGZ1bmN0aW9ucyBhcmUgcnVuCiAJICogYXMgdGhhdCB1c2VyLiAg QWxzbyBsb2NrIGRvd24gc2VjdXJpdHktcmVzdHJpY3RlZCBvcGVyYXRpb25zIGFuZApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtcGFyYWxsZWwuYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3ZhY3V1bXBhcmFsbGVsLmMKaW5kZXggMmI5ZDU0OGNkZWIuLmUyYjNlNWIzNDNj IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW1wYXJhbGxlbC5jCisrKyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bXBhcmFsbGVsLmMKQEAgLTEsMTUgKzEsMTUgQEAK IC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIHZhY3V1bXBhcmFsbGVsLmMKLSAqCSAgU3VwcG9y dCByb3V0aW5lcyBmb3IgcGFyYWxsZWwgdmFjdXVtIGV4ZWN1dGlvbi4KKyAqCSAgU3VwcG9ydCBy b3V0aW5lcyBmb3IgcGFyYWxsZWwgW2F1dG9ddmFjdXVtIGV4ZWN1dGlvbi4KICAqCiAgKiBUaGlz IGZpbGUgY29udGFpbnMgcm91dGluZXMgdGhhdCBhcmUgaW50ZW5kZWQgdG8gc3VwcG9ydCBzZXR0 aW5nIHVwLCB1c2luZywKICAqIGFuZCB0ZWFyaW5nIGRvd24gYSBQYXJhbGxlbFZhY3V1bVN0YXRl LgogICoKLSAqIEluIGEgcGFyYWxsZWwgdmFjdXVtLCB3ZSBwZXJmb3JtIGJvdGggaW5kZXggYnVs ayBkZWxldGlvbiBhbmQgaW5kZXggY2xlYW51cAotICogd2l0aCBwYXJhbGxlbCB3b3JrZXIgcHJv Y2Vzc2VzLiAgSW5kaXZpZHVhbCBpbmRleGVzIGFyZSBwcm9jZXNzZWQgYnkgb25lCi0gKiB2YWN1 dW0gcHJvY2Vzcy4gIFBhcmFsbGVsVmFjdXVtU3RhdGUgY29udGFpbnMgc2hhcmVkIGluZm9ybWF0 aW9uIGFzIHdlbGwgYXMKLSAqIHRoZSBtZW1vcnkgc3BhY2UgZm9yIHN0b3JpbmcgZGVhZCBpdGVt cyBhbGxvY2F0ZWQgaW4gdGhlIERTQSBhcmVhLiAgV2UKKyAqIEluIGEgcGFyYWxsZWwgW2F1dG9d dmFjdXVtLCB3ZSBwZXJmb3JtIGJvdGggaW5kZXggYnVsayBkZWxldGlvbiBhbmQgaW5kZXgKKyAq IGNsZWFudXAgd2l0aCBwYXJhbGxlbCB3b3JrZXIgcHJvY2Vzc2VzLiAgSW5kaXZpZHVhbCBpbmRl eGVzIGFyZSBwcm9jZXNzZWQgYnkKKyAqIG9uZSB2YWN1dW0gcHJvY2Vzcy4gIFBhcmFsbGVsVmFj dXVtU3RhdGUgY29udGFpbnMgc2hhcmVkIGluZm9ybWF0aW9uIGFzIHdlbGwKKyAqIGFzIHRoZSBt ZW1vcnkgc3BhY2UgZm9yIHN0b3JpbmcgZGVhZCBpdGVtcyBhbGxvY2F0ZWQgaW4gdGhlIERTQSBh cmVhLiAgV2UKICAqIGxhdW5jaCBwYXJhbGxlbCB3b3JrZXIgcHJvY2Vzc2VzIGF0IHRoZSBzdGFy dCBvZiBwYXJhbGxlbCBpbmRleAogICogYnVsay1kZWxldGlvbiBhbmQgaW5kZXggY2xlYW51cCBh bmQgb25jZSBhbGwgaW5kZXhlcyBhcmUgcHJvY2Vzc2VkLCB0aGUKICAqIHBhcmFsbGVsIHdvcmtl ciBwcm9jZXNzZXMgZXhpdC4gIEVhY2ggdGltZSB3ZSBwcm9jZXNzIGluZGV4ZXMgaW4gcGFyYWxs ZWwsCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVudC5oIgog I2luY2x1ZGUgIm9wdGltaXplci9wYXRocy5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1 ZGUgInBvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgi CiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5o IgpAQCAtMTU3LDcgKzE1OCw4IEBAIHR5cGVkZWYgc3RydWN0IFBWSW5kU3RhdHMKIH0gUFZJbmRT dGF0czsKIAogLyoKLSAqIFN0cnVjdCBmb3IgbWFpbnRhaW5pbmcgYSBwYXJhbGxlbCB2YWN1dW0g c3RhdGUuIHR5cGVkZWYgYXBwZWFycyBpbiB2YWN1dW0uaC4KKyAqIFN0cnVjdCBmb3IgbWFpbnRh aW5pbmcgYSBwYXJhbGxlbCBbYXV0b112YWN1dW0gc3RhdGUuIHR5cGVkZWYgYXBwZWFycyBpbgor ICogdmFjdXVtLmguCiAgKi8KIHN0cnVjdCBQYXJhbGxlbFZhY3V1bVN0YXRlCiB7CkBAIC0zNzEs MTAgKzM3MywxOCBAQCBwYXJhbGxlbF92YWN1dW1faW5pdChSZWxhdGlvbiByZWwsIFJlbGF0aW9u ICppbmRyZWxzLCBpbnQgbmluZGV4ZXMsCiAJc2hhcmVkLT5yZWxpZCA9IFJlbGF0aW9uR2V0UmVs aWQocmVsKTsKIAlzaGFyZWQtPmVsZXZlbCA9IGVsZXZlbDsKIAlzaGFyZWQtPnF1ZXJ5aWQgPSBw Z3N0YXRfZ2V0X215X3F1ZXJ5X2lkKCk7Ci0Jc2hhcmVkLT5tYWludGVuYW5jZV93b3JrX21lbV93 b3JrZXIgPQotCQkobmluZGV4ZXNfbXdtID4gMCkgPwotCQltYWludGVuYW5jZV93b3JrX21lbSAv IE1pbihwYXJhbGxlbF93b3JrZXJzLCBuaW5kZXhlc19td20pIDoKLQkJbWFpbnRlbmFuY2Vfd29y a19tZW07CisKKwlpZiAoQW1BdXRvVmFjdXVtV29ya2VyUHJvY2VzcygpKQorCQlzaGFyZWQtPm1h aW50ZW5hbmNlX3dvcmtfbWVtX3dvcmtlciA9CisJCQkobmluZGV4ZXNfbXdtID4gMCkgPworCQkJ YXV0b3ZhY3V1bV93b3JrX21lbSAvIE1pbihwYXJhbGxlbF93b3JrZXJzLCBuaW5kZXhlc19td20p IDoKKwkJCWF1dG92YWN1dW1fd29ya19tZW07CisJZWxzZQorCQlzaGFyZWQtPm1haW50ZW5hbmNl X3dvcmtfbWVtX3dvcmtlciA9CisJCQkobmluZGV4ZXNfbXdtID4gMCkgPworCQkJbWFpbnRlbmFu Y2Vfd29ya19tZW0gLyBNaW4ocGFyYWxsZWxfd29ya2VycywgbmluZGV4ZXNfbXdtKSA6CisJCQlt YWludGVuYW5jZV93b3JrX21lbTsKKwogCXNoYXJlZC0+ZGVhZF9pdGVtc19pbmZvLm1heF9ieXRl cyA9IHZhY193b3JrX21lbSAqIChzaXplX3QpIDEwMjQ7CiAKIAkvKiBQcmVwYXJlIERTQSBzcGFj ZSBmb3IgZGVhZCBpdGVtcyAqLwpAQCAtNTU4LDcgKzU2OCw5IEBAIHBhcmFsbGVsX3ZhY3V1bV9j b21wdXRlX3dvcmtlcnMoUmVsYXRpb24gKmluZHJlbHMsIGludCBuaW5kZXhlcywgaW50IG5yZXF1 ZXN0ZWQsCiAJICogV2UgZG9uJ3QgYWxsb3cgcGVyZm9ybWluZyBwYXJhbGxlbCBvcGVyYXRpb24g aW4gc3RhbmRhbG9uZSBiYWNrZW5kIG9yCiAJICogd2hlbiBwYXJhbGxlbGlzbSBpcyBkaXNhYmxl ZC4KIAkgKi8KLQlpZiAoIUlzVW5kZXJQb3N0bWFzdGVyIHx8IG1heF9wYXJhbGxlbF9tYWludGVu YW5jZV93b3JrZXJzID09IDApCisJaWYgKCFJc1VuZGVyUG9zdG1hc3RlciB8fAorCQkoYXZfcmVz ZXJ2ZWRfd29ya2Vyc19udW0gPT0gMCAmJiBBbUF1dG9WYWN1dW1Xb3JrZXJQcm9jZXNzKCkpIHx8 CisJCShtYXhfcGFyYWxsZWxfbWFpbnRlbmFuY2Vfd29ya2VycyA9PSAwICYmICFBbUF1dG9WYWN1 dW1Xb3JrZXJQcm9jZXNzKCkpKQogCQlyZXR1cm4gMDsKIAogCS8qCkBAIC01OTcsMTUgKzYwOSwx NyBAQCBwYXJhbGxlbF92YWN1dW1fY29tcHV0ZV93b3JrZXJzKFJlbGF0aW9uICppbmRyZWxzLCBp bnQgbmluZGV4ZXMsIGludCBucmVxdWVzdGVkLAogCXBhcmFsbGVsX3dvcmtlcnMgPSAobnJlcXVl c3RlZCA+IDApID8KIAkJTWluKG5yZXF1ZXN0ZWQsIG5pbmRleGVzX3BhcmFsbGVsKSA6IG5pbmRl eGVzX3BhcmFsbGVsOwogCi0JLyogQ2FwIGJ5IG1heF9wYXJhbGxlbF9tYWludGVuYW5jZV93b3Jr ZXJzICovCi0JcGFyYWxsZWxfd29ya2VycyA9IE1pbihwYXJhbGxlbF93b3JrZXJzLCBtYXhfcGFy YWxsZWxfbWFpbnRlbmFuY2Vfd29ya2Vycyk7CisJLyogQ2FwIGJ5IEdVQyB2YXJpYWJsZSAqLwor CXBhcmFsbGVsX3dvcmtlcnMgPSBBbUF1dG9WYWN1dW1Xb3JrZXJQcm9jZXNzKCkgPworCQlNaW4o cGFyYWxsZWxfd29ya2VycywgYXZfcmVzZXJ2ZWRfd29ya2Vyc19udW0pIDoKKwkJTWluKHBhcmFs bGVsX3dvcmtlcnMsIG1heF9wYXJhbGxlbF9tYWludGVuYW5jZV93b3JrZXJzKTsKIAogCXJldHVy biBwYXJhbGxlbF93b3JrZXJzOwogfQogCiAvKgogICogUGVyZm9ybSBpbmRleCB2YWN1dW0gb3Ig aW5kZXggY2xlYW51cCB3aXRoIHBhcmFsbGVsIHdvcmtlcnMuICBUaGlzIGZ1bmN0aW9uCi0gKiBt dXN0IGJlIHVzZWQgYnkgdGhlIHBhcmFsbGVsIHZhY3V1bSBsZWFkZXIgcHJvY2Vzcy4KKyAqIG11 c3QgYmUgdXNlZCBieSB0aGUgcGFyYWxsZWwgW2F1dG9ddmFjdXVtIGxlYWRlciBwcm9jZXNzLgog ICovCiBzdGF0aWMgdm9pZAogcGFyYWxsZWxfdmFjdXVtX3Byb2Nlc3NfYWxsX2luZGV4ZXMoUGFy YWxsZWxWYWN1dW1TdGF0ZSAqcHZzLCBpbnQgbnVtX2luZGV4X3NjYW5zLApAQCAtOTgyLDggKzk5 Niw4IEBAIHBhcmFsbGVsX3ZhY3V1bV9pbmRleF9pc19wYXJhbGxlbF9zYWZlKFJlbGF0aW9uIGlu ZHJlbCwgaW50IG51bV9pbmRleF9zY2FucywKIC8qCiAgKiBQZXJmb3JtIHdvcmsgd2l0aGluIGEg bGF1bmNoZWQgcGFyYWxsZWwgcHJvY2Vzcy4KICAqCi0gKiBTaW5jZSBwYXJhbGxlbCB2YWN1dW0g d29ya2VycyBwZXJmb3JtIG9ubHkgaW5kZXggdmFjdXVtIG9yIGluZGV4IGNsZWFudXAsCi0gKiB3 ZSBkb24ndCBuZWVkIHRvIHJlcG9ydCBwcm9ncmVzcyBpbmZvcm1hdGlvbi4KKyAqIFNpbmNlIHBh cmFsbGVsIFthdXRvXXZhY3V1bSB3b3JrZXJzIHBlcmZvcm0gb25seSBpbmRleCB2YWN1dW0gb3Ig aW5kZXgKKyAqIGNsZWFudXAsIHdlIGRvbid0IG5lZWQgdG8gcmVwb3J0IHByb2dyZXNzIGluZm9y bWF0aW9uLgogICovCiB2b2lkCiBwYXJhbGxlbF92YWN1dW1fbWFpbihkc21fc2VnbWVudCAqc2Vn LCBzaG1fdG9jICp0b2MpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92 YWN1dW0uYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jCmluZGV4IDE2NzU2 MTUyYjcxLi43MjVkMzIzMWY3NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9h dXRvdmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMKQEAg LTM0MDYsNiArMzQwNiwxNSBAQCBjaGVja19hdXRvdmFjdXVtX3dvcmtfbWVtKGludCAqbmV3dmFs LCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCiAJcmV0dXJuIHRydWU7CiB9CiAKK2Jv b2wKK2NoZWNrX2F1dG92YWN1dW1fcmVzZXJ2ZWRfd29ya2Vyc19udW0oaW50ICpuZXd2YWwsIHZv aWQgKipleHRyYSwKKwkJCQkJCQkJCSAgR3VjU291cmNlIHNvdXJjZSkKK3sKKwlpZiAoKm5ld3Zh bCA+IChtYXhfd29ya2VyX3Byb2Nlc3NlcyAtIDgpKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJu IHRydWU7Cit9CisKIC8qCiAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlcmUgaXMgYSBmcmVlIGF1dG92 YWN1dW0gd29ya2VyIHNsb3QgYXZhaWxhYmxlLgogICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2Vy LmMKaW5kZXggMTE2ZGRmN2I4MzUuLmNiODZkYjk5ZGE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dv cmtlci5jCkBAIC0xMDQ2LDYgKzEwNDYsOCBAQCBSZWdpc3RlckR5bmFtaWNCYWNrZ3JvdW5kV29y a2VyKEJhY2tncm91bmRXb3JrZXIgKndvcmtlciwKIAkJCQkJCQkJQmFja2dyb3VuZFdvcmtlckhh bmRsZSAqKmhhbmRsZSkKIHsKIAlpbnQJCQlzbG90bm87CisJaW50CQkJZnJvbTsKKwlpbnQJCQl1 cHRvOwogCWJvb2wJCXN1Y2Nlc3MgPSBmYWxzZTsKIAlib29sCQlwYXJhbGxlbDsKIAl1aW50NjQJ CWdlbmVyYXRpb24gPSAwOwpAQCAtMTA4OCwxMCArMTA5MCwyMyBAQCBSZWdpc3RlckR5bmFtaWNC YWNrZ3JvdW5kV29ya2VyKEJhY2tncm91bmRXb3JrZXIgKndvcmtlciwKIAkJcmV0dXJuIGZhbHNl OwogCX0KIAorCS8qCisJICogRGV0ZXJtaW5lIHJhbmdlIG9mIHdvcmtlcnMgaW4gcG9vbCwgdGhh dCB3ZSBjYW4gdXNlIChsYXN0CisJICogJ2F2X3Jlc2VydmVkX3dvcmtlcnNfbnVtJyBpcyByZXNl cnZlZCBmb3IgYXV0b3ZhY3V1bSB3b3JrZXJzKS4KKwkgKi8KKworCWZyb20gPSBBbUF1dG9WYWN1 dW1Xb3JrZXJQcm9jZXNzKCkgPworCQlCYWNrZ3JvdW5kV29ya2VyRGF0YS0+dG90YWxfc2xvdHMg LSBhdl9yZXNlcnZlZF93b3JrZXJzX251bSA6CisJCTA7CisKKwl1cHRvID0gQW1BdXRvVmFjdXVt V29ya2VyUHJvY2VzcygpID8KKwkJQmFja2dyb3VuZFdvcmtlckRhdGEtPnRvdGFsX3Nsb3RzIDoK KwkJQmFja2dyb3VuZFdvcmtlckRhdGEtPnRvdGFsX3Nsb3RzIC0gYXZfcmVzZXJ2ZWRfd29ya2Vy c19udW07CisKIAkvKgogCSAqIExvb2sgZm9yIGFuIHVudXNlZCBzbG90LiAgSWYgd2UgZmluZCBv bmUsIGdyYWIgaXQuCiAJICovCi0JZm9yIChzbG90bm8gPSAwOyBzbG90bm8gPCBCYWNrZ3JvdW5k V29ya2VyRGF0YS0+dG90YWxfc2xvdHM7ICsrc2xvdG5vKQorCWZvciAoc2xvdG5vID0gZnJvbTsg c2xvdG5vIDwgdXB0bzsgKytzbG90bm8pCiAJewogCQlCYWNrZ3JvdW5kV29ya2VyU2xvdCAqc2xv dCA9ICZCYWNrZ3JvdW5kV29ya2VyRGF0YS0+c2xvdFtzbG90bm9dOwogCkBAIC0xMTU5LDcgKzEx NzQsMTMgQEAgR2V0QmFja2dyb3VuZFdvcmtlclBpZChCYWNrZ3JvdW5kV29ya2VySGFuZGxlICpo YW5kbGUsIHBpZF90ICpwaWRwKQogCUJhY2tncm91bmRXb3JrZXJTbG90ICpzbG90OwogCXBpZF90 CQlwaWQ7CiAKLQlBc3NlcnQoaGFuZGxlLT5zbG90IDwgbWF4X3dvcmtlcl9wcm9jZXNzZXMpOwor CS8qIE9ubHkgYXV0b3ZhY3V1bSBjYW4gdXNlIGxhc3QgJ2F2X3Jlc2VydmVkX3dvcmtlcnNfbnVt JyB3b3JrZXJzIGluIHBvb2wuICovCisJaWYgKCFBbUF1dG9WYWN1dW1Xb3JrZXJQcm9jZXNzKCkp CisJCUFzc2VydChoYW5kbGUtPnNsb3QgPCBtYXhfd29ya2VyX3Byb2Nlc3NlcyAtIGF2X3Jlc2Vy dmVkX3dvcmtlcnNfbnVtKTsKKwllbHNlCisJCUFzc2VydChoYW5kbGUtPnNsb3QgPCBtYXhfd29y a2VyX3Byb2Nlc3NlcyAmJgorCQkJICAgaGFuZGxlLT5zbG90ID49IG1heF93b3JrZXJfcHJvY2Vz c2VzIC0gYXZfcmVzZXJ2ZWRfd29ya2Vyc19udW0pOworCiAJc2xvdCA9ICZCYWNrZ3JvdW5kV29y a2VyRGF0YS0+c2xvdFtoYW5kbGUtPnNsb3RdOwogCiAJLyoKQEAgLTEyOTgsNyArMTMxOSwxMyBA QCBUZXJtaW5hdGVCYWNrZ3JvdW5kV29ya2VyKEJhY2tncm91bmRXb3JrZXJIYW5kbGUgKmhhbmRs ZSkKIAlCYWNrZ3JvdW5kV29ya2VyU2xvdCAqc2xvdDsKIAlib29sCQlzaWduYWxfcG9zdG1hc3Rl ciA9IGZhbHNlOwogCi0JQXNzZXJ0KGhhbmRsZS0+c2xvdCA8IG1heF93b3JrZXJfcHJvY2Vzc2Vz KTsKKwkvKiBPbmx5IGF1dG92YWN1dW0gY2FuIHVzZSBsYXN0ICdhdl9yZXNlcnZlZF93b3JrZXJz X251bScgd29ya2VycyBpbiBwb29sLiAqLworCWlmICghQW1BdXRvVmFjdXVtV29ya2VyUHJvY2Vz cygpKQorCQlBc3NlcnQoaGFuZGxlLT5zbG90IDwgbWF4X3dvcmtlcl9wcm9jZXNzZXMgLSBhdl9y ZXNlcnZlZF93b3JrZXJzX251bSk7CisJZWxzZQorCQlBc3NlcnQoaGFuZGxlLT5zbG90IDwgbWF4 X3dvcmtlcl9wcm9jZXNzZXMgJiYKKwkJCSAgIGhhbmRsZS0+c2xvdCA+PSBtYXhfd29ya2VyX3By b2Nlc3NlcyAtIGF2X3Jlc2VydmVkX3dvcmtlcnNfbnVtKTsKKwogCXNsb3QgPSAmQmFja2dyb3Vu ZFdvcmtlckRhdGEtPnNsb3RbaGFuZGxlLT5zbG90XTsKIAogCS8qIFNldCB0ZXJtaW5hdGUgZmxh ZyBpbiBzaGFyZWQgbWVtb3J5LCB1bmxlc3Mgc2xvdCBoYXMgYmVlbiByZXVzZWQuICovCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2luaXQvZ2xvYmFscy5jCmluZGV4IDkyYjA0NDZiODBjLi5jZmYxM2VmNmJkNyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvaW5pdC9nbG9iYWxzLmMKQEAgLTE0NCw2ICsxNDQsNyBAQCBpbnQJCQlOQnVmZmVycyA9 IDE2Mzg0OwogaW50CQkJTWF4Q29ubmVjdGlvbnMgPSAxMDA7CiBpbnQJCQltYXhfd29ya2VyX3By b2Nlc3NlcyA9IDg7CiBpbnQJCQltYXhfcGFyYWxsZWxfd29ya2VycyA9IDg7CitpbnQgICAgICAg ICBhdl9yZXNlcnZlZF93b3JrZXJzX251bSA9IDA7CiBpbnQJCQlNYXhCYWNrZW5kcyA9IDA7CiAK IC8qIEdVQyBwYXJhbWV0ZXJzIGZvciB2YWN1dW0gKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFi bGVzLmMKaW5kZXggMmY4Y2JkODY3NTkuLjg3Y2Q0ZTIwNzg2IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNj L2d1Y190YWJsZXMuYwpAQCAtMzYwNCw2ICszNjA0LDE5IEBAIHN0cnVjdCBjb25maWdfaW50IENv bmZpZ3VyZU5hbWVzSW50W10gPQogCQlOVUxMLCBOVUxMLCBOVUxMCiAJfSwKIAorCXsKKwkJeyJh dXRvdmFjdXVtX3Jlc2VydmVkX3dvcmtlcnNfbnVtIiwgUEdDX1VTRVJTRVQsIFJFU09VUkNFU19X T1JLRVJfUFJPQ0VTU0VTLAorCQkJZ2V0dGV4dF9ub29wKCJOdW1iZXIgb2Ygd29ya2VyIHByb2Nl c3NlcywgcmVzZXJ2ZWQgZm9yIHBhcnRpY2lwYXRpb24gaW4gcGFyYWxsZWwgaW5kZXggcHJvY2Vz c2luZyBkdXJpbmcgYXV0b3ZhY3V1bS4iKSwKKwkJCWdldHRleHRfbm9vcCgiVGhpcyBwYXJhbWV0 ZXIgaXMgZGVwZW5kaW5nIG9uIFwibWF4X3dvcmtlcl9wcm9jZXNzZXNcIiAobm90IG9uIFwiYXV0 b3ZhY3V1bV9tYXhfd29ya2Vyc1wiKS4gIgorCQkJCQkJICIqT25seSogYXV0b3ZhY3V1bSB3b3Jr ZXJzIGNhbiB1c2UgdGhlc2UgYWRkaXRpb25hbCBwcm9jZXNzZXMuICIKKwkJCQkJCSAiQWxzbywg dGhlc2UgcHJvY2Vzc2VzIGFyZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gXCJtYXhfcGFyYWxsZWxf d29ya2Vyc1wiLiIpLAorCQkJTlVMTCwKKwkJfSwKKwkJJmF2X3Jlc2VydmVkX3dvcmtlcnNfbnVt LAorCQkwLCAwLCBNQVhfQkFDS0VORFMsCisJCWNoZWNrX2F1dG92YWN1dW1fcmVzZXJ2ZWRfd29y a2Vyc19udW0sIE5VTEwsIE5VTEwKKwl9LAorCiAJewogCQl7Im1heF9wYXJhbGxlbF9tYWludGVu YW5jZV93b3JrZXJzIiwgUEdDX1VTRVJTRVQsIFJFU09VUkNFU19XT1JLRVJfUFJPQ0VTU0VTLAog CQkJZ2V0dGV4dF9ub29wKCJTZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXJhbGxlbCBwcm9j ZXNzZXMgcGVyIG1haW50ZW5hbmNlIG9wZXJhdGlvbi4iKSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCAzNDgyNmQwMTM4MC4uMmUzOGJhZGEy YjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNh bXBsZQorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUK QEAgLTIyMyw2ICsyMjMsNyBAQAogI21heF9wYXJhbGxlbF9tYWludGVuYW5jZV93b3JrZXJzID0g MgkjIGxpbWl0ZWQgYnkgbWF4X3BhcmFsbGVsX3dvcmtlcnMKICNtYXhfcGFyYWxsZWxfd29ya2Vy cyA9IDgJCSMgbnVtYmVyIG9mIG1heF93b3JrZXJfcHJvY2Vzc2VzIHRoYXQKIAkJCQkJIyBjYW4g YmUgdXNlZCBpbiBwYXJhbGxlbCBvcGVyYXRpb25zCisjYXV0b3ZhY3V1bV9yZXNlcnZlZF93b3Jr ZXJzX251bSA9IDAJIyBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCBsaW1pdGVkIGJ5IG1heF9wYXJh bGxlbF93b3JrZXJzCiAjcGFyYWxsZWxfbGVhZGVyX3BhcnRpY2lwYXRpb24gPSBvbgogCiAKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWlu LmgKaW5kZXggMWU1OWE3ZjkxMGYuLjk5MmM2YjYzMjI2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9taXNjYWRtaW4uaAorKysgYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaApAQCAtMTc3LDYgKzE3 Nyw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgTkJ1ZmZlcnM7CiBleHRlcm4gUEdETExJTVBP UlQgaW50IE1heEJhY2tlbmRzOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBNYXhDb25uZWN0aW9u czsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3dvcmtlcl9wcm9jZXNzZXM7CitleHRlcm4g UEdETExJTVBPUlQgaW50IGF2X3Jlc2VydmVkX3dvcmtlcnNfbnVtOwogZXh0ZXJuIFBHRExMSU1Q T1JUIGludCBtYXhfcGFyYWxsZWxfd29ya2VyczsKIAogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBj b21taXRfdGltZXN0YW1wX2J1ZmZlcnM7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9n dWNfaG9va3MuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2d1Y19ob29rcy5oCmluZGV4IDc5OWZhN2Fj ZTY4Li45OTEzYzZlNDY4MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvZ3VjX2hvb2tz LmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvZ3VjX2hvb2tzLmgKQEAgLTMxLDYgKzMxLDggQEAg ZXh0ZXJuIHZvaWQgYXNzaWduX2FwcGxpY2F0aW9uX25hbWUoY29uc3QgY2hhciAqbmV3dmFsLCB2 b2lkICpleHRyYSk7CiBleHRlcm4gY29uc3QgY2hhciAqc2hvd19hcmNoaXZlX2NvbW1hbmQodm9p ZCk7CiBleHRlcm4gYm9vbCBjaGVja19hdXRvdmFjdXVtX3dvcmtfbWVtKGludCAqbmV3dmFsLCB2 b2lkICoqZXh0cmEsCiAJCQkJCQkJCQkgIEd1Y1NvdXJjZSBzb3VyY2UpOworYm9vbCBjaGVja19h dXRvdmFjdXVtX3Jlc2VydmVkX3dvcmtlcnNfbnVtKGludCAqbmV3dmFsLCB2b2lkICoqZXh0cmEs CisJCQkJCQkJCQkJICAgR3VjU291cmNlIHNvdXJjZSk7CiBleHRlcm4gYm9vbCBjaGVja192YWN1 dW1fYnVmZmVyX3VzYWdlX2xpbWl0KGludCAqbmV3dmFsLCB2b2lkICoqZXh0cmEsCiAJCQkJCQkJ CQkJCUd1Y1NvdXJjZSBzb3VyY2UpOwogZXh0ZXJuIGJvb2wgY2hlY2tfYmFja3RyYWNlX2Z1bmN0 aW9ucyhjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS91dGlscy9yZWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCmluZGV4IGI1NTIzNTk5MTVm Li41NWFhNWM0NWJlMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKKysrIGIv c3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKQEAgLTMxMSw2ICszMTEsNyBAQCB0eXBlZGVmIHN0cnVj dCBGb3JlaWduS2V5Q2FjaGVJbmZvCiB0eXBlZGVmIHN0cnVjdCBBdXRvVmFjT3B0cwogewogCWJv b2wJCWVuYWJsZWQ7CisJYm9vbAkJcGFyYWxsZWxfaWR4X2F1dG92YWNfZW5hYmxlZDsKIAlpbnQJ CQl2YWN1dW1fdGhyZXNob2xkOwogCWludAkJCXZhY3V1bV9tYXhfdGhyZXNob2xkOwogCWludAkJ CXZhY3V1bV9pbnNfdGhyZXNob2xkOwpAQCAtNDA5LDYgKzQxMCwxNSBAQCB0eXBlZGVmIHN0cnVj dCBTdGRSZE9wdGlvbnMKIAkoKHJlbGF0aW9uKS0+cmRfb3B0aW9ucyA/IFwKIAkgKChTdGRSZE9w dGlvbnMgKikgKHJlbGF0aW9uKS0+cmRfb3B0aW9ucyktPnBhcmFsbGVsX3dvcmtlcnMgOiAoZGVm YXVsdHB3KSkKIAorLyoKKyAqIFJlbGF0aW9uQWxsb3dzUGFyYWxsZWxJZHhBdXRvdmFjCisgKgkJ UmV0dXJucyB3aGV0aGVyIHRoZSByZWxhdGlvbidzIGluZGV4ZXMgY2FuIGJlIHByb2Nlc3NlZCBp biBwYXJhbGxlbAorICoJCWR1cmluZyBhdXRvdmFjdXVtLiBOb3RlIG11bHRpcGxlIGV2YWwgb2Yg YXJndW1lbnQhCisgKi8KKyNkZWZpbmUgUmVsYXRpb25BbGxvd3NQYXJhbGxlbElkeEF1dG92YWMo cmVsYXRpb24pIFwKKwkoKHJlbGF0aW9uKS0+cmRfb3B0aW9ucyA/IFwKKwkgKChTdGRSZE9wdGlv bnMgKikgKHJlbGF0aW9uKS0+cmRfb3B0aW9ucyktPmF1dG92YWN1dW0ucGFyYWxsZWxfaWR4X2F1 dG92YWNfZW5hYmxlZCA6IGZhbHNlKQorCiAvKiBWaWV3T3B0aW9ucy0+Y2hlY2tfb3B0aW9uIHZh bHVlcyAqLwogdHlwZWRlZiBlbnVtIFZpZXdPcHRDaGVja09wdGlvbgogewpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy9hdXRvdmFjdXVtLy5naXRpZ25vcmUgYi9zcmMvdGVzdC9tb2R1bGVz L2F1dG92YWN1dW0vLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uMGI1NDY0MWJjZWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL2F1 dG92YWN1dW0vLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACisvdG1wX2NoZWNrLwpcIE5vIG5ld2xp bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvYXV0b3ZhY3V1 bS9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS9NYWtlZmlsZQpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTBjMDBmZjM1MGIKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL2F1dG92YWN1dW0vTWFrZWZpbGUKQEAgLTAsMCArMSwx NCBAQAorIyBzcmMvdGVzdC9tb2R1bGVzL2F1dG92YWN1dW0vTWFrZWZpbGUKKworVEFQX1RFU1RT ID0gMQorCitpZmRlZiBVU0VfUEdYUworUEdfQ09ORklHID0gcGdfY29uZmlnCitQR1hTIDo9ICQo c2hlbGwgJChQR19DT05GSUcpIC0tcGd4cykKK2luY2x1ZGUgJChQR1hTKQorZWxzZQorc3ViZGly ID0gc3JjL3Rlc3QvbW9kdWxlcy9hdXRvdmFjdXVtCit0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLi8u LgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAk KHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmClwgTm8gbmV3bGlu ZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9hdXRvdmFjdXVt L3QvMDAxX2F1dG92YWNfcGFyYWxsZWwucGwgYi9zcmMvdGVzdC9tb2R1bGVzL2F1dG92YWN1dW0v dC8wMDFfYXV0b3ZhY19wYXJhbGxlbC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uYTM3YWFmNzIwZjIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVz L2F1dG92YWN1dW0vdC8wMDFfYXV0b3ZhY19wYXJhbGxlbC5wbApAQCAtMCwwICsxLDEyOSBAQAor dXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0 ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworbXkg JHBzcWxfb3V0OworCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygn bm9kZTEnKTsKKyRub2RlLT5pbml0OworJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNv bmYnLCBxcXsKKwlhdXRvdmFjdXVtID0gb2ZmCisJbWF4X3dhbF9zaXplID0gNDA5NgorCW1heF93 b3JrZXJfcHJvY2Vzc2VzID0gMjAKKwltYXhfcGFyYWxsZWxfd29ya2VycyA9IDIwCisJbWF4X3Bh cmFsbGVsX21haW50ZW5hbmNlX3dvcmtlcnMgPSAyMAorIAlhdXRvdmFjdXVtX3Jlc2VydmVkX3dv cmtlcnNfbnVtID0gMQorfSk7Ciskbm9kZS0+c3RhcnQ7CisKK215ICRpbmRleGVzX251bSA9IDgw OworbXkgJGluaXRpYWxfcm93c19udW0gPSAxMDBfMDAwOworCisjIENyZWF0ZSBiaWcgdGFibGUg YW5kIGNyZWF0ZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGItdHJlZSBpbmRleGVzIG9uIGl0Ciskbm9k ZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxeworCUNSRUFURSBUQUJMRSB0ZXN0X2F1dG92YWMg KAorCQlpZCBTRVJJQUwgUFJJTUFSWSBLRVksCisJCWNvbF8xIElOVEVHRVIsICBjb2xfMiBJTlRF R0VSLCAgY29sXzMgSU5URUdFUiwgIGNvbF80IElOVEVHRVIsICBjb2xfNSBJTlRFR0VSLAorCQlj b2xfNiBJTlRFR0VSLCAgY29sXzcgSU5URUdFUiwgIGNvbF84IElOVEVHRVIsICBjb2xfOSBJTlRF R0VSLCAgY29sXzEwIElOVEVHRVIsCisJCWNvbF8xMSBJTlRFR0VSLCBjb2xfMTIgSU5URUdFUiwg Y29sXzEzIElOVEVHRVIsIGNvbF8xNCBJTlRFR0VSLCBjb2xfMTUgSU5URUdFUiwKKwkJY29sXzE2 IElOVEVHRVIsIGNvbF8xNyBJTlRFR0VSLCBjb2xfMTggSU5URUdFUiwgY29sXzE5IElOVEVHRVIs IGNvbF8yMCBJTlRFR0VSLAorCQljb2xfMjEgSU5URUdFUiwgY29sXzIyIElOVEVHRVIsIGNvbF8y MyBJTlRFR0VSLCBjb2xfMjQgSU5URUdFUiwgY29sXzI1IElOVEVHRVIsCisJCWNvbF8yNiBJTlRF R0VSLCBjb2xfMjcgSU5URUdFUiwgY29sXzI4IElOVEVHRVIsIGNvbF8yOSBJTlRFR0VSLCBjb2xf MzAgSU5URUdFUiwKKwkJY29sXzMxIElOVEVHRVIsIGNvbF8zMiBJTlRFR0VSLCBjb2xfMzMgSU5U RUdFUiwgY29sXzM0IElOVEVHRVIsIGNvbF8zNSBJTlRFR0VSLAorCQljb2xfMzYgSU5URUdFUiwg Y29sXzM3IElOVEVHRVIsIGNvbF8zOCBJTlRFR0VSLCBjb2xfMzkgSU5URUdFUiwgY29sXzQwIElO VEVHRVIsCisJCWNvbF80MSBJTlRFR0VSLCBjb2xfNDIgSU5URUdFUiwgY29sXzQzIElOVEVHRVIs IGNvbF80NCBJTlRFR0VSLCBjb2xfNDUgSU5URUdFUiwKKwkJY29sXzQ2IElOVEVHRVIsIGNvbF80 NyBJTlRFR0VSLCBjb2xfNDggSU5URUdFUiwgY29sXzQ5IElOVEVHRVIsIGNvbF81MCBJTlRFR0VS LAorCQljb2xfNTEgSU5URUdFUiwgY29sXzUyIElOVEVHRVIsIGNvbF81MyBJTlRFR0VSLCBjb2xf NTQgSU5URUdFUiwgY29sXzU1IElOVEVHRVIsCisJCWNvbF81NiBJTlRFR0VSLCBjb2xfNTcgSU5U RUdFUiwgY29sXzU4IElOVEVHRVIsIGNvbF81OSBJTlRFR0VSLCBjb2xfNjAgSU5URUdFUiwKKwkJ Y29sXzYxIElOVEVHRVIsIGNvbF82MiBJTlRFR0VSLCBjb2xfNjMgSU5URUdFUiwgY29sXzY0IElO VEVHRVIsIGNvbF82NSBJTlRFR0VSLAorCQljb2xfNjYgSU5URUdFUiwgY29sXzY3IElOVEVHRVIs IGNvbF82OCBJTlRFR0VSLCBjb2xfNjkgSU5URUdFUiwgY29sXzcwIElOVEVHRVIsCisJCWNvbF83 MSBJTlRFR0VSLCBjb2xfNzIgSU5URUdFUiwgY29sXzczIElOVEVHRVIsIGNvbF83NCBJTlRFR0VS LCBjb2xfNzUgSU5URUdFUiwKKwkJY29sXzc2IElOVEVHRVIsIGNvbF83NyBJTlRFR0VSLCBjb2xf NzggSU5URUdFUiwgY29sXzc5IElOVEVHRVIsIGNvbF84MCBJTlRFR0VSLAorCQljb2xfODEgSU5U RUdFUiwgY29sXzgyIElOVEVHRVIsIGNvbF84MyBJTlRFR0VSLCBjb2xfODQgSU5URUdFUiwgY29s Xzg1IElOVEVHRVIsCisJCWNvbF84NiBJTlRFR0VSLCBjb2xfODcgSU5URUdFUiwgY29sXzg4IElO VEVHRVIsIGNvbF84OSBJTlRFR0VSLCBjb2xfOTAgSU5URUdFUiwKKwkJY29sXzkxIElOVEVHRVIs IGNvbF85MiBJTlRFR0VSLCBjb2xfOTMgSU5URUdFUiwgY29sXzk0IElOVEVHRVIsIGNvbF85NSBJ TlRFR0VSLAorCQljb2xfOTYgSU5URUdFUiwgY29sXzk3IElOVEVHRVIsIGNvbF85OCBJTlRFR0VS LCBjb2xfOTkgSU5URUdFUiwgY29sXzEwMCBJTlRFR0VSCisJKSBXSVRIIChwYXJhbGxlbF9pZHhf YXV0b3ZhY19lbmFibGVkID0gdHJ1ZSk7CisKKwlETyBcJFwkCisJREVDTEFSRQorCQlpIElOVEVH RVI7CisJQkVHSU4KKwkJRk9SIGkgSU4gMS4uJGluZGV4ZXNfbnVtIExPT1AKKwkJCUVYRUNVVEUg Zm9ybWF0KCdDUkVBVEUgSU5ERVggaWR4X2NvbF9cJXMgT04gdGVzdF9hdXRvdmFjIChjb2xfXCVz KTsnLCBpLCBpKTsKKwkJRU5EIExPT1A7CisJRU5EIFwkXCQ7Cit9KTsKKworJG5vZGUtPnBzcWwo J3Bvc3RncmVzJywKKwkiU0VMRUNUIENPVU5UKCopIEZST00gcGdfaW5kZXggaQorCSAgIEpPSU4g cGdfY2xhc3MgYyBPTiBjLm9pZCA9IGkuaW5kcmVsaWQKKwkgIFdIRVJFIGMucmVsbmFtZSA9ICd0 ZXN0X2F1dG92YWMnOyIsCisJc3Rkb3V0ID0+IFwkcHNxbF9vdXQKKyk7CitpcygkcHNxbF9vdXQs ICRpbmRleGVzX251bSArIDEsICJBbGwgaW5kZXhlcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseSIpOwor Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxeworCURPIFwkXCQKKwlERUNMQVJFCisJ ICAgIGkgSU5URUdFUjsKKwlCRUdJTgorCSAgICBGT1IgaSBJTiAxLi4kaW5pdGlhbF9yb3dzX251 bSBMT09QCisJICAgICAgICBJTlNFUlQgSU5UTyB0ZXN0X2F1dG92YWMgKAorCSAgICAgICAgICAg IGNvbF8xLCBjb2xfMiwgY29sXzMsIGNvbF80LCBjb2xfNSwgY29sXzYsIGNvbF83LCBjb2xfOCwg Y29sXzksIGNvbF8xMCwKKwkgICAgICAgICAgICBjb2xfMTEsIGNvbF8xMiwgY29sXzEzLCBjb2xf MTQsIGNvbF8xNSwgY29sXzE2LCBjb2xfMTcsIGNvbF8xOCwgY29sXzE5LCBjb2xfMjAsCisJICAg ICAgICAgICAgY29sXzIxLCBjb2xfMjIsIGNvbF8yMywgY29sXzI0LCBjb2xfMjUsIGNvbF8yNiwg Y29sXzI3LCBjb2xfMjgsIGNvbF8yOSwgY29sXzMwLAorCSAgICAgICAgICAgIGNvbF8zMSwgY29s XzMyLCBjb2xfMzMsIGNvbF8zNCwgY29sXzM1LCBjb2xfMzYsIGNvbF8zNywgY29sXzM4LCBjb2xf MzksIGNvbF80MCwKKwkgICAgICAgICAgICBjb2xfNDEsIGNvbF80MiwgY29sXzQzLCBjb2xfNDQs IGNvbF80NSwgY29sXzQ2LCBjb2xfNDcsIGNvbF80OCwgY29sXzQ5LCBjb2xfNTAsCisJICAgICAg ICAgICAgY29sXzUxLCBjb2xfNTIsIGNvbF81MywgY29sXzU0LCBjb2xfNTUsIGNvbF81NiwgY29s XzU3LCBjb2xfNTgsIGNvbF81OSwgY29sXzYwLAorCSAgICAgICAgICAgIGNvbF82MSwgY29sXzYy LCBjb2xfNjMsIGNvbF82NCwgY29sXzY1LCBjb2xfNjYsIGNvbF82NywgY29sXzY4LCBjb2xfNjks IGNvbF83MCwKKwkgICAgICAgICAgICBjb2xfNzEsIGNvbF83MiwgY29sXzczLCBjb2xfNzQsIGNv bF83NSwgY29sXzc2LCBjb2xfNzcsIGNvbF83OCwgY29sXzc5LCBjb2xfODAsCisJICAgICAgICAg ICAgY29sXzgxLCBjb2xfODIsIGNvbF84MywgY29sXzg0LCBjb2xfODUsIGNvbF84NiwgY29sXzg3 LCBjb2xfODgsIGNvbF84OSwgY29sXzkwLAorCSAgICAgICAgICAgIGNvbF85MSwgY29sXzkyLCBj b2xfOTMsIGNvbF85NCwgY29sXzk1LCBjb2xfOTYsIGNvbF85NywgY29sXzk4LCBjb2xfOTksIGNv bF8xMDAKKwkgICAgICAgICkgVkFMVUVTICgKKwkgICAgICAgICAgICBpLCBpICsgMSwgaSArIDIs IGkgKyAzLCBpICsgNCwgaSArIDUsIGkgKyA2LCBpICsgNywgaSArIDgsIGkgKyA5LAorCSAgICAg ICAgICAgIGkgKyAxMCwgaSArIDExLCBpICsgMTIsIGkgKyAxMywgaSArIDE0LCBpICsgMTUsIGkg KyAxNiwgaSArIDE3LCBpICsgMTgsIGkgKyAxOSwKKwkgICAgICAgICAgICBpICsgMjAsIGkgKyAy MSwgaSArIDIyLCBpICsgMjMsIGkgKyAyNCwgaSArIDI1LCBpICsgMjYsIGkgKyAyNywgaSArIDI4 LCBpICsgMjksCisJICAgICAgICAgICAgaSArIDMwLCBpICsgMzEsIGkgKyAzMiwgaSArIDMzLCBp ICsgMzQsIGkgKyAzNSwgaSArIDM2LCBpICsgMzcsIGkgKyAzOCwgaSArIDM5LAorCSAgICAgICAg ICAgIGkgKyA0MCwgaSArIDQxLCBpICsgNDIsIGkgKyA0MywgaSArIDQ0LCBpICsgNDUsIGkgKyA0 NiwgaSArIDQ3LCBpICsgNDgsIGkgKyA0OSwKKwkgICAgICAgICAgICBpICsgNTAsIGkgKyA1MSwg aSArIDUyLCBpICsgNTMsIGkgKyA1NCwgaSArIDU1LCBpICsgNTYsIGkgKyA1NywgaSArIDU4LCBp ICsgNTksCisJICAgICAgICAgICAgaSArIDYwLCBpICsgNjEsIGkgKyA2MiwgaSArIDYzLCBpICsg NjQsIGkgKyA2NSwgaSArIDY2LCBpICsgNjcsIGkgKyA2OCwgaSArIDY5LAorCSAgICAgICAgICAg IGkgKyA3MCwgaSArIDcxLCBpICsgNzIsIGkgKyA3MywgaSArIDc0LCBpICsgNzUsIGkgKyA3Niwg aSArIDc3LCBpICsgNzgsIGkgKyA3OSwKKwkgICAgICAgICAgICBpICsgODAsIGkgKyA4MSwgaSAr IDgyLCBpICsgODMsIGkgKyA4NCwgaSArIDg1LCBpICsgODYsIGkgKyA4NywgaSArIDg4LCBpICsg ODksCisJICAgICAgICAgICAgaSArIDkwLCBpICsgOTEsIGkgKyA5MiwgaSArIDkzLCBpICsgOTQs IGkgKyA5NSwgaSArIDk2LCBpICsgOTcsIGkgKyA5OCwgaSArIDk5CisJICAgICAgICApOworCSAg ICBFTkQgTE9PUDsKKwlFTkQgXCRcJDsKK30pOworCiskbm9kZS0+cHNxbCgncG9zdGdyZXMnLAor CSJTRUxFQ1QgQ09VTlQoKikgRlJPTSB0ZXN0X2F1dG92YWM7IiwKKwlzdGRvdXQgPT4gXCRwc3Fs X291dAorKTsKK2lzKCRwc3FsX291dCwgJGluaXRpYWxfcm93c19udW0sICJBbGwgZGF0YSBpbnNl cnRlZCBpbnRvIHRhYmxlIHN1Y2Nlc3NmdWxseSIpOworCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsIHFxeworCVVQREFURSB0ZXN0X2F1dG92YWMgU0VUIGNvbF8xID0gMCBXSEVSRSAoY29s XzEgJSAzKSA9IDA7CisJQU5BTFlaRSB0ZXN0X2F1dG92YWM7Cit9KTsKKworIyBSZWR1Y2UgYXV0 b3ZhY3V1bV93b3JrX21lbSwgc28gbGVhZGVyIHByb2Nlc3Mgd2lsbCBwZXJmb3JtIHBhcmFsbGVs IGluZGV4aQorIyB2YWN1dW0gcGhhc2Ugc2V2ZXJhbCB0aW1lcworJG5vZGUtPmFwcGVuZF9jb25m KCdwb3N0Z3Jlc3FsLmNvbmYnLCBxcXsKKwlhdXRvdmFjdXVtX25hcHRpbWUgPSAnMXMnCisJYXV0 b3ZhY3V1bV92YWN1dW1fdGhyZXNob2xkID0gMQorCWF1dG92YWN1dW1fYW5hbHl6ZV90aHJlc2hv bGQgPSAxCisJYXV0b3ZhY3V1bV92YWN1dW1fc2NhbGVfZmFjdG9yID0gMC4xCisJYXV0b3ZhY3V1 bV9hbmFseXplX3NjYWxlX2ZhY3RvciA9IDAuMQorCWF1dG92YWN1dW0gPSBvbgorfSk7CisKKyRu b2RlLT5yZXN0YXJ0OworCisjIHNsZWVwKDM2MDApOworCitvaygxLCAiVGhlcmUgYXJlIG5vIHNl Z2ZhdWx0cyIpOworCiskbm9kZS0+c3RvcDsKK2RvbmVfdGVzdGluZygpOwotLSAKMi40My4wCgo= --000000000000959d520634b8357c Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0001-Self-managed-parallel-index-autovacuum.patch" Content-Disposition: attachment; filename="v3-0001-Self-managed-parallel-index-autovacuum.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mah4vg0f1 RnJvbSA5NmFiNjZmMmJmZTExNDZlMjA3MDNiNzI1YjJhYThjOTFmNmEyMzdmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYW5paWwgRGF2aWRvdiA8ZC5kYXZ5ZG92QHBvc3RncmVzcHJv LnJ1PgpEYXRlOiBGcmksIDkgTWF5IDIwMjUgMTc6MTQ6MDYgKzA3MDAKU3ViamVjdDogW1BBVENI IHYzXSBNZWV0IHBhcmFsbGVsIGluZGV4IGF1dG92YWN1dW0KCi0tLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2NvbW1vbi9yZWxvcHRpb25zLmMgICAgICAgIHwgICAxMSArCiBzcmMvYmFja2VuZC9jb21t YW5kcy92YWN1dW0uYyAgICAgICAgICAgICAgICAgfCAgIDM2ICsKIHNyYy9iYWNrZW5kL2NvbW1h bmRzL3ZhY3V1bXBhcmFsbGVsLmMgICAgICAgICB8ICAyODYgKysrKy0KIHNyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvYXV0b3ZhY3V1bS5jICAgICAgICAgICB8IDEwMjYgKysrKysrKysrKysrKysrKy0K IHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jICAgICAgICAgICB8ICAgMTAgKwog c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIHwgICAgMiArCiBz cmMvaW5jbHVkZS9wb3N0bWFzdGVyL2F1dG92YWN1dW0uaCAgICAgICAgICAgfCAgIDI3ICsKIHNy Yy9pbmNsdWRlL3V0aWxzL2d1Y19ob29rcy5oICAgICAgICAgICAgICAgICB8ICAgIDIgKwogc3Jj L2luY2x1ZGUvdXRpbHMvcmVsLmggICAgICAgICAgICAgICAgICAgICAgIHwgICAxMyArLQogc3Jj L3Rlc3QvbW9kdWxlcy9hdXRvdmFjdXVtLy5naXRpZ25vcmUgICAgICAgIHwgICAgMSArCiBzcmMv dGVzdC9tb2R1bGVzL2F1dG92YWN1dW0vTWFrZWZpbGUgICAgICAgICAgfCAgIDE0ICsKIC4uLi9h dXRvdmFjdXVtL3QvMDAxX2F1dG92YWNfcGFyYWxsZWwucGwgICAgICB8ICAxMzUgKysrCiAxMiBm aWxlcyBjaGFuZ2VkLCAxNTE3IGluc2VydGlvbnMoKyksIDQ2IGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS8uZ2l0aWdub3JlCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy9hdXRvdmFjdXVtL01ha2VmaWxlCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy9hdXRvdmFjdXVtL3QvMDAxX2F1dG92YWNf cGFyYWxsZWwucGwKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3JlbG9w dGlvbnMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jCmluZGV4IDQ2 YzFkY2UyMjJkLi5iOWQ2NDJhN2E0NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2Nv bW1vbi9yZWxvcHRpb25zLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxvcHRp b25zLmMKQEAgLTE2Niw2ICsxNjYsMTUgQEAgc3RhdGljIHJlbG9wdF9ib29sIGJvb2xSZWxPcHRz W10gPQogCQl9LAogCQl0cnVlCiAJfSwKKwl7CisJCXsKKwkJCSJwYXJhbGxlbF9pZHhfYXV0b3Zh YyIsCisJCQkiRW5hYmxlcyBhdXRvdmFjdXVtIHRvIHByb2Nlc3MgaW5kZXhlcyBvZiB0aGlzIHRh YmxlIGluIHBhcmFsbGVsIG1vZGUiLAorCQkJUkVMT1BUX0tJTkRfSEVBUCwKKwkJCVNoYXJlVXBk YXRlRXhjbHVzaXZlTG9jaworCQl9LAorCQlmYWxzZQorCX0sCiAJLyogbGlzdCB0ZXJtaW5hdG9y ICovCiAJe3tOVUxMfX0KIH07CkBAIC0xOTA1LDYgKzE5MTQsOCBAQCBkZWZhdWx0X3JlbG9wdGlv bnMoRGF0dW0gcmVsb3B0aW9ucywgYm9vbCB2YWxpZGF0ZSwgcmVsb3B0X2tpbmQga2luZCkKIAkJ b2Zmc2V0b2YoU3RkUmRPcHRpb25zLCB2YWN1dW1faW5kZXhfY2xlYW51cCl9LAogCQl7InZhY3V1 bV90cnVuY2F0ZSIsIFJFTE9QVF9UWVBFX0JPT0wsCiAJCW9mZnNldG9mKFN0ZFJkT3B0aW9ucywg dmFjdXVtX3RydW5jYXRlKSwgb2Zmc2V0b2YoU3RkUmRPcHRpb25zLCB2YWN1dW1fdHJ1bmNhdGVf c2V0KX0sCisJCXsicGFyYWxsZWxfaWR4X2F1dG92YWMiLCBSRUxPUFRfVFlQRV9CT09MLAorCQlv ZmZzZXRvZihTdGRSZE9wdGlvbnMsIHBhcmFsbGVsX2lkeF9hdXRvdmFjKX0sCiAJCXsidmFjdXVt X21heF9lYWdlcl9mcmVlemVfZmFpbHVyZV9yYXRlIiwgUkVMT1BUX1RZUEVfUkVBTCwKIAkJb2Zm c2V0b2YoU3RkUmRPcHRpb25zLCB2YWN1dW1fbWF4X2VhZ2VyX2ZyZWV6ZV9mYWlsdXJlX3JhdGUp fQogCX07CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCmluZGV4IDMzYTMzYmY2YjFjLi5hYjY3MDY3NDNhOSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvdmFjdXVtLmMKQEAgLTU3LDkgKzU3LDE2IEBACiAjaW5jbHVkZSAidXRpbHMv Z3VjLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjX2hvb2tzLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVt dXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNpbmNsdWRlICJ1dGlscy9zbmFwbWdy LmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIAorLyoKKyAqIE1pbmltdW0gbnVtYmVy IG9mIGRlYWQgdHVwbGVzIHJlcXVpcmVkIGZvciB0aGUgdGFibGUgdG8gYmUgcHJvY2Vzc2VkIGlu CisgKiBwYXJhbGxlbCBkdXJpbmcgYXV0b3ZhY3V1bQorICovCisjZGVmaW5lIEFWX1BBUkFMTEVM X0RFQURUVVBfVEhSRVNIT0xECTEwMjQKKwogLyoKICAqIE1pbmltdW0gaW50ZXJ2YWwgZm9yIGNv c3QtYmFzZWQgdmFjdXVtIGRlbGF5IHJlcG9ydHMgZnJvbSBhIHBhcmFsbGVsIHdvcmtlci4KICAq IFRoaXMgYWltcyB0byBhdm9pZCBzZW5kaW5nIHRvbyBtYW55IG1lc3NhZ2VzIGFuZCB3YWtpbmcg dXAgdGhlIGxlYWRlciB0b28KQEAgLTIyMzQsNiArMjI0MSwzNSBAQCB2YWN1dW1fcmVsKE9pZCBy ZWxpZCwgUmFuZ2VWYXIgKnJlbGF0aW9uLCBWYWN1dW1QYXJhbXMgKnBhcmFtcywKIAllbHNlCiAJ CXRvYXN0X3JlbGlkID0gSW52YWxpZE9pZDsKIAorCS8qCisJICogRGVjaWRlIHdoZXRoZXIgd2Ug bmVlZCB0byBwcm9jZXNzIHRhYmxlIHdpdGggZ2l2ZW4gb2lkIGluIHBhcmFsbGVsIG1vZGUKKwkg KiBkdXJpbmcgYXV0b3ZhY3V1bS4KKwkgKi8KKwlpZiAoQW1BdXRvVmFjdXVtV29ya2VyUHJvY2Vz cygpICYmCisJCXBhcmFtcy0+aW5kZXhfY2xlYW51cCAhPSBWQUNPUFRWQUxVRV9ESVNBQkxFRCAm JgorCQlDYW5Vc2VQYXJhbGxlbElkeEF1dG92YWNGb3JSZWxhdGlvbihyZWwpKQorCXsKKwkJUGdT dGF0X1N0YXRUYWJFbnRyeSAqdGFiZW50cnk7CisKKwkJLyogZmV0Y2ggdGhlIHBnc3RhdCB0YWJs ZSBlbnRyeSAqLworCQl0YWJlbnRyeSA9IHBnc3RhdF9mZXRjaF9zdGF0X3RhYmVudHJ5X2V4dChy ZWwtPnJkX3JlbC0+cmVsaXNzaGFyZWQsCisJCQkJCQkJCQkJCQkgIHJlbC0+cmRfaWQpOworCQlp ZiAodGFiZW50cnkgJiYgdGFiZW50cnktPmRlYWRfdHVwbGVzID49IEFWX1BBUkFMTEVMX0RFQURU VVBfVEhSRVNIT0xEKQorCQl7CisJCQlMaXN0ICAgKmluZGV4ZXMgPSBSZWxhdGlvbkdldEluZGV4 TGlzdChyZWwpOworCQkJaW50CQludW1faW5kZXhlcyA9IGxpc3RfbGVuZ3RoKGluZGV4ZXMpOwor CisJCQlsaXN0X2ZyZWUoaW5kZXhlcyk7CisKKwkJCWlmIChtYXhfcGFyYWxsZWxfaW5kZXhfYXV0 b3ZhY193b3JrZXJzID4gMCkKKwkJCXsKKwkJCQlwYXJhbXMtPm53b3JrZXJzID0KKwkJCQkJTWlu KChudW1faW5kZXhlcyAvIEFWX1BBUkFMTEVMX0lOREVYRVNfUEVSX1dPUktFUikgKyAxLAorCQkJ CQkJbWF4X3BhcmFsbGVsX2luZGV4X2F1dG92YWNfd29ya2Vycyk7CisJCQl9CisJCX0KKwl9CisK IAkvKgogCSAqIFN3aXRjaCB0byB0aGUgdGFibGUgb3duZXIncyB1c2VyaWQsIHNvIHRoYXQgYW55 IGluZGV4IGZ1bmN0aW9ucyBhcmUgcnVuCiAJICogYXMgdGhhdCB1c2VyLiAgQWxzbyBsb2NrIGRv d24gc2VjdXJpdHktcmVzdHJpY3RlZCBvcGVyYXRpb25zIGFuZApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdmFjdXVtcGFyYWxsZWwuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3Zh Y3V1bXBhcmFsbGVsLmMKaW5kZXggMmI5ZDU0OGNkZWIuLjA3N2Y3YThmZjZhIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW1wYXJhbGxlbC5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3ZhY3V1bXBhcmFsbGVsLmMKQEAgLTEsMjAgKzEsMjMgQEAKIC8qLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogICoKICAqIHZhY3V1bXBhcmFsbGVsLmMKLSAqCSAgU3VwcG9ydCByb3V0aW5lcyBm b3IgcGFyYWxsZWwgdmFjdXVtIGV4ZWN1dGlvbi4KKyAqCSAgU3VwcG9ydCByb3V0aW5lcyBmb3Ig cGFyYWxsZWwgW2F1dG9ddmFjdXVtIGV4ZWN1dGlvbi4KICAqCiAgKiBUaGlzIGZpbGUgY29udGFp bnMgcm91dGluZXMgdGhhdCBhcmUgaW50ZW5kZWQgdG8gc3VwcG9ydCBzZXR0aW5nIHVwLCB1c2lu ZywKICAqIGFuZCB0ZWFyaW5nIGRvd24gYSBQYXJhbGxlbFZhY3V1bVN0YXRlLgogICoKLSAqIElu IGEgcGFyYWxsZWwgdmFjdXVtLCB3ZSBwZXJmb3JtIGJvdGggaW5kZXggYnVsayBkZWxldGlvbiBh bmQgaW5kZXggY2xlYW51cAotICogd2l0aCBwYXJhbGxlbCB3b3JrZXIgcHJvY2Vzc2VzLiAgSW5k aXZpZHVhbCBpbmRleGVzIGFyZSBwcm9jZXNzZWQgYnkgb25lCi0gKiB2YWN1dW0gcHJvY2Vzcy4g IFBhcmFsbGVsVmFjdXVtU3RhdGUgY29udGFpbnMgc2hhcmVkIGluZm9ybWF0aW9uIGFzIHdlbGwg YXMKLSAqIHRoZSBtZW1vcnkgc3BhY2UgZm9yIHN0b3JpbmcgZGVhZCBpdGVtcyBhbGxvY2F0ZWQg aW4gdGhlIERTQSBhcmVhLiAgV2UKKyAqIEluIGEgcGFyYWxsZWwgW2F1dG9ddmFjdXVtLCB3ZSBw ZXJmb3JtIGJvdGggaW5kZXggYnVsayBkZWxldGlvbiBhbmQgaW5kZXgKKyAqIGNsZWFudXAgd2l0 aCBwYXJhbGxlbCB3b3JrZXIgcHJvY2Vzc2VzLiAgSW5kaXZpZHVhbCBpbmRleGVzIGFyZSBwcm9j ZXNzZWQgYnkKKyAqIG9uZSB2YWN1dW0gcHJvY2Vzcy4gIFBhcmFsbGVsVmFjdXVtU3RhdGUgY29u dGFpbnMgc2hhcmVkIGluZm9ybWF0aW9uIGFzIHdlbGwKKyAqIGFzIHRoZSBtZW1vcnkgc3BhY2Ug Zm9yIHN0b3JpbmcgZGVhZCBpdGVtcyBhbGxvY2F0ZWQgaW4gdGhlIERTQSBhcmVhLiAgV2UKICAq IGxhdW5jaCBwYXJhbGxlbCB3b3JrZXIgcHJvY2Vzc2VzIGF0IHRoZSBzdGFydCBvZiBwYXJhbGxl bCBpbmRleAogICogYnVsay1kZWxldGlvbiBhbmQgaW5kZXggY2xlYW51cCBhbmQgb25jZSBhbGwg aW5kZXhlcyBhcmUgcHJvY2Vzc2VkLCB0aGUKICAqIHBhcmFsbGVsIHdvcmtlciBwcm9jZXNzZXMg ZXhpdC4gIEVhY2ggdGltZSB3ZSBwcm9jZXNzIGluZGV4ZXMgaW4gcGFyYWxsZWwsCiAgKiB0aGUg cGFyYWxsZWwgY29udGV4dCBpcyByZS1pbml0aWFsaXplZCBzbyB0aGF0IHRoZSBzYW1lIERTTSBj YW4gYmUgdXNlZCBmb3IKLSAqIG11bHRpcGxlIHBhc3NlcyBvZiBpbmRleCBidWxrLWRlbGV0aW9u IGFuZCBpbmRleCBjbGVhbnVwLgorICogbXVsdGlwbGUgcGFzc2VzIG9mIGluZGV4IGJ1bGstZGVs ZXRpb24gYW5kIGluZGV4IGNsZWFudXAuIEZvciBtYWludGVuYW5jZQorICogdmFjdXVtLCB3ZSBs YXVuY2ggd29ya2VycyBtYW51YWxseSAodXNpbmcgZHluYW1pYyBiZ3dvcmtlcnMgbWFjaGluZXJ5 KSwgYW5kCisgKiBmb3IgYXV0b3ZhY3V1bSB3ZSBzZW5kIHNpZ25hbHMgdG8gdGhlIGF1dG92YWN1 dW0gbGF1bmNoZXIgKGFsbCBsb2dpYyBmb3IKKyAqIGNvbW11bmljYXRpb24gYW1vbmcgcGFyYWxs ZWwgYXV0b3ZhY3V1bSBwcm9jZXNzZXMgaXMgaW4gYXV0b3ZhY3V1bS5jKS4KICAqCiAgKiBQb3J0 aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUg VW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCkBAIC0zNCw5ICszNywxMSBAQAogI2luY2x1ZGUgImV4 ZWN1dG9yL2luc3RydW1lbnQuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMuaCIKICNpbmNs dWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL2F1dG92YWN1dW0uaCIKICNpbmNs dWRlICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNs dWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2lu Y2x1ZGUgInV0aWxzL3JlbC5oIgogCiAvKgpAQCAtMTU3LDExICsxNjIsMjAgQEAgdHlwZWRlZiBz dHJ1Y3QgUFZJbmRTdGF0cwogfSBQVkluZFN0YXRzOwogCiAvKgotICogU3RydWN0IGZvciBtYWlu dGFpbmluZyBhIHBhcmFsbGVsIHZhY3V1bSBzdGF0ZS4gdHlwZWRlZiBhcHBlYXJzIGluIHZhY3V1 bS5oLgorICogU3RydWN0IGZvciBtYWludGFpbmluZyBhIHBhcmFsbGVsIFthdXRvXXZhY3V1bSBz dGF0ZS4gdHlwZWRlZiBhcHBlYXJzIGluCisgKiB2YWN1dW0uaC4KICAqLwogc3RydWN0IFBhcmFs bGVsVmFjdXVtU3RhdGUKIHsKLQkvKiBOVUxMIGZvciB3b3JrZXIgcHJvY2Vzc2VzICovCisJLyog SXMgdGhpcyBzdHJ1Y3R1cmUgdXNlZCBmb3IgbWFpbnRlbmFuY2UgdmFjdXVtIG9yIGF1dG92YWN1 dW0gKi8KKwlib29sIGlzX2F1dG92YWN1dW07CisKKwkvKgorCSAqIE5VTEwgZm9yIHdvcmtlciBw cm9jZXNzZXMuCisJICoKKwkgKiBOT1RFOiBQYXJhbGxlbCBhdXRvdmFjdXVtIG9ubHkgbmVlZHMg YSBzdWJzZXQgb2YgdGhlIG1haW50ZW5hbmNlIHZhY3V1bQorCSAqCQkgZnVuY3Rpb25hbGl0eS4K KwkgKi8KIAlQYXJhbGxlbENvbnRleHQgKnBjeHQ7CiAKIAkvKiBQYXJlbnQgSGVhcCBSZWxhdGlv biAqLwpAQCAtMjIxLDYgKzIzNSwxMCBAQCBzdHJ1Y3QgUGFyYWxsZWxWYWN1dW1TdGF0ZQogCVBW SW5kVmFjU3RhdHVzIHN0YXR1czsKIH07CiAKK3N0YXRpYyBQYXJhbGxlbENvbnRleHQgKkNyZWF0 ZVBhcmFsbGVsQXV0b1ZhY0NvbnRleHQoaW50IG53b3JrZXJzKTsKK3N0YXRpYyB2b2lkIEluaXRp YWxpemVQYXJhbGxlbEF1dG9WYWNEU00oUGFyYWxsZWxDb250ZXh0ICpwY3h0KTsKK3N0YXRpYyB2 b2lkIERlc3Ryb3lQYXJhbGxlbEF1dG9WYWNDb250ZXh0KFBhcmFsbGVsQ29udGV4dCAqcGN4dCk7 CisKIHN0YXRpYyBpbnQJcGFyYWxsZWxfdmFjdXVtX2NvbXB1dGVfd29ya2VycyhSZWxhdGlvbiAq aW5kcmVscywgaW50IG5pbmRleGVzLCBpbnQgbnJlcXVlc3RlZCwKIAkJCQkJCQkJCQkJYm9vbCAq d2lsbF9wYXJhbGxlbF92YWN1dW0pOwogc3RhdGljIHZvaWQgcGFyYWxsZWxfdmFjdXVtX3Byb2Nl c3NfYWxsX2luZGV4ZXMoUGFyYWxsZWxWYWN1dW1TdGF0ZSAqcHZzLCBpbnQgbnVtX2luZGV4X3Nj YW5zLApAQCAtMjgwLDE1ICsyOTgsMjEgQEAgcGFyYWxsZWxfdmFjdXVtX2luaXQoUmVsYXRpb24g cmVsLCBSZWxhdGlvbiAqaW5kcmVscywgaW50IG5pbmRleGVzLAogCX0KIAogCXB2cyA9IChQYXJh bGxlbFZhY3V1bVN0YXRlICopIHBhbGxvYzAoc2l6ZW9mKFBhcmFsbGVsVmFjdXVtU3RhdGUpKTsK KwlwdnMtPmlzX2F1dG92YWN1dW0gPSBBbUF1dG9WYWN1dW1Xb3JrZXJQcm9jZXNzKCk7CiAJcHZz LT5pbmRyZWxzID0gaW5kcmVsczsKIAlwdnMtPm5pbmRleGVzID0gbmluZGV4ZXM7CiAJcHZzLT53 aWxsX3BhcmFsbGVsX3ZhY3V1bSA9IHdpbGxfcGFyYWxsZWxfdmFjdXVtOwogCXB2cy0+YnN0cmF0 ZWd5ID0gYnN0cmF0ZWd5OwogCXB2cy0+aGVhcHJlbCA9IHJlbDsKIAotCUVudGVyUGFyYWxsZWxN b2RlKCk7Ci0JcGN4dCA9IENyZWF0ZVBhcmFsbGVsQ29udGV4dCgicG9zdGdyZXMiLCAicGFyYWxs ZWxfdmFjdXVtX21haW4iLAotCQkJCQkJCQkgcGFyYWxsZWxfd29ya2Vycyk7CisJaWYgKHB2cy0+ aXNfYXV0b3ZhY3V1bSkKKwkJcGN4dCA9IENyZWF0ZVBhcmFsbGVsQXV0b1ZhY0NvbnRleHQocGFy YWxsZWxfd29ya2Vycyk7CisJZWxzZQorCXsKKwkJRW50ZXJQYXJhbGxlbE1vZGUoKTsKKwkJcGN4 dCA9IENyZWF0ZVBhcmFsbGVsQ29udGV4dCgicG9zdGdyZXMiLCAicGFyYWxsZWxfdmFjdXVtX21h aW4iLAorCQkJCQkJCQkJIHBhcmFsbGVsX3dvcmtlcnMpOworCX0KIAlBc3NlcnQocGN4dC0+bndv cmtlcnMgPiAwKTsKIAlwdnMtPnBjeHQgPSBwY3h0OwogCkBAIC0zMjcsNyArMzUxLDEwIEBAIHBh cmFsbGVsX3ZhY3V1bV9pbml0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gKmluZHJlbHMsIGludCBu aW5kZXhlcywKIAllbHNlCiAJCXF1ZXJ5bGVuID0gMDsJCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0 ICovCiAKLQlJbml0aWFsaXplUGFyYWxsZWxEU00ocGN4dCk7CisJaWYgKHB2cy0+aXNfYXV0b3Zh Y3V1bSkKKwkJSW5pdGlhbGl6ZVBhcmFsbGVsQXV0b1ZhY0RTTShwdnMtPnBjeHQpOworCWVsc2UK KwkJSW5pdGlhbGl6ZVBhcmFsbGVsRFNNKHBjeHQpOwogCiAJLyogUHJlcGFyZSBpbmRleCB2YWN1 dW0gc3RhdHMgKi8KIAlpbmRzdGF0cyA9IChQVkluZFN0YXRzICopIHNobV90b2NfYWxsb2NhdGUo cGN4dC0+dG9jLCBlc3RfaW5kc3RhdHNfbGVuKTsKQEAgLTM3MSwxMCArMzk4LDE2IEBAIHBhcmFs bGVsX3ZhY3V1bV9pbml0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gKmluZHJlbHMsIGludCBuaW5k ZXhlcywKIAlzaGFyZWQtPnJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWwpOwogCXNoYXJlZC0+ ZWxldmVsID0gZWxldmVsOwogCXNoYXJlZC0+cXVlcnlpZCA9IHBnc3RhdF9nZXRfbXlfcXVlcnlf aWQoKTsKLQlzaGFyZWQtPm1haW50ZW5hbmNlX3dvcmtfbWVtX3dvcmtlciA9Ci0JCShuaW5kZXhl c19td20gPiAwKSA/Ci0JCW1haW50ZW5hbmNlX3dvcmtfbWVtIC8gTWluKHBhcmFsbGVsX3dvcmtl cnMsIG5pbmRleGVzX213bSkgOgotCQltYWludGVuYW5jZV93b3JrX21lbTsKKwlpZiAocHZzLT5p c19hdXRvdmFjdXVtKQorCQlzaGFyZWQtPm1haW50ZW5hbmNlX3dvcmtfbWVtX3dvcmtlciA9CisJ CQkobmluZGV4ZXNfbXdtID4gMCkgPworCQkJYXV0b3ZhY3V1bV93b3JrX21lbSAvIE1pbihwYXJh bGxlbF93b3JrZXJzLCBuaW5kZXhlc19td20pIDoKKwkJCWF1dG92YWN1dW1fd29ya19tZW07CisJ ZWxzZQorCQlzaGFyZWQtPm1haW50ZW5hbmNlX3dvcmtfbWVtX3dvcmtlciA9CisJCQkobmluZGV4 ZXNfbXdtID4gMCkgPworCQkJbWFpbnRlbmFuY2Vfd29ya19tZW0gLyBNaW4ocGFyYWxsZWxfd29y a2VycywgbmluZGV4ZXNfbXdtKSA6CisJCQltYWludGVuYW5jZV93b3JrX21lbTsKIAlzaGFyZWQt PmRlYWRfaXRlbXNfaW5mby5tYXhfYnl0ZXMgPSB2YWNfd29ya19tZW0gKiAoc2l6ZV90KSAxMDI0 OwogCiAJLyogUHJlcGFyZSBEU0Egc3BhY2UgZm9yIGRlYWQgaXRlbXMgKi8KQEAgLTQ1Myw4ICs0 ODYsMTMgQEAgcGFyYWxsZWxfdmFjdXVtX2VuZChQYXJhbGxlbFZhY3V1bVN0YXRlICpwdnMsIElu ZGV4QnVsa0RlbGV0ZVJlc3VsdCAqKmlzdGF0cykKIAogCVRpZFN0b3JlRGVzdHJveShwdnMtPmRl YWRfaXRlbXMpOwogCi0JRGVzdHJveVBhcmFsbGVsQ29udGV4dChwdnMtPnBjeHQpOwotCUV4aXRQ YXJhbGxlbE1vZGUoKTsKKwlpZiAocHZzLT5pc19hdXRvdmFjdXVtKQorCQlEZXN0cm95UGFyYWxs ZWxBdXRvVmFjQ29udGV4dChwdnMtPnBjeHQpOworCWVsc2UKKwl7CisJCURlc3Ryb3lQYXJhbGxl bENvbnRleHQoKFBhcmFsbGVsQ29udGV4dCAqKSBwdnMtPnBjeHQpOworCQlFeGl0UGFyYWxsZWxN b2RlKCk7CisJfQogCiAJcGZyZWUocHZzLT53aWxsX3BhcmFsbGVsX3ZhY3V1bSk7CiAJcGZyZWUo cHZzKTsKQEAgLTUzMiw2ICs1NzAsMTQ0IEBAIHBhcmFsbGVsX3ZhY3V1bV9jbGVhbnVwX2FsbF9p bmRleGVzKFBhcmFsbGVsVmFjdXVtU3RhdGUgKnB2cywgbG9uZyBudW1fdGFibGVfdHVwCiAJcGFy YWxsZWxfdmFjdXVtX3Byb2Nlc3NfYWxsX2luZGV4ZXMocHZzLCBudW1faW5kZXhfc2NhbnMsIGZh bHNlKTsKIH0KIAorLyoKKyAqIFNob3J0IHZlcnNpb24gb2YgQ3JlYXRlUGFyYWxsZWxDb250ZXh0 IChwYXJhbGxlbC5jKS4gSGVyZSB3ZSBpbml0IG9ubHkgdGhvc2UKKyAqIGZpZWxkcyB0aGF0IGFy ZSBuZWVkZWQgZm9yIHBhcmFsbGVsIGluZGV4IHByb2Nlc3NpbmcgZHVyaW5nIGF1dG92YWN1dW0u CisgKi8KK3N0YXRpYyBQYXJhbGxlbENvbnRleHQgKgorQ3JlYXRlUGFyYWxsZWxBdXRvVmFjQ29u dGV4dChpbnQgbndvcmtlcnMpCit7CisJUGFyYWxsZWxDb250ZXh0ICpwY3h0OworCU1lbW9yeUNv bnRleHQgb2xkY29udGV4dDsKKworCUFzc2VydChBbUF1dG9WYWN1dW1Xb3JrZXJQcm9jZXNzKCkp OworCisJLyogTnVtYmVyIG9mIHdvcmtlcnMgc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZS4gKi8KKwlB c3NlcnQobndvcmtlcnMgPj0gMCk7CisKKwkvKiBXZSBtaWdodCBiZSBydW5uaW5nIGluIGEgc2hv cnQtbGl2ZWQgbWVtb3J5IGNvbnRleHQuICovCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhUb3BUcmFuc2FjdGlvbkNvbnRleHQpOworCisJLyogSW5pdGlhbGl6ZSBhIG5ldyBQ YXJhbGxlbENvbnRleHQuICovCisJcGN4dCA9IHBhbGxvYzAoc2l6ZW9mKFBhcmFsbGVsQ29udGV4 dCkpOworCXBjeHQtPm53b3JrZXJzID0gbndvcmtlcnM7CisJcGN4dC0+bndvcmtlcnNfdG9fbGF1 bmNoID0gbndvcmtlcnM7CisJc2htX3RvY19pbml0aWFsaXplX2VzdGltYXRvcigmcGN4dC0+ZXN0 aW1hdG9yKTsKKworCS8qIFJlc3RvcmUgcHJldmlvdXMgbWVtb3J5IGNvbnRleHQuICovCisJTWVt b3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJcmV0dXJuIHBjeHQ7Cit9CisKKy8q CisgKiBTaG9ydCB2ZXJzaW9uIG9mIEluaXRpYWxpemVQYXJhbGxlbERTTSAocGFyYWxsZWwuYyku IEhlcmUgd2UgcHV0IGludG8gZHNtCisgKiBvbmx5IHRob3NlIGRhdGEgdGhhdCBhcmUgbmVlZGVk IGZvciBwYXJhbGxlbCBpbmRleCBwcm9jZXNzaW5nIGR1cmluZworICogYXV0b3ZhY3V1bS4KKyAq Lworc3RhdGljIHZvaWQKK0luaXRpYWxpemVQYXJhbGxlbEF1dG9WYWNEU00oUGFyYWxsZWxDb250 ZXh0ICpwY3h0KQoreworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlTaXplCQl0c25hcGxl biA9IDA7CisJU2l6ZQkJYXNuYXBsZW4gPSAwOworCVNpemUJCXNlZ3NpemUgPSAwOworCWNoYXIJ ICAgKnRzbmFwc3BhY2U7CisJY2hhcgkgICAqYXNuYXBzcGFjZTsKKwlTbmFwc2hvdAl0cmFuc2Fj dGlvbl9zbmFwc2hvdCA9IEdldFRyYW5zYWN0aW9uU25hcHNob3QoKTsKKwlTbmFwc2hvdAlhY3Rp dmVfc25hcHNob3QgPSBHZXRBY3RpdmVTbmFwc2hvdCgpOworCisJQXNzZXJ0KHBjeHQtPm53b3Jr ZXJzID49IDEpOworCisJLyogV2UgbWlnaHQgYmUgcnVubmluZyBpbiBhIHZlcnkgc2hvcnQtbGl2 ZWQgbWVtb3J5IGNvbnRleHQuICovCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byhUb3BUcmFuc2FjdGlvbkNvbnRleHQpOworCisJaWYgKElzb2xhdGlvblVzZXNYYWN0U25hcHNo b3QoKSkKKwl7CisJCXRzbmFwbGVuID0gRXN0aW1hdGVTbmFwc2hvdFNwYWNlKHRyYW5zYWN0aW9u X3NuYXBzaG90KTsKKwkJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCB0 c25hcGxlbik7CisJCXNobV90b2NfZXN0aW1hdGVfa2V5cygmcGN4dC0+ZXN0aW1hdG9yLCAxKTsK Kwl9CisJYXNuYXBsZW4gPSBFc3RpbWF0ZVNuYXBzaG90U3BhY2UoYWN0aXZlX3NuYXBzaG90KTsK KwlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsIGFzbmFwbGVuKTsKKwlz aG1fdG9jX2VzdGltYXRlX2tleXMoJnBjeHQtPmVzdGltYXRvciwgMSk7CisKKworCS8qIENyZWF0 ZSBEU00gYW5kIGluaXRpYWxpemUgd2l0aCBuZXcgdGFibGUgb2YgY29udGVudHMuICovCisJc2Vn c2l6ZSA9IHNobV90b2NfZXN0aW1hdGUoJnBjeHQtPmVzdGltYXRvcik7CisJcGN4dC0+c2VnID0g ZHNtX2NyZWF0ZShzZWdzaXplLCBEU01fQ1JFQVRFX05VTExfSUZfTUFYU0VHTUVOVFMpOworCisJ aWYgKHBjeHQtPnNlZyA9PSBOVUxMKQorCXsKKwkJcGN4dC0+bndvcmtlcnMgPSAwOworCQlwY3h0 LT5wcml2YXRlX21lbW9yeSA9IE1lbW9yeUNvbnRleHRBbGxvYyhUb3BNZW1vcnlDb250ZXh0LCBz ZWdzaXplKTsKKwl9CisKKwlwY3h0LT50b2MgPSBzaG1fdG9jX2NyZWF0ZShBVl9QQVJBTExFTF9N QUdJQywKKwkJCQkJCQkgICBwY3h0LT5zZWcgPT0gTlVMTCA/IHBjeHQtPnByaXZhdGVfbWVtb3J5 IDoKKwkJCQkJCQkJCQkJCSAgIGRzbV9zZWdtZW50X2FkZHJlc3MocGN4dC0+c2VnKSwKKwkJCQkJ CQkgICBzZWdzaXplKTsKKworCS8qIFdlIGNhbiBza2lwIHRoZSByZXN0IG9mIHRoaXMgaWYgd2Un cmUgbm90IGJ1ZGdldGluZyBmb3IgYW55IHdvcmtlcnMuICovCisJaWYgKHBjeHQtPm53b3JrZXJz ID4gMCkKKwl7CisJCS8qCisJCSAqIFNlcmlhbGl6ZSB0aGUgdHJhbnNhY3Rpb24gc25hcHNob3Qg aWYgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbgorCQkgKiBsZXZlbCB1c2VzIGEgdHJhbnNhY3Rp b24gc25hcHNob3QuCisJCSAqLworCQlpZiAoSXNvbGF0aW9uVXNlc1hhY3RTbmFwc2hvdCgpKQor CQl7CisJCQl0c25hcHNwYWNlID0gc2htX3RvY19hbGxvY2F0ZShwY3h0LT50b2MsIHRzbmFwbGVu KTsKKwkJCVNlcmlhbGl6ZVNuYXBzaG90KHRyYW5zYWN0aW9uX3NuYXBzaG90LCB0c25hcHNwYWNl KTsKKwkJCXNobV90b2NfaW5zZXJ0KHBjeHQtPnRvYywgQVZfUEFSQUxMRUxfS0VZX1RSQU5TQUNU SU9OX1NOQVBTSE9ULAorCQkJCQkJICAgdHNuYXBzcGFjZSk7CisJCX0KKworCQkvKiBTZXJpYWxp emUgdGhlIGFjdGl2ZSBzbmFwc2hvdC4gKi8KKwkJYXNuYXBzcGFjZSA9IHNobV90b2NfYWxsb2Nh dGUocGN4dC0+dG9jLCBhc25hcGxlbik7CisJCVNlcmlhbGl6ZVNuYXBzaG90KGFjdGl2ZV9zbmFw c2hvdCwgYXNuYXBzcGFjZSk7CisJCXNobV90b2NfaW5zZXJ0KHBjeHQtPnRvYywgQVZfUEFSQUxM RUxfS0VZX0FDVElWRV9TTkFQU0hPVCwgYXNuYXBzcGFjZSk7CisJfQorCisJLyogVXBkYXRlIG53 b3JrZXJzX3RvX2xhdW5jaCwgaW4gY2FzZSB3ZSBjaGFuZ2VkIG53b3JrZXJzIGFib3ZlLiAqLwor CXBjeHQtPm53b3JrZXJzX3RvX2xhdW5jaCA9IHBjeHQtPm53b3JrZXJzOworCisJLyogUmVzdG9y ZSBwcmV2aW91cyBtZW1vcnkgY29udGV4dC4gKi8KKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xk Y29udGV4dCk7Cit9CisKKy8qCisgKiBTaG9ydCB2ZXJzaW9uIG9mIERlc3Ryb3lQYXJhbGxlbENv bnRleHQgKHBhcmFsbGVsLmMpLiBIZXJlIHdlIGNsZWFuIHVwIG9ubHkKKyAqIHRob3NlIGRhdGEg dGhhdCB3ZXJlIHVzZWQgZHVyaW5nIHBhcmFsbGVsIGluZGV4IHByb2Nlc3NpbmcgZHVyaW5nIGF1 dG92YWN1dW0uCisgKi8KK3N0YXRpYyB2b2lkCitEZXN0cm95UGFyYWxsZWxBdXRvVmFjQ29udGV4 dChQYXJhbGxlbENvbnRleHQgKnBjeHQpCit7CisJLyoKKwkgKiBJZiB3ZSBoYXZlIGFsbG9jYXRl ZCBhIHNoYXJlZCBtZW1vcnkgc2VnbWVudCwgZGV0YWNoIGl0LiAgVGhpcyB3aWxsCisJICogaW1w bGljaXRseSBkZXRhY2ggdGhlIGVycm9yIHF1ZXVlcywgYW5kIGFueSBvdGhlciBzaGFyZWQgbWVt b3J5IHF1ZXVlcywKKwkgKiBzdG9yZWQgdGhlcmUuCisJICovCisJaWYgKHBjeHQtPnNlZyAhPSBO VUxMKQorCXsKKwkJZHNtX2RldGFjaChwY3h0LT5zZWcpOworCQlwY3h0LT5zZWcgPSBOVUxMOwor CX0KKworCS8qCisJICogSWYgdGhpcyBwYXJhbGxlbCBjb250ZXh0IGlzIGFjdHVhbGx5IGluIGJh Y2tlbmQtcHJpdmF0ZSBtZW1vcnkgcmF0aGVyCisJICogdGhhbiBzaGFyZWQgbWVtb3J5LCBmcmVl IHRoYXQgbWVtb3J5IGluc3RlYWQuCisJICovCisJaWYgKHBjeHQtPnByaXZhdGVfbWVtb3J5ICE9 IE5VTEwpCisJeworCQlwZnJlZShwY3h0LT5wcml2YXRlX21lbW9yeSk7CisJCXBjeHQtPnByaXZh dGVfbWVtb3J5ID0gTlVMTDsKKwl9CisKKwlBdXRvVmFjdXVtUmVsZWFzZVBhcmFsbGVsV29yayhm YWxzZSk7CisJcGZyZWUocGN4dCk7Cit9CisKIC8qCiAgKiBDb21wdXRlIHRoZSBudW1iZXIgb2Yg cGFyYWxsZWwgd29ya2VyIHByb2Nlc3NlcyB0byByZXF1ZXN0LiAgQm90aCBpbmRleAogICogdmFj dXVtIGFuZCBpbmRleCBjbGVhbnVwIGNhbiBiZSBleGVjdXRlZCB3aXRoIHBhcmFsbGVsIHdvcmtl cnMuCkBAIC01NTgsNyArNzM0LDkgQEAgcGFyYWxsZWxfdmFjdXVtX2NvbXB1dGVfd29ya2VycyhS ZWxhdGlvbiAqaW5kcmVscywgaW50IG5pbmRleGVzLCBpbnQgbnJlcXVlc3RlZCwKIAkgKiBXZSBk b24ndCBhbGxvdyBwZXJmb3JtaW5nIHBhcmFsbGVsIG9wZXJhdGlvbiBpbiBzdGFuZGFsb25lIGJh Y2tlbmQgb3IKIAkgKiB3aGVuIHBhcmFsbGVsaXNtIGlzIGRpc2FibGVkLgogCSAqLwotCWlmICgh SXNVbmRlclBvc3RtYXN0ZXIgfHwgbWF4X3BhcmFsbGVsX21haW50ZW5hbmNlX3dvcmtlcnMgPT0g MCkKKwlpZiAoIUlzVW5kZXJQb3N0bWFzdGVyIHx8CisJCShtYXhfcGFyYWxsZWxfbWFpbnRlbmFu Y2Vfd29ya2VycyA9PSAwICYmICFBbUF1dG9WYWN1dW1Xb3JrZXJQcm9jZXNzKCkpIHx8CisJCSht YXhfcGFyYWxsZWxfaW5kZXhfYXV0b3ZhY193b3JrZXJzID09IDAgJiYgQW1BdXRvVmFjdXVtV29y a2VyUHJvY2VzcygpKSkKIAkJcmV0dXJuIDA7CiAKIAkvKgpAQCAtNTk3LDE1ICs3NzUsMTcgQEAg cGFyYWxsZWxfdmFjdXVtX2NvbXB1dGVfd29ya2VycyhSZWxhdGlvbiAqaW5kcmVscywgaW50IG5p bmRleGVzLCBpbnQgbnJlcXVlc3RlZCwKIAlwYXJhbGxlbF93b3JrZXJzID0gKG5yZXF1ZXN0ZWQg PiAwKSA/CiAJCU1pbihucmVxdWVzdGVkLCBuaW5kZXhlc19wYXJhbGxlbCkgOiBuaW5kZXhlc19w YXJhbGxlbDsKIAotCS8qIENhcCBieSBtYXhfcGFyYWxsZWxfbWFpbnRlbmFuY2Vfd29ya2VycyAq LwotCXBhcmFsbGVsX3dvcmtlcnMgPSBNaW4ocGFyYWxsZWxfd29ya2VycywgbWF4X3BhcmFsbGVs X21haW50ZW5hbmNlX3dvcmtlcnMpOworCS8qIENhcCBieSBHVUMgdmFyaWFibGUgKi8KKwlwYXJh bGxlbF93b3JrZXJzID0gQW1BdXRvVmFjdXVtV29ya2VyUHJvY2VzcygpID8KKwkJTWluKHBhcmFs bGVsX3dvcmtlcnMsIG1heF9wYXJhbGxlbF9pbmRleF9hdXRvdmFjX3dvcmtlcnMpIDoKKwkJTWlu KHBhcmFsbGVsX3dvcmtlcnMsIG1heF9wYXJhbGxlbF9tYWludGVuYW5jZV93b3JrZXJzKTsKIAog CXJldHVybiBwYXJhbGxlbF93b3JrZXJzOwogfQogCiAvKgogICogUGVyZm9ybSBpbmRleCB2YWN1 dW0gb3IgaW5kZXggY2xlYW51cCB3aXRoIHBhcmFsbGVsIHdvcmtlcnMuICBUaGlzIGZ1bmN0aW9u Ci0gKiBtdXN0IGJlIHVzZWQgYnkgdGhlIHBhcmFsbGVsIHZhY3V1bSBsZWFkZXIgcHJvY2Vzcy4K KyAqIG11c3QgYmUgdXNlZCBieSB0aGUgcGFyYWxsZWwgW2F1dG9ddmFjdXVtIGxlYWRlciBwcm9j ZXNzLgogICovCiBzdGF0aWMgdm9pZAogcGFyYWxsZWxfdmFjdXVtX3Byb2Nlc3NfYWxsX2luZGV4 ZXMoUGFyYWxsZWxWYWN1dW1TdGF0ZSAqcHZzLCBpbnQgbnVtX2luZGV4X3NjYW5zLApAQCAtNjcw LDcgKzg1MCw3IEBAIHBhcmFsbGVsX3ZhY3V1bV9wcm9jZXNzX2FsbF9pbmRleGVzKFBhcmFsbGVs VmFjdXVtU3RhdGUgKnB2cywgaW50IG51bV9pbmRleF9zY2FuCiAJaWYgKG53b3JrZXJzID4gMCkK IAl7CiAJCS8qIFJlaW5pdGlhbGl6ZSBwYXJhbGxlbCBjb250ZXh0IHRvIHJlbGF1bmNoIHBhcmFs bGVsIHdvcmtlcnMgKi8KLQkJaWYgKG51bV9pbmRleF9zY2FucyA+IDApCisJCWlmIChudW1faW5k ZXhfc2NhbnMgPiAwICYmICFwdnMtPmlzX2F1dG92YWN1dW0pCiAJCQlSZWluaXRpYWxpemVQYXJh bGxlbERTTShwdnMtPnBjeHQpOwogCiAJCS8qCkBAIC02ODYsOSArODY2LDIyIEBAIHBhcmFsbGVs X3ZhY3V1bV9wcm9jZXNzX2FsbF9pbmRleGVzKFBhcmFsbGVsVmFjdXVtU3RhdGUgKnB2cywgaW50 IG51bV9pbmRleF9zY2FuCiAJCSAqIFRoZSBudW1iZXIgb2Ygd29ya2VycyBjYW4gdmFyeSBiZXR3 ZWVuIGJ1bGtkZWxldGUgYW5kIGNsZWFudXAKIAkJICogcGhhc2UuCiAJCSAqLwotCQlSZWluaXRp YWxpemVQYXJhbGxlbFdvcmtlcnMocHZzLT5wY3h0LCBud29ya2Vycyk7Ci0KLQkJTGF1bmNoUGFy YWxsZWxXb3JrZXJzKHB2cy0+cGN4dCk7CisJCWlmIChwdnMtPmlzX2F1dG92YWN1dW0pCisJCXsK KwkJCXB2cy0+cGN4dC0+bndvcmtlcnNfdG9fbGF1bmNoID0gTWluKHB2cy0+cGN4dC0+bndvcmtl cnMsIG53b3JrZXJzKTsKKwkJCWlmIChwdnMtPnBjeHQtPm53b3JrZXJzID4gMCAmJiBwdnMtPnBj eHQtPm53b3JrZXJzX3RvX2xhdW5jaCA+IDApCisJCQl7CisJCQkJcHZzLT5wY3h0LT5ud29ya2Vy c19sYXVuY2hlZCA9CisJCQkJCUxhdW5jaFBhcmFsbGVsQXV0b3ZhY3V1bVdvcmtlcnMocHZzLT5o ZWFwcmVsLT5yZF9pZCwKKwkJCQkJCQkJCQkJCQlwdnMtPnBjeHQtPm53b3JrZXJzX3RvX2xhdW5j aCwKKwkJCQkJCQkJCQkJCQlkc21fc2VnbWVudF9oYW5kbGUocHZzLT5wY3h0LT5zZWcpKTsKKwkJ CX0KKwkJfQorCQllbHNlCisJCXsKKwkJCVJlaW5pdGlhbGl6ZVBhcmFsbGVsV29ya2VycyhwdnMt PnBjeHQsIG53b3JrZXJzKTsKKwkJCUxhdW5jaFBhcmFsbGVsV29ya2VycyhwdnMtPnBjeHQpOwor CQl9CiAKIAkJaWYgKHB2cy0+cGN4dC0+bndvcmtlcnNfbGF1bmNoZWQgPiAwKQogCQl7CkBAIC03 MzMsOCArOTI2LDE0IEBAIHBhcmFsbGVsX3ZhY3V1bV9wcm9jZXNzX2FsbF9pbmRleGVzKFBhcmFs bGVsVmFjdXVtU3RhdGUgKnB2cywgaW50IG51bV9pbmRleF9zY2FuCiAJICovCiAJaWYgKG53b3Jr ZXJzID4gMCkKIAl7Ci0JCS8qIFdhaXQgZm9yIGFsbCB2YWN1dW0gd29ya2VycyB0byBmaW5pc2gg Ki8KLQkJV2FpdEZvclBhcmFsbGVsV29ya2Vyc1RvRmluaXNoKHB2cy0+cGN4dCk7CisJCS8qCisJ CSAqIFdhaXQgZm9yIGFsbCBbYXV0b112YWN1dW0gd29ya2VycyBpbnZvbHZlZCBpbiBwYXJhbGxl bCBpbmRleAorCQkgKiBwcm9jZXNzaW5nIChpZiBhbnkpIHRvIGZpbmlzaCBhbmQgYWR2YW5jZSBz dGF0ZSBtYWNoaW5lLgorCQkgKi8KKwkJaWYgKHB2cy0+aXNfYXV0b3ZhY3V1bSAmJiBwdnMtPnBj eHQtPm53b3JrZXJzX2xhdW5jaGVkID49IDApCisJCQlQYXJhbGxlbEF1dG92YWN1dW1FbmRTeW5j UG9pbnQoZmFsc2UpOworCQllbHNlIGlmICghcHZzLT5pc19hdXRvdmFjdXVtKQorCQkJV2FpdEZv clBhcmFsbGVsV29ya2Vyc1RvRmluaXNoKHB2cy0+cGN4dCk7CiAKIAkJZm9yIChpbnQgaSA9IDA7 IGkgPCBwdnMtPnBjeHQtPm53b3JrZXJzX2xhdW5jaGVkOyBpKyspCiAJCQlJbnN0ckFjY3VtUGFy YWxsZWxRdWVyeSgmcHZzLT5idWZmZXJfdXNhZ2VbaV0sICZwdnMtPndhbF91c2FnZVtpXSk7CkBA IC05ODIsOCArMTE4MSw4IEBAIHBhcmFsbGVsX3ZhY3V1bV9pbmRleF9pc19wYXJhbGxlbF9zYWZl KFJlbGF0aW9uIGluZHJlbCwgaW50IG51bV9pbmRleF9zY2FucywKIC8qCiAgKiBQZXJmb3JtIHdv cmsgd2l0aGluIGEgbGF1bmNoZWQgcGFyYWxsZWwgcHJvY2Vzcy4KICAqCi0gKiBTaW5jZSBwYXJh bGxlbCB2YWN1dW0gd29ya2VycyBwZXJmb3JtIG9ubHkgaW5kZXggdmFjdXVtIG9yIGluZGV4IGNs ZWFudXAsCi0gKiB3ZSBkb24ndCBuZWVkIHRvIHJlcG9ydCBwcm9ncmVzcyBpbmZvcm1hdGlvbi4K KyAqIFNpbmNlIHBhcmFsbGVsIFthdXRvXXZhY3V1bSB3b3JrZXJzIHBlcmZvcm0gb25seSBpbmRl eCB2YWN1dW0gb3IgaW5kZXgKKyAqIGNsZWFudXAsIHdlIGRvbid0IG5lZWQgdG8gcmVwb3J0IHBy b2dyZXNzIGluZm9ybWF0aW9uLgogICovCiB2b2lkCiBwYXJhbGxlbF92YWN1dW1fbWFpbihkc21f c2VnbWVudCAqc2VnLCBzaG1fdG9jICp0b2MpCkBAIC05OTcsMjMgKzExOTYsMjIgQEAgcGFyYWxs ZWxfdmFjdXVtX21haW4oZHNtX3NlZ21lbnQgKnNlZywgc2htX3RvYyAqdG9jKQogCUJ1ZmZlclVz YWdlICpidWZmZXJfdXNhZ2U7CiAJV2FsVXNhZ2UgICAqd2FsX3VzYWdlOwogCWludAkJCW5pbmRl eGVzOworCWludAkJCXdvcmtlcl9udW1iZXI7CiAJY2hhcgkgICAqc2hhcmVkcXVlcnk7CiAJRXJy b3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CiAKLQkvKgotCSAqIEEgcGFyYWxsZWwgdmFj dXVtIHdvcmtlciBtdXN0IGhhdmUgb25seSBQUk9DX0lOX1ZBQ1VVTSBmbGFnIHNpbmNlIHdlCi0J ICogZG9uJ3Qgc3VwcG9ydCBwYXJhbGxlbCB2YWN1dW0gZm9yIGF1dG92YWN1dW0gYXMgb2Ygbm93 LgotCSAqLwotCUFzc2VydChNeVByb2MtPnN0YXR1c0ZsYWdzID09IFBST0NfSU5fVkFDVVVNKTsK LQotCWVsb2coREVCVUcxLCAic3RhcnRpbmcgcGFyYWxsZWwgdmFjdXVtIHdvcmtlciIpOworCUFz c2VydChNeVByb2MtPnN0YXR1c0ZsYWdzID09IFBST0NfSU5fVkFDVVVNIHx8IEFtQXV0b1ZhY3V1 bVdvcmtlclByb2Nlc3MoKSk7CisJZWxvZyhERUJVRzEsICJzdGFydGluZyBwYXJhbGxlbCBbYXV0 b112YWN1dW0gd29ya2VyIik7CiAKIAlzaGFyZWQgPSAoUFZTaGFyZWQgKikgc2htX3RvY19sb29r dXAodG9jLCBQQVJBTExFTF9WQUNVVU1fS0VZX1NIQVJFRCwgZmFsc2UpOwogCiAJLyogU2V0IGRl YnVnX3F1ZXJ5X3N0cmluZyBmb3IgaW5kaXZpZHVhbCB3b3JrZXJzICovCi0Jc2hhcmVkcXVlcnkg PSBzaG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVMX1ZBQ1VVTV9LRVlfUVVFUllfVEVYVCwgdHJ1 ZSk7Ci0JZGVidWdfcXVlcnlfc3RyaW5nID0gc2hhcmVkcXVlcnk7Ci0JcGdzdGF0X3JlcG9ydF9h Y3Rpdml0eShTVEFURV9SVU5OSU5HLCBkZWJ1Z19xdWVyeV9zdHJpbmcpOworCWlmICghQW1BdXRv VmFjdXVtV29ya2VyUHJvY2VzcygpKQorCXsKKwkJc2hhcmVkcXVlcnkgPSBzaG1fdG9jX2xvb2t1 cCh0b2MsIFBBUkFMTEVMX1ZBQ1VVTV9LRVlfUVVFUllfVEVYVCwgdHJ1ZSk7CisJCWRlYnVnX3F1 ZXJ5X3N0cmluZyA9IHNoYXJlZHF1ZXJ5OworCQlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRF X1JVTk5JTkcsIGRlYnVnX3F1ZXJ5X3N0cmluZyk7CisJfQogCiAJLyogVHJhY2sgcXVlcnkgSUQg Ki8KIAlwZ3N0YXRfcmVwb3J0X3F1ZXJ5X2lkKHNoYXJlZC0+cXVlcnlpZCwgZmFsc2UpOwpAQCAt MTA5MSw4ICsxMjg5LDEyIEBAIHBhcmFsbGVsX3ZhY3V1bV9tYWluKGRzbV9zZWdtZW50ICpzZWcs IHNobV90b2MgKnRvYykKIAkvKiBSZXBvcnQgYnVmZmVyL1dBTCB1c2FnZSBkdXJpbmcgcGFyYWxs ZWwgZXhlY3V0aW9uICovCiAJYnVmZmVyX3VzYWdlID0gc2htX3RvY19sb29rdXAodG9jLCBQQVJB TExFTF9WQUNVVU1fS0VZX0JVRkZFUl9VU0FHRSwgZmFsc2UpOwogCXdhbF91c2FnZSA9IHNobV90 b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfVkFDVVVNX0tFWV9XQUxfVVNBR0UsIGZhbHNlKTsKLQlJ bnN0ckVuZFBhcmFsbGVsUXVlcnkoJmJ1ZmZlcl91c2FnZVtQYXJhbGxlbFdvcmtlck51bWJlcl0s Ci0JCQkJCQkgICZ3YWxfdXNhZ2VbUGFyYWxsZWxXb3JrZXJOdW1iZXJdKTsKKworCXdvcmtlcl9u dW1iZXIgPSBBbUF1dG9WYWN1dW1Xb3JrZXJQcm9jZXNzKCkgPworCQlHZXRBdXRvVmFjdXVtUGFy YWxsZWxXb3JrZXJOdW1iZXIoKSA6IFBhcmFsbGVsV29ya2VyTnVtYmVyOworCisJSW5zdHJFbmRQ YXJhbGxlbFF1ZXJ5KCZidWZmZXJfdXNhZ2Vbd29ya2VyX251bWJlcl0sCisJCQkJCQkgICZ3YWxf dXNhZ2Vbd29ya2VyX251bWJlcl0pOwogCiAJLyogUmVwb3J0IGFueSByZW1haW5pbmcgY29zdC1i YXNlZCB2YWN1dW0gZGVsYXkgdGltZSAqLwogCWlmICh0cmFja19jb3N0X2RlbGF5X3RpbWluZykK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jIGIvc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMKaW5kZXggMTY3NTYxNTJiNzEuLjA0MGFmNWVi YzE0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYworKysg Yi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYwpAQCAtOTAsNiArOTAsNyBAQAog I2luY2x1ZGUgInBvc3RtYXN0ZXIvcG9zdG1hc3Rlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYWlv X3N1YnN5cy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAic3RvcmFn ZS9jb25kaXRpb25fdmFyaWFibGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvbGF0Y2guaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKQEAgLTEwMSw2 ICsxMDIsNyBAQAogI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCiAjaW5jbHVkZSAidXRpbHMv Zm1ncnByb3Rvcy5oIgogI2luY2x1ZGUgInV0aWxzL2d1Y19ob29rcy5oIgorI2luY2x1ZGUgInV0 aWxzL2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50LmgiCiAjaW5jbHVk ZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKQEAgLTEy OSw2ICsxMzEsNyBAQCBpbnQJCQlhdXRvdmFjdXVtX2FubF90aHJlc2g7CiBkb3VibGUJCWF1dG92 YWN1dW1fYW5sX3NjYWxlOwogaW50CQkJYXV0b3ZhY3V1bV9mcmVlemVfbWF4X2FnZTsKIGludAkJ CWF1dG92YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlOworaW50CQkJbWF4X3BhcmFsbGVs X2luZGV4X2F1dG92YWNfd29ya2VyczsKIAogZG91YmxlCQlhdXRvdmFjdXVtX3ZhY19jb3N0X2Rl bGF5OwogaW50CQkJYXV0b3ZhY3V1bV92YWNfY29zdF9saW1pdDsKQEAgLTE2NCw2ICsxNjcsMTQg QEAgc3RhdGljIGludAlkZWZhdWx0X2ZyZWV6ZV90YWJsZV9hZ2U7CiBzdGF0aWMgaW50CWRlZmF1 bHRfbXVsdGl4YWN0X2ZyZWV6ZV9taW5fYWdlOwogc3RhdGljIGludAlkZWZhdWx0X211bHRpeGFj dF9mcmVlemVfdGFibGVfYWdlOwogCisvKgorICogTnVtYmVyIG9mIGFkZGl0aW9uYWwgd29ya2Vy cyB0aGF0IHdhcyByZXF1ZXN0ZWQgZm9yIHBhcmFsbGVsIGluZGV4IHByb2Nlc3NpbmcKKyAqIGR1 cmluZyBhdXRvdmFjdXVtLgorICovCitzdGF0aWMgaW50CW53b3JrZXJzX2Zvcl9pZHhfYXV0b3Zh YyA9IDA7CisKK3N0YXRpYyBpbnQgbndvcmtlcnNfbGF1bmNoZWQgPSAwOworCiAvKiBNZW1vcnkg Y29udGV4dCBmb3IgbG9uZy1saXZlZCBkYXRhICovCiBzdGF0aWMgTWVtb3J5Q29udGV4dCBBdXRv dmFjTWVtQ3h0OwogCkBAIC0yMTAsNiArMjIxLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgYXV0b3ZhY190 YWJsZQogCWNoYXIJICAgKmF0X2RhdG5hbWU7CiB9IGF1dG92YWNfdGFibGU7CiAKKy8qIEZvcndh cmQgZGVjbGFyYXRpb24gKi8KK3R5cGVkZWYgc3RydWN0IFBhcmFsbGVsQXV0b1ZhY3V1bVdvcmtJ dGVtIFBhcmFsbGVsQXV0b1ZhY3V1bVdvcmtJdGVtOworCiAvKi0tLS0tLS0tLS0tLS0KICAqIFRo aXMgc3RydWN0IGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IGEgc2luZ2xlIHdvcmtlcidzIHdoZXJl YWJvdXRzLiAgV2Uga2VlcAogICogYW4gYXJyYXkgb2YgdGhlc2UgaW4gc2hhcmVkIG1lbW9yeSwg c2l6ZWQgYWNjb3JkaW5nIHRvCkBAIC0yMjIsNiArMjM2LDEwIEBAIHR5cGVkZWYgc3RydWN0IGF1 dG92YWNfdGFibGUKICAqIHdpX3Byb2MJCXBvaW50ZXIgdG8gUEdQUk9DIG9mIHRoZSBydW5uaW5n IHdvcmtlciwgTlVMTCBpZiBub3Qgc3RhcnRlZAogICogd2lfbGF1bmNodGltZSBUaW1lIGF0IHdo aWNoIHRoaXMgd29ya2VyIHdhcyBsYXVuY2hlZAogICogd2lfZG9iYWxhbmNlIFdoZXRoZXIgdGhp cyB3b3JrZXIgc2hvdWxkIGJlIGluY2x1ZGVkIGluIGJhbGFuY2UgY2FsY3VsYXRpb25zCisgKiB3 aV9wY2xlYW51cCBpZiAoPiAwKSA9PiB0aGlzIHdvcmtlciBtdXN0IHBhcnRpY2lwYXRlIGluIHBh cmFsbGVsIGluZGV4CisgKiAJCQkgICB2YWN1dW1pbmcgYXMgc3VwcG9ydGl2ZS4gTXVzdCBiZSAo PT0gMCkgZm9yIGxlYWRlciB3b3JrZXIuCisgKiB3aV90YXJnZXRfaXRlbSB1c2VkIG9ubHkgZm9y IHBhcmFsbGVsIGluZGV4IHZhY3V1bSBzdXBwb3J0aXZlIHdvcmtlcnMuIFBvaW50cworICogCQkJ CSAgdG8gd29ya2l0ZW0sIHRoYXQgbXVzdCBiZSBwcm9jZXNzZWQgYnkgdGhpcyB3b3JrZXIuCiAg KgogICogQWxsIGZpZWxkcyBhcmUgcHJvdGVjdGVkIGJ5IEF1dG92YWN1dW1Mb2NrLCBleGNlcHQg Zm9yIHdpX3RhYmxlb2lkIGFuZAogICogd2lfc2hhcmVkcmVsIHdoaWNoIGFyZSBwcm90ZWN0ZWQg YnkgQXV0b3ZhY3V1bVNjaGVkdWxlTG9jayAobm90ZSB0aGVzZQpAQCAtMjM3LDEwICsyNTUsMjIg QEAgdHlwZWRlZiBzdHJ1Y3QgV29ya2VySW5mb0RhdGEKIAlUaW1lc3RhbXBUeiB3aV9sYXVuY2h0 aW1lOwogCXBnX2F0b21pY19mbGFnIHdpX2RvYmFsYW5jZTsKIAlib29sCQl3aV9zaGFyZWRyZWw7 CisJaW50CQkJd2lfcGNsZWFudXA7CisJc3RydWN0IFBhcmFsbGVsQXV0b1ZhY3V1bVdvcmtJdGVt ICp3aV90YXJnZXRfaXRlbTsKIH0gV29ya2VySW5mb0RhdGE7CiAKIHR5cGVkZWYgc3RydWN0IFdv cmtlckluZm9EYXRhICpXb3JrZXJJbmZvOwogCisjZGVmaW5lIEFtUGFyYWxsZWxJZHhBdXRvVmFj U3VwcG9ydGl2ZSgpIFwKKwkoTXlXb3JrZXJJbmZvICE9IE5VTEwgJiYgXAorCSBNeVdvcmtJdGVt ICE9IE5VTEwgJiYgXAorCSBNeVdvcmtlckluZm8tPndpX3BjbGVhbnVwID4gMCkKKworI2RlZmlu ZSBBbVBhcmFsbGVsSWR4QXV0b1ZhY0xlYWRlcigpIFwKKwkoTXlXb3JrZXJJbmZvICE9IE5VTEwg JiYgXAorCSBNeVdvcmtJdGVtICE9IE5VTEwgJiYgXAorCSBNeVdvcmtlckluZm8tPndpX3BjbGVh bnVwID09IDApCisKIC8qCiAgKiBQb3NzaWJsZSBzaWduYWxzIHJlY2VpdmVkIGJ5IHRoZSBsYXVu Y2hlciBmcm9tIHJlbW90ZSBwcm9jZXNzZXMuICBUaGVzZSBhcmUKICAqIHN0b3JlZCBhdG9taWNh bGx5IGluIHNoYXJlZCBtZW1vcnkgc28gdGhhdCBvdGhlciBwcm9jZXNzZXMgY2FuIHNldCB0aGVt CkBAIC0yNTAsOSArMjgwLDEwIEBAIHR5cGVkZWYgZW51bQogewogCUF1dG9WYWNGb3JrRmFpbGVk LAkJCS8qIGZhaWxlZCB0cnlpbmcgdG8gc3RhcnQgYSB3b3JrZXIgKi8KIAlBdXRvVmFjUmViYWxh bmNlLAkJCS8qIHJlYmFsYW5jZSB0aGUgY29zdCBsaW1pdHMgKi8KKwlBdXRvVmFjUGFyYWxsZWxS ZXEsCQkJLyogcmVxdWVzdCBmb3IgcGFyYWxsZWwgaW5kZXggdmFjdXVtICovCiB9CQkJQXV0b1Zh Y3V1bVNpZ25hbDsKIAotI2RlZmluZSBBdXRvVmFjTnVtU2lnbmFscyAoQXV0b1ZhY1JlYmFsYW5j ZSArIDEpCisjZGVmaW5lIEF1dG9WYWNOdW1TaWduYWxzIChBdXRvVmFjUGFyYWxsZWxSZXEgKyAx KQogCiAvKgogICogQXV0b3ZhY3V1bSB3b3JraXRlbSBhcnJheSwgc3RvcmVkIGluIEF1dG9WYWN1 dW1TaG1lbS0+YXZfd29ya0l0ZW1zLiAgVGhpcwpAQCAtMjcyLDYgKzMwMyw1NSBAQCB0eXBlZGVm IHN0cnVjdCBBdXRvVmFjdXVtV29ya0l0ZW0KIAogI2RlZmluZSBOVU1fV09SS0lURU1TCTI1Ngog Cit0eXBlZGVmIGVudW0KK3sKKwlMQVVOQ0hFUiA9IDAsCS8qIGF1dG92YWN1dW0gbGF1bmNoZXIg bXVzdCB3YWtlIGV2ZXJ5b25lIHVwICovCisJTEVBREVSLAkJCS8qIGxlYWRlciBtdXN0IHdha2Ug ZXZlcnlvbmUgdXAgKi8KKwlMQVNUX1dPUktFUiwJLyogdGhlIGxhc3QgaW5pdGVkIHN1cHBvcnRp dmUgd29ya2VyIG11c3Qgd2FrZSBldmVyeW9uZQorCQkJCQkgICB1cCAqLworfSBTeW5jVHlwZTsK KwordHlwZWRlZiBlbnVtCit7CisJU1RBUlRVUCA9IDAsCQkJCS8qIGluaXRpYWwgdmFsdWUgLSBu byBzeW5jIHBvaW50cyB3ZXJlIHBhc3NlZCAqLworCVNUQVJUX1NZTkNfUE9JTlRfUEFTU0VELAkv KiBzdGFydF9zeW5jX3BvaW50IHdhcyBwYXNzZWQgKi8KKwlFTkRfU1lOQ19QT0lOVF9QQVNTRUQs CQkvKiBlbmRfc3luY19wb2ludCB3YXMgcGFzc2VkICovCisJU0hVVERPV04sCQkJCQkvKiBsZWFk ZXIgd2FudHMgdG8gc2h1dCBkb3duIHBhcmFsbGVsIGluZGV4CisJCQkJCQkJCQl2YWN1dW0gZHVl IHRvIG9jY3VyZWQgZXJyb3IgKi8KK30gU3RhdHVzOworCisvKgorICogU3RydWN0dXJlLCBzdG9y ZWQgaW4gQXV0b1ZhY3V1bVNobWVtLT5wYXZfd29ya0l0ZW0uIFRoaXMgaXMgdXNlZCBmb3IgbWFu YWdpbmcKKyAqIHBhcmFsbGVsIGluZGV4IHByb2Nlc3NpbmcgKHdoaXRoaW4gc2luZ2xlIHRhYmxl KS4KKyAqLworc3RydWN0IFBhcmFsbGVsQXV0b1ZhY3V1bVdvcmtJdGVtCit7CisJT2lkCQkJYXZ3 X2RhdGFiYXNlOworCU9pZAkJCWF2d19yZWxhdGlvbjsKKwlpbnQJCQlud29ya2Vyc19wYXJ0aWNp cGF0aW5nOworCWludAkJCW53b3JrZXJzX3RvX2xhdW5jaDsKKwlpbnQgCQlud29ya2Vyc19zbGVl cGluZzsgLyogbGVhZGVyIGRvZXNuJ3QgY291bnQgKi8KKwlpbnQJCQluZmluaXNoZWQ7IC8qICMg b2Ygd29ya2VycywgdGhhdCBhbHJlYWR5IGZpbmlzaGVkIHBhcmFsbGVsCisJCQkJCQkJICBpbmRl eCBwcm9jZXNzaW5nIChhbmQgcHJvYmFibHkgYWxyZWFkeSBkZWFkKSAqLworCisJZHNtX2hhbmRs ZQloYW5kbDsKKwlpbnQJCQlsZWFkZXJfcHJvY19waWQ7CisKKwlQR1BST0MgCQkJCSpsZWFkZXJf cHJvYzsKKwlDb25kaXRpb25WYXJpYWJsZQljdjsKKworCWJvb2wJCWFjdGl2ZTsJCS8qIGJlaW5n IHByb2Nlc3NlZCAqLworCWJvb2wJCWxlYWRlcl9zbGVlcGluZ19vbl9zc3A7IC8qIHNsZWVwaW5n IG9uIHN0YXJ0IHN5bmMgcG9pbnQgKi8KKwlib29sCQlsZWFkZXJfc2xlZXBpbmdfb25fZXNwOyAv KiBzbGVlcGluZyBvbiBlbmQgc3luYyBwb2ludCAqLworCVN5bmNUeXBlIAlzeW5jX3R5cGU7CisJ U3RhdHVzCQlzdGF0dXM7CisKKwlib29sIAkJbmVlZHNfbGF1bmNoZXI7CisJVGltZXN0YW1wVHog YmlydGh0aW1lOworfTsKKworc3RhdGljIFBhcmFsbGVsQXV0b1ZhY3V1bVdvcmtJdGVtICpNeVdv cmtJdGVtID0gTlVMTDsKKwogLyotLS0tLS0tLS0tLS0tCiAgKiBUaGUgbWFpbiBhdXRvdmFjdXVt IHNobWVtIHN0cnVjdC4gIE9uIHNoYXJlZCBtZW1vcnkgd2Ugc3RvcmUgdGhpcyBtYWluCiAgKiBz dHJ1Y3QgYW5kIHRoZSBhcnJheSBvZiBXb3JrZXJJbmZvIHN0cnVjdHMuICBUaGlzIHN0cnVjdCBr ZWVwczoKQEAgLTI4Myw2ICszNjMsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgQXV0b1ZhY3V1bVdvcmtJ dGVtCiAgKiBhdl9zdGFydGluZ1dvcmtlciBwb2ludGVyIHRvIFdvcmtlckluZm8gY3VycmVudGx5 IGJlaW5nIHN0YXJ0ZWQgKGNsZWFyZWQgYnkKICAqCQkJCQl0aGUgd29ya2VyIGl0c2VsZiBhcyBz b29uIGFzIGl0J3MgdXAgYW5kIHJ1bm5pbmcpCiAgKiBhdl93b3JrSXRlbXMJCXdvcmsgaXRlbSBh cnJheQorICogcGF2X3dvcmtJdGVtcwlhcnJheSBvZiBjb250cm9sIHN0cnVjdHVyZXMgbmVlZGVk IGZvciBwYXJhbGxlbCBpbmRleAorICoJCQkJCXByb2Nlc3NpbmcKKyAqIHBhdl93b3JrZXJzX2xl ZnQgaG93IG1hbnkgd29ya2VycyB3ZSBjYW4gbGF1bmNoIGZvciBwYXJhbGxlbCBpbmRleCBwcm9j ZXNzaW5nCisgKgkJCQkJKG11c3QgYWx3YXlzIGJlIDwgYXV0b3ZhY3V1bV9tYXhfd29ya2VycykK ICAqIGF2X253b3JrZXJzRm9yQmFsYW5jZSB0aGUgbnVtYmVyIG9mIGF1dG92YWN1dW0gd29ya2Vy cyB0byB1c2Ugd2hlbgogICogCQkJCQljYWxjdWxhdGluZyB0aGUgcGVyIHdvcmtlciBjb3N0IGxp bWl0CiAgKgpAQCAtMjk4LDYgKzM4Miw4IEBAIHR5cGVkZWYgc3RydWN0CiAJZGxpc3RfaGVhZAlh dl9ydW5uaW5nV29ya2VyczsKIAlXb3JrZXJJbmZvCWF2X3N0YXJ0aW5nV29ya2VyOwogCUF1dG9W YWN1dW1Xb3JrSXRlbSBhdl93b3JrSXRlbXNbTlVNX1dPUktJVEVNU107CisJUGFyYWxsZWxBdXRv VmFjdXVtV29ya0l0ZW0gcGF2X3dvcmtJdGVtc1tOVU1fV09SS0lURU1TXTsKKwlpbnQJCQkJIHBh dl93b3JrZXJzX2xlZnQ7CiAJcGdfYXRvbWljX3VpbnQzMiBhdl9ud29ya2Vyc0ZvckJhbGFuY2U7 CiB9IEF1dG9WYWN1dW1TaG1lbVN0cnVjdDsKIApAQCAtMzIyLDExICs0MDgsMTcgQEAgcGdfbm9y ZXR1cm4gc3RhdGljIHZvaWQgQXV0b1ZhY0xhdW5jaGVyU2h1dGRvd24odm9pZCk7CiBzdGF0aWMg dm9pZCBsYXVuY2hlcl9kZXRlcm1pbmVfc2xlZXAoYm9vbCBjYW5sYXVuY2gsIGJvb2wgcmVjdXJz aW5nLAogCQkJCQkJCQkJIHN0cnVjdCB0aW1ldmFsICpuYXApOwogc3RhdGljIHZvaWQgbGF1bmNo X3dvcmtlcihUaW1lc3RhbXBUeiBub3cpOworc3RhdGljIHZvaWQgbGF1bmNoX3dvcmtlcl9mb3Jf cGNsZWFudXAoVGltZXN0YW1wVHogbm93KTsKK3N0YXRpYyB2b2lkIGVsaW1pbmF0ZV9sb2NrX2Nv bmZsaWN0cyhQYXJhbGxlbEF1dG9WYWN1dW1Xb3JrSXRlbSAqaXRlbSwKKwkJCQkJCQkJCSBib29s IGFsbF9sYXVuY2hlZCk7CiBzdGF0aWMgTGlzdCAqZ2V0X2RhdGFiYXNlX2xpc3Qodm9pZCk7CiBz dGF0aWMgdm9pZCByZWJ1aWxkX2RhdGFiYXNlX2xpc3QoT2lkIG5ld2RiKTsKIHN0YXRpYyBpbnQJ ZGJfY29tcGFyYXRvcihjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKIHN0YXRpYyB2b2lk IGF1dG92YWNfcmVjYWxjdWxhdGVfd29ya2Vyc19mb3JfYmFsYW5jZSh2b2lkKTsKIAorc3RhdGlj IGludCBwYXJhbGxlbF9hdXRvdmFjdXVtX3N0YXJ0X3N5bmNfcG9pbnQoYm9vbCBrZWVwX2xvY2sp Oworc3RhdGljIHZvaWQgaGFuZGxlX3BhcmFsbGVsX2lkeF9hdXRvdmFjX2Vycm9ycyh2b2lkKTsK Kwogc3RhdGljIHZvaWQgZG9fYXV0b3ZhY3V1bSh2b2lkKTsKIHN0YXRpYyB2b2lkIEZyZWVXb3Jr ZXJJbmZvKGludCBjb2RlLCBEYXR1bSBhcmcpOwogCkBAIC0zNTUsNyArNDQ3LDYxIEBAIHN0YXRp YyB2b2lkIGF2bF9zaWd1c3IyX2hhbmRsZXIoU0lHTkFMX0FSR1MpOwogc3RhdGljIGJvb2wgYXZf d29ya2VyX2F2YWlsYWJsZSh2b2lkKTsKIHN0YXRpYyB2b2lkIGNoZWNrX2F2X3dvcmtlcl9ndWNz KHZvaWQpOwogCit0eXBlZGVmIGJvb2wgKCp3YWtldXBfY29uZGl0aW9uKSAoUGFyYWxsZWxBdXRv VmFjdXVtV29ya0l0ZW0gKml0ZW0pOworc3RhdGljIGJvb2wgc3RhcnRfc3luY19wb2ludF93YWtl dXBfY29uZChQYXJhbGxlbEF1dG9WYWN1dW1Xb3JrSXRlbSAqaXRlbSk7CitzdGF0aWMgYm9vbCBl bmRfc3luY19wb2ludF93YWtldXBfY29uZChQYXJhbGxlbEF1dG9WYWN1dW1Xb3JrSXRlbSAqaXRl bSk7CitzdGF0aWMgdm9pZCBDVlNsZWVwKFBhcmFsbGVsQXV0b1ZhY3V1bVdvcmtJdGVtICppdGVt LCB3YWtldXBfY29uZGl0aW9uIHdha2V1cF9jb25kKTsKIAorLyoKKyAqIFJldHVybnMgcG9pbnRl ciB0byBmcmVlIHdvcmsgaXRlbSwgdGhhdCBjYW4gYmUgdXNlZCBmb3IgcGFyYWxsZWwgaW5kZXgK KyAqIHZhY3V1bWluZywgb3IgTlVMTCBpZiB0aGVyZSBpcyBubyBzdWNoIHdvcmsgaXRlbXMuCisg Ki8KK3N0YXRpYyBQYXJhbGxlbEF1dG9WYWN1dW1Xb3JrSXRlbSAqCitnZXRfZnJlZV93b3JraXRl bV9mb3JfbGVhZGVyKHZvaWQpCit7CisJQXNzZXJ0KExXTG9ja0hlbGRCeU1lKEF1dG92YWN1dW1M b2NrKSk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IE5VTV9XT1JLSVRFTVM7IGkrKykKKwl7CisJ CVBhcmFsbGVsQXV0b1ZhY3V1bVdvcmtJdGVtICppdGVtID0gJkF1dG9WYWN1dW1TaG1lbS0+cGF2 X3dvcmtJdGVtc1tpXTsKKworCQlpZiAoaXRlbS0+YWN0aXZlICYmIGl0ZW0tPmxlYWRlcl9wcm9j X3BpZCAhPSBNeVByb2NQaWQpCisJCQljb250aW51ZTsKKworCQlyZXR1cm4gaXRlbTsKKwl9CisK KwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFJldHVybnMgcG9pbnRlciB0byB3b3JrIGl0ZW0s IHRoYXQgbXVzdCBiZSBwcm9jZXNzZWQgYnkgYXV0b3ZhY3V1bSBsYXVuY2hlciwKKyAqIG9yIE5V TEwgaWYgdGhlcmUgaXMgbm8gc3VjaCB3b3JrIGl0ZW1zLgorICovCitzdGF0aWMgUGFyYWxsZWxB dXRvVmFjdXVtV29ya0l0ZW0gKgorZ2V0X2ZyZWVfd29ya2l0ZW1fZm9yX2xhdW5jaGVyKHZvaWQp Cit7CisJVGltZXN0YW1wVHogbGF0ZXN0ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCVBhcmFs bGVsQXV0b1ZhY3V1bVdvcmtJdGVtICppdGVtID0gTlVMTDsKKworCUFzc2VydChMV0xvY2tIZWxk QnlNZShBdXRvdmFjdXVtTG9jaykpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fV09SS0lU RU1TOyBpKyspCisJeworCQlQYXJhbGxlbEF1dG9WYWN1dW1Xb3JrSXRlbSAqdG1wID0gJkF1dG9W YWN1dW1TaG1lbS0+cGF2X3dvcmtJdGVtc1tpXTsKKworCQlpZiAoIXRtcC0+bmVlZHNfbGF1bmNo ZXIpCisJCQljb250aW51ZTsKKworCQlpZiAobGF0ZXN0ID4gdG1wLT5iaXJ0aHRpbWUpCisJCXsK KwkJCWxhdGVzdCA9IHRtcC0+YmlydGh0aW1lOworCQkJaXRlbSA9IHRtcDsKKwkJfQorCX0KKwor CXJldHVybiBpdGVtOworfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQkJCQkgIEFVVE9WQUNVVU0gTEFV TkNIRVIgQ09ERQpAQCAtNTgzLDcgKzcyOSwxNSBAQCBBdXRvVmFjTGF1bmNoZXJNYWluKGNvbnN0 IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJCSAqIHdha2Vu aW5nIGNvbmRpdGlvbnMuCiAJCSAqLwogCi0JCWxhdW5jaGVyX2RldGVybWluZV9zbGVlcChhdl93 b3JrZXJfYXZhaWxhYmxlKCksIGZhbHNlLCAmbmFwKTsKKwkJaWYgKG53b3JrZXJzX2xhdW5jaGVk IDwgbndvcmtlcnNfZm9yX2lkeF9hdXRvdmFjKQorCQl7CisJCQkvKiBUYWtlIHRoZSBzbWFsbGVz dCBwb3NzaWJsZSBzbGVlcCBpbnRlcnZhbC4gKi8KKwkJCW5hcC50dl9zZWMgPSAwOworCQkJbmFw LnR2X3VzZWMgPSBNSU5fQVVUT1ZBQ19TTEVFUFRJTUUgKiAxMDAwOworCQl9CisJCWVsc2UKKwkJ CWxhdW5jaGVyX2RldGVybWluZV9zbGVlcCghZGNsaXN0X2lzX2VtcHR5KCZBdXRvVmFjdXVtU2ht ZW0tPmF2X2ZyZWVXb3JrZXJzKSwKKwkJCQkJCQkJCSBmYWxzZSwgJm5hcCk7CiAKIAkJLyoKIAkJ ICogV2FpdCB1bnRpbCBuYXB0aW1lIGV4cGlyZXMgb3Igd2UgZ2V0IHNvbWUgdHlwZSBvZiBzaWdu YWwgKGFsbCB0aGUKQEAgLTU5OCw2ICs3NTIsMjMgQEAgQXV0b1ZhY0xhdW5jaGVyTWFpbihjb25z dCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCiAJCVByb2Nl c3NBdXRvVmFjTGF1bmNoZXJJbnRlcnJ1cHRzKCk7CiAKKwkJaWYgKE15V29ya0l0ZW0gPT0gTlVM TCAmJiBtYXhfcGFyYWxsZWxfaW5kZXhfYXV0b3ZhY193b3JrZXJzID4gMCkKKwkJeworCQkJTFdM b2NrQWNxdWlyZShBdXRvdmFjdXVtTG9jaywgTFdfRVhDTFVTSVZFKTsKKwkJCWlmIChBdXRvVmFj dXVtU2htZW0tPnBhdl93b3JrZXJzX2xlZnQgPiAwKQorCQkJeworCQkJCU15V29ya0l0ZW0gPSBn ZXRfZnJlZV93b3JraXRlbV9mb3JfbGF1bmNoZXIoKTsKKwkJCQlpZiAoTXlXb3JrSXRlbSAhPSBO VUxMKQorCQkJCXsKKwkJCQkJQXNzZXJ0KE15V29ya0l0ZW0tPmFjdGl2ZSA9PSB0cnVlKTsKKwkJ CQkJTXlXb3JrSXRlbS0+bmVlZHNfbGF1bmNoZXIgPSBmYWxzZTsKKwkJCQkJbndvcmtlcnNfZm9y X2lkeF9hdXRvdmFjID0gTXlXb3JrSXRlbS0+bndvcmtlcnNfdG9fbGF1bmNoOworCQkJCQlud29y a2Vyc19sYXVuY2hlZCA9IDA7CisJCQkJfQorCQkJfQorCQkJTFdMb2NrUmVsZWFzZShBdXRvdmFj dXVtTG9jayk7CisJCX0KKwogCQkvKgogCQkgKiBhIHdvcmtlciBmaW5pc2hlZCwgb3IgcG9zdG1h c3RlciBzaWduYWxlZCBmYWlsdXJlIHRvIHN0YXJ0IGEgd29ya2VyCiAJCSAqLwpAQCAtNjE0LDYg Kzc4NSwyMiBAQCBBdXRvVmFjTGF1bmNoZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwg c2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJCQkJTFdMb2NrUmVsZWFzZShBdXRvdmFjdXVtTG9j ayk7CiAJCQl9CiAKKwkJCUxXTG9ja0FjcXVpcmUoQXV0b3ZhY3V1bUxvY2ssIExXX0VYQ0xVU0lW RSk7CisJCQlpZiAoQXV0b1ZhY3V1bVNobWVtLT5hdl9zaWduYWxbQXV0b1ZhY1BhcmFsbGVsUmVx XSkKKwkJCXsKKwkJCQlBdXRvVmFjdXVtU2htZW0tPmF2X3NpZ25hbFtBdXRvVmFjUGFyYWxsZWxS ZXFdID0gZmFsc2U7CisKKwkJCQlpZiAoTXlXb3JrSXRlbSA9PSBOVUxMKQorCQkJCXsKKwkJCQkJ TXlXb3JrSXRlbSA9IGdldF9mcmVlX3dvcmtpdGVtX2Zvcl9sYXVuY2hlcigpOworCQkJCQlBc3Nl cnQoTXlXb3JrSXRlbSAhPSBOVUxMICYmIE15V29ya0l0ZW0tPmFjdGl2ZSA9PSB0cnVlKTsKKwkJ CQkJTXlXb3JrSXRlbS0+bmVlZHNfbGF1bmNoZXIgPSBmYWxzZTsKKwkJCQkJbndvcmtlcnNfZm9y X2lkeF9hdXRvdmFjID0gTXlXb3JrSXRlbS0+bndvcmtlcnNfdG9fbGF1bmNoOworCQkJCQlud29y a2Vyc19sYXVuY2hlZCA9IDA7CisJCQkJfQorCQkJfQorCQkJTFdMb2NrUmVsZWFzZShBdXRvdmFj dXVtTG9jayk7CisKIAkJCWlmIChBdXRvVmFjdXVtU2htZW0tPmF2X3NpZ25hbFtBdXRvVmFjRm9y a0ZhaWxlZF0pCiAJCQl7CiAJCQkJLyoKQEAgLTY4Niw2ICs4NzMsOCBAQCBBdXRvVmFjTGF1bmNo ZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4p CiAJCQkJCXdvcmtlci0+d2lfc2hhcmVkcmVsID0gZmFsc2U7CiAJCQkJCXdvcmtlci0+d2lfcHJv YyA9IE5VTEw7CiAJCQkJCXdvcmtlci0+d2lfbGF1bmNodGltZSA9IDA7CisJCQkJCXdvcmtlci0+ d2lfcGNsZWFudXAgPSAtMTsKKwkJCQkJd29ya2VyLT53aV90YXJnZXRfaXRlbSA9IE5VTEw7CiAJ CQkJCWRjbGlzdF9wdXNoX2hlYWQoJkF1dG9WYWN1dW1TaG1lbS0+YXZfZnJlZVdvcmtlcnMsCiAJ CQkJCQkJCQkgJndvcmtlci0+d2lfbGlua3MpOwogCQkJCQlBdXRvVmFjdXVtU2htZW0tPmF2X3N0 YXJ0aW5nV29ya2VyID0gTlVMTDsKQEAgLTY5OCw5ICs4ODcsMjcgQEAgQXV0b1ZhY0xhdW5jaGVy TWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQog CQl9CiAJCUxXTG9ja1JlbGVhc2UoQXV0b3ZhY3V1bUxvY2spOwkvKiBlaXRoZXIgc2hhcmVkIG9y IGV4Y2x1c2l2ZSAqLwogCi0JCS8qIGlmIHdlIGNhbid0IGRvIGFueXRoaW5nLCBqdXN0IGdvIGJh Y2sgdG8gc2xlZXAgKi8KIAkJaWYgKCFjYW5fbGF1bmNoKQorCQl7CisJCQkvKgorCQkJICogSWYg bGF1bmNoZXIgY2Fubm90IGxhdW5jaCBhbGwgcmVxdWVzdGVkIGZvciBwYXJhbGxlbCBpbmRleAor CQkJICogdmFjdXVtIHdvcmtlcnMsIGl0IG11c3QgaGFuZGxlIGFsbCBwb3NzaWJsZSBsb2NrIGNv bmZsaWN0cyBhbmQKKwkJCSAqIHRlbGwgZXZlcnlvbmUsIHRoYXQgdGhlcmUgd2lsbCBubyBuZXcg c3VwcG9ydGl2ZSB3b3JrZXJzLgorCQkJICovCisJCQlpZiAobndvcmtlcnNfbGF1bmNoZWQgPCBu d29ya2Vyc19mb3JfaWR4X2F1dG92YWMpCisJCQl7CisJCQkJTFdMb2NrQWNxdWlyZShBdXRvdmFj dXVtTG9jaywgTFdfRVhDTFVTSVZFKTsKKwkJCQlBc3NlcnQoTXlXb3JrSXRlbS0+YWN0aXZlKTsK KworCQkJCWVsaW1pbmF0ZV9sb2NrX2NvbmZsaWN0cyhNeVdvcmtJdGVtLCBmYWxzZSk7CisJCQkJ bndvcmtlcnNfbGF1bmNoZWQgPSBud29ya2Vyc19mb3JfaWR4X2F1dG92YWMgPSAwOworCQkJCU15 V29ya0l0ZW0gPSBOVUxMOworCQkJCUxXTG9ja1JlbGVhc2UoQXV0b3ZhY3V1bUxvY2spOworCQkJ fQorCisJCQkvKiBpZiB3ZSBjYW4ndCBkbyBhbnl0aGluZyBlbHNlLCBqdXN0IGdvIGJhY2sgdG8g c2xlZXAgKi8KIAkJCWNvbnRpbnVlOworCQl9CiAKIAkJLyogV2UncmUgT0sgdG8gc3RhcnQgYSBu ZXcgd29ya2VyICovCiAKQEAgLTcxNiw2ICs5MjMsMzggQEAgQXV0b1ZhY0xhdW5jaGVyTWFpbihj b25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCQkJICov CiAJCQlsYXVuY2hfd29ya2VyKGN1cnJlbnRfdGltZSk7CiAJCX0KKwkJZWxzZSBpZiAobndvcmtl cnNfbGF1bmNoZWQgPCBud29ya2Vyc19mb3JfaWR4X2F1dG92YWMpCisJCXsKKworCQkJTFdMb2Nr QWNxdWlyZShBdXRvdmFjdXVtTG9jaywgTFdfRVhDTFVTSVZFKTsKKworCQkJLyoKKwkJCSAqIENo ZWNrIHdoZXRoZXIgd2UgcmVhY2ggdGhlIGxpbWl0IG9mIHN1cHBvcnRpdmUgd29ya2Vycy4KKwkJ CSAqLworCQkJaWYgKEF1dG9WYWN1dW1TaG1lbS0+cGF2X3dvcmtlcnNfbGVmdCA9PSAwKQorCQkJ eworCQkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfQ09ORklHVVJB VElPTl9MSU1JVF9FWENFRURFRCksCisJCQkJCQkgZXJybXNnKCJjYW5ub3QgbGF1bmNoIG1vcmUg YS92IHdvcmtlcnMgZm9yIHBhcmFsbGVsIGluZGV4IGNsZWFudXAgb2YgcmVsICVkIGluIGRhdGFi YXNlICVkIiwKKwkJCQkJCQkJTXlXb3JrSXRlbS0+YXZ3X3JlbGF0aW9uLCBNeVdvcmtJdGVtLT5h dndfZGF0YWJhc2UpLAorCQkJCQkJIGVycmhpbnQoIllvdSBtaWdodCBuZWVkIHRvIGluY3JlYXNl IFwibWF4X3BhcmFsbGVsX2luZGV4X2F1dG92YWNfd29ya2Vyc1wiIHBhcmFtZXRlciIpKSk7CisJ CQkJZWxpbWluYXRlX2xvY2tfY29uZmxpY3RzKE15V29ya0l0ZW0sIGZhbHNlKTsKKwkJCQlud29y a2Vyc19sYXVuY2hlZCA9IG53b3JrZXJzX2Zvcl9pZHhfYXV0b3ZhYyA9IDA7CisJCQkJTXlXb3Jr SXRlbSA9IE5VTEw7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyoKKwkJCQkgKiBPbmUgb2Yg YWN0aXZlIGF1dG92YWN1dW0gd29ya2VycyBzZW50IHVzIHJlcXVlc3QgdG8gbGF1Y2gKKwkJCQkg KiBwYXJ0aWNpcGFudHMgZm9yIHBhcmFsbGVsIGluZGV4IHZhY3V1bS4gV2UgY2hlY2sgdGhpcyBj YXNlIGZpcnN0CisJCQkJICogYmVjYXVzZSB3ZSBuZWVkIHRvIHN0YXJ0IHBhcnRpY2lwYW50cyBh cyBzb29uIGFzIHBvc3NpYmxlLgorCQkJCSAqLworCQkJCWxhdW5jaF93b3JrZXJfZm9yX3BjbGVh bnVwKGN1cnJlbnRfdGltZSk7CisJCQkJQXV0b1ZhY3V1bVNobWVtLT5wYXZfd29ya2Vyc19sZWZ0 IC09IDE7CisJCQl9CisKKwkJCUxXTG9ja1JlbGVhc2UoQXV0b3ZhY3V1bUxvY2spOworCQl9CiAJ CWVsc2UKIAkJewogCQkJLyoKQEAgLTEyNjcsNiArMTUwNiw4IEBAIGRvX3N0YXJ0X3dvcmtlcih2 b2lkKQogCQl3b3JrZXItPndpX2Rib2lkID0gYXZkYi0+YWR3X2RhdGlkOwogCQl3b3JrZXItPndp X3Byb2MgPSBOVUxMOwogCQl3b3JrZXItPndpX2xhdW5jaHRpbWUgPSBHZXRDdXJyZW50VGltZXN0 YW1wKCk7CisJCXdvcmtlci0+d2lfcGNsZWFudXAgPSAtMTsKKwkJd29ya2VyLT53aV90YXJnZXRf aXRlbSA9IE5VTEw7CiAKIAkJQXV0b1ZhY3V1bVNobWVtLT5hdl9zdGFydGluZ1dvcmtlciA9IHdv cmtlcjsKIApAQCAtMTM0OSw2ICsxNTkwLDEzMiBAQCBsYXVuY2hfd29ya2VyKFRpbWVzdGFtcFR6 IG5vdykKIAl9CiB9CiAKKy8qCisgKiBsYXVuY2hfd29ya2VyX2Zvcl9wY2xlYW51cAorICoKKyAq IFdyYXBwZXIgZm9yIHN0YXJ0aW5nIGEgd29ya2VyIChyZXF1ZXN0ZWQgYnkgbGVhZGVyIG9mIHBh cmFsbGVsIGluZGV4CisgKiB2YWN1dW1pbmcpIGZyb20gdGhlIGxhdW5jaGVyLgorICovCitzdGF0 aWMgdm9pZAorbGF1bmNoX3dvcmtlcl9mb3JfcGNsZWFudXAoVGltZXN0YW1wVHogbm93KQorewor CVdvcmtlckluZm8JCQkJCXdvcmtlcjsKKwlkbGlzdF9ub2RlCQkJCSAgICp3cHRyOworCisJQXNz ZXJ0KE15V29ya0l0ZW0gIT0gTlVMTCk7CisJQXNzZXJ0KG53b3JrZXJzX2xhdW5jaGVkIDwgbndv cmtlcnNfZm9yX2lkeF9hdXRvdmFjKTsKKwlBc3NlcnQoTFdMb2NrSGVsZEJ5TWUoQXV0b3ZhY3V1 bUxvY2spKTsKKworCS8qCisJICogR2V0IGEgd29ya2VyIGVudHJ5IGZyb20gdGhlIGZyZWVsaXN0 LiAgV2UgY2hlY2tlZCBhYm92ZSwgc28gdGhlcmUKKwkgKiByZWFsbHkgc2hvdWxkIGJlIGEgZnJl ZSBzbG90LgorCSAqLworCXdwdHIgPSBkY2xpc3RfcG9wX2hlYWRfbm9kZSgmQXV0b1ZhY3V1bVNo bWVtLT5hdl9mcmVlV29ya2Vycyk7CisKKwl3b3JrZXIgPSBkbGlzdF9jb250YWluZXIoV29ya2Vy SW5mb0RhdGEsIHdpX2xpbmtzLCB3cHRyKTsKKwl3b3JrZXItPndpX2Rib2lkID0gSW52YWxpZE9p ZDsKKwl3b3JrZXItPndpX3Byb2MgPSBOVUxMOworCXdvcmtlci0+d2lfbGF1bmNodGltZSA9IEdl dEN1cnJlbnRUaW1lc3RhbXAoKTsKKwl3b3JrZXItPndpX3RhcmdldF9pdGVtID0gTXlXb3JrSXRl bTsKKworCS8qCisJICogU2V0IGluZGljYXRvciwgdGhhdCB0aGlzIHdvcmtlcnMgbXVzdCBqb2lu IHRvIHBhcmFsbGVsIGluZGV4IHZhY3V1bS4KKwkgKiBUaGlzIHZhcmlhYmxlIGFsc28gcGxheXMg dGhlIHJvbGUgb2YgYW4gdW5pcXVlIGlkIGFtb25nIHBhcmFsbGVsIGluZGV4CisJICogdmFjdXVt IHdvcmtlcnMuIEZpcnN0IGlkIGlzICcxJywgYmVjYXVzZSAnMCcgaXMgcmVzZXJ2ZWQgZm9yIGxl YWRlci4KKwkgKi8KKwl3b3JrZXItPndpX3BjbGVhbnVwID0gKG53b3JrZXJzX2xhdW5jaGVkICsg MSk7CisKKwlBdXRvVmFjdXVtU2htZW0tPmF2X3N0YXJ0aW5nV29ya2VyID0gd29ya2VyOworCisJ U2VuZFBvc3RtYXN0ZXJTaWduYWwoUE1TSUdOQUxfU1RBUlRfQVVUT1ZBQ19XT1JLRVIpOworCisJ QXNzZXJ0KE15V29ya0l0ZW0tPmFjdGl2ZSk7CisKKwlud29ya2Vyc19sYXVuY2hlZCArPSAxOwor CisJaWYgKG53b3JrZXJzX2xhdW5jaGVkIDwgbndvcmtlcnNfZm9yX2lkeF9hdXRvdmFjKQorCQly ZXR1cm47CisKKwlBc3NlcnQoTXlXb3JrSXRlbS0+c3luY190eXBlID09IExBVU5DSEVSICYmCisJ CSAgIG53b3JrZXJzX2xhdW5jaGVkID09IG53b3JrZXJzX2Zvcl9pZHhfYXV0b3ZhYyk7CisKKwkv KgorCSAqIElmIGxhdW5jaGVyIG1hbmFnZWQgdG8gbGF1bmNoIGFsbCByZXF1ZXN0ZWQgZm9yIHBh cmFsbGVsIGluZGV4CisJICogdmFjdXVtIHdvcmtlcnMsIGl0IG11c3QgaGFuZGxlIGFsbCBwb3Nz aWJsZSBsb2NrIGNvbmZsaWN0cy4KKwkgKi8KKwllbGltaW5hdGVfbG9ja19jb25mbGljdHMoTXlX b3JrSXRlbSwgdHJ1ZSk7CisJTXlXb3JrSXRlbSA9IE5VTEw7Cit9CisKKy8qCisgKiBNdXN0IGJl IGNhbGxlZCBmcm9tIGF1dG92YWN1dW0gbGF1bmNoZXIgd2hlbiBpdCBsYXVuY2hlZCBhbGwgcmVx dWVzdGVkCisgKiB3b3JrZXJzIGZvciBwYXJhbGxlbCBpbmRleCB2YWN1dW0sIG9yIHdoZW4gaXQg cmVhbGl6ZWQsIHRoYXQgbm8gbW9yZQorICogcHJvY2Vzc2VzIGNhbiBiZSBsYXVuY2hlZC4KKyAq CisgKiBJbiB0aGlzIGZ1bmN0aW9uIGxhdW5jaGVyIHdpbGwgYXNzaWduIHJvbGVzIGluIHN1Y2gg YSB3YXkgYXMgdG8gYXZvaWQgbG9jaworICogY29uZmxpY3RzIGJldHdlZW4gbGVhZGVyIGFuZCBz dXBwb3J0aXZlIHdvcmtlcnMuCisgKgorICogQXV0b3ZhY3V1bUxvY2sgbXVzdCBiZSBoZWxkIGlu IGV4Y2x1c2l2ZSBtb2RlIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24hCisgKi8KK3N0YXRp YyB2b2lkCitlbGltaW5hdGVfbG9ja19jb25mbGljdHMoUGFyYWxsZWxBdXRvVmFjdXVtV29ya0l0 ZW0gKml0ZW0sIGJvb2wgYWxsX2xhdW5jaGVkKQoreworCUFzc2VydChBbUF1dG9WYWN1dW1MYXVu Y2hlclByb2Nlc3MoKSk7CisJQXNzZXJ0KExXTG9ja0hlbGRCeU1lKEF1dG92YWN1dW1Mb2NrKSk7 CisKKwkvKiBTbywgbGV0J3Mgc3RhcnQuLi4gKi8KKworCWlmIChpdGVtLT5sZWFkZXJfc2xlZXBp bmdfb25fc3NwICYmCisJCWl0ZW0tPm53b3JrZXJzX3NsZWVwaW5nID09IG53b3JrZXJzX2xhdW5j aGVkKQorCXsKKwkJLyoKKwkJICogSWYgYm90aCBsZWFkZXIgYW5kIGFsbCBsYXVuY2hlZCBzdXBw b3J0aXZlIHdvcmtlcnMgYXJlIHNsZWVwaW5nLCB0aGVuCisJCSAqIG9ubHkgd2UgY2FuIHdha2Ug ZXZlcnlvbmUgdXAuCisJCSAqLworCQlDb25kaXRpb25WYXJpYWJsZUJyb2FkY2FzdCgmaXRlbS0+ Y3YpOworCisJCS8qIEFkdmFuY2Ugc3RhdHVzLiAqLworCQlpdGVtLT5zdGF0dXMgPSBTVEFSVF9T WU5DX1BPSU5UX1BBU1NFRDsKKwl9CisJZWxzZSBpZiAoaXRlbS0+bGVhZGVyX3NsZWVwaW5nX29u X3NzcCAmJgorCQkJIGl0ZW0tPm53b3JrZXJzX3NsZWVwaW5nIDwgbndvcmtlcnNfbGF1bmNoZWQp CisJeworCQkvKgorCQkgKiBJZiBsZWFkZXIgYWxyZWFkeSBzbGVlcGluZywgYnV0IHNldmVyYWwg c3VwcG9ydGl2ZSB3b3JrZXJzIGFyZQorCQkgKiBpbml0aW5nLCB3ZSBzaGlmdCB0aGUgcmVzcG9u c2liaWxpdHkgZm9yIGF3YWtlbmluZyBldmVyeW9uZSBpbnRvIHRoZQorCQkgKiB3b3JrZXIgd2hv IGNvbXBsZXRlcyBpbml0aWFsaXphdGlvbiBsYXN0CisJCSAqLworCQlpdGVtLT5zeW5jX3R5cGUg PSBMQVNUX1dPUktFUjsKKwl9CisJZWxzZSBpZiAoIWl0ZW0tPmxlYWRlcl9zbGVlcGluZ19vbl9z c3AgJiYKKwkJCSBpdGVtLT5ud29ya2Vyc19zbGVlcGluZyA9PSBud29ya2Vyc19sYXVuY2hlZCkK Kwl7CisJCS8qCisJCSAqIElmIG9ubHkgbGVhZGVyIGlzIG5vdCBzbGVlcGluZyAtIGl0IG11c3Qg d2FrZSB1cCBhbGwgd29ya2VycyB3aGVuIGl0CisJCSAqIGZpbmlzaGVzIGFsbCBwcmVwYXJhdGlv bnMuCisJCSAqLworCQlpdGVtLT5zeW5jX3R5cGUgPSBMRUFERVI7CisJfQorCWVsc2UKKwl7CisJ CS8qCisJCSAqIElmIG5vYm9keSBpcyBzbGVlcGluZywgd2UgYXNzdW1lIHRoYXQgbGVhZGVyIGhh cyBoaWdoZXIgY2hhbnNlcyB0bworCQkgKiBhc2xlZXAgZmlyc3QsIHNvIHNldCBzeW5jIHR5cGUg dG8gTEFTVF9XT1JLRVIsIGJ1dCBpZiB0aGUgbGFzdCB3b3JrZXIKKwkJICogd2lsbCBzZWUgdGhh dCBsZWFkZXIgc3RpbGwgbm90IHNsZWVwaW5nLCBpdCB3aWxsIGNoYW5nZSBzeW5jIHR5cGUgdG8K KwkJICogTEVBREVSIGFuZCBhc2xlZXAuCisJCSAqLworCQlpdGVtLT5zeW5jX3R5cGUgPSBMQVNU X1dPUktFUjsKKwl9CisKKwkvKgorCSAqIElmIHdlIGNhbm5vdCBsYXVuY2ggYWxsIHJlcXVlc3Rl ZCB3b3JrZXJzLCByZWZyZXNoCisJICogbndvcmtlcnNfdG9fbGF1bmNoIHZhbHVlLCBzbyB0aGF0 IHRoZSBsYXN0IHdvcmtlciBjYW4gZmluZCBvdXQKKwkgKiB0aGF0IGhlIGlzIHJlYWxseSB0aGUg bGFzdC4KKwkgKi8KKwlpZiAoIWFsbF9sYXVuY2hlZCAmJiBpdGVtLT5zeW5jX3R5cGUgPT0gTEFT VF9XT1JLRVIpCisJCWl0ZW0tPm53b3JrZXJzX3RvX2xhdW5jaCA9IG53b3JrZXJzX2xhdW5jaGVk OworfQorCiAvKgogICogQ2FsbGVkIGZyb20gcG9zdG1hc3RlciB0byBzaWduYWwgYSBmYWlsdXJl IHRvIGZvcmsgYSBwcm9jZXNzIHRvIGJlY29tZQogICogd29ya2VyLiAgVGhlIHBvc3RtYXN0ZXIg c2hvdWxkIGtpbGwoU0lHVVNSMikgdGhlIGxhdW5jaGVyIHNob3J0bHkKQEAgLTEzNjAsNiArMTcy NywzOCBAQCBBdXRvVmFjV29ya2VyRmFpbGVkKHZvaWQpCiAJQXV0b1ZhY3V1bVNobWVtLT5hdl9z aWduYWxbQXV0b1ZhY0ZvcmtGYWlsZWRdID0gdHJ1ZTsKIH0KIAorLyoKKyAqIENhbGxlZCBmcm9t IGF1dG92YWN1dW0gd29ya2VyIHRvIHNpZ25hbCB0aGF0IGhlIG5lZWRzIHBhcnRpY2lwYW50cyBp bgorICogcGFyYWxsZWwgaW5kZXggdmFjdXVtLiBGdW5jdGlvbiBzZW5kcyBTSUdVU1IyIHRvIHRo ZSBsYXVuY2hlciBhbmQgcmV0dXJucworICogJ3RydWUnIGlmZiBzaWduYWwgd2FzIHNlbnQgc3Vj Y2Vzc2Z1bGx5LgorICovCitib29sCitBdXRvVmFjUGFyYWxsZWxXb3JrUmVxdWVzdCh2b2lkKQor eworCWlmIChBdXRvVmFjdXVtU2htZW0tPmF2X2xhdW5jaGVycGlkID09IDApCisJeworCQllcmVw b3J0KFdBUk5JTkcsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlRFUk5BTF9FUlJPUiksCisJCQkJ IGVycm1zZygiYXV0b3ZhY3V1bSBsYXVuY2hlciBpcyBkZWFkIikpKTsKKworCQlyZXR1cm4gZmFs c2U7CisJfQorCisJaWYgKGtpbGwoQXV0b1ZhY3V1bVNobWVtLT5hdl9sYXVuY2hlcnBpZCwgU0lH VVNSMikgPCAwKQorCXsKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShlcnJjb2RlKEVSUkNPREVf U1lTVEVNX0VSUk9SKSwKKwkJCQkgZXJybXNnKCJmYWlsZWQgdG8gc2VuZCBzaWduYWwgdG8gYXV0 b3ZhYyBsYXVuY2hlciAocGlkICVkKTogJW0iLAorCQkJCQkJQXV0b1ZhY3V1bVNobWVtLT5hdl9s YXVuY2hlcnBpZCkpKTsKKworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJQXV0b1ZhY3V1bVNobWVt LT5hdl9zaWduYWxbQXV0b1ZhY1BhcmFsbGVsUmVxXSA9IHRydWU7CisJcmV0dXJuIHRydWU7Cit9 CisKKwogLyogU0lHVVNSMjogYSB3b3JrZXIgaXMgdXAgYW5kIHJ1bm5pbmcsIG9yIGp1c3QgZmlu aXNoZWQsIG9yIGZhaWxlZCB0byBmb3JrICovCiBzdGF0aWMgdm9pZAogYXZsX3NpZ3VzcjJfaGFu ZGxlcihTSUdOQUxfQVJHUykKQEAgLTE1NTksNiArMTk1OCw4IEBAIEF1dG9WYWNXb3JrZXJNYWlu KGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJewog CQljaGFyCQlkYm5hbWVbTkFNRURBVEFMRU5dOwogCisJCUFzc2VydChNeVdvcmtlckluZm8tPndp X3BjbGVhbnVwIDwgMCk7CisKIAkJLyoKIAkJICogUmVwb3J0IGF1dG92YWMgc3RhcnR1cCB0byB0 aGUgY3VtdWxhdGl2ZSBzdGF0cyBzeXN0ZW0uICBXZQogCQkgKiBkZWxpYmVyYXRlbHkgZG8gdGhp cyBiZWZvcmUgSW5pdFBvc3RncmVzLCBzbyB0aGF0IHRoZQpAQCAtMTU5MywxMiArMTk5NCwxMjIg QEAgQXV0b1ZhY1dvcmtlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3Rh cnR1cF9kYXRhX2xlbikKIAkJcmVjZW50TXVsdGkgPSBSZWFkTmV4dE11bHRpWGFjdElkKCk7CiAJ CWRvX2F1dG92YWN1dW0oKTsKIAl9CisJZWxzZSBpZiAoTXlXb3JrZXJJbmZvLT53aV90YXJnZXRf aXRlbSAhPSBOVUxMKQorCXsKKwkJZHNtX2hhbmRsZQkJaGFuZGxlOworCQlQR1BST0MJCSAgICps ZWFkZXJfcHJvYzsKKwkJaW50CQkJCWxlYWRlcl9wcm9jX3BpZDsKKwkJZHNtX3NlZ21lbnQJICAg KnNlZzsKKwkJc2htX3RvYwkJICAgKnRvYzsKKwkJY2hhcgkJICAgKmFzbmFwc3BhY2U7CisJCWNo YXIJCSAgICp0c25hcHNwYWNlOworCQljaGFyCQkJZGJuYW1lW05BTUVEQVRBTEVOXTsKKwkJU25h cHNob3QJCXRzbmFwc2hvdDsKKwkJU25hcHNob3QJCWFzbmFwc2hvdDsKKworCQkvKgorCQkgKiBX ZSB3aWxsIGFib3J0IHBhcmFsbGVsIGluZGV4IHZhY3V1bWluZyB3aGl0aGluIGN1cnJlbnQgcHJv Y2VzcyBpZgorCQkgKiBzb21ldGhpbmcgZXJyb3JzIG91dAorCQkgKi8KKwkJUEdfVFJZKCk7CisJ CXsKKwkJCUxXTG9ja0FjcXVpcmUoQXV0b3ZhY3V1bUxvY2ssIExXX0VYQ0xVU0lWRSk7CisJCQlN eVdvcmtJdGVtID0gTXlXb3JrZXJJbmZvLT53aV90YXJnZXRfaXRlbTsKKwkJCWRiaWQgPSBNeVdv cmtJdGVtLT5hdndfZGF0YWJhc2U7CisJCQloYW5kbGUgPSBNeVdvcmtJdGVtLT5oYW5kbDsKKwkJ CWxlYWRlcl9wcm9jID0gTXlXb3JrSXRlbS0+bGVhZGVyX3Byb2M7CisJCQlsZWFkZXJfcHJvY19w aWQgPSBNeVdvcmtJdGVtLT5sZWFkZXJfcHJvY19waWQ7CisJCQlMV0xvY2tSZWxlYXNlKEF1dG92 YWN1dW1Mb2NrKTsKKworCQkJSW5pdFBvc3RncmVzKE5VTEwsIGRiaWQsIE5VTEwsIEludmFsaWRP aWQsCisJCQkJCQkgSU5JVF9QR19PVkVSUklERV9BTExPV19DT05OUywKKwkJCQkJCSBkYm5hbWUp OworCisJCQlzZXRfcHNfZGlzcGxheShkYm5hbWUpOworCQkJaWYgKFBvc3RBdXRoRGVsYXkpCisJ CQkJcGdfdXNsZWVwKFBvc3RBdXRoRGVsYXkgKiAxMDAwMDAwTCk7CisKKwkJCS8qIEFuZCBkbyBh biBhcHByb3ByaWF0ZSBhbW91bnQgb2Ygd29yayAqLworCQkJcmVjZW50WGlkID0gUmVhZE5leHRU cmFuc2FjdGlvbklkKCk7CisJCQlyZWNlbnRNdWx0aSA9IFJlYWROZXh0TXVsdGlYYWN0SWQoKTsK KworCQkJaWYgKHBhcmFsbGVsX2F1dG92YWN1dW1fc3RhcnRfc3luY19wb2ludChmYWxzZSkgPT0g LTEpCisJCQl7CisJCQkJLyogV2UgYXJlIG5vdCBwYXJ0aWNpcGF0aW5nIGFueW1vcmUgKi8KKwkJ CQlNeVdvcmtJdGVtID0gTlVMTDsKKwkJCQlNeVdvcmtlckluZm8tPndpX3BjbGVhbnVwID0gLTE7 CisJCQkJZ290byBleGl0OworCQkJfQorCisJCQlzZWcgPSBkc21fYXR0YWNoKGhhbmRsZSk7CisJ CQlpZiAoc2VnID09IE5VTEwpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVS UkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCQkJIGVycm1zZygi Y291bGQgbm90IG1hcCBkeW5hbWljIHNoYXJlZCBtZW1vcnkgc2VnbWVudCIpKSk7CisKKwkJCXRv YyA9IHNobV90b2NfYXR0YWNoKEFWX1BBUkFMTEVMX01BR0lDLCBkc21fc2VnbWVudF9hZGRyZXNz KHNlZykpOworCQkJaWYgKHRvYyA9PSBOVUxMKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQko ZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkJ CSBlcnJtc2coImludmFsaWQgbWFnaWMgbnVtYmVyIGluIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBz ZWdtZW50IikpKTsKKworCQkJaWYgKCFCZWNvbWVMb2NrR3JvdXBNZW1iZXIobGVhZGVyX3Byb2Ms IGxlYWRlcl9wcm9jX3BpZCkpCisJCQl7CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJj b2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCQkJIGVy cm1zZygiY291bGQgbm90IGJlY29tZSBsb2NrIGdyb3VwIG1lbWJlciIpKSk7CisJCQl9CisKKwkJ CVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkJCWFzbmFwc3BhY2UgPQorCQkJCXNobV90 b2NfbG9va3VwKHRvYywgQVZfUEFSQUxMRUxfS0VZX0FDVElWRV9TTkFQU0hPVCwgZmFsc2UpOwor CQkJdHNuYXBzcGFjZSA9CisJCQkJc2htX3RvY19sb29rdXAodG9jLCBBVl9QQVJBTExFTF9LRVlf VFJBTlNBQ1RJT05fU05BUFNIT1QsIHRydWUpOworCQkJYXNuYXBzaG90ID0gUmVzdG9yZVNuYXBz aG90KGFzbmFwc3BhY2UpOworCQkJdHNuYXBzaG90ID0gdHNuYXBzcGFjZSA/IFJlc3RvcmVTbmFw c2hvdCh0c25hcHNwYWNlKSA6IGFzbmFwc2hvdDsKKwkJCVJlc3RvcmVUcmFuc2FjdGlvblNuYXBz aG90KHRzbmFwc2hvdCwgbGVhZGVyX3Byb2MpOworCQkJUHVzaEFjdGl2ZVNuYXBzaG90KGFzbmFw c2hvdCk7CisKKwkJCS8qCisJCQkgKiBXZSd2ZSBjaGFuZ2VkIHdoaWNoIHR1cGxlcyB3ZSBjYW4g c2VlLCBhbmQgbXVzdCB0aGVyZWZvcmUKKwkJCSAqIGludmFsaWRhdGUgc3lzdGVtIGNhY2hlcy4K KwkJCSAqLworCQkJSW52YWxpZGF0ZVN5c3RlbUNhY2hlcygpOworCisJCQlwYXJhbGxlbF92YWN1 dW1fbWFpbihzZWcsIHRvYyk7CisKKwkJCS8qIE11c3QgcG9wIGFjdGl2ZSBzbmFwc2hvdCBzbyBz bmFwbWdyLmMgZG9lc24ndCBjb21wbGFpbi4gKi8KKwkJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisK KwkJCWRzbV9kZXRhY2goc2VnKTsKKwkJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCQkJ UGFyYWxsZWxBdXRvdmFjdXVtRW5kU3luY1BvaW50KGZhbHNlKTsKKwkJfQorCQlQR19DQVRDSCgp OworCQl7CisJCQlFbWl0RXJyb3JSZXBvcnQoKTsKKwkJCWlmIChBbVBhcmFsbGVsSWR4QXV0b1Zh Y1N1cHBvcnRpdmUoKSkKKwkJCQloYW5kbGVfcGFyYWxsZWxfaWR4X2F1dG92YWNfZXJyb3JzKCk7 CisJCX0KKwkJUEdfRU5EX1RSWSgpOworCX0KIAogCS8qCiAJICogVGhlIGxhdW5jaGVyIHdpbGwg YmUgbm90aWZpZWQgb2YgbXkgZGVhdGggaW4gUHJvY0tpbGwsICppZiogd2UgbWFuYWdlZAogCSAq IHRvIGdldCBhIHdvcmtlciBzbG90IGF0IGFsbAogCSAqLwogCitleGl0OgorCisJaWYgKE15V29y a2VySW5mby0+d2lfdGFyZ2V0X2l0ZW0gIT0gTlVMTCkKKwl7CisJCUxXTG9ja0FjcXVpcmUoQXV0 b3ZhY3V1bUxvY2ssIExXX0VYQ0xVU0lWRSk7CisJCUF1dG9WYWN1dW1TaG1lbS0+cGF2X3dvcmtl cnNfbGVmdCArPSAxOworCQlBc3NlcnQoQXV0b1ZhY3V1bVNobWVtLT5wYXZfd29ya2Vyc19sZWZ0 IDw9IG1heF9wYXJhbGxlbF9pbmRleF9hdXRvdmFjX3dvcmtlcnMpOworCQlMV0xvY2tSZWxlYXNl KEF1dG92YWN1dW1Mb2NrKTsKKwl9CisKIAkvKiBBbGwgZG9uZSwgZ28gYXdheSAqLwogCXByb2Nf ZXhpdCgwKTsKIH0KQEAgLTI0NjEsNiArMjk3MiwxMCBAQCBkb19hdXRvdmFjdXVtKHZvaWQpCiAJ CQkJCQkgICB0YWItPmF0X2RhdG5hbWUsIHRhYi0+YXRfbnNwbmFtZSwgdGFiLT5hdF9yZWxuYW1l KTsKIAkJCUVtaXRFcnJvclJlcG9ydCgpOwogCisJCQkvKiBpZiB3ZSBhcmUgcGFyYWxsZWwgaW5k ZXggdmFjdXVtaW5nIGxlYWRlciwgd2UgbXVzdCBzaHV0IGl0IGRvd24gKi8KKwkJCWlmIChBbVBh cmFsbGVsSWR4QXV0b1ZhY0xlYWRlcigpKQorCQkJCWhhbmRsZV9wYXJhbGxlbF9pZHhfYXV0b3Zh Y19lcnJvcnMoKTsKKwogCQkJLyogdGhpcyByZXNldHMgUHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3Nb aV0gdG9vICovCiAJCQlBYm9ydE91dE9mQW55VHJhbnNhY3Rpb24oKTsKIAkJCUZsdXNoRXJyb3JT dGF0ZSgpOwpAQCAtMzI5Niw2ICszODExLDQ5MiBAQCBBdXRvVmFjdXVtUmVxdWVzdFdvcmsoQXV0 b1ZhY3V1bVdvcmtJdGVtVHlwZSB0eXBlLCBPaWQgcmVsYXRpb25JZCwKIAlyZXR1cm4gcmVzdWx0 OwogfQogCisvKgorICogUmVsZWFzZSB3b3JrIGl0ZW0sIHVzZWQgZm9yIG1hbmFnaW5nIHBhcmFs bGVsIGluZGV4IHZhY3V1bS4gTXVzdCBiZSBjYWxsZWQKKyAqIG9uY2UgYW5kIG9ubHkgZnJvbSBs ZWFkZXIgd29ya2VyLgorICoKKyAqIElmICdrZWVwX2xvY2snIGlzIHRydWUsIHRoZW4gQXV0b3Zh Y3V1bUxvY2sgd2lsbCBub3QgYmUgcmVsZWFzZWQgaW4gdGhlIGVuZAorICogb2YgZnVuY3Rpb24g ZXhlY3V0aW9uLgorICovCit2b2lkCitBdXRvVmFjdXVtUmVsZWFzZVBhcmFsbGVsV29yayhib29s IGtlZXBfbG9jaykKK3sKKwkvKgorCSAqIFdlIG1pZ2h0IG5vdCBnZXQgdGhlIHdvcmtpdGVtIGZy b20gbGF1bmNoZXIgKHdlIG11c3Qgbm90IGJlIGNvbnNpZGVyZWQKKwkgKiBhcyBsZWFkZXIgaW4g dGhpcyBjYXNlKSwgc28ganVzdCBsZWF2ZS4KKwkgKi8KKwlpZiAoIUFtUGFyYWxsZWxJZHhBdXRv VmFjTGVhZGVyKCkpCisJCXJldHVybjsKKworCWlmICghTFdMb2NrSGVsZEJ5TWUoQXV0b3ZhY3V1 bUxvY2spKQorCQlMV0xvY2tBY3F1aXJlKEF1dG92YWN1dW1Mb2NrLCBMV19FWENMVVNJVkUpOwor CisJQXNzZXJ0KEFtUGFyYWxsZWxJZHhBdXRvVmFjTGVhZGVyKCkgJiYKKwkJICAgTXlXb3JrSXRl bS0+bGVhZGVyX3Byb2NfcGlkID09IE15UHJvY1BpZCk7CisKKwlNeVdvcmtJdGVtLT5sZWFkZXJf cHJvYyA9IE5VTEw7CisJTXlXb3JrSXRlbS0+bGVhZGVyX3Byb2NfcGlkID0gMDsKKwlNeVdvcmtJ dGVtLT5hY3RpdmUgPSBmYWxzZTsKKwlNeVdvcmtJdGVtID0gTlVMTDsKKworCS8qIFdlIGFyZSBu b3QgbGVhZGVyIGFueW1vcmUuICovCisJTXlXb3JrZXJJbmZvLT53aV9wY2xlYW51cCA9IC0xOwor CisJaWYgKCFrZWVwX2xvY2spCisJCUxXTG9ja1JlbGVhc2UoQXV0b3ZhY3V1bUxvY2spOworfQor CitzdGF0aWMgYm9vbAorc3RhcnRfc3luY19wb2ludF93YWtldXBfY29uZChQYXJhbGxlbEF1dG9W YWN1dW1Xb3JrSXRlbSAqaXRlbSkKK3sKKwlib29sIG5lZWRfd2FrZXVwID0gZmFsc2U7CisKKwlM V0xvY2tBY3F1aXJlKEF1dG92YWN1dW1Mb2NrLCBMV19FWENMVVNJVkUpOworCisJaWYgKEFtUGFy YWxsZWxJZHhBdXRvVmFjTGVhZGVyKCkpCisJeworCQkvKgorCQkgKiBJbiBub3JtYWwgY2FzZSB3 ZSBzaG91bGQgZXhpdCBzbGVlcCBsb29wIGFmdGVyIGxhc3QgbGF1bmNoZWQKKwkJICogc3VwcG9y dGl2ZSB3b3JrZXIgcGFzc2VkIHN5bmMgcG9pbnQgKHN0YXR1cyA9PSBTVEFSVF9TWU5DX1BPSU5U X1BBU1NFRCkuCisJCSAqIEJ1dCBpZiB3ZSBhcmUgaW4gU0hVVERPV04gbW9kZSwgYWxsIGxhdW5j aGVkIHdvcmtlcnMgd2lsbCBqdXN0IGV4aXQKKwkJICogc3luYyBwb2ludCB3aGl0aG91dCBzdGF0 dXMgYWR2YW5jaW5nLiBXZSBjYW4gaGFuZGxlIHN1Y2ggY2FzZSBpZiB3ZQorCQkgKiBjaGVjayB0 aGF0IG5fcGFydGljaXBhdGluZyA9PSBuX3RvX2xhdW5jaC4KKwkJICovCisJCWlmIChpdGVtLT5z dGF0dXMgPT0gU0hVVERPV04pCisJCQluZWVkX3dha2V1cCA9IChpdGVtLT5ud29ya2Vyc19wYXJ0 aWNpcGF0aW5nID09IGl0ZW0tPm53b3JrZXJzX3RvX2xhdW5jaCk7CisJCWVsc2UKKwkJCW5lZWRf d2FrZXVwID0gaXRlbS0+c3RhdHVzID09IFNUQVJUX1NZTkNfUE9JTlRfUEFTU0VEOworCX0KKwll bHNlCisJCW5lZWRfd2FrZXVwID0gKGl0ZW0tPnN0YXR1cyA9PSBTVEFSVF9TWU5DX1BPSU5UX1BB U1NFRCB8fAorCQkJCQkgICBpdGVtLT5zdGF0dXMgPT0gU0hVVERPV04pOworCisJTFdMb2NrUmVs ZWFzZShBdXRvdmFjdXVtTG9jayk7CisJcmV0dXJuIG5lZWRfd2FrZXVwOworfQorCitzdGF0aWMg Ym9vbAorZW5kX3N5bmNfcG9pbnRfd2FrZXVwX2NvbmQoUGFyYWxsZWxBdXRvVmFjdXVtV29ya0l0 ZW0gKml0ZW0pCit7CisJYm9vbCBuZWVkX3dha2V1cCA9IGZhbHNlOworCisJQXNzZXJ0KEFtUGFy YWxsZWxJZHhBdXRvVmFjTGVhZGVyKCkpOworCisJTFdMb2NrQWNxdWlyZShBdXRvdmFjdXVtTG9j aywgTFdfRVhDTFVTSVZFKTsKKwluZWVkX3dha2V1cCA9IGl0ZW0tPnN0YXR1cyA9PSBFTkRfU1lO Q19QT0lOVF9QQVNTRUQ7CisJTFdMb2NrUmVsZWFzZShBdXRvdmFjdXVtTG9jayk7CisJcmV0dXJu IG5lZWRfd2FrZXVwOworfQorCisvKgorICogV2FpdGluZyBvbiBjb25kaXRpb24gdmFyaWFibGUg aXMgZnJlcXVlbnQgb3BlcmF0aW9uLCBzbyBpdCBoYXMgYmVlZCB0YWtlbgorICogb3V0IHdpdGgg YSBzZXBhcmF0ZSBmdW5jdGlvbi4gQ2FsbGVyIG11c3QgYWNxdWlyZSBob2xkIEF1dG92YWN1dW1M b2NrIGJlZm9yZQorICogY2FsbGluZyBpdC4KKyAqLworc3RhdGljIHZvaWQKK0NWU2xlZXAoUGFy YWxsZWxBdXRvVmFjdXVtV29ya0l0ZW0gKml0ZW0sIHdha2V1cF9jb25kaXRpb24gd2FrZXVwX2Nv bmQpCit7CisJQ29uZGl0aW9uVmFyaWFibGVQcmVwYXJlVG9TbGVlcCgmaXRlbS0+Y3YpOworCUxX TG9ja1JlbGVhc2UoQXV0b3ZhY3V1bUxvY2spOworCisJUEdfVFJZKCk7CisJeworCQlkbworCQl7 CisJCQlDb25kaXRpb25WYXJpYWJsZVNsZWVwKCZpdGVtLT5jdiwgUEdfV0FJVF9JUEMpOworCQl9 IHdoaWxlICghd2FrZXVwX2NvbmQoaXRlbSkpOworCX0KKwlQR19DQVRDSCgpOworCXsKKwkJQ29u ZGl0aW9uVmFyaWFibGVDYW5jZWxTbGVlcCgpOworCQlQR19SRV9USFJPVygpOworCX0KKwlQR19F TkRfVFJZKCk7CisKKwlDb25kaXRpb25WYXJpYWJsZUNhbmNlbFNsZWVwKCk7CisJTFdMb2NrQWNx dWlyZShBdXRvdmFjdXVtTG9jaywgTFdfRVhDTFVTSVZFKTsKK30KKworLyoKKyAqIFRoaXMgZnVu Y3Rpb24gdXNlZCB0byBzeW5jaHJvbml6ZSBsZWFkZXIgd2l0aCBzdXBwb3J0aXZlIHdvcmtlcnMg ZHVyaW5nCisgKiBwYXJhbGxlbCBpbmRleCB2YWN1dW1pbmcuIEVhY2ggcHJvY2VzcyB3aWxsIGV4 aXQgaWZmOgorICoJCUxlYWRlciB3b3JrZXIgaXMgcmVhZHkgdG8gcGVyZm9ybSBwYXJhbGxlbCB2 YWN1dW0gJiYKKyAqIAkJQWxsIGxhdW5jaGVkIHN1cHBvcnRpdmUgd29ya2VycyBhcmUgcmVhZHkg dG8gcGVyZm9ybSBwYXJhbGxlbCB2YWN1dW0gJiYKKyAqIAkJKEF1dG92YWN1dW0gbGF1bmNoZXIg YWxyZWFkeSBsYXVuY2hlZCBhbGwgcmVxdWVzdGVkIHdvcmtlcnMgfHwKKyAqIAkJIEF1dG92YWN1 dW0gbGF1bmNoZXIgY2Fubm90IGxhdW5jaCBtb3JlIHdvcmtlcnMpCisgKgorICogSWYgJ2tlZXBf bG9jaycgaXMgdHJ1ZSwgdGhlbiBBdXRvdmFjdXVtTG9jayB3aWxsIG5vdCBiZSByZWxlYXNlZCBp biB0aGUgZW5kCisgKiBvZiBmdW5jdGlvbiBleGVjdXRpb24uCisgKgorICogTk9URTogU29tZSB3 b3JrZXJzIG1heSBjYWxsIHRoaXMgZnVuY3Rpb24gd2hlbiBsZWFkZXIgd29ya2VyIGRlY2lkZWQg dG8gc2h1dAorICogCQkgZG93biBwYXJhbGxlbCB2YWN1dW1pbmcuIEluIHRoaXMgY2FzZSAnLTEn IHZhbHVlIHdpbGwgYmUgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBpbnQKK3BhcmFsbGVsX2F1dG92 YWN1dW1fc3RhcnRfc3luY19wb2ludChib29sIGtlZXBfbG9jaykKK3sKKwlTeW5jVHlwZSBzeW5j X3R5cGU7CisJaW50IG51bV9wYXJ0aWNpcGFudHM7CisKKwlpZiAoIUxXTG9ja0hlbGRCeU1lKEF1 dG92YWN1dW1Mb2NrKSkKKwkJTFdMb2NrQWNxdWlyZShBdXRvdmFjdXVtTG9jaywgTFdfRVhDTFVT SVZFKTsKKworCUFzc2VydChNeVdvcmtJdGVtLT5hY3RpdmUpOworCXN5bmNfdHlwZSA9IE15V29y a0l0ZW0tPnN5bmNfdHlwZTsKKworCWlmIChBbVBhcmFsbGVsSWR4QXV0b1ZhY0xlYWRlcigpKQor CXsKKwkJQXNzZXJ0KE15V29ya0l0ZW0tPmxlYWRlcl9wcm9jX3BpZCA9PSBNeVByb2NQaWQpOwor CisJCS8qIFdha2UgdXAgYWxsIHNsZWVwaW5nIHN1cHBvcnRpdmUgd29ya2VycywgaWYgcmVxdWly ZWQgLi4uICovCisJCWlmIChzeW5jX3R5cGUgPT0gTEVBREVSKQorCQl7CisJCQlDb25kaXRpb25W YXJpYWJsZUJyb2FkY2FzdCgmTXlXb3JrSXRlbS0+Y3YpOworCisJCQkvKgorCQkJICogQWR2YW5j ZSBzdGF0dXMsIGJlY2F1c2Ugd2UgYXJlIGd1YXJhbnRlZWQgdG8gcGFzcyB0aGlzCisJCQkgKiBz eW5jIHBvaW50LgorCQkJICogRG9uJ3QgYWR2YW5jZSBpZiB3ZSBjYWxsIHRoaXMgZnVuY3Rpb24g ZnJvbSBlcnJvciBoYW5kbGUgZnVuY3Rpb24KKwkJCSAqIChzdGF0dXMgPT0gU0hVVERPV04pLgor CQkJICovCisJCQlpZiAoTXlXb3JrSXRlbS0+c3RhdHVzICE9IFNIVVRET1dOKQorCQkJCU15V29y a0l0ZW0tPnN0YXR1cyA9IFNUQVJUX1NZTkNfUE9JTlRfUEFTU0VEOworCQl9CisJCS8qIC4uLiBv dGhlcndpc2UsIHdhaXQgZm9yIHNvbWVib2R5IHRvIHdha2UgdXMgdXAgKi8KKwkJZWxzZQorCQl7 CisJCQlNeVdvcmtJdGVtLT5sZWFkZXJfc2xlZXBpbmdfb25fc3NwID0gdHJ1ZTsKKwkJCUNWU2xl ZXAoTXlXb3JrSXRlbSwgc3RhcnRfc3luY19wb2ludF93YWtldXBfY29uZCk7CisJCQlNeVdvcmtJ dGVtLT5sZWFkZXJfc2xlZXBpbmdfb25fc3NwID0gZmFsc2U7CisKKwkJCS8qCisJCQkgKiBBIHBy aW9yaSwgd2UgYmVsaWV2ZSB0aGF0IGluIHRoZSBlbmQgZXZlcnlvbmUgc2hvdWxkIGJlIGF3YWtl bmVkCisJCQkgKiBieSB0aGUgbGVhZGVyLgorCQkJICovCisJCQlNeVdvcmtJdGVtLT5zeW5jX3R5 cGUgPSBMRUFERVI7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJTXlXb3JrSXRlbS0+bndvcmtlcnNf cGFydGljaXBhdGluZyArPSAxOworCisJCS8qCisJCSAqIElmIHdlIGtub3csIHRoYXQgbGF1bmNo ZXIgd2lsbCBubyBsb25nZXIgYXR0ZW1wdCB0byBsYXVuY2ggbW9yZQorCQkgKiBzdXBwb3J0aXZl IHdvcmtlcnMgZm9yIHRoaXMgaXRlbSA9PiB3ZSBhcmUgTEFTVF9XT1JLRVIgZm9yIHN1cmUuCisJ CSAqCisJCSAqIE5vdGUsIHRoYXQgbGF1bmNoZXIgc2V0IExBU1RfV09SS0VSIHN5bmMgdHlwZSB3 aXRob3V0IGtub3dpbmcKKwkJICogY3VycmVudCBzdGF0dXMgb2YgbGVhZGVyLiBTbyB3ZSBhbHNv IGNoZWNrIHRoYXQgbGVhZGVyIGlzIHNsZWVwaW5nCisJCSAqIGJlZm9yZSB3YWtlIGFsbCB1cC4g T3RoZXJ3aXNlLCB3ZSBtdXN0IHdhaXQgZm9yIGxlYWRlciAoYW5kIGFzayBoaW0KKwkJICogdG8g d2FrZSBhbGwgdXApLgorCQkgKi8KKwkJaWYgKE15V29ya0l0ZW0tPm53b3JrZXJzX3BhcnRpY2lw YXRpbmcgPT0gTXlXb3JrSXRlbS0+bndvcmtlcnNfdG9fbGF1bmNoICYmCisJCQlzeW5jX3R5cGUg PT0gTEFTVF9XT1JLRVIgJiYgTXlXb3JrSXRlbS0+bGVhZGVyX3NsZWVwaW5nX29uX3NzcCkKKwkJ eworCQkJQ29uZGl0aW9uVmFyaWFibGVCcm9hZGNhc3QoJk15V29ya0l0ZW0tPmN2KTsKKworCQkJ LyoKKwkJCSAqIFdlIG11c3Qgbm90IGFkdmFuY2Ugc3RhdHVzIGlmIGxlYWRlciB3YW50cyB0byBz aHV0IGRvd24gcGFyYWxsZWwKKwkJCSAqIGV4ZWN1dGlvbiAoc2VlIGNoZWNrcyBiZWxvdykuCisJ CQkgKi8KKwkJCWlmIChNeVdvcmtJdGVtLT5zdGF0dXMgIT0gU0hVVERPV04pCisJCQkJTXlXb3Jr SXRlbS0+c3RhdHVzID0gU1RBUlRfU1lOQ19QT0lOVF9QQVNTRUQ7CisJCX0KKwkJZWxzZQorCQl7 CisJCQlpZiAoTXlXb3JrSXRlbS0+bndvcmtlcnNfcGFydGljaXBhdGluZyA9PSBNeVdvcmtJdGVt LT5ud29ya2Vyc190b19sYXVuY2ggJiYKKwkJCQlzeW5jX3R5cGUgPT0gTEFTVF9XT1JLRVIpCisJ CQl7CisJCQkJTXlXb3JrSXRlbS0+c3luY190eXBlID0gTEVBREVSOworCQkJfQorCisJCQlNeVdv cmtJdGVtLT5ud29ya2Vyc19zbGVlcGluZyArPSAxOworCQkJQ1ZTbGVlcChNeVdvcmtJdGVtLCBz dGFydF9zeW5jX3BvaW50X3dha2V1cF9jb25kKTsKKwkJCU15V29ya0l0ZW0tPm53b3JrZXJzX3Ns ZWVwaW5nIC09IDE7CisJCX0KKwl9CisKKwkvKiBUZWxsIGNhbGxlciB0aGF0IGl0IG11c3Qgbm90 IHBhcnRpY2lwYXRlIGluIHBhcmFsbGVsIGluZGV4IGNsZWFudXAuICovCisJaWYgKE15V29ya0l0 ZW0tPnN0YXR1cyA9PSBTSFVURE9XTikKKwkJbnVtX3BhcnRpY2lwYW50cyA9IC0xOworCWVsc2UK KwkJbnVtX3BhcnRpY2lwYW50cyA9IE15V29ya0l0ZW0tPm53b3JrZXJzX3BhcnRpY2lwYXRpbmc7 CisKKwlpZiAoIWtlZXBfbG9jaykKKwkJTFdMb2NrUmVsZWFzZShBdXRvdmFjdXVtTG9jayk7CisK KwlyZXR1cm4gbnVtX3BhcnRpY2lwYW50czsKK30KKworLyoKKyAqIExpa2UgZnVuY3Rpb24gYWJv dmUsIGJ1dCBtdXN0IGJlIGNhbGxlZCBieSBsZWFkZXIgYW5kIHN1cHBvcnRpdmUgd29ya2Vycwor ICogd2hlbiB0aGV5IGZpbmlzaGVkIHBhcmFsbGVsIGluZGV4IHZhY3V1bS4KKyAqCisgKiBJZiAn a2VlcF9sb2NrJyBpcyB0cnVlLCB0aGVuIEF1dG92YWN1dW1Mb2NrIHdpbGwgbm90IGJlIHJlbGVh c2VkIGluIHRoZSBlbmQKKyAqIG9mIGZ1bmN0aW9uIGV4ZWN1dGlvbi4KKyAqLwordm9pZAorUGFy YWxsZWxBdXRvdmFjdXVtRW5kU3luY1BvaW50KGJvb2wga2VlcF9sb2NrKQoreworCWlmICghTFdM b2NrSGVsZEJ5TWUoQXV0b3ZhY3V1bUxvY2spKQorCQlMV0xvY2tBY3F1aXJlKEF1dG92YWN1dW1M b2NrLCBMV19FWENMVVNJVkUpOworCisJQXNzZXJ0KE15V29ya0l0ZW0tPmFjdGl2ZSk7CisKKwlp ZiAoTXlXb3JrSXRlbS0+bndvcmtlcnNfcGFydGljaXBhdGluZyA9PSAwKQorCXsKKwkJQXNzZXJ0 KCFBbVBhcmFsbGVsSWR4QXV0b1ZhY1N1cHBvcnRpdmUoKSk7CisKKwkJLyoKKwkJICogV2UgaGF2 ZSB0d28gY2FzZXMgd2hlbiBubyBzdXBwb3J0aXZlIHdvcmtlcnMgd2VyZSBsYXVuY2hlZDoKKwkJ ICogMSkgTGVhZGVyIGdvdCBNeVdvcmtJdGVtLCBidXQgbGF1bmNoZXIgZGlkbid0IGxhdW5jaCBh bnkKKwkJICoJICB3b3JrZXJzID0+IGp1c3QgYWR2YW5jZSBzdGF0dXMsIGJlY2F1c2Ugd2UgZG9u J3QgbmVlZCB0byB3YWl0CisJCSAqCSAgZm9yIGFueWJvZHkuCisJCSAqIDIpIExlYWRlciBkaWRu J3QgZ2V0IE15V29ya0l0ZW0sIGJlY2F1c2UgaXQgd2FzIGFscmVhZHkgaW4gdXNlID0+CisJCSAq CSAgd2UgbXVzdCBub3QgdG91Y2ggaXQuIEp1c3QgbGVhdmUuCisJCSAqLworCQlpZiAoQW1QYXJh bGxlbElkeEF1dG9WYWNMZWFkZXIoKSkKKwkJeworCQkJQXNzZXJ0KE15V29ya0l0ZW0tPmxlYWRl cl9wcm9jX3BpZCA9PSBNeVByb2NQaWQpOworCQkJTXlXb3JrSXRlbS0+c3RhdHVzID0gRU5EX1NZ TkNfUE9JTlRfUEFTU0VEOworCQl9CisJCWVsc2UKKwkJCUFzc2VydChNeVdvcmtJdGVtLT5sZWFk ZXJfcHJvY19waWQgIT0gTXlQcm9jUGlkKTsKKworCQlpZiAoIWtlZXBfbG9jaykKKwkJCUxXTG9j a1JlbGVhc2UoQXV0b3ZhY3V1bUxvY2spOworCisJCXJldHVybjsKKwl9CisKKwlpZiAoQW1QYXJh bGxlbElkeEF1dG9WYWNMZWFkZXIoKSkKKwl7CisJCUFzc2VydChNeVdvcmtJdGVtLT5sZWFkZXJf cHJvY19waWQgPT0gTXlQcm9jUGlkKTsKKwkJQXNzZXJ0KE15V29ya0l0ZW0tPnN5bmNfdHlwZSA9 PSBMRUFERVIpOworCisJCS8qIFdhaXQgZm9yIGFsbCB3b3JrZXJzIHRvIGZpbmlzaCAob25seSBs YXN0IHdvcmtlciB3aWxsIHdha2UgdXMgdXApICovCisJCWlmIChNeVdvcmtJdGVtLT5uZmluaXNo ZWQgIT0gTXlXb3JrSXRlbS0+bndvcmtlcnNfcGFydGljaXBhdGluZykKKwkJeworCQkJTXlXb3Jr SXRlbS0+c3luY190eXBlID0gTEFTVF9XT1JLRVI7CisJCQlNeVdvcmtJdGVtLT5sZWFkZXJfc2xl ZXBpbmdfb25fZXNwID0gdHJ1ZTsKKwkJCUNWU2xlZXAoTXlXb3JrSXRlbSwgZW5kX3N5bmNfcG9p bnRfd2FrZXVwX2NvbmQpOworCQkJTXlXb3JrSXRlbS0+bGVhZGVyX3NsZWVwaW5nX29uX2VzcCA9 IGZhbHNlOworCisJCQlBc3NlcnQoTXlXb3JrSXRlbS0+bmZpbmlzaGVkID09IE15V29ya0l0ZW0t Pm53b3JrZXJzX3BhcnRpY2lwYXRpbmcpOworCisJCQkvKgorCQkJICogQWR2YW5jZSBzdGF0dXMs IGJlY2F1c2Ugd2UgYXJlIGd1YXJhbnRlZWQgdG8gcGFzcyB0aGlzCisJCQkgKiBzeW5jIHBvaW50 LgorCQkJICovCisJCQlNeVdvcmtJdGVtLT5zdGF0dXMgPSBFTkRfU1lOQ19QT0lOVF9QQVNTRUQ7 CisJCX0KKwl9CisJZWxzZQorCXsKKwkJTXlXb3JrSXRlbS0+bmZpbmlzaGVkICs9IDE7CisKKwkJ LyogSWYgd2UgYXJlIGxhc3QgZmluaXNoZWQgd29ya2VyIC0gd2FrZSB1cCB0aGUgbGVhZGVyLgor CQkgKgorCQkgKiBJZiBub3QgLSBqdXN0IGxlYXZlLCBiZWNhdXNlIHN1cHBvcnRpdmUgd29ya2Vy IGFscmVhZHkgZmluaXNoZWQgYWxsCisJCSAqIHdvcmsgYW5kIG11c3QgZGllLgorCQkgKi8KKwkJ aWYgKE15V29ya0l0ZW0tPnN5bmNfdHlwZSA9PSBMQVNUX1dPUktFUiAmJgorCQkJTXlXb3JrSXRl bS0+bmZpbmlzaGVkID09IE15V29ya0l0ZW0tPm53b3JrZXJzX3BhcnRpY2lwYXRpbmcgJiYKKwkJ CU15V29ya0l0ZW0tPmxlYWRlcl9zbGVlcGluZ19vbl9lc3ApCisJCXsKKwkJCUNvbmRpdGlvblZh cmlhYmxlQnJvYWRjYXN0KCZNeVdvcmtJdGVtLT5jdik7CisKKwkJCS8qCisJCQkgKiBEb24ndCBu ZWVkIHRvIGNoZWNrIFNIVVRET1dOIHN0YXR1cyBoZXJlIC0gYWxsIHN1cHBvcnRpdmUgd29ya2Vy cworCQkJICogYXJlIGFib3V0IHRvIGZpbmlzaCBhbnl3YXkuCisJCQkgKi8KKwkJCU15V29ya0l0 ZW0tPnN0YXR1cyA9IEVORF9TWU5DX1BPSU5UX1BBU1NFRDsKKwkJfQorCisJCS8qIFdlIGFyZSBu b3QgcGFydGljaXBhdGUgYW55bW9yZSAqLworCQlNeVdvcmtlckluZm8tPndpX3BjbGVhbnVwID0g LTE7CisJCU15V29ya0l0ZW0gPSBOVUxMOworCX0KKworCWlmICgha2VlcF9sb2NrKQorCQlMV0xv Y2tSZWxlYXNlKEF1dG92YWN1dW1Mb2NrKTsKKworCXJldHVybjsKK30KKworLyoKKyAqIEdldCBp ZCBvZiBwYXJhbGxlbCBpbmRleCB2YWN1dW0gd29ya2VyIChjb3VudGluZyBmcm9tIDApLgorICov CitpbnQKK0dldEF1dG9WYWN1dW1QYXJhbGxlbFdvcmtlck51bWJlcih2b2lkKQoreworCUFzc2Vy dChBbUF1dG9WYWN1dW1Xb3JrZXJQcm9jZXNzKCkgJiYgTXlXb3JrZXJJbmZvLT53aV9wY2xlYW51 cCA+IDApOworCXJldHVybiAoTXlXb3JrZXJJbmZvLT53aV9wY2xlYW51cCAtIDEpOworfQorCisv KgorICogTGVhZGVyIGF1dG92YWN1dW0gcHJvY2VzcyBjYW4gZGVjaWRlLCB0aGF0IGhlIG5lZWRz IHNldmVyYWwgaGVscGVyIHdvcmtlcnMKKyAqIHRvIHByb2Nlc3MgdGFibGUgaW4gcGFyYWxsZWwg bW9kZS4gSGUgbXVzdCBzZXQgdXAgcGFyYWxsZWwgY29udGV4dCBhbmQgY2FsbAorICogTGF1bmNo UGFyYWxsZWxBdXRvdmFjdXVtV29ya2Vycy4KKyAqCisgKiBJbiB0aGlzIGZ1bmN0aW9uIHdlIGRv IGZvbGxvd2luZyA6CisgKiAxKSBTZW5kIHNpZ25hbCB0byBhdXRvdmFjdXVtIGxhbmNoZXIgdGhh dCBjcmVhdGVzICdzdXBwb3J0aXZlIHdvcmtlcnMnCisgKgkgIGR1cmluZyBsYXVuY2hlcidzIHN0 YW5kYXJkIHdvcmsgbG9vcC4KKyAqIDIpIFdhaXQgZm9yIHN1cHBvcnRpdmUgd29ya2VycyB0byBz dGFydC4KKyAqCisgKiBGdW5jaXRpb24gcmV0dXJuIG51bWJlciBvZiB3b3JrZXJzIHRoYXQgbGF1 bmNoZXIgd2FzIGFibGUgdG8gbGF1bmNoIChtYXkgYmUKKyAqIGxlc3MgdGhlbiAnbndvcmtlcnNf dG9fbGF1bmNoJykuCisgKi8KK2ludAorTGF1bmNoUGFyYWxsZWxBdXRvdmFjdXVtV29ya2VycyhP aWQgcmVsX2lkLCBpbnQgbndvcmtlcnNfdG9fbGF1bmNoLAorCQkJCQkJCQlkc21faGFuZGxlIGhh bmRsZSkKK3sKKwlpbnQgbndvcmtlcnNfbGF1bmNoZWQgPSAwOworCisJTFdMb2NrQWNxdWlyZShB dXRvdmFjdXVtTG9jaywgTFdfRVhDTFVTSVZFKTsKKworCWlmIChNeVdvcmtJdGVtID09IE5VTEwp CisJCU15V29ya0l0ZW0gPSBnZXRfZnJlZV93b3JraXRlbV9mb3JfbGVhZGVyKCk7CisKKwlpZiAo TXlXb3JrSXRlbSA9PSBOVUxMKQorCXsKKwkJTFdMb2NrUmVsZWFzZShBdXRvdmFjdXVtTG9jayk7 CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBOb3RpZnkgYXV0b3ZhY3V1bSBsYXVuY2hlciB0aGF0 IHdlIG5lZWQgc3VwcG9ydGl2ZSB3b3JrZXJzICovCisJaWYgKEF1dG9WYWNQYXJhbGxlbFdvcmtS ZXF1ZXN0KCkpCisJeworCQkvKiBPSywgd2UgY2FuIHVzZSB0aGlzIHdvcmtpdGVtIGVudHJ5LiBJ bml0IGl0LiAqLworCQlNeVdvcmtJdGVtLT5hdndfZGF0YWJhc2UgPSBNeURhdGFiYXNlSWQ7CisJ CU15V29ya0l0ZW0tPmF2d19yZWxhdGlvbiA9IHJlbF9pZDsKKwkJTXlXb3JrSXRlbS0+aGFuZGwg PSBoYW5kbGU7CisJCU15V29ya0l0ZW0tPmxlYWRlcl9wcm9jID0gTXlQcm9jOworCQlNeVdvcmtJ dGVtLT5sZWFkZXJfcHJvY19waWQgPSBNeVByb2NQaWQ7CisJCU15V29ya0l0ZW0tPm53b3JrZXJz X3BhcnRpY2lwYXRpbmcgPSAwOworCQlNeVdvcmtJdGVtLT5ud29ya2Vyc190b19sYXVuY2ggPSBu d29ya2Vyc190b19sYXVuY2g7CisJCU15V29ya0l0ZW0tPmxlYWRlcl9zbGVlcGluZ19vbl9zc3Ag PSBmYWxzZTsKKwkJTXlXb3JrSXRlbS0+bGVhZGVyX3NsZWVwaW5nX29uX2VzcCA9IGZhbHNlOwor CQlNeVdvcmtJdGVtLT5ud29ya2Vyc19zbGVlcGluZyA9IDA7CisJCU15V29ya0l0ZW0tPm5maW5p c2hlZCA9IDA7CisJCU15V29ya0l0ZW0tPnN5bmNfdHlwZSA9IExBVU5DSEVSOworCQlNeVdvcmtJ dGVtLT5zdGF0dXMgPSBTVEFSVFVQOworCisJCU15V29ya0l0ZW0tPmFjdGl2ZSA9IHRydWU7CisJ CU15V29ya0l0ZW0tPm5lZWRzX2xhdW5jaGVyID0gdHJ1ZTsKKwkJTXlXb3JrSXRlbS0+YmlydGh0 aW1lID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCQlMV0xvY2tSZWxlYXNlKEF1dG92YWN1dW1M b2NrKTsKKworCQkvKiBCZWNvbWUgdGhlIGxlYWRlciAqLworCQlNeVdvcmtlckluZm8tPndpX3Bj bGVhbnVwID0gMDsKKworCQkvKiBBbGwgY3JlYXRlZCB3b3JrZXJzIG11c3QgZ2V0IHNhbWUgbG9j a3MgYXMgbGVhZGVyIHByb2Nlc3MgKi8KKwkJQmVjb21lTG9ja0dyb3VwTGVhZGVyKCk7CisKKwkJ LyoKKwkJICogV2FpdCB1bnRpbCBhbGwgc3VwcHJvdGl2ZSB3b3JrZXJzIGFyZSBsYXVuY2hlZC4g QWxzbyByZXRyaWV2ZSBhY3R1YWwKKwkJICogbnVtYmVyIG9mIHBhcnRpY2lwYW50cworCQkgKi8K KworCQlud29ya2Vyc19sYXVuY2hlZCA9IHBhcmFsbGVsX2F1dG92YWN1dW1fc3RhcnRfc3luY19w b2ludChmYWxzZSk7CisJCUFzc2VydChud29ya2Vyc19sYXVuY2hlZCA+PSAwKTsKKwl9CisJZWxz ZQorCXsKKwkJLyoKKwkJICogSWYgd2UgKGZvciBhbnkgcmVhc29uKSBjYW5ub3Qgc2VuZCBzaWdu YWwgdG8gdGhlIGxhdW5jaGVyLCBkb24ndCB0cnkKKwkJICogdG8gZG8gaW5kZXggdmFjdXVtaW5n IGluIHBhcmFsbGVsCisJCSAqLworCQlNeVdvcmtJdGVtID0gTlVMTDsKKwkJTFdMb2NrUmVsZWFz ZShBdXRvdmFjdXVtTG9jayk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBud29ya2Vyc19s YXVuY2hlZDsKK30KKworLyoKKyAqIER1cmluZyBwYXJhbGxlbCBpbmRleCB2YWN1dW1pbmcgYW55 IHdvcmtlciAoYm90aCBzdXBwb3J0aXZlcyBhbmQgbGVhZGVyKSBjYW4KKyAqIGNhdGNoIGFuIGVy cm9yLgorICogSW4gb3JkZXIgdG8gaGFuZGxlIGl0IGluIHRoZSByaWdodCB3YXkgd2UgbXVzdCBj YWxsIHRoaXMgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyB2b2lkCitoYW5kbGVfcGFyYWxsZWxfaWR4 X2F1dG92YWNfZXJyb3JzKHZvaWQpCit7CisJTFdMb2NrQWNxdWlyZShBdXRvdmFjdXVtTG9jaywg TFdfRVhDTFVTSVZFKTsKKworCWlmIChBbVBhcmFsbGVsSWR4QXV0b1ZhY0xlYWRlcigpKQorCXsK KwkJaWYgKE15V29ya0l0ZW0tPnN0YXR1cyA9PSBTVEFSVF9TWU5DX1BPSU5UX1BBU1NFRCkKKwkJ eworCQkJLyoKKwkJCSAqIElmIHN0YXJ0IHN5bmMgcG9pbnQgYWxyZWFkeSBwYXNzZWQgLSBqdXN0 IHdhaXQgZm9yIGFsbCBzdXBwb3J0aXZlCisJCQkgKiB3b3JrZXJzIHRvIGZpbmlzaCBhbmQgZXhp dC4KKwkJCSAqLworCQkJUGFyYWxsZWxBdXRvdmFjdXVtRW5kU3luY1BvaW50KHRydWUpOworCQl9 CisJCWVsc2UgaWYgKE15V29ya0l0ZW0tPnN0YXR1cyA9PSBTVEFSVFVQKQorCQl7CisJCQkvKgor CQkJICogSWYgbm8gc3luYyBwb2ludCBhcmUgcGFzc2VkIHdlIGNhbiBwcmV2ZW50IHN1cHBvcnRp dmUgd29ya2VycworCQkJICogZnJvbSBwZXJmb3JtaW5nIHRoZWlyIHdvcmsgLSBzZXQgU0hVVERP V04gc3RhdHVzIGFuZCB3YWl0IHdoaWxlCisJCQkgKiBhbGwgd29ya2VycyB3aWxsIHNlZSBpdC4K KwkJCSAqLworCQkJTXlXb3JrSXRlbS0+c3RhdHVzID0gU0hVVERPV047CisJCQlwYXJhbGxlbF9h dXRvdmFjdXVtX3N0YXJ0X3N5bmNfcG9pbnQodHJ1ZSk7CisJCX0KKworCQlBdXRvVmFjdXVtUmVs ZWFzZVBhcmFsbGVsV29yayh0cnVlKTsKKwl9CisJZWxzZQorCXsKKwkJQXNzZXJ0KEFtUGFyYWxs ZWxJZHhBdXRvVmFjU3VwcG9ydGl2ZSgpKTsKKworCQlpZiAoTXlXb3JrSXRlbS0+c3RhdHVzID09 IFNUQVJUVVAgfHwgTXlXb3JrSXRlbS0+c3RhdHVzID09IFNIVVRET1dOKQorCQl7CisJCQkvKgor CQkJICogSWYgbm8gc3luYyBwb2ludCBhcmUgcGFzc2VkIC0ganVzdCBleGNsdWRlIG91cnNlbHZl cyBmcm9tCisJCQkgKiBwYXJ0aWNpcGFudHMuIEZ1cnRoZXIgcGFyYWxsZWwgaW5kZXggdmFjdXVt aW5nIHdpbGwgdGFrZSBwbGFjZQorCQkJICogYXMgdXN1YWwuCisJCQkgKi8KKwkJCU15V29ya0l0 ZW0tPm53b3JrZXJzX3RvX2xhdW5jaCAtPSAxOworCisJCQlpZiAoTXlXb3JrSXRlbS0+bndvcmtl cnNfcGFydGljaXBhdGluZyA9PSBNeVdvcmtJdGVtLT5ud29ya2Vyc190b19sYXVuY2ggJiYKKwkJ CQlNeVdvcmtJdGVtLT5zeW5jX3R5cGUgPT0gTEFTVF9XT1JLRVIgJiYgTXlXb3JrSXRlbS0+bGVh ZGVyX3NsZWVwaW5nX29uX3NzcCkKKwkJCXsKKwkJCQlDb25kaXRpb25WYXJpYWJsZUJyb2FkY2Fz dCgmTXlXb3JrSXRlbS0+Y3YpOworCisJCQkJaWYgKE15V29ya0l0ZW0tPnN0YXR1cyAhPSBTSFVU RE9XTikKKwkJCQkJTXlXb3JrSXRlbS0+c3RhdHVzID0gU1RBUlRfU1lOQ19QT0lOVF9QQVNTRUQ7 CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoTXlXb3JrSXRlbS0+c3RhdHVzID09IFNUQVJUX1NZTkNf UE9JTlRfUEFTU0VEKQorCQl7CisJCQkvKgorCQkJICogSWYgc3RhcnQgc3luYyBwb2ludCBhbHJl YWR5IHBhc3NlZCB3ZSB3aWxsIHNpbXVsYXRlIHRoZSB1c3VhbAorCQkJICogZW5kIG9mIHdvcmsg KHNlZSBQYXJhbGxlbEF1dG92YWN1dW1FbmRTeW5jUG9pbnQpLgorCQkJICovCisJCQlNeVdvcmtJ dGVtLT5uZmluaXNoZWQgKz0gMTsKKworCQkJLyoKKwkJCSAqIFdlIGNoZWNrICIhTXlXb3JrSXRl bS0+bGVhZGVyX3NsZWVwaW5nX29uX3NzcCIgaW4gb3JkZXIgdG8gaGFuZGxlIGFuCisJCQkgKiBh bG1vc3QgaW1wb3NzaWJsZSBzaXR1YXRpb24sIHdoZW4gbGVhZGVyIGRpZG4ndCBoYXZlIHRpbWUg dG8gd2FrZQorCQkJICogdXAgYWZ0ZXIgc3RhcnQgc3luYyBwb2ludCAoYnV0IGxhc3Qgd29ya2Vy IGFscmVhZHkgYWR2ZW5jZWQKKwkJCSAqIHN0YXR1cyB0byBTVEFSVF9TWU5DX1BPSU5UX1BBU1NF RCkuIEluIHRoaXMgY2FzZSB3ZSBzaG91bGQgbm90CisJCQkgKiBhZHZhbmNlIHN0YXR1cyB0byBF TkRfU1lOQ19QT0lOVF9QQVNTRUQsIHNvIGxlYWRlciBjYW4gY29udGludWUKKwkJCSAqIHByb2Nl c3NpbmcuCisJCQkgKi8KKwkJCWlmIChNeVdvcmtJdGVtLT5zeW5jX3R5cGUgPT0gTEFTVF9XT1JL RVIgJiYKKwkJCQlNeVdvcmtJdGVtLT5uZmluaXNoZWQgPT0gTXlXb3JrSXRlbS0+bndvcmtlcnNf cGFydGljaXBhdGluZyAmJgorCQkJCSFNeVdvcmtJdGVtLT5sZWFkZXJfc2xlZXBpbmdfb25fc3Nw KQorCQkJeworCQkJCUNvbmRpdGlvblZhcmlhYmxlQnJvYWRjYXN0KCZNeVdvcmtJdGVtLT5jdik7 CisJCQkJTXlXb3JrSXRlbS0+c3RhdHVzID0gRU5EX1NZTkNfUE9JTlRfUEFTU0VEOworCQkJfQor CQl9CisJfQorCisJTFdMb2NrUmVsZWFzZShBdXRvdmFjdXVtTG9jayk7Cit9CisKIC8qCiAgKiBh dXRvdmFjX2luaXQKICAqCQlUaGlzIGlzIGNhbGxlZCBhdCBwb3N0bWFzdGVyIGluaXRpYWxpemF0 aW9uLgpAQCAtMzM2MSw2ICs0MzYyLDEyIEBAIEF1dG9WYWN1dW1TaG1lbUluaXQodm9pZCkKIAkJ QXV0b1ZhY3V1bVNobWVtLT5hdl9zdGFydGluZ1dvcmtlciA9IE5VTEw7CiAJCW1lbXNldChBdXRv VmFjdXVtU2htZW0tPmF2X3dvcmtJdGVtcywgMCwKIAkJCSAgIHNpemVvZihBdXRvVmFjdXVtV29y a0l0ZW0pICogTlVNX1dPUktJVEVNUyk7CisJCW1lbXNldCgmQXV0b1ZhY3V1bVNobWVtLT5wYXZf d29ya0l0ZW1zLCAwLAorCQkJICAgc2l6ZW9mKFBhcmFsbGVsQXV0b1ZhY3V1bVdvcmtJdGVtKSAq IE5VTV9XT1JLSVRFTVMpOworCQlmb3IgKGludCBqID0gMDsgaiA8IE5VTV9XT1JLSVRFTVM7IGor KykKKwkJCUNvbmRpdGlvblZhcmlhYmxlSW5pdCgmQXV0b1ZhY3V1bVNobWVtLT5wYXZfd29ya0l0 ZW1zW2pdLmN2KTsKKworCQlBdXRvVmFjdXVtU2htZW0tPnBhdl93b3JrZXJzX2xlZnQgPSBtYXhf cGFyYWxsZWxfaW5kZXhfYXV0b3ZhY193b3JrZXJzOwogCiAJCXdvcmtlciA9IChXb3JrZXJJbmZv KSAoKGNoYXIgKikgQXV0b1ZhY3V1bVNobWVtICsKIAkJCQkJCQkgICBNQVhBTElHTihzaXplb2Yo QXV0b1ZhY3V1bVNobWVtU3RydWN0KSkpOwpAQCAtMzQwNiw2ICs0NDEzLDE5IEBAIGNoZWNrX2F1 dG92YWN1dW1fd29ya19tZW0oaW50ICpuZXd2YWwsIHZvaWQgKipleHRyYSwgR3VjU291cmNlIHNv dXJjZSkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorLyoKKyAqIEdVQyBjaGVja19ob29rIGZvciBtYXhf cGFyYWxsZWxfaW5kZXhfYXV0b3ZhY193b3JrZXJzCisgKi8KK2Jvb2wKK2NoZWNrX21heF9wYXJh bGxlbF9pbmRleF9hdXRvdmFjX3dvcmtlcnMoaW50ICpuZXd2YWwsIHZvaWQgKipleHRyYSwKKwkJ CQkJCQkJCQkgR3VjU291cmNlIHNvdXJjZSkKK3sKKwlpZiAoKm5ld3ZhbCA+PSBhdXRvdmFjdXVt X21heF93b3JrZXJzKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7Cit9CisKKwogLyoK ICAqIFJldHVybnMgd2hldGhlciB0aGVyZSBpcyBhIGZyZWUgYXV0b3ZhY3V1bSB3b3JrZXIgc2xv dCBhdmFpbGFibGUuCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3Vj X3RhYmxlcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKaW5kZXggMmY4 Y2JkODY3NTkuLjAwYzc0NmJmODUzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNj L2d1Y190YWJsZXMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpA QCAtMzY0Nyw2ICszNjQ3LDE2IEBAIHN0cnVjdCBjb25maWdfaW50IENvbmZpZ3VyZU5hbWVzSW50 W10gPQogCQljaGVja19hdXRvdmFjdXVtX3dvcmtfbWVtLCBOVUxMLCBOVUxMCiAJfSwKIAorCXsK KwkJeyJtYXhfcGFyYWxsZWxfaW5kZXhfYXV0b3ZhY193b3JrZXJzIiwgUEdDX1BPU1RNQVNURVIs IFZBQ1VVTV9BVVRPVkFDVVVNLAorCQkJZ2V0dGV4dF9ub29wKCJTZXRzIHRoZSBtYXhpbXVtIG51 bWJlciBvZiBhdXRvdmFjdXVtIHdvcmtlcnMgdGhhdCBjYW4gYmUgbGF1bmNoZWQgZm9yIHBhcmFs bGVsIGluZGV4IHByb2Nlc3NpbmcgZHVyaW5nIGF1dG92YWN1dW0uIiksCisJCQlnZXR0ZXh0X25v b3AoIlRoaXMgcGFyYW1ldGVyIGxpbWl0cyB0aGUgdG90YWwgbnVtYmVyIG9mIHN1Y2ggcHJvY2Vz c2VzIHBlciBjbHVzdGVyIGFuZCBtdXN0IGJlIDwgYXV0b3ZhY3V1bV9tYXhfd29ya2VycyIpLAor CQl9LAorCQkmbWF4X3BhcmFsbGVsX2luZGV4X2F1dG92YWNfd29ya2VycywKKwkJMCwgMCwgTUFY X1BBUkFMTEVMX1dPUktFUl9MSU1JVCwKKwkJY2hlY2tfbWF4X3BhcmFsbGVsX2luZGV4X2F1dG92 YWNfd29ya2VycywgTlVMTCwgTlVMTAorCX0sCisKIAl7CiAJCXsidGNwX2tlZXBhbGl2ZXNfaWRs ZSIsIFBHQ19VU0VSU0VULCBDT05OX0FVVEhfVENQLAogCQkJZ2V0dGV4dF9ub29wKCJUaW1lIGJl dHdlZW4gaXNzdWluZyBUQ1Aga2VlcGFsaXZlcy4iKSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCAzNDgyNmQwMTM4MC4uMjVjM2M0ZmIyNTgg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBs ZQorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAg LTE0Niw2ICsxNDYsOCBAQAogI2hhc2hfbWVtX211bHRpcGxpZXIgPSAyLjAJCSMgMS0xMDAwLjAg bXVsdGlwbGllciBvbiBoYXNoIHRhYmxlIHdvcmtfbWVtCiAjbWFpbnRlbmFuY2Vfd29ya19tZW0g PSA2NE1CCQkjIG1pbiA2NGtCCiAjYXV0b3ZhY3V1bV93b3JrX21lbSA9IC0xCQkjIG1pbiA2NGtC LCBvciAtMSB0byB1c2UgbWFpbnRlbmFuY2Vfd29ya19tZW0KKyNtYXhfcGFyYWxsZWxfaW5kZXhf YXV0b3ZhY193b3JrZXJzID0gMCAjIHRoaXMgZmVhdHVyZSBkaXNhYmxlZCBieSBkZWZhdWx0CisJ CQkJCSMgKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQogI2xvZ2ljYWxfZGVjb2Rpbmdfd29ya19t ZW0gPSA2NE1CCSMgbWluIDY0a0IKICNtYXhfc3RhY2tfZGVwdGggPSAyTUIJCQkjIG1pbiAxMDBr QgogI3NoYXJlZF9tZW1vcnlfdHlwZSA9IG1tYXAJCSMgdGhlIGRlZmF1bHQgaXMgdGhlIGZpcnN0 IG9wdGlvbgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgg Yi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2F1dG92YWN1dW0uaAppbmRleCBlODEzNWY0MWExYy4u YmMzZTM2MjVhNjEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1 bS5oCisrKyBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oCkBAIC0xNSw2ICsx NSw4IEBACiAjZGVmaW5lIEFVVE9WQUNVVU1fSAogCiAjaW5jbHVkZSAic3RvcmFnZS9ibG9jay5o IgorI2luY2x1ZGUgInN0b3JhZ2UvZHNtX2ltcGwuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2xvY2su aCIKIAogLyoKICAqIE90aGVyIHByb2Nlc3NlcyBjYW4gcmVxdWVzdCBzcGVjaWZpYyB3b3JrIGZy b20gYXV0b3ZhY3V1bSwgaWRlbnRpZmllZCBieQpAQCAtMjUsMTIgKzI3LDI4IEBAIHR5cGVkZWYg ZW51bQogCUFWV19CUklOU3VtbWFyaXplUmFuZ2UsCiB9IEF1dG9WYWN1dW1Xb3JrSXRlbVR5cGU7 CiAKKy8qCisgKiBNYWdpYyBudW1iZXIgZm9yIHBhcmFsbGVsIGNvbnRleHQgVE9DLiBVc2VkIGZv ciBwYXJhbGxlbCBpbmRleCBwcm9jZXNzaW5nCisgKiBkdXJpbmcgYXV0b3ZhY3V1bS4KKyAqLwor I2RlZmluZSBBVl9QQVJBTExFTF9NQUdJQwkJCQkJCTB4YWFhYWFhYWEKKworLyogTWFnaWMgbnVt YmVycyBmb3IgcGVyLWNvbnRleHQgcGFyYWxsZWwgaW5kZXggcHJvY2Vzc2luZyBzdGF0ZSBzaGFy aW5nLiAqLworI2RlZmluZSBBVl9QQVJBTExFTF9LRVlfVFJBTlNBQ1RJT05fU05BUFNIT1QJVUlO VDY0Q09OU1QoMHhGRkYwMDAwMDAwMDAwMDAxKQorI2RlZmluZSBBVl9QQVJBTExFTF9LRVlfQUNU SVZFX1NOQVBTSE9UCQkJVUlOVDY0Q09OU1QoMHhGRkYwMDAwMDAwMDAwMDAyKQorCisvKgorICog RHVyaW5nIHBhcmFsbGVsIGluZGV4IHByb2Nlc3Npbmcgd2Ugd2FudCB0byBsYXVuY2ggb25lIGEv diB3b3JrZXIgZm9yIGV2ZXJ5CisgKiAzMCBpbmRleGVzIG9mIHRhYmxlLgorICovCisjZGVmaW5l IEFWX1BBUkFMTEVMX0lOREVYRVNfUEVSX1dPUktFUgkzMAogCiAvKiBHVUMgdmFyaWFibGVzICov CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBhdXRvdmFjdXVtX3N0YXJ0X2RhZW1vbjsKIGV4dGVy biBQR0RMTElNUE9SVCBpbnQgYXV0b3ZhY3V1bV93b3JrZXJfc2xvdHM7CiBleHRlcm4gUEdETExJ TVBPUlQgaW50IGF1dG92YWN1dW1fbWF4X3dvcmtlcnM7CiBleHRlcm4gUEdETExJTVBPUlQgaW50 IGF1dG92YWN1dW1fd29ya19tZW07CitleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9wYXJhbGxl bF9pbmRleF9hdXRvdmFjX3dvcmtlcnM7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IGF1dG92YWN1 dW1fbmFwdGltZTsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgYXV0b3ZhY3V1bV92YWNfdGhyZXNo OwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBhdXRvdmFjdXVtX3ZhY19tYXhfdGhyZXNoOwpAQCAt NTgsMTIgKzc2LDIxIEBAIGV4dGVybiB2b2lkIGF1dG92YWNfaW5pdCh2b2lkKTsKIC8qIGNhbGxl ZCBmcm9tIHBvc3RtYXN0ZXIgd2hlbiBhIHdvcmtlciBjb3VsZCBub3QgYmUgZm9ya2VkICovCiBl eHRlcm4gdm9pZCBBdXRvVmFjV29ya2VyRmFpbGVkKHZvaWQpOwogCisvKiBjYWxsZWQgZnJvbSBh dXRvdmFjIHdvcmtlciB3aGVuIGl0IG5lZWRzIHBhcnRpY2lwYW50cyBpbiBwYXJhbGxlbCBpbmRl eCBjbGVhbnVwICovCitleHRlcm4gYm9vbCBBdXRvVmFjUGFyYWxsZWxXb3JrUmVxdWVzdCh2b2lk KTsKKwogcGdfbm9yZXR1cm4gZXh0ZXJuIHZvaWQgQXV0b1ZhY0xhdW5jaGVyTWFpbihjb25zdCB2 b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKTsKIHBnX25vcmV0dXJu IGV4dGVybiB2b2lkIEF1dG9WYWNXb3JrZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwg c2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pOwogCiBleHRlcm4gYm9vbCBBdXRvVmFjdXVtUmVxdWVz dFdvcmsoQXV0b1ZhY3V1bVdvcmtJdGVtVHlwZSB0eXBlLAogCQkJCQkJCQkgIE9pZCByZWxhdGlv bklkLCBCbG9ja051bWJlciBibGtubyk7CiAKK2V4dGVybiB2b2lkIEF1dG9WYWN1dW1SZWxlYXNl UGFyYWxsZWxXb3JrKGJvb2wga2VlcF9sb2NrKTsKK2V4dGVybiBpbnQgQXV0b1ZhY3V1bVBhcmFs bGVsV29ya1dhaXRGb3JTdGFydCh2b2lkKTsKK2V4dGVybiB2b2lkIFBhcmFsbGVsQXV0b3ZhY3V1 bUVuZFN5bmNQb2ludCggYm9vbCBrZWVwX2xvY2spOworZXh0ZXJuIGludCBHZXRBdXRvVmFjdXVt UGFyYWxsZWxXb3JrZXJOdW1iZXIodm9pZCk7CitleHRlcm4gaW50IExhdW5jaFBhcmFsbGVsQXV0 b3ZhY3V1bVdvcmtlcnMoT2lkIHJlbF9pZCwgaW50IG53b3JrZXJzX3RvX2xhdW5jaCwKKwkJCQkJ CQkJCQkgICBkc21faGFuZGxlIGhhbmRsZSk7CiAvKiBzaGFyZWQgbWVtb3J5IHN0dWZmICovCiBl eHRlcm4gU2l6ZSBBdXRvVmFjdXVtU2htZW1TaXplKHZvaWQpOwogZXh0ZXJuIHZvaWQgQXV0b1Zh Y3V1bVNobWVtSW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2d1Y19o b29rcy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvZ3VjX2hvb2tzLmgKaW5kZXggNzk5ZmE3YWNlNjgu LmZiMWI1MmEwZWU0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9ndWNfaG9va3MuaAor KysgYi9zcmMvaW5jbHVkZS91dGlscy9ndWNfaG9va3MuaApAQCAtMzEsNiArMzEsOCBAQCBleHRl cm4gdm9pZCBhc3NpZ25fYXBwbGljYXRpb25fbmFtZShjb25zdCBjaGFyICpuZXd2YWwsIHZvaWQg KmV4dHJhKTsKIGV4dGVybiBjb25zdCBjaGFyICpzaG93X2FyY2hpdmVfY29tbWFuZCh2b2lkKTsK IGV4dGVybiBib29sIGNoZWNrX2F1dG92YWN1dW1fd29ya19tZW0oaW50ICpuZXd2YWwsIHZvaWQg KipleHRyYSwKIAkJCQkJCQkJCSAgR3VjU291cmNlIHNvdXJjZSk7Citib29sIGNoZWNrX21heF9w YXJhbGxlbF9pbmRleF9hdXRvdmFjX3dvcmtlcnMoaW50ICpuZXd2YWwsIHZvaWQgKipleHRyYSwK KwkJCQkJCQkJCQkJICBHdWNTb3VyY2Ugc291cmNlKTsKIGV4dGVybiBib29sIGNoZWNrX3ZhY3V1 bV9idWZmZXJfdXNhZ2VfbGltaXQoaW50ICpuZXd2YWwsIHZvaWQgKipleHRyYSwKIAkJCQkJCQkJ CQkJR3VjU291cmNlIHNvdXJjZSk7CiBleHRlcm4gYm9vbCBjaGVja19iYWNrdHJhY2VfZnVuY3Rp b25zKGNoYXIgKipuZXd2YWwsIHZvaWQgKipleHRyYSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3V0aWxzL3JlbC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKaW5kZXggYjU1MjM1OTkxNWYu LmM0ZDM3ODkxN2EyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9yZWwuaAorKysgYi9z cmMvaW5jbHVkZS91dGlscy9yZWwuaApAQCAtMzQ4LDcgKzM0OCw4IEBAIHR5cGVkZWYgc3RydWN0 IFN0ZFJkT3B0aW9ucwogCVN0ZFJkT3B0SW5kZXhDbGVhbnVwIHZhY3V1bV9pbmRleF9jbGVhbnVw OwkvKiBjb250cm9scyBpbmRleCB2YWN1dW1pbmcgKi8KIAlib29sCQl2YWN1dW1fdHJ1bmNhdGU7 CS8qIGVuYWJsZXMgdmFjdXVtIHRvIHRydW5jYXRlIGEgcmVsYXRpb24gKi8KIAlib29sCQl2YWN1 dW1fdHJ1bmNhdGVfc2V0OwkvKiB3aGV0aGVyIHZhY3V1bV90cnVuY2F0ZSBpcyBzZXQgKi8KLQor CWJvb2wJCXBhcmFsbGVsX2lkeF9hdXRvdmFjOyAvKiBlbmFibGVzIGF1dG92YWN1dW0gdG8gcHJv Y2VzcyBpbmRleGVzCisJCQkJCQkJCQkJIG9mIHRoaXMgdGFibGUgaW4gcGFyYWxsZWwgbW9kZSAq LwogCS8qCiAJICogRnJhY3Rpb24gb2YgcGFnZXMgaW4gYSByZWxhdGlvbiB0aGF0IHZhY3V1bSBj YW4gZWFnZXJseSBzY2FuIGFuZCBmYWlsCiAJICogdG8gZnJlZXplLiAwIGlmIGRpc2FibGVkLCAt MSBpZiB1bnNwZWNpZmllZC4KQEAgLTQwMCw2ICs0MDEsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgU3Rk UmRPcHRpb25zCiAJICAocmVsYXRpb24pLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9NQVRW SUVXKSA/IFwKIAkgKChTdGRSZE9wdGlvbnMgKikgKHJlbGF0aW9uKS0+cmRfb3B0aW9ucyktPnVz ZXJfY2F0YWxvZ190YWJsZSA6IGZhbHNlKQogCisvKgorICogQ2FuVXNlUGFyYWxsZWxJZHhBdXRv dmFjRm9yUmVsYXRpb24KKyAqCQlDaGVjayB3aGV0aGVyIHdlIGNhbiBwcm9jZXNzIGluZGV4ZXMg b2YgdGhpcyByZWxhdGlvbiBpbiBwYXJhbGxsZWwgbW9kZQorICoJCWR1cmluZyBhdXRvdmFjdXVt LgorICovCisgI2RlZmluZSBDYW5Vc2VQYXJhbGxlbElkeEF1dG92YWNGb3JSZWxhdGlvbihyZWxh dGlvbikgXAorCShBc3NlcnRNYWNybyhSZWxhdGlvbklzVmFsaWQocmVsYXRpb24pKSwgXAorCSAo cmVsYXRpb24pLT5yZF9vcHRpb25zID8gXAorCSAoKFN0ZFJkT3B0aW9ucyAqKSAocmVsYXRpb24p LT5yZF9vcHRpb25zKS0+cGFyYWxsZWxfaWR4X2F1dG92YWMgOiBmYWxzZSkKKwogLyoKICAqIFJl bGF0aW9uR2V0UGFyYWxsZWxXb3JrZXJzCiAgKgkJUmV0dXJucyB0aGUgcmVsYXRpb24ncyBwYXJh bGxlbF93b3JrZXJzIHJlbG9wdGlvbiBzZXR0aW5nLgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy9hdXRvdmFjdXVtLy5naXRpZ25vcmUgYi9zcmMvdGVzdC9tb2R1bGVzL2F1dG92YWN1dW0v LmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMGI1NDY0 MWJjZWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL2F1dG92YWN1dW0vLmdp dGlnbm9yZQpAQCAtMCwwICsxIEBACisvdG1wX2NoZWNrLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m IGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS9NYWtlZmlsZSBi L3NyYy90ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uOWIzZjUyYzQ4NzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL2F1dG92YWN1dW0vTWFrZWZpbGUKQEAgLTAsMCArMSwxNCBAQAorIyBzcmMv dGVzdC9tb2R1bGVzL2F1dG92YWN1dW0vTWFrZWZpbGUKKworVEFQX1RFU1RTID0gMQorCitpZmRl ZiBVU0VfUEdYUworUEdfQ09ORklHID0gcGdfY29uZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19D T05GSUcpIC0tcGd4cykKK2luY2x1ZGUgJChQR1hTKQorZWxzZQorc3ViZGlyID0gc3JjL3Rlc3Qv bW9kdWxlcy9hdXRvdmFjdXVtCit0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLi8uLgoraW5jbHVkZSAk KHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9zcmNkaXIp L2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9t b2R1bGVzL2F1dG92YWN1dW0vdC8wMDFfYXV0b3ZhY19wYXJhbGxlbC5wbCBiL3NyYy90ZXN0L21v ZHVsZXMvYXV0b3ZhY3V1bS90LzAwMV9hdXRvdmFjX3BhcmFsbGVsLnBsCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZGE0MjI2ZjBkNgotLS0gL2Rldi9udWxsCisrKyBi L3NyYy90ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS90LzAwMV9hdXRvdmFjX3BhcmFsbGVsLnBsCkBA IC0wLDAgKzEsMTM1IEBACit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7Cit1c2UgUG9zdGdy ZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBU ZXN0OjpNb3JlOworCitteSAkcHNxbF9vdXQ7CisKK215ICRub2RlID0gUG9zdGdyZVNRTDo6VGVz dDo6Q2x1c3Rlci0+bmV3KCdub2RlMScpOworJG5vZGUtPmluaXQ7Ciskbm9kZS0+YXBwZW5kX2Nv bmYoJ3Bvc3RncmVzcWwuY29uZicsIHFxeworCWF1dG92YWN1dW0gPSBvZmYKKwltYXhfd2FsX3Np emUgPSA0MDk2CisJYXV0b3ZhY3V1bV9tYXhfd29ya2VycyA9IDEwCit9KTsKKyRub2RlLT5zdGFy dDsKKworbXkgJGluZGV4ZXNfbnVtID0gODA7CitteSAkaW5pdGlhbF9yb3dzX251bSA9IDFfMDAw XzAwMDsKKworIyBDcmVhdGUgYmlnIHRhYmxlIGFuZCBjcmVhdGUgc3BlY2lmaWVkIG51bWJlciBv ZiBiLXRyZWUgaW5kZXhlcyBvbiBpdAorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcXsK KwlDUkVBVEUgVEFCTEUgdGVzdF9hdXRvdmFjICgKKwkJaWQgU0VSSUFMIFBSSU1BUlkgS0VZLAor CQljb2xfMSBJTlRFR0VSLCAgY29sXzIgSU5URUdFUiwgIGNvbF8zIElOVEVHRVIsICBjb2xfNCBJ TlRFR0VSLCAgY29sXzUgSU5URUdFUiwKKwkJY29sXzYgSU5URUdFUiwgIGNvbF83IElOVEVHRVIs ICBjb2xfOCBJTlRFR0VSLCAgY29sXzkgSU5URUdFUiwgIGNvbF8xMCBJTlRFR0VSLAorCQljb2xf MTEgSU5URUdFUiwgY29sXzEyIElOVEVHRVIsIGNvbF8xMyBJTlRFR0VSLCBjb2xfMTQgSU5URUdF UiwgY29sXzE1IElOVEVHRVIsCisJCWNvbF8xNiBJTlRFR0VSLCBjb2xfMTcgSU5URUdFUiwgY29s XzE4IElOVEVHRVIsIGNvbF8xOSBJTlRFR0VSLCBjb2xfMjAgSU5URUdFUiwKKwkJY29sXzIxIElO VEVHRVIsIGNvbF8yMiBJTlRFR0VSLCBjb2xfMjMgSU5URUdFUiwgY29sXzI0IElOVEVHRVIsIGNv bF8yNSBJTlRFR0VSLAorCQljb2xfMjYgSU5URUdFUiwgY29sXzI3IElOVEVHRVIsIGNvbF8yOCBJ TlRFR0VSLCBjb2xfMjkgSU5URUdFUiwgY29sXzMwIElOVEVHRVIsCisJCWNvbF8zMSBJTlRFR0VS LCBjb2xfMzIgSU5URUdFUiwgY29sXzMzIElOVEVHRVIsIGNvbF8zNCBJTlRFR0VSLCBjb2xfMzUg SU5URUdFUiwKKwkJY29sXzM2IElOVEVHRVIsIGNvbF8zNyBJTlRFR0VSLCBjb2xfMzggSU5URUdF UiwgY29sXzM5IElOVEVHRVIsIGNvbF80MCBJTlRFR0VSLAorCQljb2xfNDEgSU5URUdFUiwgY29s XzQyIElOVEVHRVIsIGNvbF80MyBJTlRFR0VSLCBjb2xfNDQgSU5URUdFUiwgY29sXzQ1IElOVEVH RVIsCisJCWNvbF80NiBJTlRFR0VSLCBjb2xfNDcgSU5URUdFUiwgY29sXzQ4IElOVEVHRVIsIGNv bF80OSBJTlRFR0VSLCBjb2xfNTAgSU5URUdFUiwKKwkJY29sXzUxIElOVEVHRVIsIGNvbF81MiBJ TlRFR0VSLCBjb2xfNTMgSU5URUdFUiwgY29sXzU0IElOVEVHRVIsIGNvbF81NSBJTlRFR0VSLAor CQljb2xfNTYgSU5URUdFUiwgY29sXzU3IElOVEVHRVIsIGNvbF81OCBJTlRFR0VSLCBjb2xfNTkg SU5URUdFUiwgY29sXzYwIElOVEVHRVIsCisJCWNvbF82MSBJTlRFR0VSLCBjb2xfNjIgSU5URUdF UiwgY29sXzYzIElOVEVHRVIsIGNvbF82NCBJTlRFR0VSLCBjb2xfNjUgSU5URUdFUiwKKwkJY29s XzY2IElOVEVHRVIsIGNvbF82NyBJTlRFR0VSLCBjb2xfNjggSU5URUdFUiwgY29sXzY5IElOVEVH RVIsIGNvbF83MCBJTlRFR0VSLAorCQljb2xfNzEgSU5URUdFUiwgY29sXzcyIElOVEVHRVIsIGNv bF83MyBJTlRFR0VSLCBjb2xfNzQgSU5URUdFUiwgY29sXzc1IElOVEVHRVIsCisJCWNvbF83NiBJ TlRFR0VSLCBjb2xfNzcgSU5URUdFUiwgY29sXzc4IElOVEVHRVIsIGNvbF83OSBJTlRFR0VSLCBj b2xfODAgSU5URUdFUiwKKwkJY29sXzgxIElOVEVHRVIsIGNvbF84MiBJTlRFR0VSLCBjb2xfODMg SU5URUdFUiwgY29sXzg0IElOVEVHRVIsIGNvbF84NSBJTlRFR0VSLAorCQljb2xfODYgSU5URUdF UiwgY29sXzg3IElOVEVHRVIsIGNvbF84OCBJTlRFR0VSLCBjb2xfODkgSU5URUdFUiwgY29sXzkw IElOVEVHRVIsCisJCWNvbF85MSBJTlRFR0VSLCBjb2xfOTIgSU5URUdFUiwgY29sXzkzIElOVEVH RVIsIGNvbF85NCBJTlRFR0VSLCBjb2xfOTUgSU5URUdFUiwKKwkJY29sXzk2IElOVEVHRVIsIGNv bF85NyBJTlRFR0VSLCBjb2xfOTggSU5URUdFUiwgY29sXzk5IElOVEVHRVIsIGNvbF8xMDAgSU5U RUdFUgorCSkgV0lUSCAocGFyYWxsZWxfaWR4X2F1dG92YWMgPSB0cnVlKTsKKworCURPIFwkXCQK KwlERUNMQVJFCisJCWkgSU5URUdFUjsKKwlCRUdJTgorCQlGT1IgaSBJTiAxLi4kaW5kZXhlc19u dW0gTE9PUAorCQkJRVhFQ1VURSBmb3JtYXQoJ0NSRUFURSBJTkRFWCBpZHhfY29sX1wlcyBPTiB0 ZXN0X2F1dG92YWMgKGNvbF9cJXMpOycsIGksIGkpOworCQlFTkQgTE9PUDsKKwlFTkQgXCRcJDsK K30pOworCiskbm9kZS0+cHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgQ09VTlQoKikgRlJPTSBw Z19pbmRleCBpCisJICAgSk9JTiBwZ19jbGFzcyBjIE9OIGMub2lkID0gaS5pbmRyZWxpZAorCSAg V0hFUkUgYy5yZWxuYW1lID0gJ3Rlc3RfYXV0b3ZhYyc7IiwKKwlzdGRvdXQgPT4gXCRwc3FsX291 dAorKTsKK2lzKCRwc3FsX291dCwgJGluZGV4ZXNfbnVtICsgMSwgIkFsbCBpbmRleGVzIGNyZWF0 ZWQgc3VjY2Vzc2Z1bGx5Iik7CisKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXF7CisJ RE8gXCRcJAorCURFQ0xBUkUKKwkgICAgaSBJTlRFR0VSOworCUJFR0lOCisJICAgIEZPUiBpIElO IDEuLiRpbml0aWFsX3Jvd3NfbnVtIExPT1AKKwkgICAgICAgIElOU0VSVCBJTlRPIHRlc3RfYXV0 b3ZhYyAoCisJICAgICAgICAgICAgY29sXzEsIGNvbF8yLCBjb2xfMywgY29sXzQsIGNvbF81LCBj b2xfNiwgY29sXzcsIGNvbF84LCBjb2xfOSwgY29sXzEwLAorCSAgICAgICAgICAgIGNvbF8xMSwg Y29sXzEyLCBjb2xfMTMsIGNvbF8xNCwgY29sXzE1LCBjb2xfMTYsIGNvbF8xNywgY29sXzE4LCBj b2xfMTksIGNvbF8yMCwKKwkgICAgICAgICAgICBjb2xfMjEsIGNvbF8yMiwgY29sXzIzLCBjb2xf MjQsIGNvbF8yNSwgY29sXzI2LCBjb2xfMjcsIGNvbF8yOCwgY29sXzI5LCBjb2xfMzAsCisJICAg ICAgICAgICAgY29sXzMxLCBjb2xfMzIsIGNvbF8zMywgY29sXzM0LCBjb2xfMzUsIGNvbF8zNiwg Y29sXzM3LCBjb2xfMzgsIGNvbF8zOSwgY29sXzQwLAorCSAgICAgICAgICAgIGNvbF80MSwgY29s XzQyLCBjb2xfNDMsIGNvbF80NCwgY29sXzQ1LCBjb2xfNDYsIGNvbF80NywgY29sXzQ4LCBjb2xf NDksIGNvbF81MCwKKwkgICAgICAgICAgICBjb2xfNTEsIGNvbF81MiwgY29sXzUzLCBjb2xfNTQs IGNvbF81NSwgY29sXzU2LCBjb2xfNTcsIGNvbF81OCwgY29sXzU5LCBjb2xfNjAsCisJICAgICAg ICAgICAgY29sXzYxLCBjb2xfNjIsIGNvbF82MywgY29sXzY0LCBjb2xfNjUsIGNvbF82NiwgY29s XzY3LCBjb2xfNjgsIGNvbF82OSwgY29sXzcwLAorCSAgICAgICAgICAgIGNvbF83MSwgY29sXzcy LCBjb2xfNzMsIGNvbF83NCwgY29sXzc1LCBjb2xfNzYsIGNvbF83NywgY29sXzc4LCBjb2xfNzks IGNvbF84MCwKKwkgICAgICAgICAgICBjb2xfODEsIGNvbF84MiwgY29sXzgzLCBjb2xfODQsIGNv bF84NSwgY29sXzg2LCBjb2xfODcsIGNvbF84OCwgY29sXzg5LCBjb2xfOTAsCisJICAgICAgICAg ICAgY29sXzkxLCBjb2xfOTIsIGNvbF85MywgY29sXzk0LCBjb2xfOTUsIGNvbF85NiwgY29sXzk3 LCBjb2xfOTgsIGNvbF85OSwgY29sXzEwMAorCSAgICAgICAgKSBWQUxVRVMgKAorCSAgICAgICAg ICAgIGksIGkgKyAxLCBpICsgMiwgaSArIDMsIGkgKyA0LCBpICsgNSwgaSArIDYsIGkgKyA3LCBp ICsgOCwgaSArIDksCisJICAgICAgICAgICAgaSArIDEwLCBpICsgMTEsIGkgKyAxMiwgaSArIDEz LCBpICsgMTQsIGkgKyAxNSwgaSArIDE2LCBpICsgMTcsIGkgKyAxOCwgaSArIDE5LAorCSAgICAg ICAgICAgIGkgKyAyMCwgaSArIDIxLCBpICsgMjIsIGkgKyAyMywgaSArIDI0LCBpICsgMjUsIGkg KyAyNiwgaSArIDI3LCBpICsgMjgsIGkgKyAyOSwKKwkgICAgICAgICAgICBpICsgMzAsIGkgKyAz MSwgaSArIDMyLCBpICsgMzMsIGkgKyAzNCwgaSArIDM1LCBpICsgMzYsIGkgKyAzNywgaSArIDM4 LCBpICsgMzksCisJICAgICAgICAgICAgaSArIDQwLCBpICsgNDEsIGkgKyA0MiwgaSArIDQzLCBp ICsgNDQsIGkgKyA0NSwgaSArIDQ2LCBpICsgNDcsIGkgKyA0OCwgaSArIDQ5LAorCSAgICAgICAg ICAgIGkgKyA1MCwgaSArIDUxLCBpICsgNTIsIGkgKyA1MywgaSArIDU0LCBpICsgNTUsIGkgKyA1 NiwgaSArIDU3LCBpICsgNTgsIGkgKyA1OSwKKwkgICAgICAgICAgICBpICsgNjAsIGkgKyA2MSwg aSArIDYyLCBpICsgNjMsIGkgKyA2NCwgaSArIDY1LCBpICsgNjYsIGkgKyA2NywgaSArIDY4LCBp ICsgNjksCisJICAgICAgICAgICAgaSArIDcwLCBpICsgNzEsIGkgKyA3MiwgaSArIDczLCBpICsg NzQsIGkgKyA3NSwgaSArIDc2LCBpICsgNzcsIGkgKyA3OCwgaSArIDc5LAorCSAgICAgICAgICAg IGkgKyA4MCwgaSArIDgxLCBpICsgODIsIGkgKyA4MywgaSArIDg0LCBpICsgODUsIGkgKyA4Niwg aSArIDg3LCBpICsgODgsIGkgKyA4OSwKKwkgICAgICAgICAgICBpICsgOTAsIGkgKyA5MSwgaSAr IDkyLCBpICsgOTMsIGkgKyA5NCwgaSArIDk1LCBpICsgOTYsIGkgKyA5NywgaSArIDk4LCBpICsg OTkKKwkgICAgICAgICk7CisJICAgIEVORCBMT09QOworCUVORCBcJFwkOworfSk7CisKKyRub2Rl LT5wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHRlc3RfYXV0b3ZhYzsi LAorCXN0ZG91dCA9PiBcJHBzcWxfb3V0CispOworaXMoJHBzcWxfb3V0LCAkaW5pdGlhbF9yb3dz X251bSwgIkFsbCBkYXRhIGluc2VydGVkIGludG8gdGFibGUgc3VjY2Vzc2Z1bGx5Iik7CisKKyRu b2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXF7CisJVVBEQVRFIHRlc3RfYXV0b3ZhYyBTRVQg Y29sXzEgPSAwIFdIRVJFIChjb2xfMSAlIDMpID0gMDsKKwlBTkFMWVpFIHRlc3RfYXV0b3ZhYzsK K30pOworCitteSAkZGVhZF90dXBsZXNfdGhyZXNoID0gJGluaXRpYWxfcm93c19udW0gLyA0Owor bXkgJGluZGV4ZXNfbnVtX3RocmVzaCA9ICRpbmRleGVzX251bSAvIDI7CitteSAkbnVtX3dvcmtl cnMgPSAyOworCisjIFJlZHVjZSBhdXRvdmFjdXVtX3dvcmtfbWVtLCBzbyBsZWFkZXIgcHJvY2Vz cyB3aWxsIHBlcmZvcm0gcGFyYWxsZWwgaW5kZXhpCisjIHZhY3V1bSBwaGFzZSBzZXZlcmFsIHRp bWVzCiskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsIHFxeworCWF1dG92YWN1 dW1fbmFwdGltZSA9ICcxcycKKwlhdXRvdmFjdXVtX3dvcmtfbWVtID0gMjA0OAorCWF1dG92YWN1 dW1fdmFjdXVtX3RocmVzaG9sZCA9IDEKKwlhdXRvdmFjdXVtX2FuYWx5emVfdGhyZXNob2xkID0g MQorCWF1dG92YWN1dW1fdmFjdXVtX3NjYWxlX2ZhY3RvciA9IDAuMQorCWF1dG92YWN1dW1fYW5h bHl6ZV9zY2FsZV9mYWN0b3IgPSAwLjEKKwltYXhfcGFyYWxsZWxfaW5kZXhfYXV0b3ZhY193b3Jr ZXJzID0gJG51bV93b3JrZXJzCisJYXV0b3ZhY3V1bSA9IG9uCit9KTsKKworJG5vZGUtPnJlc3Rh cnQ7CisKKyMgd2FpdCBmb3IgYXV0b3ZhY3V1bSB0byByZXNldCBkYXRmcm96ZW54aWQgYWdlIHRv IDAKKyRub2RlLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsIHF7CisJU0VMRUNUIGNvdW50 KCopID0gMCBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIG14aWRfYWdlKGRhdGZyb3plbnhpZCkgPiAw Cit9KSBvciBkaWUgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBhdXRvdmFjdXVtIjsKKwor b2soMSwgIlRoZXJlIGFyZSBubyBzZWdmYXVsdHMiKTsKKworJG5vZGUtPnN0b3A7Citkb25lX3Rl c3RpbmcoKTsKLS0gCjIuNDMuMAoK --000000000000959d520634b8357c--