From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17484 invoked by alias); 10 Sep 2017 04:27:13 -0000 Mailing-List: contact newlib-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: newlib-owner@sourceware.org Received: (qmail 15181 invoked by uid 89); 10 Sep 2017 04:27:12 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.5 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LAZY_DOMAIN_SECURITY,RCVD_IN_DNSWL_LOW autolearn=ham version=3.3.2 spammy=UD:strftime.c, Glibc, H*i:sk:19bf0d4, secs X-HELO: smtp-out-so.shaw.ca Received: from smtp-out-so.shaw.ca (HELO smtp-out-so.shaw.ca) (64.59.136.139) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 10 Sep 2017 04:27:08 +0000 Received: from [192.168.1.100] ([24.64.240.204]) by shaw.ca with SMTP id qtppdlvPjDJTWqtprdipkG; Sat, 09 Sep 2017 22:27:07 -0600 X-Authority-Analysis: v=2.2 cv=B4DJ6KlM c=1 sm=1 tr=0 a=MVEHjbUiAHxQW0jfcDq5EA==:117 a=MVEHjbUiAHxQW0jfcDq5EA==:17 a=r77TgQKjGQsHNAKrUKIA:9 a=YzCuMcSph5WRbgNAO6oA:9 a=QEXdDO2ut3YA:10 a=xHrpgWybZOOhIaNI-lMA:9 a=fdgkrW-ViEJMTHsG:21 a=gRoNW_TWRQ-CeuR-:21 a=hquHOILUSkIA:10 Reply-To: Brian.Inglis@SystematicSw.ab.ca Subject: Re: Time Fixes Diff (was: Change time_t to 64-bit by default) To: newlib@sourceware.org References: <1504794469.1677.0.camel@op.pl> <649743792.32997.1504800209582.JavaMail.zimbra@embedded-brains.de> <34213da4-91e1-f1e7-09ba-fa9cb8e137c0@SystematicSw.ab.ca> <1504820198.2562.5.camel@op.pl> <83abd70b-58c7-3b51-bf6e-e8ec3b810d25@SystematicSw.ab.ca> <1504849231.1680.1.camel@op.pl> <20170908081850.GA6496@calimero.vinschen.de> <0602ec60-1061-1ae2-7988-ed3391beb293@SystematicSw.ab.ca> <20170908150001.GA29090@calimero.vinschen.de> <19bf0d4b-ec04-8aa9-209b-12576be9da09@SystematicSw.ab.ca> From: Brian Inglis Message-ID: <1a7d4808-b431-b59a-a4a0-858e73fc8dcc@SystematicSw.ab.ca> Date: Mon, 11 Sep 2017 15:17:00 -0000 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0 MIME-Version: 1.0 In-Reply-To: <19bf0d4b-ec04-8aa9-209b-12576be9da09@SystematicSw.ab.ca> Content-Type: multipart/mixed; boundary="------------515E587203C19DACA600C131" X-CMAE-Envelope: MS4wfIWI6ieTHGuEB6CN4OAmU32gb2GNhNFES/vgylIoGjg9Iwcdh4E6sw+0iNB8oyn1ZVKvw7M7ozVQLJxostz7zoESy/hFPCQIfj+8gfhKE8/iPUBQ0IGa 4s4EksfXS+OB+NtYUHB/KasRxg2eotidWwIMUin1a9TMWEaLD0rpA6pep6LlTtuASlIXAjkE0hv2OQ== X-IsSubscribed: yes X-SW-Source: 2017/txt/msg00968.txt.bz2 This is a multi-part message in MIME format. --------------515E587203C19DACA600C131 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Content-length: 3497 On 2017-09-08 10:34, Brian Inglis wrote: > On 2017-09-08 09:00, Corinna Vinschen wrote: >> On Sep 8 08:46, Brian Inglis wrote: >>> On 2017-09-08 02:18, Corinna Vinschen wrote: >>>> On Sep 8 07:40, Freddie Chopin wrote: >>>>> On Thu, 2017-09-07 at 15:58 -0600, Brian Inglis wrote: >>>>>> The question is, going forward, should we use long for bigger than >>>>>> int values as usual, or use time_t instead, to consistently avoid >>>>>> long, in these time functions. >>>>> >>>>> I think we should go with time_t, which will be 32-bit or 64-bit long, >>>>> depending on what was chosen during newlib compilation. >>>> >>>> While that's nice and all, two points to keep in mind: >>>> >>>> * 64 bit computations are costly on 32 bit (or even 16 bit) platforms and >>>> should be avoided if overkill isn't your goal. >>>> >>>> * days, months, years, etc, are *all* of type int in struct tm, per >>>> POSIX. Adding 64 bit ops just to fold stuff back into ints might only >>>> make marginal sense. >>> >>> Max year == MAX_INT + 1900 == 2^31-1 + 1900 == 2147485547 on 32 bit platforms, >> >> You wrote this before but it sounds like a pretty academic problem. > > Check out the strftime.c regression test vectors before you conclude that. > >>> if you want to avoid arbitrary limitations, and be as (Linux) compatible as >>> possible, which the existing library tries to do, but there are various issues >>> to be fixed. There are places where int, unsigned, long, and unsigned long are >>> used which may or may not work depending on time_t, int, and long sizes. >> >> Glibc compat is nice, and as far as Cygwin is concerned I'm not >> concerned for size. However, newlib strives to small footprints >> given that many embedded targets are using it. This should be kept >> in mind. >> >>> >>> Is long bigger than int on all newlib platforms? What is bigger than int? >>> >>> Using time_t as required makes temps and variables big enough to avoid overflow >>> for seconds, days, and years counts, without penalizing 32 bit time_t platforms. >> >> Rather than int, long, long long you can use explicit sized ints >> like int16_t, int32_t, uint64_t. > > We need space for things that are bigger than ints up to a few to a couple > orders of magnitude smaller than time_t, not even half the length, so picking > types smaller than time_t does not seem to be worth the code? > >>> For I/O conversion of 64 bit time_t max year on 32 bit platforms long long is >>> required, it may also be used with 32 bit time_t to avoid conditionals, and it >>> imposes no extra overhead on 64 bit platforms. >>> >>> Everything depends on how many conditionals we want to use to minimize the data >>> and code space and time spent at runtime and for development. > > I'm inclined to use common code and types that will work correctly on all > platforms *in places where they are needed* to get things working correctly, > then we can worry about space and time reductions if required? > > I can post diffs for discussion before making any local commits or patches. Attached for discussion. Used local.h definitions, removed some local duplications, changed tests/compares of > ... - 1) to >= ..., changed declarations to time_t and added casts for large secs, days, years counts to avoid overflow with extreme values, cast to long long for I/O mainly snprintf. Not yet tested due to unrelated build issues on other files in latest git pull. -- Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada --------------515E587203C19DACA600C131 Content-Type: text/plain; charset=UTF-8; name="fix_time.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="fix_time.diff" Content-length: 23782 ZGlmZiAtLWdpdCBhL25ld2xpYi9saWJjL3RpbWUvZ210aW1lX3IuYyBiL25l d2xpYi9saWJjL3RpbWUvZ210aW1lX3IuYwppbmRleCA2NDc1ZGYzYmEuLjM3 OWU4YzI2YiAxMDA2NDQKLS0tIGEvbmV3bGliL2xpYmMvdGltZS9nbXRpbWVf ci5jCisrKyBiL25ld2xpYi9saWJjL3RpbWUvZ210aW1lX3IuYwpAQCAtNTAs OSArNTAsOSBAQCBfREVGVU4gKGdtdGltZV9yLCAodGltX3AsIHJlcyksCiAJ X0NPTlNUIHRpbWVfdCAqX19yZXN0cmljdCB0aW1fcCBfQU5ECiAJc3RydWN0 IHRtICpfX3Jlc3RyaWN0IHJlcykKIHsKLSAgbG9uZyBkYXlzLCByZW07Cisg IHRpbWVfdCBkYXlzLCByZW0sIHllYXI7CiAgIF9DT05TVCB0aW1lX3QgbGNs dGltZSA9ICp0aW1fcDsKLSAgaW50IGVyYSwgd2Vla2RheSwgeWVhcjsKKyAg aW50IGVyYSwgd2Vla2RheTsgCiAgIHVuc2lnbmVkIGVyYXllYXIsIHllYXJk YXksIG1vbnRoLCBkYXk7CiAgIHVuc2lnbmVkIGxvbmcgZXJhZGF5OwogCkBA IC04MSwxMiArODEsMTIgQEAgX0RFRlVOIChnbXRpbWVfciwgKHRpbV9wLCBy ZXMpLAogICBlcmEgPSAoZGF5cyA+PSAwID8gZGF5cyA6IGRheXMgLSAoREFZ U19QRVJfRVJBIC0gMSkpIC8gREFZU19QRVJfRVJBOwogICBlcmFkYXkgPSBk YXlzIC0gZXJhICogREFZU19QRVJfRVJBOwkvKiBbMCwgMTQ2MDk2XSAqLwog ICBlcmF5ZWFyID0gKGVyYWRheSAtIGVyYWRheSAvIChEQVlTX1BFUl80X1lF QVJTIC0gMSkgKyBlcmFkYXkgLyBEQVlTX1BFUl9DRU5UVVJZIC0KLSAgICAg IGVyYWRheSAvIChEQVlTX1BFUl9FUkEgLSAxKSkgLyAzNjU7CS8qIFswLCAz OTldICovCisgICAgICBlcmFkYXkgLyAoREFZU19QRVJfRVJBIC0gMSkpIC8g REFZU19QRVJfWUVBUjsJLyogWzAsIDM5OV0gKi8KICAgeWVhcmRheSA9IGVy YWRheSAtIChEQVlTX1BFUl9ZRUFSICogZXJheWVhciArIGVyYXllYXIgLyA0 IC0gZXJheWVhciAvIDEwMCk7CS8qIFswLCAzNjVdICovCiAgIG1vbnRoID0g KDUgKiB5ZWFyZGF5ICsgMikgLyAxNTM7CS8qIFswLCAxMV0gKi8KICAgZGF5 ID0geWVhcmRheSAtICgxNTMgKiBtb250aCArIDIpIC8gNSArIDE7CS8qIFsx LCAzMV0gKi8KICAgbW9udGggKz0gbW9udGggPCAxMCA/IDIgOiAtMTA7Ci0g IHllYXIgPSBBREpVU1RFRF9FUE9DSF9ZRUFSICsgZXJheWVhciArIGVyYSAq IFlFQVJTX1BFUl9FUkEgKyAobW9udGggPD0gMSk7CisgIHllYXIgPSBBREpV U1RFRF9FUE9DSF9ZRUFSICsgZXJheWVhciArICh0aW1lX3QpZXJhICogWUVB UlNfUEVSX0VSQSArIChtb250aCA8PSAxKTsKIAogICByZXMtPnRtX3lkYXkg PSB5ZWFyZGF5ID49IERBWVNfUEVSX1lFQVIgLSBEQVlTX0lOX0pBTlVBUlkg LSBEQVlTX0lOX0ZFQlJVQVJZID8KICAgICAgIHllYXJkYXkgLSAoREFZU19Q RVJfWUVBUiAtIERBWVNfSU5fSkFOVUFSWSAtIERBWVNfSU5fRkVCUlVBUlkp IDoKZGlmZiAtLWdpdCBhL25ld2xpYi9saWJjL3RpbWUvbGNsdGltZV9yLmMg Yi9uZXdsaWIvbGliYy90aW1lL2xjbHRpbWVfci5jCmluZGV4IDMzNDJlOTkw Ni4uNTYyNDczNTBkIDEwMDY0NAotLS0gYS9uZXdsaWIvbGliYy90aW1lL2xj bHRpbWVfci5jCisrKyBiL25ld2xpYi9saWJjL3RpbWUvbGNsdGltZV9yLmMK QEAgLTIyLDEzICsyMiwxMyBAQCBfREVGVU4gKGxvY2FsdGltZV9yLCAodGlt X3AsIHJlcyksCiB7CiAgIGxvbmcgb2Zmc2V0OwogICBpbnQgaG91cnMsIG1p bnMsIHNlY3M7Ci0gIGludCB5ZWFyOworICB0aW1lX3QgeWVhcjsKICAgX190 emluZm9fdHlwZSAqX0NPTlNUIHR6ID0gX19nZXR0emluZm8gKCk7CiAgIF9D T05TVCBpbnQgKmlwOwogCiAgIHJlcyA9IGdtdGltZV9yICh0aW1fcCwgcmVz KTsKIAotICB5ZWFyID0gcmVzLT50bV95ZWFyICsgWUVBUl9CQVNFOworICB5 ZWFyID0gKHRpbWVfdCkocmVzLT50bV95ZWFyKSArIFlFQVJfQkFTRTsKICAg aXAgPSBfX21vbnRoX2xlbmd0aHNbaXNsZWFwKHllYXIpXTsKIAogICBUWl9M T0NLOwpAQCAtODUsNyArODUsNyBAQCBfREVGVU4gKGxvY2FsdGltZV9yLCAo dGltX3AsIHJlcyksCiAgICAgewogICAgICAgKytyZXMtPnRtX3lkYXk7CiAg ICAgICArK3Jlcy0+dG1fd2RheTsKLSAgICAgIGlmIChyZXMtPnRtX3dkYXkg PiA2KQorICAgICAgaWYgKHJlcy0+dG1fd2RheSA+PSBEQVlTUEVSV0VFSykK IAlyZXMtPnRtX3dkYXkgPSAwOwogICAgICAgKytyZXMtPnRtX21kYXk7CiAg ICAgICByZXMtPnRtX2hvdXIgLT0gSE9VUlNQRVJEQVk7CkBAIC05Myw3ICs5 Myw3IEBAIF9ERUZVTiAobG9jYWx0aW1lX3IsICh0aW1fcCwgcmVzKSwKIAl7 CiAJICByZXMtPnRtX21kYXkgLT0gaXBbcmVzLT50bV9tb25dOwogCSAgcmVz LT50bV9tb24gKz0gMTsKLQkgIGlmIChyZXMtPnRtX21vbiA9PSAxMikKKwkg IGlmIChyZXMtPnRtX21vbiA9PSBNT05TUEVSWUVBUikKIAkgICAgewogCSAg ICAgIHJlcy0+dG1fbW9uID0gMDsKIAkgICAgICByZXMtPnRtX3llYXIgKz0g MTsKQEAgLTEwNiwxNyArMTA2LDE3IEBAIF9ERUZVTiAobG9jYWx0aW1lX3Is ICh0aW1fcCwgcmVzKSwKICAgICAgIHJlcy0+dG1feWRheSAtPSAxOwogICAg ICAgcmVzLT50bV93ZGF5IC09IDE7CiAgICAgICBpZiAocmVzLT50bV93ZGF5 IDwgMCkKLQlyZXMtPnRtX3dkYXkgPSA2OworCXJlcy0+dG1fd2RheSA9IERB WVNQRVJXRUVLIC0gMTsKICAgICAgIHJlcy0+dG1fbWRheSAtPSAxOwotICAg ICAgcmVzLT50bV9ob3VyICs9IDI0OworICAgICAgcmVzLT50bV9ob3VyICs9 IEhPVVJTUEVSREFZOwogICAgICAgaWYgKHJlcy0+dG1fbWRheSA9PSAwKQog CXsKIAkgIHJlcy0+dG1fbW9uIC09IDE7CiAJICBpZiAocmVzLT50bV9tb24g PCAwKQogCSAgICB7Ci0JICAgICAgcmVzLT50bV9tb24gPSAxMTsKKwkgICAg ICByZXMtPnRtX21vbiA9IE1PTlNQRVJZRUFSIC0gMTsKIAkgICAgICByZXMt PnRtX3llYXIgLT0gMTsKLQkgICAgICByZXMtPnRtX3lkYXkgPSAzNjQgKyBp c2xlYXAocmVzLT50bV95ZWFyICsgWUVBUl9CQVNFKTsKKwkgICAgICByZXMt PnRtX3lkYXkgPSAzNjQgKyBpc2xlYXAoKHRpbWVfdCkocmVzLT50bV95ZWFy KSArIFlFQVJfQkFTRSk7CiAJICAgIH0KIAkgIHJlcy0+dG1fbWRheSA9IGlw W3Jlcy0+dG1fbW9uXTsKIAl9CmRpZmYgLS1naXQgYS9uZXdsaWIvbGliYy90 aW1lL2xvY2FsLmggYi9uZXdsaWIvbGliYy90aW1lL2xvY2FsLmgKaW5kZXgg YWY1NzkzYWY5Li4xMjYxNDk2ZDAgMTAwNjQ0Ci0tLSBhL25ld2xpYi9saWJj L3RpbWUvbG9jYWwuaAorKysgYi9uZXdsaWIvbGliYy90aW1lL2xvY2FsLmgK QEAgLTE5LDcgKzE5LDcgQEAKIAogI2RlZmluZSBpc2xlYXAoeSkgKCgoKHkp ICUgNCkgPT0gMCAmJiAoKHkpICUgMTAwKSAhPSAwKSB8fCAoKHkpICUgNDAw KSA9PSAwKQogCi1pbnQgICAgICAgICBfRVhGVU4gKF9fdHpjYWxjX2xpbWl0 cywgKGludCBfX3llYXIpKTsKK2ludCAgICAgICAgIF9FWEZVTiAoX190emNh bGNfbGltaXRzLCAodGltZV90IF9feWVhcikpOwogCiBleHRlcm4gX0NPTlNU IGludCBfX21vbnRoX2xlbmd0aHNbMl1bTU9OU1BFUllFQVJdOwogCmRpZmYg LS1naXQgYS9uZXdsaWIvbGliYy90aW1lL21rdGltZS5jIGIvbmV3bGliL2xp YmMvdGltZS9ta3RpbWUuYwppbmRleCA0NGMwMjU3ZjcuLmYwMTAzN2I5NyAx MDA2NDQKLS0tIGEvbmV3bGliL2xpYmMvdGltZS9ta3RpbWUuYworKysgYi9u ZXdsaWIvbGliYy90aW1lL21rdGltZS5jCkBAIC01MSwxMCArNTEsNiBAQCBB TlNJIEMgcmVxdWlyZXMgPDxta3RpbWU+Pi4KICNpbmNsdWRlIDx0aW1lLmg+ CiAjaW5jbHVkZSAibG9jYWwuaCIKIAotI2RlZmluZSBfU0VDX0lOX01JTlVU RSA2MEwKLSNkZWZpbmUgX1NFQ19JTl9IT1VSIDM2MDBMCi0jZGVmaW5lIF9T RUNfSU5fREFZIDg2NDAwTAotCiBzdGF0aWMgX0NPTlNUIGludCBEQVlTX0lO X01PTlRIWzEyXSA9CiB7MzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMx LCAzMCwgMzEsIDMwLCAzMX07CiAKQEAgLTYzLDggKzU5LDcgQEAgc3RhdGlj IF9DT05TVCBpbnQgREFZU19JTl9NT05USFsxMl0gPQogc3RhdGljIF9DT05T VCBpbnQgX0RBWVNfQkVGT1JFX01PTlRIWzEyXSA9CiB7MCwgMzEsIDU5LCA5 MCwgMTIwLCAxNTEsIDE4MSwgMjEyLCAyNDMsIDI3MywgMzA0LCAzMzR9Owog Ci0jZGVmaW5lIF9JU0xFQVAoeSkgKCgoeSkgJSA0KSA9PSAwICYmICgoKHkp ICUgMTAwKSAhPSAwIHx8ICgoKHkpKzE5MDApICUgNDAwKSA9PSAwKSkKLSNk ZWZpbmUgX0RBWVNfSU5fWUVBUih5ZWFyKSAoX0lTTEVBUCh5ZWFyKSA/IDM2 NiA6IDM2NSkKKyNkZWZpbmUgX0RBWVNfSU5fWUVBUih5ZWFyKSAoaXNsZWFw KCh5ZWFyKSArIFlFQVJfQkFTRSkgPyAzNjYgOiAzNjUpCiAKIHN0YXRpYyB2 b2lkIAogX0RFRlVOKHZhbGlkYXRlX3N0cnVjdHVyZSwgKHRpbV9wKSwKQEAg LTc0LDQ2ICs2OSw0NiBAQCBfREVGVU4odmFsaWRhdGVfc3RydWN0dXJlLCAo dGltX3ApLAogICBpbnQgZGF5c19pbl9mZWIgPSAyODsKIAogICAvKiBjYWxj dWxhdGUgdGltZSAmIGRhdGUgdG8gYWNjb3VudCBmb3Igb3V0IG9mIHJhbmdl IHZhbHVlcyAqLwotICBpZiAodGltX3AtPnRtX3NlYyA8IDAgfHwgdGltX3At PnRtX3NlYyA+IDU5KQorICBpZiAodGltX3AtPnRtX3NlYyA8IDAgfHwgdGlt X3AtPnRtX3NlYyA+PSBTRUNTUEVSTUlOKQogICAgIHsKLSAgICAgIHJlcyA9 IGRpdiAodGltX3AtPnRtX3NlYywgNjApOworICAgICAgcmVzID0gZGl2ICh0 aW1fcC0+dG1fc2VjLCBTRUNTUEVSTUlOKTsKICAgICAgIHRpbV9wLT50bV9t aW4gKz0gcmVzLnF1b3Q7CiAgICAgICBpZiAoKHRpbV9wLT50bV9zZWMgPSBy ZXMucmVtKSA8IDApCiAJewotCSAgdGltX3AtPnRtX3NlYyArPSA2MDsKKwkg IHRpbV9wLT50bV9zZWMgKz0gU0VDU1BFUk1JTjsKIAkgIC0tdGltX3AtPnRt X21pbjsKIAl9CiAgICAgfQogCi0gIGlmICh0aW1fcC0+dG1fbWluIDwgMCB8 fCB0aW1fcC0+dG1fbWluID4gNTkpCisgIGlmICh0aW1fcC0+dG1fbWluIDwg MCB8fCB0aW1fcC0+dG1fbWluID49IE1JTlNQRVJIT1VSKQogICAgIHsKLSAg ICAgIHJlcyA9IGRpdiAodGltX3AtPnRtX21pbiwgNjApOworICAgICAgcmVz ID0gZGl2ICh0aW1fcC0+dG1fbWluLCBNSU5TUEVSSE9VUik7CiAgICAgICB0 aW1fcC0+dG1faG91ciArPSByZXMucXVvdDsKICAgICAgIGlmICgodGltX3At PnRtX21pbiA9IHJlcy5yZW0pIDwgMCkKIAl7Ci0JICB0aW1fcC0+dG1fbWlu ICs9IDYwOworCSAgdGltX3AtPnRtX21pbiArPSBNSU5TUEVSSE9VUjsKIAkg IC0tdGltX3AtPnRtX2hvdXI7CiAgICAgICAgIH0KICAgICB9CiAKLSAgaWYg KHRpbV9wLT50bV9ob3VyIDwgMCB8fCB0aW1fcC0+dG1faG91ciA+IDIzKQor ICBpZiAodGltX3AtPnRtX2hvdXIgPCAwIHx8IHRpbV9wLT50bV9ob3VyID49 IEhPVVJTUEVSREFZKQogICAgIHsKLSAgICAgIHJlcyA9IGRpdiAodGltX3At PnRtX2hvdXIsIDI0KTsKKyAgICAgIHJlcyA9IGRpdiAodGltX3AtPnRtX2hv dXIsIEhPVVJTUEVSREFZKTsKICAgICAgIHRpbV9wLT50bV9tZGF5ICs9IHJl cy5xdW90OwogICAgICAgaWYgKCh0aW1fcC0+dG1faG91ciA9IHJlcy5yZW0p IDwgMCkKIAl7Ci0JICB0aW1fcC0+dG1faG91ciArPSAyNDsKKwkgIHRpbV9w LT50bV9ob3VyICs9IEhPVVJTUEVSREFZOwogCSAgLS10aW1fcC0+dG1fbWRh eTsKICAgICAgICAgfQogICAgIH0KIAotICBpZiAodGltX3AtPnRtX21vbiA8 IDAgfHwgdGltX3AtPnRtX21vbiA+IDExKQorICBpZiAodGltX3AtPnRtX21v biA8IDAgfHwgdGltX3AtPnRtX21vbiA+PSBNT05TUEVSWUVBUikKICAgICB7 Ci0gICAgICByZXMgPSBkaXYgKHRpbV9wLT50bV9tb24sIDEyKTsKKyAgICAg IHJlcyA9IGRpdiAodGltX3AtPnRtX21vbiwgTU9OU1BFUllFQVIpOwogICAg ICAgdGltX3AtPnRtX3llYXIgKz0gcmVzLnF1b3Q7CiAgICAgICBpZiAoKHRp bV9wLT50bV9tb24gPSByZXMucmVtKSA8IDApCiAgICAgICAgIHsKLQkgIHRp bV9wLT50bV9tb24gKz0gMTI7CisJICB0aW1fcC0+dG1fbW9uICs9IE1PTlNQ RVJZRUFSOwogCSAgLS10aW1fcC0+dG1feWVhcjsKICAgICAgICAgfQogICAg IH0KQEAgLTEyOCw3ICsxMjMsNyBAQCBfREVGVU4odmFsaWRhdGVfc3RydWN0 dXJlLCAodGltX3ApLAogCSAgaWYgKC0tdGltX3AtPnRtX21vbiA9PSAtMSkK IAkgICAgewogCSAgICAgIHRpbV9wLT50bV95ZWFyLS07Ci0JICAgICAgdGlt X3AtPnRtX21vbiA9IDExOworCSAgICAgIHRpbV9wLT50bV9tb24gPSBNT05T UEVSWUVBUiAtIDE7CiAJICAgICAgZGF5c19pbl9mZWIgPQogCQkoKF9EQVlT X0lOX1lFQVIgKHRpbV9wLT50bV95ZWFyKSA9PSAzNjYpID8KIAkJIDI5IDog MjgpOwpAQCAtMTQxLDcgKzEzNiw3IEBAIF9ERUZVTih2YWxpZGF0ZV9zdHJ1 Y3R1cmUsICh0aW1fcCksCiAgICAgICB3aGlsZSAodGltX3AtPnRtX21kYXkg PiBfREFZU19JTl9NT05USCAodGltX3AtPnRtX21vbikpCiAJewogCSAgdGlt X3AtPnRtX21kYXkgLT0gX0RBWVNfSU5fTU9OVEggKHRpbV9wLT50bV9tb24p OwotCSAgaWYgKCsrdGltX3AtPnRtX21vbiA9PSAxMikKKwkgIGlmICgrK3Rp bV9wLT50bV9tb24gPT0gTU9OU1BFUllFQVIpCiAJICAgIHsKIAkgICAgICB0 aW1fcC0+dG1feWVhcisrOwogCSAgICAgIHRpbV9wLT50bV9tb24gPSAwOwpA QCAtMTU4LDE2ICsxNTMsMTcgQEAgX0RFRlVOKG1rdGltZSwgKHRpbV9wKSwK ICAgICAgc3RydWN0IHRtICp0aW1fcCkKIHsKICAgdGltZV90IHRpbSA9IDA7 Ci0gIGxvbmcgZGF5cyA9IDA7Ci0gIGludCB5ZWFyLCBpc2RzdD0wOworICB0 aW1lX3QgZGF5cyA9IDA7CisgIHRpbWVfdCB5ZWFyOworICBpbnQgaXNkc3Q9 MDsKICAgX190emluZm9fdHlwZSAqdHogPSBfX2dldHR6aW5mbyAoKTsKIAog ICAvKiB2YWxpZGF0ZSBzdHJ1Y3R1cmUgKi8KICAgdmFsaWRhdGVfc3RydWN0 dXJlICh0aW1fcCk7CiAKICAgLyogY29tcHV0ZSBob3VycywgbWludXRlcywg c2Vjb25kcyAqLwotICB0aW0gKz0gdGltX3AtPnRtX3NlYyArICh0aW1fcC0+ dG1fbWluICogX1NFQ19JTl9NSU5VVEUpICsKLSAgICAodGltX3AtPnRtX2hv dXIgKiBfU0VDX0lOX0hPVVIpOworICB0aW0gKz0gdGltX3AtPnRtX3NlYyAr ICh0aW1fcC0+dG1fbWluICogU0VDU1BFUk1JTikgKworICAgICh0aW1fcC0+ dG1faG91ciAqIFNFQ1NQRVJIT1VSKTsKIAogICAvKiBjb21wdXRlIGRheXMg aW4geWVhciAqLwogICBkYXlzICs9IHRpbV9wLT50bV9tZGF5IC0gMTsKQEAg LTE3OCw5ICsxNzQsNiBAQCBfREVGVU4obWt0aW1lLCAodGltX3ApLAogICAv KiBjb21wdXRlIGRheSBvZiB0aGUgeWVhciAqLwogICB0aW1fcC0+dG1feWRh eSA9IGRheXM7CiAKLSAgaWYgKHRpbV9wLT50bV95ZWFyID4gMTAwMDAgfHwg dGltX3AtPnRtX3llYXIgPCAtMTAwMDApCi0gICAgICByZXR1cm4gKHRpbWVf dCkgLTE7Ci0KICAgLyogY29tcHV0ZSBkYXlzIGluIG90aGVyIHllYXJzICov CiAgIGlmICgoeWVhciA9IHRpbV9wLT50bV95ZWFyKSA+IDcwKQogICAgIHsK QEAgLTE5NSw3ICsxODgsNyBAQCBfREVGVU4obWt0aW1lLCAodGltX3ApLAog ICAgIH0KIAogICAvKiBjb21wdXRlIHRvdGFsIHNlY29uZHMgKi8KLSAgdGlt ICs9IChkYXlzICogX1NFQ19JTl9EQVkpOworICB0aW0gKz0gKGRheXMgKiBT RUNTUEVSREFZKTsKIAogICBUWl9MT0NLOwogCkBAIC0yMDQsNyArMTk3LDcg QEAgX0RFRlVOKG1rdGltZSwgKHRpbV9wKSwKICAgaWYgKF9kYXlsaWdodCkK ICAgICB7CiAgICAgICBpbnQgdG1faXNkc3Q7Ci0gICAgICBpbnQgeSA9IHRp bV9wLT50bV95ZWFyICsgWUVBUl9CQVNFOworICAgICAgdGltZV90IHkgPSB0 aW1fcC0+dG1feWVhciArIFlFQVJfQkFTRTsKICAgICAgIC8qIENvbnZlcnQg dXNlciBwb3NpdGl2ZSBpbnRvIDEgKi8KICAgICAgIHRtX2lzZHN0ID0gdGlt X3AtPnRtX2lzZHN0ID4gMCAgPyAgMSA6IHRpbV9wLT50bV9pc2RzdDsKICAg ICAgIGlzZHN0ID0gdG1faXNkc3Q7CkBAIC0yMzYsNyArMjI5LDcgQEAgX0RF RlVOKG1rdGltZSwgKHRpbV9wKSwKIAkJICAgICB0aW1lIHpvbmUgb2Zmc2V0 cywgZGVwZW5kaW5nIG9uIHdoaWNoIHdheSB0aGUgdXNlciBnb3QgaXQKIAkJ ICAgICB3cm9uZy4gVGhlIGRpZmYgaXMgdHlwaWNhbGx5IG9uZSBob3VyLCBv ciAzNjAwIHNlY29uZHMsCiAJCSAgICAgYW5kIHNob3VsZCBmaXQgaW4gYSAx Ni1iaXQgaW50LCBldmVuIHRob3VnaCBvZmZzZXQKLQkJICAgICBpcyBhIGxv bmcgdG8gYWNjb21vZGF0ZSAxMiBob3Vycy4gKi8KKwkJICAgICBpcyBhIGxv bmcgdG8gYWNjb21vZGF0ZSAxMisgaG91cnMuICovCiAJCSAgaW50IGRpZmYg PSAoaW50KSAodHotPl9fdHpydWxlWzBdLm9mZnNldAogCQkJCSAgICAtIHR6 LT5fX3R6cnVsZVsxXS5vZmZzZXQpOwogCQkgIGlmICghaXNkc3QpCkBAIC0y NjEsNyArMjU0LDcgQEAgX0RFRlVOKG1rdGltZSwgKHRpbV9wKSwKIAkJCSAg dGltX3AtPnRtX3lkYXkgPSBfREFZU19JTl9ZRUFSKHllYXIpIC0gMTsKIAkJ ICAgIH0gZWxzZSB7CiAJCQkgIG1kYXkgPSBfREFZU19JTl9ZRUFSKHllYXIp OwotCQkJICBpZiAodGltX3AtPnRtX3lkYXkgPiAobWRheSAtIDEpKQorCQkJ ICBpZiAodGltX3AtPnRtX3lkYXkgPj0gbWRheSkKIAkJCQl0aW1fcC0+dG1f eWRheSAtPSBtZGF5OwogCQkgICAgfQogCQkgIH0KQEAgLTI4Miw4ICsyNzUs OCBAQCBfREVGVU4obWt0aW1lLCAodGltX3ApLAogICB0aW1fcC0+dG1faXNk c3QgPSBpc2RzdDsKIAogICAvKiBjb21wdXRlIGRheSBvZiB0aGUgd2VlayAq LwotICBpZiAoKHRpbV9wLT50bV93ZGF5ID0gKGRheXMgKyA0KSAlIDcpIDwg MCkKLSAgICB0aW1fcC0+dG1fd2RheSArPSA3OworICBpZiAoKHRpbV9wLT50 bV93ZGF5ID0gKGRheXMgKyBFUE9DSF9XREFZKSAlIERBWVNQRVJXRUVLKSA8 IDApCisgICAgdGltX3AtPnRtX3dkYXkgKz0gREFZU1BFUldFRUs7CiAJCiAg IHJldHVybiB0aW07CiB9CmRpZmYgLS1naXQgYS9uZXdsaWIvbGliYy90aW1l L3N0cmZ0aW1lLmMgYi9uZXdsaWIvbGliYy90aW1lL3N0cmZ0aW1lLmMKaW5k ZXggMzgyMzE4MDQ3Li5iOTliMDY3MWMgMTAwNjQ0Ci0tLSBhL25ld2xpYi9s aWJjL3RpbWUvc3RyZnRpbWUuYworKysgYi9uZXdsaWIvbGliYy90aW1lL3N0 cmZ0aW1lLmMKQEAgLTM2MCw3ICszNjAsNyBAQCBfREVGVU4gKGlzb195ZWFy X2FkanVzdCwgKHRpbV9wKSwKIAlfQ09OU1Qgc3RydWN0IHRtICp0aW1fcCkK IHsKICAgLyogQWNjb3VudCBmb3IgZmFjdCB0aGF0IHRtX3llYXI9PTAgaXMg eWVhciAxOTAwLiAgKi8KLSAgaW50IGxlYXAgPSBpc2xlYXAgKHRpbV9wLT50 bV95ZWFyICsgKFlFQVJfQkFTRQorICBpbnQgbGVhcCA9IGlzbGVhcCAoKHRp bWVfdCkodGltX3AtPnRtX3llYXIpICsgKFlFQVJfQkFTRQogCQkJCSAgICAg ICAtICh0aW1fcC0+dG1feWVhciA8IDAgPyAwIDogMjAwMCkpKTsKIAogICAv KiBQYWNrIHRoZSB5ZGF5LCB3ZGF5LCBhbmQgbGVhcCB5ZWFyIGludG8gYSBz aW5nbGUgaW50IHNpbmNlIHRoZXJlIGFyZSBzbwpAQCAtODcyLDcgKzg3Miw3 IEBAIHJlY3Vyc2U6CiAJCWludCBuZWcgPSB0aW1fcC0+dG1feWVhciA8IC1Z RUFSX0JBU0U7CiAJCWludCBjZW50dXJ5ID0gdGltX3AtPnRtX3llYXIgPj0g MAogCQkgID8gdGltX3AtPnRtX3llYXIgLyAxMDAgKyBZRUFSX0JBU0UgLyAx MDAKLQkJICA6IGFicyAodGltX3AtPnRtX3llYXIgKyBZRUFSX0JBU0UpIC8g MTAwOworCQkgIDogbGxhYnMgKCh0aW1lX3QpKHRpbV9wLT50bV95ZWFyKSAr IFlFQVJfQkFTRSkgLyAxMDA7CiAJCWlmIChwYWQpIC8qICcwJyBvciAnKycg Ki8KIAkJICB7CiAJCSAgICBmbXQgPSBDUSgiJXMlMC4qZCIpOwpAQCAtOTIy LDcgKzkyMiw3IEBAIHJlY3Vyc2U6CiAJCQkgIENRKCIlLjJkLyUuMmQvJS4y ZCIpLAogCQkJICB0aW1fcC0+dG1fbW9uICsgMSwgdGltX3AtPnRtX21kYXks CiAJCQkgIHRpbV9wLT50bV95ZWFyID49IDAgPyB0aW1fcC0+dG1feWVhciAl IDEwMAotCQkJICA6IGFicyAodGltX3AtPnRtX3llYXIgKyBZRUFSX0JBU0Up ICUgMTAwKTsKKwkJCSAgOiBsbGFicyAoKHRpbWVfdCkodGltX3AtPnRtX3ll YXIpICsgWUVBUl9CQVNFKSAlIDEwMCk7CiAgICAgICAgICAgQ0hFQ0tfTEVO R1RIICgpOwogCSAgYnJlYWs7CiAJY2FzZSBDUSgnRicpOgpAQCAtOTYxLDcg Kzk2MSw3IEBAIHJlY3Vyc2U6CiAJICB7CiAJICAgIGludCBhZGp1c3QgPSBp c29feWVhcl9hZGp1c3QgKHRpbV9wKTsKIAkgICAgaW50IHllYXIgPSB0aW1f cC0+dG1feWVhciA+PSAwID8gdGltX3AtPnRtX3llYXIgJSAxMDAKLQkJOiBh YnMgKHRpbV9wLT50bV95ZWFyICsgWUVBUl9CQVNFKSAlIDEwMDsKKwkJOiBs bGFicyAoKHRpbWVfdCkodGltX3AtPnRtX3llYXIpICsgWUVBUl9CQVNFKSAl IDEwMDsKIAkgICAgaWYgKGFkanVzdCA8IDAgJiYgdGltX3AtPnRtX3llYXIg PD0gLVlFQVJfQkFTRSkKIAkJYWRqdXN0ID0gMTsKIAkgICAgZWxzZSBpZiAo YWRqdXN0ID4gMCAmJiB0aW1fcC0+dG1feWVhciA8IC1ZRUFSX0JBU0UpCkBA IC05ODAsOSArOTgwLDkgQEAgcmVjdXJzZToKIAkgICAgaW50IGFkanVzdCA9 IGlzb195ZWFyX2FkanVzdCAodGltX3ApOwogCSAgICBpbnQgY2VudHVyeSA9 IHRpbV9wLT50bV95ZWFyID49IDAKIAkgICAgICA/IHRpbV9wLT50bV95ZWFy IC8gMTAwICsgWUVBUl9CQVNFIC8gMTAwCi0JICAgICAgOiBhYnMgKHRpbV9w LT50bV95ZWFyICsgWUVBUl9CQVNFKSAvIDEwMDsKKwkgICAgICA6IGxsYWJz ICgodGltZV90KSh0aW1fcC0+dG1feWVhcikgKyBZRUFSX0JBU0UpIC8gMTAw OwogCSAgICBpbnQgeWVhciA9IHRpbV9wLT50bV95ZWFyID49IDAgPyB0aW1f cC0+dG1feWVhciAlIDEwMAotCSAgICAgIDogYWJzICh0aW1fcC0+dG1feWVh ciArIFlFQVJfQkFTRSkgJSAxMDA7CisJICAgICAgOiBsbGFicyAoKHRpbWVf dCkodGltX3AtPnRtX3llYXIpICsgWUVBUl9CQVNFKSAlIDEwMDsKIAkgICAg aWYgKGFkanVzdCA8IDAgJiYgdGltX3AtPnRtX3llYXIgPD0gLVlFQVJfQkFT RSkKIAkgICAgICBzaWduID0gYWRqdXN0ID0gMTsKIAkgICAgZWxzZSBpZiAo YWRqdXN0ID4gMCAmJiBzaWduKQpAQCAtOTk5LDggKzk5OSw4IEBAIHJlY3Vy c2U6CiAJCSsrY2VudHVyeTsKIAkgICAgICB9CiAJICAgIENIQVIgZm10YnVm WzEwXSwgKmZtdCA9IGZtdGJ1ZjsKLQkgICAgLyogaW50IHBvdGVudGlhbGx5 IG92ZXJmbG93cywgc28gdXNlIHVuc2lnbmVkIGluc3RlYWQuICAqLwotCSAg ICB1bnNpZ25lZCBwX3llYXIgPSBjZW50dXJ5ICogMTAwICsgeWVhcjsKKwkg ICAgLyogaW50IHBvdGVudGlhbGx5IG92ZXJmbG93cywgc28gdXNlIHRpbWVf dCBpbnN0ZWFkLiAgKi8KKwkgICAgdGltZV90IHBfeWVhciA9IGNlbnR1cnkg KiAxMDAgKyB5ZWFyOwogCSAgICBpZiAoc2lnbikKIAkgICAgICAqZm10Kysg PSBDUSgnLScpOwogCSAgICBlbHNlIGlmIChwYWQgPT0gQ1EoJysnKSAmJiBw X3llYXIgPj0gMTAwMDApCkBAIC0xMDEzLDggKzEwMTMsOCBAQCByZWN1cnNl OgogCSAgICAqZm10KysgPSBDUSgnJScpOwogCSAgICBpZiAocGFkKQogCSAg ICAgICpmbXQrKyA9IENRKCcwJyk7Ci0JICAgIFNUUkNQWSAoZm10LCBDUSgi Lip1IikpOwotCSAgICBsZW4gPSBzbnByaW50ZiAoJnNbY291bnRdLCBtYXhz aXplIC0gY291bnQsIGZtdGJ1Ziwgd2lkdGgsIHBfeWVhcik7CisJICAgIFNU UkNQWSAoZm10LCBDUSgiLipsbGQiKSk7CisJICAgIGxlbiA9IHNucHJpbnRm ICgmc1tjb3VudF0sIG1heHNpemUgLSBjb3VudCwgZm10YnVmLCB3aWR0aCwg KGxvbmcgbG9uZylwX3llYXIpOwogICAgICAgICAgICAgaWYgKGxlbiA8IDAg IHx8ICAoY291bnQrPWxlbikgPj0gbWF4c2l6ZSkKICAgICAgICAgICAgICAg cmV0dXJuIDA7CiAJICB9CkBAIC0xMTA1LDMxICsxMTA1LDcgQEAgcmVjdXJz ZToKICAgICAgICAgICBDSEVDS19MRU5HVEggKCk7CiAgICAgICAgICAgYnJl YWs7CiAJY2FzZSBDUSgncycpOgotLyoKLSAqIEZyb206Ci0gKiBUaGUgT3Bl biBHcm91cCBCYXNlIFNwZWNpZmljYXRpb25zIElzc3VlIDcKLSAqIElFRUUg U3RkIDEwMDMuMSwgMjAxMyBFZGl0aW9uCi0gKiBDb3B5cmlnaHQgKGMpIDIw MDEtMjAxMyBUaGUgSUVFRSBhbmQgVGhlIE9wZW4gR3JvdXAKLSAqIFhCRCBC YXNlIERlZmluaXRpb25zCi0gKiA0LiBHZW5lcmFsIENvbmNlcHRzCi0gKiA0 LjE1IFNlY29uZHMgU2luY2UgdGhlIEVwb2NoCi0gKiBBIHZhbHVlIHRoYXQg YXBwcm94aW1hdGVzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0aGF0IGhhdmUg ZWxhcHNlZCBzaW5jZSB0aGUKLSAqIEVwb2NoLiBBIENvb3JkaW5hdGVkIFVu aXZlcnNhbCBUaW1lIG5hbWUgKHNwZWNpZmllZCBpbiB0ZXJtcyBvZiBzZWNv bmRzCi0gKiAodG1fc2VjKSwgbWludXRlcyAodG1fbWluKSwgaG91cnMgKHRt X2hvdXIpLCBkYXlzIHNpbmNlIEphbnVhcnkgMSBvZiB0aGUgeWVhcgotICog KHRtX3lkYXkpLCBhbmQgY2FsZW5kYXIgeWVhciBtaW51cyAxOTAwICh0bV95 ZWFyKSkgaXMgcmVsYXRlZCB0byBhIHRpbWUKLSAqIHJlcHJlc2VudGVkIGFz IHNlY29uZHMgc2luY2UgdGhlIEVwb2NoLCBhY2NvcmRpbmcgdG8gdGhlIGV4 cHJlc3Npb24gYmVsb3cuCi0gKiBJZiB0aGUgeWVhciBpcyA8MTk3MCBvciB0 aGUgdmFsdWUgaXMgbmVnYXRpdmUsIHRoZSByZWxhdGlvbnNoaXAgaXMgdW5k ZWZpbmVkLgotICogSWYgdGhlIHllYXIgaXMgPj0xOTcwIGFuZCB0aGUgdmFs dWUgaXMgbm9uLW5lZ2F0aXZlLCB0aGUgdmFsdWUgaXMgcmVsYXRlZCB0byBh Ci0gKiBDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZSBuYW1lIGFjY29yZGlu ZyB0byB0aGUgQy1sYW5ndWFnZSBleHByZXNzaW9uLCB3aGVyZQotICogdG1f c2VjLCB0bV9taW4sIHRtX2hvdXIsIHRtX3lkYXksIGFuZCB0bV95ZWFyIGFy ZSBhbGwgaW50ZWdlciB0eXBlczoKLSAqIHRtX3NlYyArIHRtX21pbio2MCAr IHRtX2hvdXIqMzYwMCArIHRtX3lkYXkqODY0MDAgKwotICogICAgICh0bV95 ZWFyLTcwKSozMTUzNjAwMCArICgodG1feWVhci02OSkvNCkqODY0MDAgLQot ICogICAgICgodG1feWVhci0xKS8xMDApKjg2NDAwICsgKCh0bV95ZWFyKzI5 OSkvNDAwKSo4NjQwMAotICogT1IKLSAqICgoKCh0bV95ZWFyLTY5KS80IC0g KHRtX3llYXItMSkvMTAwICsgKHRtX3llYXIrMjk5KS80MDAgKwotICogICAg ICAgICAodG1feWVhci03MCkqMzY1ICsgdG1feWRheSkqMjQgKyB0bV9ob3Vy KSo2MCArIHRtX21pbikqNjAgKyB0bV9zZWMKLSAqLwotLyogbW9kaWZpZWQg ZnJvbSAleiBjYXNlIGJ5IGhvaXN0aW5nIG9mZnNldCBvdXRzaWRlIGlmIGJs b2NrIGFuZCBpbml0aWFsaXppbmcgKi8KKy8qIG1vZGlmaWVkIGZyb20gJXog Y2FzZSBieSBob2lzdGluZyBvZmZzZXQgb3V0c2lkZSBvZiBibG9jayBhbmQg aW5pdGlhbGl6aW5nICovCiAJICB7CiAJICAgIGxvbmcgb2Zmc2V0ID0gMDsJ Lyogb2Zmc2V0IDwgMCA9PiBXIG9mIEdNVCwgPiAwID0+IEUgb2YgR01UOgog CQkJCSAgIHN1YnRyYWN0IHRvIGdldCBVVEMgKi8KQEAgLTExNjIsMTMgKzEx MzgsNDAgQEAgcmVjdXJzZToKICNlbmRpZgogCQlUWl9VTkxPQ0s7CiAJICAg ICAgfQorLyoKKyAqIEZyb206CisgKiBUaGUgT3BlbiBHcm91cCBCYXNlIFNw ZWNpZmljYXRpb25zIElzc3VlIDcKKyAqIElFRUUgU3RkIDEwMDMuMSwgMjAx MyBFZGl0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxMyBUaGUgSUVF RSBhbmQgVGhlIE9wZW4gR3JvdXAKKyAqIFhCRCBCYXNlIERlZmluaXRpb25z CisgKiA0LiBHZW5lcmFsIENvbmNlcHRzCisgKiA0LjE1IFNlY29uZHMgU2lu Y2UgdGhlIEVwb2NoCisgKiBBIHZhbHVlIHRoYXQgYXBwcm94aW1hdGVzIHRo ZSBudW1iZXIgb2Ygc2Vjb25kcyB0aGF0IGhhdmUgZWxhcHNlZCBzaW5jZSB0 aGUKKyAqIEVwb2NoLiBBIENvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lIG5h bWUgKHNwZWNpZmllZCBpbiB0ZXJtcyBvZiBzZWNvbmRzCisgKiAodG1fc2Vj KSwgbWludXRlcyAodG1fbWluKSwgaG91cnMgKHRtX2hvdXIpLCBkYXlzIHNp bmNlIEphbnVhcnkgMSBvZiB0aGUgeWVhcgorICogKHRtX3lkYXkpLCBhbmQg Y2FsZW5kYXIgeWVhciBtaW51cyAxOTAwICh0bV95ZWFyKSkgaXMgcmVsYXRl ZCB0byBhIHRpbWUKKyAqIHJlcHJlc2VudGVkIGFzIHNlY29uZHMgc2luY2Ug dGhlIEVwb2NoLCBhY2NvcmRpbmcgdG8gdGhlIGV4cHJlc3Npb24gYmVsb3cu CisgKiBJZiB0aGUgeWVhciBpcyA8MTk3MCBvciB0aGUgdmFsdWUgaXMgbmVn YXRpdmUsIHRoZSByZWxhdGlvbnNoaXAgaXMgdW5kZWZpbmVkLgorICogSWYg dGhlIHllYXIgaXMgPj0xOTcwIGFuZCB0aGUgdmFsdWUgaXMgbm9uLW5lZ2F0 aXZlLCB0aGUgdmFsdWUgaXMgcmVsYXRlZCB0byBhCisgKiBDb29yZGluYXRl ZCBVbml2ZXJzYWwgVGltZSBuYW1lIGFjY29yZGluZyB0byB0aGUgQy1sYW5n dWFnZSBleHByZXNzaW9uLCB3aGVyZQorICogdG1fc2VjLCB0bV9taW4sIHRt X2hvdXIsIHRtX3lkYXksIGFuZCB0bV95ZWFyIGFyZSBhbGwgaW50ZWdlciB0 eXBlczoKKyAqIHRtX3NlYyArIHRtX21pbio2MCArIHRtX2hvdXIqMzYwMCAr IHRtX3lkYXkqODY0MDAgKworICogICAgICh0bV95ZWFyLTcwKSozMTUzNjAw MCArICgodG1feWVhci02OSkvNCkqODY0MDAgLQorICogICAgICgodG1feWVh ci0xKS8xMDApKjg2NDAwICsgKCh0bV95ZWFyKzI5OSkvNDAwKSo4NjQwMAor ICogT1IKKyAqICgoKCh0bV95ZWFyLTY5KS80IC0gKHRtX3llYXItMSkvMTAw ICsgKHRtX3llYXIrMjk5KS80MDAgKworICogICAgICAgICAodG1feWVhci03 MCkqMzY1ICsgdG1feWRheSkqMjQgKyB0bV9ob3VyKSo2MCArIHRtX21pbikq NjAgKyB0bV9zZWMKKyAqLwogCSAgICBsZW4gPSBzbnByaW50ZiAoJnNbY291 bnRdLCBtYXhzaXplIC0gY291bnQsIENRKCIlbGxkIiksCi0JCQkgICAgKCgo KChsb25nIGxvbmcpdGltX3AtPnRtX3llYXIgLSA2OSkvNAotCQkJCS0gKHRp bV9wLT50bV95ZWFyIC0gMSkvMTAwCi0JCQkJKyAodGltX3AtPnRtX3llYXIg KyAyOTkpLzQwMAotCQkJCSsgKHRpbV9wLT50bV95ZWFyIC0gNzApKjM2NSAr IHRpbV9wLT50bV95ZGF5KSoyNAotCQkJICAgICAgKyB0aW1fcC0+dG1faG91 cikqNjAgKyB0aW1fcC0+dG1fbWluKSo2MAotCQkJICAgICsgdGltX3AtPnRt X3NlYyAtIG9mZnNldCk7CisJCQkgICAgKGxvbmcgbG9uZykoKCgoCisJCQkJ ICAoKHRpbWVfdCkodGltX3AtPnRtX3llYXIpIC0gNzApKjM2NQorCQkJCQkg KyAodGltX3AtPnRtX3llYXIgLSA2OSkvNAorCQkJCQkgLSAodGltX3AtPnRt X3llYXIgLSAxKS8xMDAKKwkJCQkrICgodGltZV90KSh0aW1fcC0+dG1feWVh cikgKyAyOTkpLzQwMAorCQkJCQkgICsgdGltX3AtPnRtX3lkYXkpKkhPVVJT UEVSREFZCisJCQkJCSAgKyB0aW1fcC0+dG1faG91cikqTUlOU1BFUkhPVVIK KwkJCQkJICArIHRpbV9wLT50bV9taW4pKlNFQ1NQRVJNSU4KKwkJCQkJICAr IHRpbV9wLT50bV9zZWMgLSBvZmZzZXQpKTsKIAkgICAgQ0hFQ0tfTEVOR1RI ICgpOwogCSAgfQogICAgICAgICAgIGJyZWFrOwpAQCAtMTI0MSw3ICsxMjQ0 LDcgQEAgcmVjdXJzZToKIAkJICAgRnJpLCBhbmQgYWxzbyBpZiBjdXJyZW50 IHllYXIgc3RhcnRzIG9uIFNhdCBhbmQKIAkJICAgcHJldmlvdXMgeWVhciB3 YXMgbGVhcCB5ZWFyLiAgKi8KIAkJd2VlayA9IDUyICsgKDQgPj0gKHdkYXkg LSB0aW1fcC0+dG1feWRheQotCQkJCSAgIC0gaXNsZWFwICh0aW1fcC0+dG1f eWVhcgorCQkJCSAgIC0gaXNsZWFwICgodGltZV90KSh0aW1fcC0+dG1feWVh cikKIAkJCQkJICAgICArIChZRUFSX0JBU0UgLSAxCiAJCQkJCQktICh0aW1f cC0+dG1feWVhciA8IDAKIAkJCQkJCSAgID8gMCA6IDIwMDApKSkpKTsKQEAg LTEyOTUsNyArMTI5OCw3IEBAIHJlY3Vyc2U6CiAJCSAgLyogQmUgY2FyZWZ1 bCBvZiBib3RoIG92ZXJmbG93IGFuZCBuZWdhdGl2ZSB5ZWFycywgdGhhbmtz IHRvCiAJCSAgICAgdGhlIGFzeW1tZXRyaWMgcmFuZ2Ugb2YgeWVhcnMuICAq LwogCQkgIGludCB5ZWFyID0gdGltX3AtPnRtX3llYXIgPj0gMCA/IHRpbV9w LT50bV95ZWFyICUgMTAwCi0JCQkgICAgIDogYWJzICh0aW1fcC0+dG1feWVh ciArIFlFQVJfQkFTRSkgJSAxMDA7CisJCQkgICAgIDogbGxhYnMgKCh0aW1l X3QpKHRpbV9wLT50bV95ZWFyKSArIFlFQVJfQkFTRSkgJSAxMDA7CiAjaWZk ZWYgX1dBTlRfQzk5X1RJTUVfRk9STUFUUwogCQkgIGlmIChhbHQgIT0gQ1Eo J08nKSB8fCAhKmFsdF9kaWdpdHMKIAkJICAgICAgfHwgIShsZW4gPSBjb252 X3RvX2FsdF9kaWdpdHMgKCZzW2NvdW50XSwgbWF4c2l6ZSAtIGNvdW50LApA QCAtMTMxOSw5ICsxMzIyLDkgQEAgcmVjdXJzZToKIAkgICAgewogCSAgICAg IENIQVIgZm10YnVmWzEwXSwgKmZtdCA9IGZtdGJ1ZjsKIAkgICAgICBpbnQg c2lnbiA9IHRpbV9wLT50bV95ZWFyIDwgLVlFQVJfQkFTRTsKLQkgICAgICAv KiBpbnQgcG90ZW50aWFsbHkgb3ZlcmZsb3dzLCBzbyB1c2UgdW5zaWduZWQg aW5zdGVhZC4gICovCi0JICAgICAgcmVnaXN0ZXIgdW5zaWduZWQgeWVhciA9 ICh1bnNpZ25lZCkgdGltX3AtPnRtX3llYXIKLQkJCQkgICAgICAgKyAodW5z aWduZWQpIFlFQVJfQkFTRTsKKwkgICAgICAvKiBpbnQgcG90ZW50aWFsbHkg b3ZlcmZsb3dzLCBzbyB1c2UgdGltZV90IGluc3RlYWQuICAqLworCSAgICAg IHJlZ2lzdGVyIHRpbWVfdCB5ZWFyID0gKHRpbWVfdCkodGltX3AtPnRtX3ll YXIpCisJCQkJICAgICAgICsgWUVBUl9CQVNFOwogCSAgICAgIGlmIChzaWdu KQogCQl7CiAJCSAgKmZtdCsrID0gQ1EoJy0nKTsKQEAgLTEzMzcsOSArMTM0 MCw5IEBAIHJlY3Vyc2U6CiAJICAgICAgKmZtdCsrID0gQ1EoJyUnKTsKIAkg ICAgICBpZiAocGFkKQogCQkqZm10KysgPSBDUSgnMCcpOwotCSAgICAgIFNU UkNQWSAoZm10LCBDUSgiLip1IikpOworCSAgICAgIFNUUkNQWSAoZm10LCBD USgiLipsbGQiKSk7CiAJICAgICAgbGVuID0gc25wcmludGYgKCZzW2NvdW50 XSwgbWF4c2l6ZSAtIGNvdW50LCBmbXRidWYsIHdpZHRoLAotCQkJICAgICAg eWVhcik7CisJCQkgICAgICAobG9uZyBsb25nKXllYXIpOwogCSAgICAgIENI RUNLX0xFTkdUSCAoKTsKIAkgICAgfQogCSAgYnJlYWs7CmRpZmYgLS1naXQg YS9uZXdsaWIvbGliYy90aW1lL3R6Y2FsY19saW1pdHMuYyBiL25ld2xpYi9s aWJjL3RpbWUvdHpjYWxjX2xpbWl0cy5jCmluZGV4IDhhMGJkYTNkYS4uZTBi ZTcwNTk2IDEwMDY0NAotLS0gYS9uZXdsaWIvbGliYy90aW1lL3R6Y2FsY19s aW1pdHMuYworKysgYi9uZXdsaWIvbGliYy90aW1lL3R6Y2FsY19saW1pdHMu YwpAQCAtMTIsOSArMTIsOSBAQAogCiBpbnQKIF9ERUZVTiAoX190emNhbGNf bGltaXRzLCAoeWVhciksCi0JaW50IHllYXIpCisJdGltZV90IHllYXIpCiB7 Ci0gIGludCBkYXlzLCB5ZWFyX2RheXMsIHllYXJzOworICB0aW1lX3QgZGF5 cywgeWVhcl9kYXlzLCB5ZWFyczsKICAgaW50IGksIGo7CiAgIF9fdHppbmZv X3R5cGUgKl9DT05TVCB0eiA9IF9fZ2V0dHppbmZvICgpOwogCg== --------------515E587203C19DACA600C131--