Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eZxrR-0005Ss-5R for pgsql-hackers@arkaria.postgresql.org; Fri, 12 Jan 2018 11:51:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eZxrQ-00075t-4i for pgsql-hackers@arkaria.postgresql.org; Fri, 12 Jan 2018 11:51:00 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1eZxrP-00075i-OX for pgsql-hackers@lists.postgresql.org; Fri, 12 Jan 2018 11:50:59 +0000 Received: from mail.postgrespro.ru ([93.174.131.138]) by magus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1eZxrI-0006lO-KF for pgsql-hackers@postgresql.org; Fri, 12 Jan 2018 11:50:59 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id 0DD8D21C1C43; Fri, 12 Jan 2018 14:50:52 +0300 (MSK) X-Virus-Scanned: Debian amavisd-new at postgrespro.ru X-Spam-Flag: NO X-Spam-Score: 0 X-Spam-Level: X-Spam-Status: No, score=x tagged_above=-99 required=4 WHITELISTED tests=[] autolearn=unavailable Received: from zilders-MacBook-Pro.local (gw.postgrespro.ru [93.174.131.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id D4EC721C1C41; Fri, 12 Jan 2018 14:50:51 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1515757851; bh=IwAfRuBb7Zq1H5bBadpt9nVWACZiedfRa+kVc44KJM0=; h=Subject:From:To:Cc:References:Date:In-Reply-To; b=QIQ+2KQsCwbHcyiIS61sCGWvspAZ3fvQmINBTbE0YVBkdwGAUq5e13S/vvqUkbfZG LP0xUjuPDGxzEnZO3eu6RQPXq33unyO2eJcd8dcDSdNl3gi+rEHfhhEMepWlZYIYUi hJol7iKqaGlWFxwYd2/4euzmi/m/MZ1HxNmp3iRg= Subject: Re: General purpose hashing func in pgbench From: Ildar Musin To: Fabien COELHO Cc: pgsql-hackers References: <0e8bd39e-dfcd-2879-f88f-272799ad7ef2@postgrespro.ru> <699225ee-c30c-b22e-4028-415e9eab26b2@postgrespro.ru> <80e9c570-5c49-1a01-f309-3d8d0cbbae42@postgrespro.ru> <38f1503e-7b63-4612-24a9-041af25bb022@postgrespro.ru> <9603bac9-ae5d-36c5-5978-a88bdb700e37@postgrespro.ru> <63f5a6ac-0c5b-8d59-ca8b-fc8e11244a66@postgrespro.ru> <291822a3-0b3a-0b21-c694-c10776f516ac@postgrespro.ru> Message-ID: <6e47c84a-d42a-0e08-1b0d-33e6a6c87778@postgrespro.ru> Date: Fri, 12 Jan 2018 14:50:51 +0300 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:52.0) Gecko/20100101 Thunderbird/52.5.2 MIME-Version: 1.0 In-Reply-To: <291822a3-0b3a-0b21-c694-c10776f516ac@postgrespro.ru> Content-Type: multipart/mixed; boundary="------------582B9FEB9674EA04A754CEF6" Content-Language: ru List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This is a multi-part message in MIME format. --------------582B9FEB9674EA04A754CEF6 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Hello Fabien, 11/01/2018 19:21, Ildar Musin пишет: > > 10/01/2018 21:42, Fabien COELHO пишет: >> Hmm. I do not think that we should want a shared seed value. The seed >> should be different for each call so as to avoid undesired >> correlations. If wanted, correlation could be obtained by using an >> explicit identical seed. >> >> ISTM that the best way to add the seed is to call random() when the >> second arg is missing in make_func. Also, this means that the executor >> would always get its two arguments, so it would simplify the code there. >> > Ok, I think I understand what you meant. You meant the case like following: > > \set x random(1, 100) > \set h1 hash(:x) > \set h2 hash(:x)  -- will have different seed from h1 > > so that different instances of hash function within one script would > have different seeds. Yes, that is a good idea, I can do that. > Added this feature in attached patch. But on a second thought this could be something that user won't expect. For example, they may want to run pgbench with two scripts: - the first one updates row by key that is a hashed random_zipfian value; - the second one reads row by key generated the same way (that is actually what YCSB workloads A and B do) It feels natural to write something like this: \set rnd random_zipfian(0, 1000000, 0.99) \set key abs(hash(:rnd)) % 1000 in both scripts and expect that they both would have the same distribution. But they wouldn't. We could of course describe this implicit behaviour in documentation, but ISTM that shared seed would be more clear. Thanks! -- Ildar Musin Postgres Professional: http://www.postgrespro.com Russian Postgres Company --------------582B9FEB9674EA04A754CEF6 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="pgbench_hash_v6.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="pgbench_hash_v6.patch" ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdiZW5jaC5zZ21sIGIvZG9jL3NyYy9z Z21sL3JlZi9wZ2JlbmNoLnNnbWwKaW5kZXggM2RkNDkyYy4uYzU3NWYxOSAxMDA2NDQKLS0t IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3Jl Zi9wZ2JlbmNoLnNnbWwKQEAgLTEyNDYsNiArMTI0NiwyNyBAQCBwZ2JlbmNoIDxvcHRpb25h bD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPiA8cmVw bGFjZWFibGU+ZAogICAgICAgIDxlbnRyeT48bGl0ZXJhbD41PC9saXRlcmFsPjwvZW50cnk+ CiAgICAgICA8L3Jvdz4KICAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5PjxsaXRlcmFsPjxm dW5jdGlvbj5oYXNoKDxyZXBsYWNlYWJsZT5hPC9yZXBsYWNlYWJsZT4gWywgPHJlcGxhY2Vh YmxlPnNlZWQ8L3JlcGxhY2VhYmxlPiBdICk8L2Z1bmN0aW9uPjwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKyAgICAgICA8ZW50cnk+YWxpYXMg Zm9yIDxsaXRlcmFsPmhhc2hfbXVybXVyMigpPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg PGVudHJ5PjxsaXRlcmFsPmhhc2goMTAsIDU0MzIpPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgPGVudHJ5PjxsaXRlcmFsPi01ODE3ODc3MDgxNzY4NzIxNjc2PC9saXRlcmFsPjwvZW50 cnk+CisgICAgICA8L3Jvdz4KKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5PjxsaXRlcmFs PjxmdW5jdGlvbj5oYXNoX2ZudjFhKDxyZXBsYWNlYWJsZT5hPC9yZXBsYWNlYWJsZT4gWywg PHJlcGxhY2VhYmxlPnNlZWQ8L3JlcGxhY2VhYmxlPiBdICk8L2Z1bmN0aW9uPjwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKyAgICAgICA8ZW50 cnk+PGxpdGVyYWw+Rk5WPC9saXRlcmFsPiBoYXNoPC9lbnRyeT4KKyAgICAgICA8ZW50cnk+ PGxpdGVyYWw+aGFzaF9mbnYxYSgxMCwgNTQzMik8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICA8ZW50cnk+PGxpdGVyYWw+LTc3OTM4MjkzMzUzNjU1NDIxNTM8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgIDwvcm93PgorICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnk+PGxpdGVyYWw+ PGZ1bmN0aW9uPmhhc2hfbXVybXVyMig8cmVwbGFjZWFibGU+YTwvcmVwbGFjZWFibGU+IFss IDxyZXBsYWNlYWJsZT5zZWVkPC9yZXBsYWNlYWJsZT4gXSApPC9mdW5jdGlvbj48L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisgICAgICAgPGVu dHJ5PjxsaXRlcmFsPm11cm11cjI8L2xpdGVyYWw+IGhhc2g8L2VudHJ5PgorICAgICAgIDxl bnRyeT48bGl0ZXJhbD5oYXNoX211cm11cjIoMTAsIDU0MzIpPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgPGVudHJ5PjxsaXRlcmFsPi01ODE3ODc3MDgxNzY4NzIxNjc2PC9saXRlcmFs PjwvZW50cnk+CisgICAgICA8L3Jvdz4KKyAgICAgIDxyb3c+CiAgICAgICAgPGVudHJ5Pjxs aXRlcmFsPjxmdW5jdGlvbj5pbnQoPHJlcGxhY2VhYmxlPng8L3JlcGxhY2VhYmxlPik8L2Z1 bmN0aW9uPjwvbGl0ZXJhbD48L2VudHJ5PgogICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRy eT4KICAgICAgICA8ZW50cnk+Y2FzdCB0byBpbnQ8L2VudHJ5PgpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ2JlbmNoL2V4cHJwYXJzZS55IGIvc3JjL2Jpbi9wZ2JlbmNoL2V4cHJwYXJzZS55 CmluZGV4IGUyM2NhNTEuLjM2Y2FkMzAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdiZW5jaC9l eHBycGFyc2UueQorKysgYi9zcmMvYmluL3BnYmVuY2gvZXhwcnBhcnNlLnkKQEAgLTE2LDYg KzE2LDEwIEBACiAKICNpbmNsdWRlICJwZ2JlbmNoLmgiCiAKKyNkZWZpbmUgUEdCRU5DSF9O QVJHU19WQVJJQUJMRQkoLTEpCisjZGVmaW5lIFBHQkVOQ0hfTkFSR1NfQ0FTRQkJKC0yKQor I2RlZmluZSBQR0JFTkNIX05BUkdTX0hBU0gJCSgtMykKKwogUGdCZW5jaEV4cHIgKmV4cHJf cGFyc2VfcmVzdWx0OwogCiBzdGF0aWMgUGdCZW5jaEV4cHJMaXN0ICptYWtlX2VsaXN0KFBn QmVuY2hFeHByICpleHAsIFBnQmVuY2hFeHByTGlzdCAqbGlzdCk7CkBAIC0yMjYsOSArMjMw LDEzIEBAIG1ha2VfdW9wKHl5c2Nhbl90IHl5c2Nhbm5lciwgY29uc3QgY2hhciAqb3BlcmF0 b3IsIFBnQmVuY2hFeHByICpleHByKQogLyoKICAqIExpc3Qgb2YgYXZhaWxhYmxlIGZ1bmN0 aW9uczoKICAqIC0gZm5hbWU6IGZ1bmN0aW9uIG5hbWUsICIhLi4uIiBmb3Igc3BlY2lhbCBp bnRlcm5hbCBmdW5jdGlvbnMKLSAqIC0gbmFyZ3M6IG51bWJlciBvZiBhcmd1bWVudHMKLSAq CQkJLTEgaXMgYSBzcGVjaWFsIHZhbHVlIGZvciBsZWFzdCAmIGdyZWF0ZXN0IG1lYW5pbmcg I2FyZ3MgPj0gMQotICoJCQktMiBpcyBmb3IgdGhlICJDQVNFIFdIRU4gLi4uIiBmdW5jdGlv biwgd2hpY2ggaGFzICNhcmdzID49IDMgYW5kIG9kZAorICogLSBuYXJnczogbnVtYmVyIG9m IGFyZ3VtZW50cy4gU3BlY2lhbCBjYXNlczoKKyAqCQkJLSBQR0JFTkNIX05BUkdTX1ZBUklB QkxFIGlzIGEgc3BlY2lhbCB2YWx1ZSBmb3IgbGVhc3QgJiBncmVhdGVzdAorICoJCQkgIG1l YW5pbmcgI2FyZ3MgPj0gMTsKKyAqCQkJLSBQR0JFTkNIX05BUkdTX0NBU0UgaXMgZm9yIHRo ZSAiQ0FTRSBXSEVOIC4uLiIgZnVuY3Rpb24sIHdoaWNoCisgKgkJCSAgaGFzICNhcmdzID49 IDMgYW5kIG9kZDsKKyAqIAkJCS0gUEdCRU5DSF9OQVJHU19IQVNIIGlzIGZvciBoYXNoIGZ1 bmN0aW9ucywgd2hpY2ggaGF2ZSBvbmUgcmVxdWlyZWQKKyAqCQkJICBhbmQgb25lIG9wdGlv bmFsIGFyZ3VtZW50OwogICogLSB0YWc6IGZ1bmN0aW9uIGlkZW50aWZpZXIgZnJvbSBQZ0Jl bmNoRnVuY3Rpb24gZW51bQogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0CkBAIC0yNTksMTAg KzI2NywxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0CiAJCSJhYnMiLCAxLCBQR0JFTkNIX0FC UwogCX0sCiAJewotCQkibGVhc3QiLCAtMSwgUEdCRU5DSF9MRUFTVAorCQkibGVhc3QiLCBQ R0JFTkNIX05BUkdTX1ZBUklBQkxFLCBQR0JFTkNIX0xFQVNUCiAJfSwKIAl7Ci0JCSJncmVh dGVzdCIsIC0xLCBQR0JFTkNIX0dSRUFURVNUCisJCSJncmVhdGVzdCIsIFBHQkVOQ0hfTkFS R1NfVkFSSUFCTEUsIFBHQkVOQ0hfR1JFQVRFU1QKIAl9LAogCXsKIAkJImRlYnVnIiwgMSwg UEdCRU5DSF9ERUJVRwpAQCAtMzQ3LDcgKzM1NSwxNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 CiAJfSwKIAkvKiAiY2FzZSB3aGVuIC4uLiB0aGVuIC4uLiBlbHNlIC4uLiBlbmQiIGNvbnN0 cnVjdGlvbiAqLwogCXsKLQkJIiFjYXNlX2VuZCIsIC0yLCBQR0JFTkNIX0NBU0UKKwkJIiFj YXNlX2VuZCIsIFBHQkVOQ0hfTkFSR1NfQ0FTRSwgUEdCRU5DSF9DQVNFCisJfSwKKwl7CisJ CSJoYXNoIiwgUEdCRU5DSF9OQVJHU19IQVNILCBQR0JFTkNIX0hBU0hfTVVSTVVSMgorCX0s CisJeworCQkiaGFzaF9tdXJtdXIyIiwgUEdCRU5DSF9OQVJHU19IQVNILCBQR0JFTkNIX0hB U0hfTVVSTVVSMgorCX0sCisJeworCQkiaGFzaF9mbnYxYSIsIFBHQkVOQ0hfTkFSR1NfSEFT SCwgUEdCRU5DSF9IQVNIX0ZOVjFBCiAJfSwKIAkvKiBrZWVwIGFzIGxhc3QgYXJyYXkgZWxl bWVudCAqLwogCXsKQEAgLTQyMywyOSArNDQwLDQ3IEBAIGVsaXN0X2xlbmd0aChQZ0JlbmNo RXhwckxpc3QgKmxpc3QpCiBzdGF0aWMgUGdCZW5jaEV4cHIgKgogbWFrZV9mdW5jKHl5c2Nh bl90IHl5c2Nhbm5lciwgaW50IGZudW1iZXIsIFBnQmVuY2hFeHByTGlzdCAqYXJncykKIHsK KwlpbnQgbGVuID0gZWxpc3RfbGVuZ3RoKGFyZ3MpOworCiAJUGdCZW5jaEV4cHIgKmV4cHIg PSBwZ19tYWxsb2Moc2l6ZW9mKFBnQmVuY2hFeHByKSk7CiAKIAlBc3NlcnQoZm51bWJlciA+ PSAwKTsKIAotCWlmIChQR0JFTkNIX0ZVTkNUSU9OU1tmbnVtYmVyXS5uYXJncyA+PSAwICYm Ci0JCVBHQkVOQ0hfRlVOQ1RJT05TW2ZudW1iZXJdLm5hcmdzICE9IGVsaXN0X2xlbmd0aChh cmdzKSkKLQkJZXhwcl95eWVycm9yX21vcmUoeXlzY2FubmVyLCAidW5leHBlY3RlZCBudW1i ZXIgb2YgYXJndW1lbnRzIiwKLQkJCQkJCSAgUEdCRU5DSF9GVU5DVElPTlNbZm51bWJlcl0u Zm5hbWUpOwotCi0JLyogY2hlY2sgYXQgbGVhc3Qgb25lIGFyZyBmb3IgbGVhc3QgJiBncmVh dGVzdCAqLwotCWlmIChQR0JFTkNIX0ZVTkNUSU9OU1tmbnVtYmVyXS5uYXJncyA9PSAtMSAm JgotCQllbGlzdF9sZW5ndGgoYXJncykgPT0gMCkKLQkJZXhwcl95eWVycm9yX21vcmUoeXlz Y2FubmVyLCAiYXQgbGVhc3Qgb25lIGFyZ3VtZW50IGV4cGVjdGVkIiwKLQkJCQkJCSAgUEdC RU5DSF9GVU5DVElPTlNbZm51bWJlcl0uZm5hbWUpOwotCS8qIHNwZWNpYWwgY2FzZTogY2Fz ZSAod2hlbiAuLi4gdGhlbiAuLi4pKyAoZWxzZSAuLi4pPyBlbmQgKi8KLQlpZiAoUEdCRU5D SF9GVU5DVElPTlNbZm51bWJlcl0ubmFyZ3MgPT0gLTIpCi0JewotCQlpbnQgbGVuID0gZWxp c3RfbGVuZ3RoKGFyZ3MpOwotCi0JCS8qICdlbHNlJyBicmFuY2ggaXMgYWx3YXlzIHByZXNl bnQsIGJ1dCBjb3VsZCBiZSBhIE5VTEwtY29uc3RhbnQgKi8KLQkJaWYgKGxlbiA8IDMgfHwg bGVuICUgMiAhPSAxKQotCQkJZXhwcl95eWVycm9yX21vcmUoeXlzY2FubmVyLCAib2RkIGFu ZCA+PSAzIG51bWJlciBvZiBhcmd1bWVudHMgZXhwZWN0ZWQiLAotCQkJCQkJCSAgImNhc2Ug Y29udHJvbCBzdHJ1Y3R1cmUiKTsKKwkvKiB2YWxpZGF0ZSBhcmd1bWVudHMgbnVtYmVyIGlu Y2x1ZGluZyBmZXcgc3BlY2lhbCBjYXNlcyAqLworCXN3aXRjaCAoUEdCRU5DSF9GVU5DVElP TlNbZm51bWJlcl0ubmFyZ3MpCisJeworCQkvKiBjaGVjayBhdCBsZWFzdCBvbmUgYXJnIGZv ciBsZWFzdCAmIGdyZWF0ZXN0ICovCisJCWNhc2UgUEdCRU5DSF9OQVJHU19WQVJJQUJMRToK KwkJCWlmIChsZW4gPT0gMCkKKwkJCQlleHByX3l5ZXJyb3JfbW9yZSh5eXNjYW5uZXIsICJh dCBsZWFzdCBvbmUgYXJndW1lbnQgZXhwZWN0ZWQiLAorCQkJCQkJCQkgIFBHQkVOQ0hfRlVO Q1RJT05TW2ZudW1iZXJdLmZuYW1lKTsKKwkJCWJyZWFrOworCisJCS8qIGNhc2UgKHdoZW4g Li4uIHRoZW4gLi4uKSsgKGVsc2UgLi4uKT8gZW5kICovCisJCWNhc2UgUEdCRU5DSF9OQVJH U19DQVNFOgorCQkJLyogJ2Vsc2UnIGJyYW5jaCBpcyBhbHdheXMgcHJlc2VudCwgYnV0IGNv dWxkIGJlIGEgTlVMTC1jb25zdGFudCAqLworCQkJaWYgKGxlbiA8IDMgfHwgbGVuICUgMiAh PSAxKQorCQkJCWV4cHJfeXllcnJvcl9tb3JlKHl5c2Nhbm5lciwKKwkJCQkJCQkJICAib2Rk IGFuZCA+PSAzIG51bWJlciBvZiBhcmd1bWVudHMgZXhwZWN0ZWQiLAorCQkJCQkJCQkgICJj YXNlIGNvbnRyb2wgc3RydWN0dXJlIik7CisJCQlicmVhazsKKworCQkvKiBoYXNoIGZ1bmN0 aW9ucyB3aXRoIG9wdGlvbmFsIHNlZWQgYXJndW1lbnQgKi8KKwkJY2FzZSBQR0JFTkNIX05B UkdTX0hBU0g6CisJCQlpZiAobGVuIDwgMSB8fCBsZW4gPiAyKQorCQkJZXhwcl95eWVycm9y X21vcmUoeXlzY2FubmVyLCAidW5leHBlY3RlZCBudW1iZXIgb2YgYXJndW1lbnRzIiwKKwkJ CQkJCQkgIFBHQkVOQ0hfRlVOQ1RJT05TW2ZudW1iZXJdLmZuYW1lKTsKKworCQkJLyogaWYg c2VlZCBhcmd1bWVudCBpcyBtaXNzaW5nIGFkZCByYW5kb20gb25lICovCisJCQlpZiAobGVu ID09IDEpCisJCQkJYXJncyA9IG1ha2VfZWxpc3QobWFrZV9pbnRlZ2VyX2NvbnN0YW50KHJh bmRvbSgpKSwgYXJncyk7CisJCQlicmVhazsKKworCQkvKiBjb21tb24gY2FzZTogcG9zaXRp dmUgYXJndW1lbnRzIG51bWJlciAqLworCQlkZWZhdWx0OgorCQkJaWYgKFBHQkVOQ0hfRlVO Q1RJT05TW2ZudW1iZXJdLm5hcmdzICE9IGxlbikKKwkJCQlleHByX3l5ZXJyb3JfbW9yZSh5 eXNjYW5uZXIsICJ1bmV4cGVjdGVkIG51bWJlciBvZiBhcmd1bWVudHMiLAorCQkJCQkJCQkg IFBHQkVOQ0hfRlVOQ1RJT05TW2ZudW1iZXJdLmZuYW1lKTsKIAl9CiAKIAlleHByLT5ldHlw ZSA9IEVOT0RFX0ZVTkNUSU9OOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVu Y2guYyBiL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKaW5kZXggMzFlYTZjYS4uMzk2NTI1 ZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYworKysgYi9zcmMvYmlu L3BnYmVuY2gvcGdiZW5jaC5jCkBAIC02MSw2ICs2MSwxNCBAQAogI2RlZmluZSBFUlJDT0RF X1VOREVGSU5FRF9UQUJMRSAgIjQyUDAxIgogCiAvKgorICogSGFzaGluZyBjb25zdGFudHMK KyAqLworI2RlZmluZSBGTlZfUFJJTUUgMHgxMDAwMDAwMDFiMworI2RlZmluZSBGTlZfT0ZG U0VUX0JBU0lTIDB4Y2JmMjljZTQ4NDIyMjMyNQorI2RlZmluZSBNTTJfTVVMIDB4YzZhNGE3 OTM1YmQxZTk5NQorI2RlZmluZSBNTTJfUk9UIDQ3CisKKy8qCiAgKiBNdWx0aS1wbGF0Zm9y bSBwdGhyZWFkIGltcGxlbWVudGF0aW9ucwogICovCiAKQEAgLTkxNSw2ICs5MjMsNTEgQEAg Z2V0WmlwZmlhblJhbmQoVFN0YXRlICp0aHJlYWQsIGludDY0IG1pbiwgaW50NjQgbWF4LCBk b3VibGUgcykKIH0KIAogLyoKKyAqIEZOVi0xYSBoYXNoIGZ1bmN0aW9uCisgKi8KK3N0YXRp YyBpbnQ2NAorZ2V0SGFzaEZudjFhKGludDY0IHZhbCwgdWludDY0IHNlZWQpCit7CisJaW50 NjQJcmVzdWx0OworCWludAkJaTsKKworCXJlc3VsdCA9IEZOVl9PRkZTRVRfQkFTSVMgXiBz ZWVkOworCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCisJeworCQlpbnQzMiBvY3RldCA9IHZh bCAmIDB4ZmY7CisKKwkJdmFsID0gdmFsID4+IDg7CisJCXJlc3VsdCA9IHJlc3VsdCBeIG9j dGV0OworCQlyZXN1bHQgPSByZXN1bHQgKiBGTlZfUFJJTUU7CisJfQorCisJcmV0dXJuIHJl c3VsdDsKK30KKworLyoKKyAqIE11cm11cjIgaGFzaCBmdW5jdGlvbgorICovCitzdGF0aWMg aW50NjQKK2dldEhhc2hNdXJtdXIyKGludDY0IHZhbCwgdWludDY0IHNlZWQpCit7CisJdWlu dDY0CXJlc3VsdCA9IHNlZWQgXiAoc2l6ZW9mKGludDY0KSAqIE1NMl9NVUwpOworCXVpbnQ2 NAlrID0gKHVpbnQ2NCkgdmFsOworCisJayAqPSBNTTJfTVVMOworCWsgXj0gayA+PiBNTTJf Uk9UOworCWsgKj0gTU0yX01VTDsKKworCXJlc3VsdCBePSBrOworCXJlc3VsdCAqPSBNTTJf TVVMOworCisJcmVzdWx0IF49IHJlc3VsdCA+PiBNTTJfUk9UOworCXJlc3VsdCAqPSBNTTJf TVVMOworCXJlc3VsdCBePSByZXN1bHQgPj4gTU0yX1JPVDsKKworCXJldHVybiAoaW50NjQp IHJlc3VsdDsKK30KKworLyoKICAqIEluaXRpYWxpemUgdGhlIGdpdmVuIFNpbXBsZVN0YXRz IHN0cnVjdCB0byBhbGwgemVyb2VzCiAgKi8KIHN0YXRpYyB2b2lkCkBAIC0yMjA5LDYgKzIy NjIsMjggQEAgZXZhbFN0YW5kYXJkRnVuYygKIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJCX0KIAor CQkJLyogaGFzaGluZyAqLworCQljYXNlIFBHQkVOQ0hfSEFTSF9GTlYxQToKKwkJY2FzZSBQ R0JFTkNIX0hBU0hfTVVSTVVSMjoKKwkJCXsKKwkJCQlpbnQ2NAl2YWw7CisJCQkJaW50NjQJ c2VlZDsKKwkJCQlpbnQ2NAlyZXN1bHQ7CisKKwkJCQlBc3NlcnQobmFyZ3MgPT0gMik7CisK KwkJCQlpZiAoIWNvZXJjZVRvSW50KCZ2YXJnc1swXSwgJnZhbCkpCisJCQkJCXJldHVybiBm YWxzZTsKKworCQkJCWlmICghY29lcmNlVG9JbnQoJnZhcmdzWzFdLCAmc2VlZCkpCisJCQkJ CQlyZXR1cm4gZmFsc2U7CisKKwkJCQlyZXN1bHQgPSAoZnVuYyA9PSBQR0JFTkNIX0hBU0hf Rk5WMUEpID8KKwkJCQkJZ2V0SGFzaEZudjFhKHZhbCwgc2VlZCkgOiBnZXRIYXNoTXVybXVy Mih2YWwsIHNlZWQpOworCQkJCXNldEludFZhbHVlKHJldHZhbCwgcmVzdWx0KTsKKwkJCQly ZXR1cm4gdHJ1ZTsKKwkJCX0KKwogCQlkZWZhdWx0OgogCQkJLyogY2Fubm90IGdldCBoZXJl ICovCiAJCQlBc3NlcnQoMCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5j aC5oIGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guaAppbmRleCAwNzA1Y2NkLi42OTgzODY1 IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5oCisrKyBiL3NyYy9iaW4v cGdiZW5jaC9wZ2JlbmNoLmgKQEAgLTk3LDcgKzk3LDkgQEAgdHlwZWRlZiBlbnVtIFBnQmVu Y2hGdW5jdGlvbgogCVBHQkVOQ0hfTEUsCiAJUEdCRU5DSF9MVCwKIAlQR0JFTkNIX0lTLAot CVBHQkVOQ0hfQ0FTRQorCVBHQkVOQ0hfQ0FTRSwKKwlQR0JFTkNIX0hBU0hfRk5WMUEsCisJ UEdCRU5DSF9IQVNIX01VUk1VUjIKIH0gUGdCZW5jaEZ1bmN0aW9uOwogCiB0eXBlZGVmIHN0 cnVjdCBQZ0JlbmNoRXhwciBQZ0JlbmNoRXhwcjsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdi ZW5jaC90LzAwMV9wZ2JlbmNoX3dpdGhfc2VydmVyLnBsIGIvc3JjL2Jpbi9wZ2JlbmNoL3Qv MDAxX3BnYmVuY2hfd2l0aF9zZXJ2ZXIucGwKaW5kZXggYThiMjk2Mi4uZWRhMjhlYSAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3QvMDAxX3BnYmVuY2hfd2l0aF9zZXJ2ZXIucGwK KysrIGIvc3JjL2Jpbi9wZ2JlbmNoL3QvMDAxX3BnYmVuY2hfd2l0aF9zZXJ2ZXIucGwKQEAg LTI1OSw2ICsyNTksMTAgQEAgcGdiZW5jaCgKIAkJcXJ7Y29tbWFuZD00Ni46IGludCA0Nlxi fSwKIAkJcXJ7Y29tbWFuZD00Ny46IGJvb2xlYW4gdHJ1ZVxifSwKIAkJcXJ7Y29tbWFuZD00 OC46IGJvb2xlYW4gdHJ1ZVxifSwKKwkJcXJ7Y29tbWFuZD00OS46IGludCAtNTgxNzg3NzA4 MTc2ODcyMTY3NlxifSwKKwkJcXJ7Y29tbWFuZD01MC46IGJvb2xlYW4gdHJ1ZVxifSwKKwkJ cXJ7Y29tbWFuZD01MS46IGludCAtNzc5MzgyOTMzNTM2NTU0MjE1M1xifSwKKwkJcXJ7Y29t bWFuZD01Mi46IGludCAtP1xkK1xifSwKIAldLAogCSdwZ2JlbmNoIGV4cHJlc3Npb25zJywK IAl7ICAgJzAwMV9wZ2JlbmNoX2V4cHJlc3Npb25zJyA9PiBxey0tIGludGVnZXIgZnVuY3Rp b25zCkBAIC0zMjcsNiArMzMxLDExIEBAIHBnYmVuY2goCiBcc2V0IG42IGRlYnVnKDpuIElT IE5VTEwgQU5EIE5PVCA6ZiBBTkQgOnQpCiAtLSBjb25kaXRpb25hbCB0cnV0aAogXHNldCBj cyBkZWJ1ZyhDQVNFIFdIRU4gMSBUSEVOIFRSVUUgRU5EIEFORCBDQVNFIFdIRU4gMS4wIFRI RU4gVFJVRSBFTkQgQU5EIENBU0UgV0hFTiA6biBUSEVOIE5VTEwgRUxTRSBUUlVFIEVORCkK Ky0tIGhhc2ggZnVuY3Rpb25zCitcc2V0IGgwIGRlYnVnKGhhc2goMTAsIDU0MzIpKQorXHNl dCBoMSBkZWJ1Zyg6aDAgPSBoYXNoX211cm11cjIoMTAsIDU0MzIpKQorXHNldCBoMyBkZWJ1 ZyhoYXNoX2ZudjFhKDEwLCA1NDMyKSkKK1xzZXQgaDQgZGVidWcoaGFzaCgxMCkpCiAtLSBs YXp5IGV2YWx1YXRpb24KIFxzZXQgenkgMAogXHNldCB5eiBkZWJ1ZyhjYXNlIHdoZW4gOnp5 ID0gMCB0aGVuIC0xIGVsc2UgKDEgLyA6enkpIGVuZCkK --------------582B9FEB9674EA04A754CEF6--