From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qt1-x832.google.com (mail-qt1-x832.google.com [IPv6:2607:f8b0:4864:20::832]) by sourceware.org (Postfix) with ESMTPS id EC18E3858CDA for ; Tue, 1 Nov 2022 10:23:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org EC18E3858CDA Authentication-Results: sourceware.org; dmarc=fail (p=none dis=none) header.from=acm.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-qt1-x832.google.com with SMTP id r19so8973024qtx.6 for ; Tue, 01 Nov 2022 03:23:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=subject:from:to:content-language:user-agent:mime-version:date :message-id:sender:from:to:cc:subject:date:message-id:reply-to; bh=Wx7dgEpDfZuHawD9nenQdmavSDLECJXNLYyvcgEXZo0=; b=i9BlLBckSimXNlKFfgJP3w+BWh8fBsMaejtsb9w+QMwALjl5+VRT9hFqSwuS4V6xqO HhyPwlyJfNrwNtzit6P2AM1wTRiMI0HtGNhC6p2clIYoDQzOh77mNmi2+A/EtZoeuIoL 4Pp3tL66kBidBNQ1o8fYwAf/8lmXBQ+7iNJYG7HOXNXkBLryfYh9jTgu7wWIHOolrOIE kigKG3DnFrRVZZ8Q5kbbEU86ffdJMKqbnUNumXsdDzRwmqEKHgmizohguztQ4siAZ1e0 Z0RJqGK3ItXveDe3Em3Ba9SyEWiHLG9f2XmzouGaUldM1hLv5ynMdIEjGx8K12i7goyb KcFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=subject:from:to:content-language:user-agent:mime-version:date :message-id:sender:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Wx7dgEpDfZuHawD9nenQdmavSDLECJXNLYyvcgEXZo0=; b=rm1dN1PQu8fpwbTknM1A78FltDjRA4dmxKZ+XZGJKfz+7FZOMP0IGBnfbhj4ljSCm6 fLI/xsYa6f45o6cxlh3QrCAVng/ampJdFM7DO1Gs0/pMES2SuYrpTci2CLAMkcsUZjRh eBL7s+RaGMLrQLOKG+N0lmTmBxXgvoCNKRqyfjyrHULMuUW1ff/fditkp8cJ5rTFbCD3 xwkYJc0g0e8MPRtDD1asXka/6WWrJRhfC6qV8RX/ZwV6cegqWeTvDr/JQ5mErnLxMvW0 rJv4JNG+Npc4pCqYtpQ3wnESbMoDBG8wAY9DWDmYly5NU7oSyW1rS2A86X0vRwGXbvWQ ourg== X-Gm-Message-State: ACrzQf2aUyn5sRG4URYBmosahswUF+LKrI2r9QEhQuY/wU3pIYQaFZLA F90d1zB5oZKOlLBeburiHhFMfBQfD8FEFA== X-Google-Smtp-Source: AMsMyM6rHCBDycH1ZRh7cHM2afzR/Gl6fkgBd9ooMIjPAo7hWRBSDLAGx2TNSTqp1ZBJ3VoR+FDU7w== X-Received: by 2002:a05:622a:190d:b0:39c:df75:6880 with SMTP id w13-20020a05622a190d00b0039cdf756880mr14147036qtc.32.1667298199024; Tue, 01 Nov 2022 03:23:19 -0700 (PDT) Received: from ?IPV6:2601:19c:527f:bfd0::5? ([2601:19c:527f:bfd0::5]) by smtp.googlemail.com with ESMTPSA id r10-20020ac85e8a000000b0039cb5c9dbacsm4930135qtx.22.2022.11.01.03.23.18 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 01 Nov 2022 03:23:18 -0700 (PDT) Sender: Nathan Sidwell Content-Type: multipart/mixed; boundary="------------9TYi7TiM4vFQUs9QZjoy8H3C" Message-ID: Date: Tue, 1 Nov 2022 06:23:18 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.0 Content-Language: en-US To: GCC Patches From: Nathan Sidwell Subject: c++: Reorganize per-scope lambda discriminators X-Spam-Status: No, score=-3038.7 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------9TYi7TiM4vFQUs9QZjoy8H3C Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit We currently use a per-extra-scope counter to discriminate multiple lambdas in a particular such scope. This is not ABI compliant. This patch merely refactors the existing code to make it easier to drop in a conformant mangling -- there's no functional change here. I rename the LAMBDA_EXPR_DISCIMINATOR to LAMBDA_EXPR_SCOPE_ONLY_DISCRIMINATOR, foreshadowing that there'll be a new discriminator. To provide ABI warnings we'll need to calculate both, and that requires some repacking of the lambda_expr's fields. Finally, although we end up calling the discriminator setter and the scope recorder (nearly) always consecutively, it's clearer to handle it as two separate operations. That also allows us to remove the instantiation special-case for a null extra-scope. nathan -- Nathan Sidwell --------------9TYi7TiM4vFQUs9QZjoy8H3C Content-Type: text/x-patch; charset=UTF-8; name="0001-c-Reorganize-per-scope-lambda-discriminators.patch" Content-Disposition: attachment; filename="0001-c-Reorganize-per-scope-lambda-discriminators.patch" Content-Transfer-Encoding: base64 RnJvbSAwMTIyZmFhZTMwZmUxYWQxZGZhOGM2OWYzZDNmMDQyOGI5OTZiNjAwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOYXRoYW4gU2lkd2VsbCA8bmF0aGFuQGFjbS5vcmc+ CkRhdGU6IE1vbiwgMzEgT2N0IDIwMjIgMDY6MTE6MjggLTA0MDAKU3ViamVjdDogW1BBVENI XSBjKys6IFJlb3JnYW5pemUgcGVyLXNjb3BlIGxhbWJkYSBkaXNjcmltaW5hdG9ycwoKV2Ug Y3VycmVudGx5IHVzZSBhIHBlci1leHRyYS1zY29wZSBjb3VudGVyIHRvIGRpc2NyaW1pbmF0 ZSBtdWx0aXBsZQpsYW1iZGFzIGluIGEgcGFydGljdWxhciBzdWNoIHNjb3BlLiAgVGhpcyBp cyBub3QgQUJJIGNvbXBsaWFudC4gIFRoaXMKcGF0Y2ggbWVyZWx5IHJlZmFjdG9ycyB0aGUg ZXhpc3RpbmcgY29kZSB0byBtYWtlIGl0IGVhc2llciB0byBkcm9wIGluCmEgY29uZm9ybWFu dCBtYW5nbGluZyAtLSB0aGVyZSdzIG5vIGZ1bmN0aW9uYWwgY2hhbmdlIGhlcmUuICBJIHJl bmFtZQp0aGUgTEFNQkRBX0VYUFJfRElTQ0lNSU5BVE9SIHRvIExBTUJEQV9FWFBSX1NDT1BF X09OTFlfRElTQ1JJTUlOQVRPUiwKZm9yZXNoYWRvd2luZyB0aGF0IHRoZXJlJ2xsIGJlIGEg bmV3IGRpc2NyaW1pbmF0b3IuICBUbyBwcm92aWRlIEFCSQp3YXJuaW5ncyB3ZSdsbCBuZWVk IHRvIGNhbGN1bGF0ZSBib3RoLCBhbmQgdGhhdCByZXF1aXJlcyBzb21lCnJlcGFja2luZyBv ZiB0aGUgbGFtYmRhX2V4cHIncyBmaWVsZHMuICBGaW5hbGx5LCBhbHRob3VnaCB3ZSBlbmQg dXAKY2FsbGluZyB0aGUgZGlzY3JpbWluYXRvciBzZXR0ZXIgYW5kIHRoZSBzY29wZSByZWNv cmRlciAobmVhcmx5KQphbHdheXMgY29uc2VjdXRpdmVseSwgaXQncyBjbGVhcmVyIHRvIGhh bmRsZSBpdCBhcyB0d28gc2VwYXJhdGUKb3BlcmF0aW9ucy4gIFRoYXQgYWxzbyBhbGxvd3Mg dXMgdG8gcmVtb3ZlIHRoZSBpbnN0YW50aWF0aW9uCnNwZWNpYWwtY2FzZSBmb3IgYSBudWxs IGV4dHJhLXNjb3BlLgoKCWdjYy9jcC8KCSogY3AtdHJlZS5oIChMQU1CREFfRVhQUl9ESVND UklNSU5BVE9SKTogUmVuYW1lIHRvIC4uLgoJKExBTUJEQV9FWFBSX1NDT1BFX09OTFlfRElT Q1JJTUlOQVRPUik6IC4uLiBoZXJlLgoJKHN0cnVjdCB0cmVlX2xhbWJkYV9leHByKTogTWFr ZSBkZWZhdWx0X2NhcHR1cmVfbW9kZSAmCglkaXNjcmltaW5hdG9yX3Njb3BlIGJpdGZpZWxk cy4KCShyZWNvcmRfbnVsbF9sYW1iZGFfc2NvcGUpIERlbGV0ZS4KCShyZWNvcmRfbGFtYmRh X3Njb3BlX2Rpc2NyaW1pbmF0b3IpOiBEZWNsYXJlLgoJKiBsYW1iZGEuY2MgKHN0cnVjdCBs YW1iZGFfZGlzY3JpbWluYXRvcik6IE5ldyBzdHJ1Y3QuCgkobGFtYmRhX3Njb3BlLCBsYW1i ZGFfc2NvcGVfc3RhY2spOiBBZGp1c3QgdHlwZXMuCgkobGFtYmRhX2NvdW50KTogRGVsZXRl LgoJKHN0cnVjdCB0cmVlX2ludCk6IERlbGV0ZS4KCShzdGFydF9sYW1iZGFfc2NvcGUsIGZp bmlzaF9sYW1iZGFfc2NvcGUpOiBBZGp1c3QuCgkocmVjb3JkX2xhbWJkYV9zY29wZSk6IE9u bHkgcmVjb3JkIHRoZSBzY29wZS4KCShyZWNvcmRfbGFtYmRhX3Njb3BlX2Rpc2NyaW1pbmF0 b3IpOiBOZXcuCgkqIG1hbmdsZS5jYyAod3JpdGVfY2xvc3VyZV90eXBlX25hbWUpOiBBZGp1 c3QuCgkqIG1vZHVsZS5jYyAodHJlZXNfb3V0Ojpjb3JlX3ZhbHMpOiBMaWtld2lzZSwKCSh0 cmVlc19pbjo6Y29yZV92YWxzKTogTGlrZXdpc2UuCgkqIHBhcnNlci5jYyAoY3BfcGFyc2Vy X2xhbWJkYV9leHByZXNzaW9uKTogQ2FsbAoJcmVjb3JkX2xhbWJkYV9zY29wZV9kaXNjcmlt aW5hdG9yLgoJKiBwdC5jYyAodHN1YnN0X2xhbWJkYV9leHByKTogQWRqdXN0IHJlY29yZF9s YW1iZGFfc2NvcGUgY2FsaW5nLiAgQ2FsbAoJcmVjb3JkX2xhbWJkYV9zY29wZV9kaXNjcmlt aW5hdG9yLiBDb21tb25pemUgY29udHJvbCBmbG93IG9uIHRzdWJzdGluZwoJdGhlIG9wZXJh dG9yIGZ1bmN0aW9uLgoJbGliY2MxLwoJKiBsaWJjcDFwbHVnaW4uY2MgKHBsdWdpbl9zdGFy dF9jbG9zdXJlKTogQWRqdXN0LgoJZ2NjL3Rlc3RzdWl0ZS8KCSogZysrLmRnL2FiaS9sYW1i ZGEtc2lnMS0xNy5DOiBOZXcuCgkqIGcrKy5kZy9hYmkvbGFtYmRhLXNpZzEuaDogTmV3LgoJ KiBnKysuZGcvY3BwMXkvbGFtYmRhLW1hbmdsZS0xLkM6IEV4dHJhY3RlZCB0byAuLi4KCSog ZysrLmRnL2NwcDF5L2xhbWJkYS1tYW5nbGUtMS5oOiAuLi4gaGVyZS4KCSogZysrLmRnL2Nw cDF5L2xhbWJkYS1tYW5nbGUtMS0xMS5DOiBOZXcKCSogZysrLmRnL2NwcDF5L2xhbWJkYS1t YW5nbGUtMS0xNy5DCi0tLQogZ2NjL2NwL2NwLXRyZWUuaCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgIDE3ICstLQogZ2NjL2NwL2xhbWJkYS5jYyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgMTE0ICsrKysrKysrKy0tLS0tLS0tLQogZ2NjL2NwL21hbmdsZS5j YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICstCiBnY2MvY3AvbW9kdWxl LmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIGdjYy9jcC9wYXJz ZXIuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNSArLQogZ2NjL2NwL3B0 LmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUwICsrKy0tLS0tCiBn Y2MvdGVzdHN1aXRlL2crKy5kZy9hYmkvbGFtYmRhLXNpZzEtMTcuQyAgICAgfCAgMjYgKysr KwogZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvYWJpL2xhbWJkYS1zaWcxLmggICAgICAgIHwgIDQy ICsrKysrKysKIC4uLi9nKysuZGcvY3BwMXkvbGFtYmRhLW1hbmdsZS0xLTExLkMgICAgICAg ICB8ICAyNSArKysrCiAuLi4vZysrLmRnL2NwcDF5L2xhbWJkYS1tYW5nbGUtMS0xNy5DICAg ICAgICAgfCAgMjUgKysrKwogLi4uL3tsYW1iZGEtbWFuZ2xlLTEuQyA9PiBsYW1iZGEtbWFu Z2xlLTEuaH0gIHwgICAzICstCiBsaWJjYzEvbGliY3AxcGx1Z2luLmNjICAgICAgICAgICAg ICAgICAgICAgICAgfCAgIDIgKy0KIDEyIGZpbGVzIGNoYW5nZWQsIDIwOCBpbnNlcnRpb25z KCspLCAxMDcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvYWJpL2xhbWJkYS1zaWcxLTE3LkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2Mv dGVzdHN1aXRlL2crKy5kZy9hYmkvbGFtYmRhLXNpZzEuaAogY3JlYXRlIG1vZGUgMTAwNjQ0 IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NwcDF5L2xhbWJkYS1tYW5nbGUtMS0xMS5DCiBjcmVh dGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMXkvbGFtYmRhLW1hbmds ZS0xLTE3LkMKIHJlbmFtZSBnY2MvdGVzdHN1aXRlL2crKy5kZy9jcHAxeS97bGFtYmRhLW1h bmdsZS0xLkMgPT4gbGFtYmRhLW1hbmdsZS0xLmh9ICg5OCUpCgpkaWZmIC0tZ2l0IGEvZ2Nj L2NwL2NwLXRyZWUuaCBiL2djYy9jcC9jcC10cmVlLmgKaW5kZXggNmQ4NDUxNGU0YzAuLjRj MGJhY2I5MWRhIDEwMDY0NAotLS0gYS9nY2MvY3AvY3AtdHJlZS5oCisrKyBiL2djYy9jcC9j cC10cmVlLmgKQEAgLTE1MDAsOSArMTUwMCwxMCBAQCBlbnVtIGNwX2xhbWJkYV9kZWZhdWx0 X2NhcHR1cmVfbW9kZV90eXBlIHsKICNkZWZpbmUgTEFNQkRBX0VYUFJfRVhUUkFfU0NPUEUo Tk9ERSkgXAogICAoKChzdHJ1Y3QgdHJlZV9sYW1iZGFfZXhwciAqKUxBTUJEQV9FWFBSX0NI RUNLIChOT0RFKSktPmV4dHJhX3Njb3BlKQogCi0vKiBJZiBFWFRSQV9TQ09QRSwgdGhpcyBp cyB0aGUgbnVtYmVyIG9mIHRoZSBsYW1iZGEgd2l0aGluIHRoYXQgc2NvcGUuICAqLwotI2Rl ZmluZSBMQU1CREFfRVhQUl9ESVNDUklNSU5BVE9SKE5PREUpIFwKLSAgKCgoc3RydWN0IHRy ZWVfbGFtYmRhX2V4cHIgKilMQU1CREFfRVhQUl9DSEVDSyAoTk9ERSkpLT5kaXNjcmltaW5h dG9yKQorLyogTGFtYmRhcyBpbiB0aGUgc2FtZSBleHRyYSBzY29wZSBtaWdodCBuZWVkIGEg ZGlzY3JpbWluYXRpbmcgY291bnQuCisgICBUaGlzIGlzIGEgc2luZ2xlIHBlci1zY29wZSBj b3VudC4gICovCisjZGVmaW5lIExBTUJEQV9FWFBSX1NDT1BFX09OTFlfRElTQ1JJTUlOQVRP UihOT0RFKSBcCisgICgoKHN0cnVjdCB0cmVlX2xhbWJkYV9leHByICopTEFNQkRBX0VYUFJf Q0hFQ0sgKE5PREUpKS0+ZGlzY3JpbWluYXRvcl9zY29wZSkKIAogLyogRHVyaW5nIHBhcnNp bmcgb2YgdGhlIGxhbWJkYSwgYSB2ZWN0b3Igb2YgY2FwdHVyZSBwcm94aWVzIHdoaWNoIG5l ZWQKICAgIHRvIGJlIHB1c2hlZCBvbmNlIHdlJ3JlIGRvbmUgcHJvY2Vzc2luZyBhIG5lc3Rl ZCBsYW1iZGEuICAqLwpAQCAtMTUzMCw4ICsxNTMxLDggQEAgc3RydWN0IEdUWSAoKCkpIHRy ZWVfbGFtYmRhX2V4cHIKICAgdHJlZSByZWdlbl9pbmZvOwogICB2ZWM8dHJlZSwgdmFfZ2M+ ICpwZW5kaW5nX3Byb3hpZXM7CiAgIGxvY2F0aW9uX3QgbG9jdXM7Ci0gIGVudW0gY3BfbGFt YmRhX2RlZmF1bHRfY2FwdHVyZV9tb2RlX3R5cGUgZGVmYXVsdF9jYXB0dXJlX21vZGUgOiA4 OwotICBzaG9ydCBpbnQgZGlzY3JpbWluYXRvcjsKKyAgZW51bSBjcF9sYW1iZGFfZGVmYXVs dF9jYXB0dXJlX21vZGVfdHlwZSBkZWZhdWx0X2NhcHR1cmVfbW9kZSA6IDI7CisgIHVuc2ln bmVkIGRpc2NyaW1pbmF0b3Jfc2NvcGUgOiAxNTsgLy8gUGVyLXNjb3BlIGRpc2NyaW1pbmF0 b3IKIH07CiAKIC8qIE5vbi16ZXJvIGlmIHRoaXMgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24g aGFzIGFjY2VzcyB2aW9sYXRpb25zIHRoYXQKQEAgLTc3NzgsMTAgKzc3NzksMTAgQEAgZXh0 ZXJuIHRyZWUgY3BfYnVpbGRfdmVjX2NvbnZlcnQJCSh0cmVlLCBsb2NhdGlvbl90LCB0cmVl LAogCQkJCQkJIHRzdWJzdF9mbGFnc190KTsKIGV4dGVybiB0cmVlIGNwX2J1aWxkX2JpdF9j YXN0CQkJKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUsCiAJCQkJCQkgdHN1YnN0X2ZsYWdzX3Qp OwotZXh0ZXJuIHZvaWQgc3RhcnRfbGFtYmRhX3Njb3BlCQkJKHRyZWUpOwotZXh0ZXJuIHZv aWQgcmVjb3JkX2xhbWJkYV9zY29wZQkJCSh0cmVlKTsKLWV4dGVybiB2b2lkIHJlY29yZF9u dWxsX2xhbWJkYV9zY29wZQkJKHRyZWUpOworZXh0ZXJuIHZvaWQgc3RhcnRfbGFtYmRhX3Nj b3BlCQkJKHRyZWUgZGVjbCk7CiBleHRlcm4gdm9pZCBmaW5pc2hfbGFtYmRhX3Njb3BlCQkJ KHZvaWQpOworZXh0ZXJuIHZvaWQgcmVjb3JkX2xhbWJkYV9zY29wZQkJCSh0cmVlIGxhbWJk YSk7CitleHRlcm4gdm9pZCByZWNvcmRfbGFtYmRhX3Njb3BlX2Rpc2NyaW1pbmF0b3IJKHRy ZWUgbGFtYmRhKTsKIGV4dGVybiB0cmVlIHN0YXJ0X2xhbWJkYV9mdW5jdGlvbgkJKHRyZWUg Zm4sIHRyZWUgbGFtYmRhX2V4cHIpOwogZXh0ZXJuIHZvaWQgZmluaXNoX2xhbWJkYV9mdW5j dGlvbgkJKHRyZWUgYm9keSk7CiBleHRlcm4gYm9vbCByZWdlbmVyYXRlZF9sYW1iZGFfZm5f cAkJKHRyZWUpOwpkaWZmIC0tZ2l0IGEvZ2NjL2NwL2xhbWJkYS5jYyBiL2djYy9jcC9sYW1i ZGEuY2MKaW5kZXggZTlkNWQ0ZGMxYzUuLmQyNjczZTJjZWViIDEwMDY0NAotLS0gYS9nY2Mv Y3AvbGFtYmRhLmNjCisrKyBiL2djYy9jcC9sYW1iZGEuY2MKQEAgLTE0NDQsNzkgKzE0NDQs NzcgQEAgaXNfbGFtYmRhX2lnbm9yZWRfZW50aXR5ICh0cmVlIHZhbCkKICAgcmV0dXJuIGZh bHNlOwogfQogCi0vKiBMYW1iZGFzIHRoYXQgYXBwZWFyIGluIHZhcmlhYmxlIGluaXRpYWxp emVyIG9yIGRlZmF1bHQgYXJndW1lbnQgc2NvcGUKLSAgIGdldCB0aGF0IGluIHRoZWlyIG1h bmdsaW5nLCBzbyB3ZSBuZWVkIHRvIHJlY29yZCBpdC4gIFdlIG1pZ2h0IGFzIHdlbGwKLSAg IHVzZSB0aGUgY291bnQgZm9yIGZ1bmN0aW9uIGFuZCBuYW1lc3BhY2Ugc2NvcGVzIGFzIHdl bGwuICAqLwotc3RhdGljIEdUWSgoKSkgdHJlZSBsYW1iZGFfc2NvcGU7Ci1zdGF0aWMgR1RZ KCgpKSBpbnQgbGFtYmRhX2NvdW50Owotc3RydWN0IEdUWSgoKSkgdHJlZV9pbnQKKy8qIExh bWJkYXMgdGhhdCBhcHBlYXIgaW4gdmFyaWFibGUgaW5pdGlhbGl6ZXIgb3IgZGVmYXVsdCBh cmd1bWVudAorICAgc2NvcGUgZ2V0IHRoYXQgaW4gdGhlaXIgbWFuZ2xpbmcsIHNvIHdlIG5l ZWQgdG8gcmVjb3JkIGl0LiAgQWxzbywKKyAgIG11bHRpcGxlIGxhbWJkYXMgaW4gdGhlIHNh bWUgc2NvcGUgbWF5IG5lZWQgYSBtYW5nbGluZworICAgZGlzY3JpbWluYXRvci4gIFJlY29y ZCBpbiB0aGUgc2FtZSBkYXRhIHN0cnVjdHVyZS4gICovCitzdHJ1Y3QgR1RZKCgpKSBsYW1i ZGFfZGlzY3JpbWluYXRvcgogewotICB0cmVlIHQ7Ci0gIGludCBpOworICB0cmVlIHNjb3Bl OworICB1bnNpZ25lZCBuZXN0aW5nOyAvLyBJbnNpZGUgYSBmdW5jdGlvbiwgVkFSX0RFQ0xz IGdldCB0aGUgZnVuY3Rpb24KKyAgCQkgICAgLy8gYXMgc2NvcGUuIFRoaXMgY291bnRzIHRo YXQgbmVzdGluZy4KKyAgdW5zaWduZWQgY291bnQ7ICAgLy8gVGhlIHBlci1zY29wZSBjb3Vu dGVyLgogfTsKLXN0YXRpYyBHVFkoKCkpIHZlYzx0cmVlX2ludCwgdmFfZ2M+ICpsYW1iZGFf c2NvcGVfc3RhY2s7CisvLyBUaGUgY3VycmVudCBzY29wZS4KK3N0YXRpYyBHVFkoKCkpIGxh bWJkYV9kaXNjcmltaW5hdG9yIGxhbWJkYV9zY29wZTsKKy8vIFN0YWNrIG9mIHByZXZpb3Vz IHNjb3Blcy4KK3N0YXRpYyBHVFkoKCkpIHZlYzxsYW1iZGFfZGlzY3JpbWluYXRvciwgdmFf Z2M+ICpsYW1iZGFfc2NvcGVfc3RhY2s7CisKKy8vIFB1c2ggREVDTCBhcyBsYW1iZGEgZXh0 cmEgc2NvcGUsIGFsc28gbmV3IGRpc2NyaW1pbmF0b3IgY291bnRlcnMuCiAKIHZvaWQKIHN0 YXJ0X2xhbWJkYV9zY29wZSAodHJlZSBkZWNsKQogewotICB0cmVlX2ludCB0aTsKLSAgZ2Nj X2Fzc2VydCAoZGVjbCk7Ci0gIC8qIE9uY2Ugd2UncmUgaW5zaWRlIGEgZnVuY3Rpb24sIHdl IGlnbm9yZSB2YXJpYWJsZSBzY29wZSBhbmQganVzdCBwdXNoCi0gICAgIHRoZSBmdW5jdGlv biBhZ2FpbiBzbyB0aGF0IHBvcHBpbmcgd29ya3MgcHJvcGVybHkuICAqLworICBnY2NfY2hl Y2tpbmdfYXNzZXJ0IChkZWNsKTsKICAgaWYgKGN1cnJlbnRfZnVuY3Rpb25fZGVjbCAmJiBU UkVFX0NPREUgKGRlY2wpID09IFZBUl9ERUNMKQotICAgIGRlY2wgPSBjdXJyZW50X2Z1bmN0 aW9uX2RlY2w7Ci0gIHRpLnQgPSBsYW1iZGFfc2NvcGU7Ci0gIHRpLmkgPSBsYW1iZGFfY291 bnQ7Ci0gIHZlY19zYWZlX3B1c2ggKGxhbWJkYV9zY29wZV9zdGFjaywgdGkpOwotICBpZiAo bGFtYmRhX3Njb3BlICE9IGRlY2wpCi0gICAgewotICAgICAgLyogRG9uJ3QgcmVzZXQgdGhl IGNvdW50IGlmIHdlJ3JlIHN0aWxsIGluIHRoZSBzYW1lIGZ1bmN0aW9uLiAgKi8KLSAgICAg IGxhbWJkYV9zY29wZSA9IGRlY2w7Ci0gICAgICBsYW1iZGFfY291bnQgPSAwOwotICAgIH0K LX0KLQotdm9pZAotcmVjb3JkX2xhbWJkYV9zY29wZSAodHJlZSBsYW1iZGEpCi17Ci0gIExB TUJEQV9FWFBSX0VYVFJBX1NDT1BFIChsYW1iZGEpID0gbGFtYmRhX3Njb3BlOwotICBMQU1C REFfRVhQUl9ESVNDUklNSU5BVE9SIChsYW1iZGEpID0gbGFtYmRhX2NvdW50Kys7Ci0gIGlm IChsYW1iZGFfc2NvcGUpCi0gICAgewotICAgICAgdHJlZSBjbG9zdXJlID0gTEFNQkRBX0VY UFJfQ0xPU1VSRSAobGFtYmRhKTsKLSAgICAgIGdjY19jaGVja2luZ19hc3NlcnQgKGNsb3N1 cmUpOwotICAgICAgbWF5YmVfa2V5X2RlY2wgKGxhbWJkYV9zY29wZSwgVFlQRV9OQU1FIChj bG9zdXJlKSk7Ci0gICAgfQotfQotCi0vKiBUaGlzIGxhbWJkYSBpcyBhbiBpbnN0YW50aWF0 aW9uIG9mIGEgbGFtYmRhIGluIGEgdGVtcGxhdGUgZGVmYXVsdCBhcmd1bWVudAotICAgdGhh dCBnb3Qgbm8gTEFNQkRBX0VYUFJfRVhUUkFfU0NPUEUsIHNvIHRoaXMgc2hvdWxkbid0IGVp dGhlci4gIEJ1dCB3ZSBkbwotICAgbmVlZCB0byB1c2UgYW5kIGluY3JlbWVudCB0aGUgZ2xv YmFsIGNvdW50IHRvIGF2b2lkIGNvbGxpc2lvbnMuICAqLwotCi12b2lkCi1yZWNvcmRfbnVs bF9sYW1iZGFfc2NvcGUgKHRyZWUgbGFtYmRhKQotewotICBpZiAodmVjX3NhZmVfaXNfZW1w dHkgKGxhbWJkYV9zY29wZV9zdGFjaykpCi0gICAgcmVjb3JkX2xhbWJkYV9zY29wZSAobGFt YmRhKTsKKyAgICAvLyBJZiB3ZSdyZSBpbnNpZGUgYSBmdW5jdGlvbiwgd2UgaWdub3JlIHZh cmlhYmxlIHNjb3BlLiAgRG9uJ3QgcHVzaC4KKyAgICBsYW1iZGFfc2NvcGUubmVzdGluZysr OwogICBlbHNlCiAgICAgewotICAgICAgdHJlZV9pbnQgKnAgPSBsYW1iZGFfc2NvcGVfc3Rh Y2stPmJlZ2luKCk7Ci0gICAgICBMQU1CREFfRVhQUl9FWFRSQV9TQ09QRSAobGFtYmRhKSA9 IHAtPnQ7Ci0gICAgICBMQU1CREFfRVhQUl9ESVNDUklNSU5BVE9SIChsYW1iZGEpID0gcC0+ aSsrOworICAgICAgdmVjX3NhZmVfcHVzaCAobGFtYmRhX3Njb3BlX3N0YWNrLCBsYW1iZGFf c2NvcGUpOworICAgICAgbGFtYmRhX3Njb3BlLnNjb3BlID0gZGVjbDsKKyAgICAgIGxhbWJk YV9zY29wZS5uZXN0aW5nID0gMDsKKyAgICAgIGxhbWJkYV9zY29wZS5jb3VudCA9IDA7CiAg ICAgfQotICBnY2NfYXNzZXJ0IChMQU1CREFfRVhQUl9FWFRSQV9TQ09QRSAobGFtYmRhKSA9 PSBOVUxMX1RSRUUpOwogfQogCisvLyBQb3AgZnJvbSB0aGUgY3VycmVudCBsYW1iZGEgZXh0 cmEgc2NvcGUuCisKIHZvaWQKIGZpbmlzaF9sYW1iZGFfc2NvcGUgKHZvaWQpCiB7Ci0gIHRy ZWVfaW50ICpwID0gJmxhbWJkYV9zY29wZV9zdGFjay0+bGFzdCAoKTsKLSAgaWYgKGxhbWJk YV9zY29wZSAhPSBwLT50KQorICBpZiAoIWxhbWJkYV9zY29wZS5uZXN0aW5nLS0pCiAgICAg ewotICAgICAgbGFtYmRhX3Njb3BlID0gcC0+dDsKLSAgICAgIGxhbWJkYV9jb3VudCA9IHAt Pmk7CisgICAgICBsYW1iZGFfc2NvcGUgPSBsYW1iZGFfc2NvcGVfc3RhY2stPmxhc3QgKCk7 CisgICAgICBsYW1iZGFfc2NvcGVfc3RhY2stPnBvcCAoKTsKICAgICB9Ci0gIGxhbWJkYV9z Y29wZV9zdGFjay0+cG9wICgpOworfQorCisvLyBSZWNvcmQgdGhlIGN1cnJlbnQgbGFtYmRh IHNjb3BlIGludG8gTEFNQkRBCisKK3ZvaWQKK3JlY29yZF9sYW1iZGFfc2NvcGUgKHRyZWUg bGFtYmRhKQoreworICBMQU1CREFfRVhQUl9FWFRSQV9TQ09QRSAobGFtYmRhKSA9IGxhbWJk YV9zY29wZS5zY29wZTsKKyAgaWYgKGxhbWJkYV9zY29wZS5zY29wZSkKKyAgICB7CisgICAg ICB0cmVlIGNsb3N1cmUgPSBMQU1CREFfRVhQUl9DTE9TVVJFIChsYW1iZGEpOworICAgICAg Z2NjX2NoZWNraW5nX2Fzc2VydCAoY2xvc3VyZSk7CisgICAgICBtYXliZV9rZXlfZGVjbCAo bGFtYmRhX3Njb3BlLnNjb3BlLCBUWVBFX05BTUUgKGNsb3N1cmUpKTsKKyAgICB9Cit9CisK Ky8vIFJlY29yZCB0aGUgcGVyLXNjb3BlIGRpc2NyaW1pbmF0b3Igb2YgTEFNQkRBLiAgSWYg dGhlIGV4dHJhIHNjb3BlCisvLyBpcyBlbXB0eSwgd2UgbXVzdCB1c2UgdGhlIGVtcHR5IHNj b3BlIGNvdW50ZXIsIHdoaWNoIG1pZ2h0IG5vdCBiZQorLy8gdGhlIGxpdmUgb25lLgorCit2 b2lkCityZWNvcmRfbGFtYmRhX3Njb3BlX2Rpc2NyaW1pbmF0b3IgKHRyZWUgbGFtYmRhKQor eworICBhdXRvICpzbG90ID0gKHZlY19zYWZlX2lzX2VtcHR5IChsYW1iZGFfc2NvcGVfc3Rh Y2spCisJCXx8IExBTUJEQV9FWFBSX0VYVFJBX1NDT1BFIChsYW1iZGEpCisJCT8gJmxhbWJk YV9zY29wZSA6IGxhbWJkYV9zY29wZV9zdGFjay0+YmVnaW4gKCkpOworICBMQU1CREFfRVhQ Ul9TQ09QRV9PTkxZX0RJU0NSSU1JTkFUT1IgKGxhbWJkYSkgPSBzbG90LT5jb3VudCsrOwog fQogCiB0cmVlCkBAIC0xNjQ4LDYgKzE2NDYsMTAgQEAgcHJ1bmVfbGFtYmRhX2NhcHR1cmVz ICh0cmVlIGJvZHkpCiAgICAgfQogfQogCisvLyBSZWNvcmQgdGhlIHBlci1zY29wZSBwZXIt c2lnbmF0dXJlIGRpc2NyaW1pbmF0b3Igb2YgTEFNQkRBLiAgSWYgdGhlCisvLyBleHRyYSBz Y29wZSBpcyBlbXB0eSwgd2UgbXVzdCB1c2UgdGhlIGVtcHR5IHNjb3BlIGNvdW50ZXIsIHdo aWNoCisvLyBtaWdodCBub3QgYmUgdGhlIGxpdmUgb25lLgorCiB2b2lkCiBmaW5pc2hfbGFt YmRhX2Z1bmN0aW9uICh0cmVlIGJvZHkpCiB7CmRpZmYgLS1naXQgYS9nY2MvY3AvbWFuZ2xl LmNjIGIvZ2NjL2NwL21hbmdsZS5jYwppbmRleCBlMzk2MjE4NzZlZi4uYTYyYzk3NTZjOTEg MTAwNjQ0Ci0tLSBhL2djYy9jcC9tYW5nbGUuY2MKKysrIGIvZ2NjL2NwL21hbmdsZS5jYwpA QCAtMTgxMCw3ICsxODEwLDcgQEAgd3JpdGVfY2xvc3VyZV90eXBlX25hbWUgKGNvbnN0IHRy ZWUgdHlwZSkKIAogICB3cml0ZV9tZXRob2RfcGFybXMgKHBhcm1zLCAvKm1ldGhvZF9wPSov MSwgZm4pOwogICB3cml0ZV9jaGFyICgnRScpOwotICB3cml0ZV9jb21wYWN0X251bWJlciAo TEFNQkRBX0VYUFJfRElTQ1JJTUlOQVRPUiAobGFtYmRhKSk7CisgIHdyaXRlX2NvbXBhY3Rf bnVtYmVyIChMQU1CREFfRVhQUl9TQ09QRV9PTkxZX0RJU0NSSU1JTkFUT1IgKGxhbWJkYSkp OwogfQogCiAvKiBDb252ZXJ0IE5VTUJFUiB0byBhc2NpaSB1c2luZyBiYXNlIEJBU0UgYW5k IGdlbmVyYXRpbmcgYXQgbGVhc3QKZGlmZiAtLWdpdCBhL2djYy9jcC9tb2R1bGUuY2MgYi9n Y2MvY3AvbW9kdWxlLmNjCmluZGV4IDk5NTdkZjUxMGU2Li5kZjA1YjUyNDEzNiAxMDA2NDQK LS0tIGEvZ2NjL2NwL21vZHVsZS5jYworKysgYi9nY2MvY3AvbW9kdWxlLmNjCkBAIC02MzI3 LDcgKzYzMjcsNyBAQCB0cmVlc19vdXQ6OmNvcmVfdmFscyAodHJlZSB0KQogICAgICAgaWYg KHN0cmVhbWluZ19wICgpKQogCXsKIAkgIFdVICgoKGxhbmdfdHJlZV9ub2RlICopdCktPmxh bWJkYV9leHByZXNzaW9uLmRlZmF1bHRfY2FwdHVyZV9tb2RlKTsKLQkgIFdVICgoKGxhbmdf dHJlZV9ub2RlICopdCktPmxhbWJkYV9leHByZXNzaW9uLmRpc2NyaW1pbmF0b3IpOworCSAg V1UgKCgobGFuZ190cmVlX25vZGUgKil0KS0+bGFtYmRhX2V4cHJlc3Npb24uZGlzY3JpbWlu YXRvcl9zY29wZSk7CiAJfQogICAgICAgYnJlYWs7CiAKQEAgLTY4MTksNyArNjgxOSw3IEBA IHRyZWVzX2luOjpjb3JlX3ZhbHMgKHRyZWUgdCkKIAk9IHN0YXRlLT5yZWFkX2xvY2F0aW9u ICgqdGhpcyk7CiAgICAgICBSVUMgKGNwX2xhbWJkYV9kZWZhdWx0X2NhcHR1cmVfbW9kZV90 eXBlLAogCSAgICgobGFuZ190cmVlX25vZGUgKil0KS0+bGFtYmRhX2V4cHJlc3Npb24uZGVm YXVsdF9jYXB0dXJlX21vZGUpOwotICAgICAgUlUgKCgobGFuZ190cmVlX25vZGUgKil0KS0+ bGFtYmRhX2V4cHJlc3Npb24uZGlzY3JpbWluYXRvcik7CisgICAgICBSVSAoKChsYW5nX3Ry ZWVfbm9kZSAqKXQpLT5sYW1iZGFfZXhwcmVzc2lvbi5kaXNjcmltaW5hdG9yX3Njb3BlKTsK ICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBPVkVSTE9BRDoKZGlmZiAtLWdpdCBhL2djYy9j cC9wYXJzZXIuY2MgYi9nY2MvY3AvcGFyc2VyLmNjCmluZGV4IDZkYTMyODAxYmFiLi5lMGUz Y2YzZWFmNiAxMDA2NDQKLS0tIGEvZ2NjL2NwL3BhcnNlci5jYworKysgYi9nY2MvY3AvcGFy c2VyLmNjCkBAIC0xMTAzNSw2ICsxMTAzNSw3IEBAIGNwX3BhcnNlcl9sYW1iZGFfZXhwcmVz c2lvbiAoY3BfcGFyc2VyKiBwYXJzZXIpCiAgICAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsK IAogICByZWNvcmRfbGFtYmRhX3Njb3BlIChsYW1iZGFfZXhwcik7CisgIHJlY29yZF9sYW1i ZGFfc2NvcGVfZGlzY3JpbWluYXRvciAobGFtYmRhX2V4cHIpOwogCiAgIC8qIERvIHRoaXMg YWdhaW4gbm93IHRoYXQgTEFNQkRBX0VYUFJfRVhUUkFfU0NPUEUgaXMgc2V0LiAgKi8KICAg ZGV0ZXJtaW5lX3Zpc2liaWxpdHkgKFRZUEVfTkFNRSAodHlwZSkpOwpAQCAtMTEwODUsOSAr MTEwODYsNyBAQCBjcF9wYXJzZXJfbGFtYmRhX2V4cHJlc3Npb24gKGNwX3BhcnNlciogcGFy c2VyKQogICAgICAgb2sgPSBmYWxzZTsKIAogICAgIGlmIChvaykKLSAgICAgIHsKLQljcF9w YXJzZXJfbGFtYmRhX2JvZHkgKHBhcnNlciwgbGFtYmRhX2V4cHIpOwotICAgICAgfQorICAg ICAgY3BfcGFyc2VyX2xhbWJkYV9ib2R5IChwYXJzZXIsIGxhbWJkYV9leHByKTsKICAgICBl bHNlIGlmIChjcF9wYXJzZXJfcmVxdWlyZSAocGFyc2VyLCBDUFBfT1BFTl9CUkFDRSwgUlRf T1BFTl9CUkFDRSkpCiAgICAgICB7CiAJaWYgKGNwX3BhcnNlcl9za2lwX3RvX2Nsb3Npbmdf YnJhY2UgKHBhcnNlcikpCmRpZmYgLS1naXQgYS9nY2MvY3AvcHQuY2MgYi9nY2MvY3AvcHQu Y2MKaW5kZXggNTFiZmJiY2QzNmQuLmZjNjI3OWMwMGEzIDEwMDY0NAotLS0gYS9nY2MvY3Av cHQuY2MKKysrIGIvZ2NjL2NwL3B0LmNjCkBAIC0xOTg2NiwyMSArMTk4NjYsMTMgQEAgdHN1 YnN0X2xhbWJkYV9leHByICh0cmVlIHQsIHRyZWUgYXJncywgdHN1YnN0X2ZsYWdzX3QgY29t cGxhaW4sIHRyZWUgaW5fZGVjbCkKICAgaWYgKHR5cGUgPT0gZXJyb3JfbWFya19ub2RlKQog ICAgIHJldHVybiBlcnJvcl9tYXJrX25vZGU7CiAKLSAgaWYgKExBTUJEQV9FWFBSX0VYVFJB X1NDT1BFICh0KSA9PSBOVUxMX1RSRUUpCi0gICAgewotICAgICAgLyogQSBsYW1iZGEgaW4g YSBkZWZhdWx0IGFyZ3VtZW50IG91dHNpZGUgYSBjbGFzcyBnZXRzIG5vCi0JIExBTUJEQV9F WFBSX0VYVFJBX1NDT1BFLCBhcyBzcGVjaWZpZWQgYnkgdGhlIEFCSS4gIEJ1dAotCSB0c3Vi c3RfZGVmYXVsdF9hcmd1bWVudCBjYWxscyBzdGFydF9sYW1iZGFfc2NvcGUsIHNvIHdlIG5l ZWQgdG8KLQkgc3BlY2lmaWNhbGx5IGlnbm9yZSBpdCBoZXJlLCBhbmQgdXNlIHRoZSBnbG9i YWwgc2NvcGUuICAqLwotICAgICAgcmVjb3JkX251bGxfbGFtYmRhX3Njb3BlIChyKTsKLQot ICAgICAgLyogSWYgd2UncmUgcHVzaGVkIGludG8gYW5vdGhlciBzY29wZSAoUFIxMDU2NTIp LCBmaXggaXQuICAqLwotICAgICAgaWYgKFRZUEVfTkFNRVNQQUNFX1NDT1BFX1AgKFRSRUVf VFlQRSAodCkpKQotCVRZUEVfQ09OVEVYVCAodHlwZSkgPSBERUNMX0NPTlRFWFQgKFRZUEVf TkFNRSAodHlwZSkpCi0JICA9IFRZUEVfQ09OVEVYVCAoVFJFRV9UWVBFICh0KSk7Ci0gICAg fQotICBlbHNlCisgIGlmIChMQU1CREFfRVhQUl9FWFRSQV9TQ09QRSAodCkpCiAgICAgcmVj b3JkX2xhbWJkYV9zY29wZSAocik7CisgIGVsc2UgaWYgKFRZUEVfTkFNRVNQQUNFX1NDT1BF X1AgKFRSRUVfVFlQRSAodCkpKQorICAgIC8qIElmIHdlJ3JlIHB1c2hlZCBpbnRvIGFub3Ro ZXIgc2NvcGUgKFBSMTA1NjUyKSwgZml4IGl0LiAgKi8KKyAgICBUWVBFX0NPTlRFWFQgKHR5 cGUpID0gREVDTF9DT05URVhUIChUWVBFX05BTUUgKHR5cGUpKQorICAgICAgPSBUWVBFX0NP TlRFWFQgKFRSRUVfVFlQRSAodCkpOworICByZWNvcmRfbGFtYmRhX3Njb3BlX2Rpc2NyaW1p bmF0b3IgKHIpOwogCiAgIC8qIERvIHRoaXMgYWdhaW4gbm93IHRoYXQgTEFNQkRBX0VYUFJf RVhUUkFfU0NPUEUgaXMgc2V0LiAgKi8KICAgZGV0ZXJtaW5lX3Zpc2liaWxpdHkgKFRZUEVf TkFNRSAodHlwZSkpOwpAQCAtMTk5MTEsMjkgKzE5OTAzLDE3IEBAIHRzdWJzdF9sYW1iZGFf ZXhwciAodHJlZSB0LCB0cmVlIGFyZ3MsIHRzdWJzdF9mbGFnc190IGNvbXBsYWluLCB0cmVl IGluX2RlY2wpCiAgICAgICBmbnR5cGUgPSBidWlsZF9tZW1mbl90eXBlIChmbnR5cGUsIHR5 cGUsCiAJCQkJIHR5cGVfbWVtZm5fcXVhbHMgKGZudHlwZSksCiAJCQkJIHR5cGVfbWVtZm5f cnF1YWwgKGZudHlwZSkpOwotICAgICAgdHJlZSBmbiwgdG1wbDsKLSAgICAgIGlmIChvbGR0 bXBsKQorICAgICAgdHJlZSBpbnN0ID0gKG9sZHRtcGwKKwkJICAgPyB0c3Vic3RfdGVtcGxh dGVfZGVjbCAob2xkdG1wbCwgYXJncywgY29tcGxhaW4sIGZudHlwZSkKKwkJICAgOiB0c3Vi c3RfZnVuY3Rpb25fZGVjbCAob2xkZm4sIGFyZ3MsIGNvbXBsYWluLCBmbnR5cGUpKTsKKyAg ICAgIGlmIChpbnN0ID09IGVycm9yX21hcmtfbm9kZSkKIAl7Ci0JICB0bXBsID0gdHN1YnN0 X3RlbXBsYXRlX2RlY2wgKG9sZHRtcGwsIGFyZ3MsIGNvbXBsYWluLCBmbnR5cGUpOwotCSAg aWYgKHRtcGwgPT0gZXJyb3JfbWFya19ub2RlKQotCSAgICB7Ci0JICAgICAgciA9IGVycm9y X21hcmtfbm9kZTsKLQkgICAgICBnb3RvIG91dDsKLQkgICAgfQotCSAgZm4gPSBERUNMX1RF TVBMQVRFX1JFU1VMVCAodG1wbCk7Ci0JICBmaW5pc2hfbWVtYmVyX2RlY2xhcmF0aW9uICh0 bXBsKTsKLQl9Ci0gICAgICBlbHNlCi0JewotCSAgdG1wbCA9IE5VTExfVFJFRTsKLQkgIGZu ID0gdHN1YnN0X2Z1bmN0aW9uX2RlY2wgKG9sZGZuLCBhcmdzLCBjb21wbGFpbiwgZm50eXBl KTsKLQkgIGlmIChmbiA9PSBlcnJvcl9tYXJrX25vZGUpCi0JICAgIHsKLQkgICAgICByID0g ZXJyb3JfbWFya19ub2RlOwotCSAgICAgIGdvdG8gb3V0OwotCSAgICB9Ci0JICBmaW5pc2hf bWVtYmVyX2RlY2xhcmF0aW9uIChmbik7CisJICByID0gZXJyb3JfbWFya19ub2RlOworCSAg Z290byBvdXQ7CiAJfQorICAgICAgZmluaXNoX21lbWJlcl9kZWNsYXJhdGlvbiAoaW5zdCk7 CisKKyAgICAgIHRyZWUgZm4gPSBvbGR0bXBsID8gREVDTF9URU1QTEFURV9SRVNVTFQgKGlu c3QpIDogaW5zdDsKIAogICAgICAgLyogTGV0IGZpbmlzaF9mdW5jdGlvbiBzZXQgdGhpcy4g ICovCiAgICAgICBERUNMX0RFQ0xBUkVEX0NPTlNURVhQUl9QIChmbikgPSBmYWxzZTsKZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2FiaS9sYW1iZGEtc2lnMS0xNy5DIGIv Z2NjL3Rlc3RzdWl0ZS9nKysuZGcvYWJpL2xhbWJkYS1zaWcxLTE3LkMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNiNzEyMDlmOTU3Ci0tLSAvZGV2L251bGwK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvYWJpL2xhbWJkYS1zaWcxLTE3LkMKQEAgLTAs MCArMSwyNiBAQAorLy8geyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0IGMrKzIwIH0gfQorLy8g eyBkZy1vcHRpb25zIC1mYWJpLXZlcnNpb249MTcgfQorCisjaW5jbHVkZSAibGFtYmRhLXNp ZzEuaCIKKworLy8geyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyIHtfWlpOMVhJZkxqMEVF MkZuRXZFTktVbGZFMF9jbEVmOn0gfSB9CisvLyB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXIge19aWk4xWElmTGowRUUyRm5FdkVOS1VsZkUzX2NsRWY6fSB9IH0KKy8vIHsgZGctZmlu YWwgeyBzY2FuLWFzc2VtYmxlciB7X1paTjFYSWZMajBFRTJGbkV2RU5LVWxmVF9FMV9jbElp RUVEYWZTMV86fSB9IH0KKy8vIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciB7X1paTjFY SWZMajBFRTJGbkV2RU5LVWxmVF9FNF9jbElpRUVEYWZTMV86fSB9IH0KKy8vIHsgZGctZmlu YWwgeyBzY2FuLWFzc2VtYmxlciB7X1paTjFYSWZMajBFRTJGbkV2RU5LVWxUX0UyX2NsSWlF RURhUzFfOn0gfSB9CisvLyB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIge19aWk4xWElm TGowRUUyRm5FdkVOS1VsVF9FX2NsSWlFRURhUzFfOn0gfSB9CisvLyB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXIge19aWk4xWElmTGoxRUUyRm5FdkVOS1VsZkUwX2NsRWY6fSB9IH0K Ky8vIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciB7X1paTjFYSWZMajFFRTJGbkV2RU5L VWxmRTNfY2xFZjp9IH0gfQorLy8geyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyIHtfWlpO MVhJZkxqMUVFMkZuRXZFTktVbGZFNl9jbEVmOn0gfSB9CisvLyB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXIge19aWk4xWElmTGoxRUUyRm5FdkVOS1VsZlRfRTFfY2xJaUVFRGFmUzFf On0gfSB9CisvLyB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIge19aWk4xWElmTGoxRUUy Rm5FdkVOS1VsZlRfRTRfY2xJaUVFRGFmUzFfOn0gfSB9CisvLyB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXIge19aWk4xWElmTGoxRUUyRm5FdkVOS1VsZlRfRTdfY2xJaUVFRGFmUzFf On0gfSB9CisvLyB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIge19aWk4xWElmTGoxRUUy Rm5FdkVOS1VsVF9FMl9jbElpRUVEYVMxXzp9IH0gfQorLy8geyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyIHtfWlpOMVhJZkxqMUVFMkZuRXZFTktVbFRfRTVfY2xJaUVFRGFTMV86fSB9 IH0KKy8vIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciB7X1paTjFYSWZMajFFRTJGbkV2 RU5LVWxUX0VfY2xJaUVFRGFTMV86fSB9IH0KKy8vIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt YmxlciB7X1paTjFYSWlMajBFRTJGbkV2RU5LVWxpRTBfY2xFaTp9IH0gfQorLy8geyBkZy1m aW5hbCB7IHNjYW4tYXNzZW1ibGVyIHtfWlpOMVhJaUxqMEVFMkZuRXZFTktVbGlFM19jbEVp On0gfSB9CisvLyB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIge19aWk4xWElpTGowRUUy Rm5FdkVOS1VsaVRfRTFfY2xJaUVFRGFpUzFfOn0gfSB9CisvLyB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXIge19aWk4xWElpTGowRUUyRm5FdkVOS1VsaVRfRTRfY2xJaUVFRGFpUzFf On0gfSB9CisvLyB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIge19aWk4xWElpTGowRUUy Rm5FdkVOS1VsVF9FMl9jbElpRUVEYVMxXzp9IH0gfQorLy8geyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyIHtfWlpOMVhJaUxqMEVFMkZuRXZFTktVbFRfRV9jbElpRUVEYVMxXzp9IH0g fQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvYWJpL2xhbWJkYS1zaWcxLmgg Yi9nY2MvdGVzdHN1aXRlL2crKy5kZy9hYmkvbGFtYmRhLXNpZzEuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYThiNzdhZTBlYmYKLS0tIC9kZXYvbnVsbAor KysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9hYmkvbGFtYmRhLXNpZzEuaApAQCAtMCwwICsx LDQyIEBACit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBJPiBzdHJ1Y3QgWCAKK3sK KyAgdm9pZCBGbiAoKSAKKyAgeworICAgIHsKKyAgICAgIGF1dG8gdjEgPSBbXTx0eXBlbmFt ZSBVPiAoVSkge307CisgICAgICBhdXRvIHYyID0gW10gKFQpIHt9OworICAgICAgYXV0byB2 MyA9IFtdPHR5cGVuYW1lIFU+IChULCBVKSB7fTsKKworICAgICAgdjEgKDEpOworICAgICAg djIgKDEpOworICAgICAgdjMgKDEsIDIpOworICAgIH0KKyAgICBpZiBjb25zdGV4cHIgKEkp IAorICAgICAgeworCWF1dG8gdjEgPSBbXTx0eXBlbmFtZSBVPiAoVSkge307CisJYXV0byB2 MiA9IFtdIChUKSB7fTsKKwlhdXRvIHYzID0gW108dHlwZW5hbWUgVT4gKFQsIFUpIHt9Owor CisJdjEgKDEpOworCXYyICgxKTsKKwl2MyAoMSwgMik7CisgICAgICB9CisgICAgeworICAg ICAgYXV0byB2MSA9IFtdPHR5cGVuYW1lIFU+IChVKSB7fTsKKyAgICAgIGF1dG8gdjIgPSBb XSAoVCkge307CisgICAgICBhdXRvIHYzID0gW108dHlwZW5hbWUgVT4gKFQsIFUpIHt9Owor CisgICAgICB2MSAoMSk7CisgICAgICB2MiAoMSk7CisgICAgICB2MyAoMSwgMik7CisgICAg fQorICAgIAorICB9OworfTsKKwordm9pZCBmIChYPGludCwgMD4gJngsIFg8ZmxvYXQsIDA+ ICZ5LCBYPGZsb2F0LCAxPiAmeikKK3sKKyAgeC5GbiAoKTsKKyAgeS5GbiAoKTsKKyAgei5G biAoKTsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2NwcDF5L2xhbWJk YS1tYW5nbGUtMS0xMS5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMXkvbGFtYmRhLW1h bmdsZS0xLTExLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk4 NDc1ODc5NTBjCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3Bw MXkvbGFtYmRhLW1hbmdsZS0xLTExLkMKQEAgLTAsMCArMSwyNSBAQAorLy8geyBkZy1kbyBj b21waWxlIHsgdGFyZ2V0IGMrKzE0IH0gfQorLy8geyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMg LWZhYmktdmVyc2lvbj0xMSB9CisKKy8vIFBScyA3ODYyMQorCisjaW5jbHVkZSAibGFtYmRh LW1hbmdsZS0xLmgiCisKKy8vIFdlIGVycm9uZW91c2x5IG1hbmdsZWQgbGFtYmRhIGF1dG8g cGFybXMgYXMtaWYgdGVtcGxhdGUgcGFyYW1ldGVycyAoVDxuPl8pLAorLy8gcmF0aGVyIHRo YW4gYXV0byAoRGEpLiBGaXhlZCBpbiBhYmkgdmVyc2lvbiAxMQorCisKKy8vIHsgZGctZmlu YWwgeyBzY2FuLWFzc2VtYmxlciAiX1o3Zm9yd2FyZElaM0Zvb3ZFVWxSVF9FX0VPUzBfUzFf OiIgfSB9CisvLyB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgIl9aN2ZvcndhcmRJWjNG b292RVVsUmlSVF9FMF9FT1MxX1MyXzoiIH0gfQorLy8geyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyICJfWjdmb3J3YXJkSVozRm9vdkVVbFJUX1IxWElpRUUxX0VPUzBfUzFfOiIgfSB9 CisvLyB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgIl9aN2ZvcndhcmRJWjNGb292RVVs UEE1X1RfRTJfRU9TMF9SUzBfOiIgfSB9CisvLyB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXIgIl9aM2VhdElaM0Zvb3ZFVWxSVF9FX0V2UzFfOiIgfSB9CisvLyB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXIgIl9aM2VhdElaM0Zvb3ZFVWxSaVJUX0UwX0V2UzJfOiIgfSB9Cisv LyB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgIl9aM2VhdElaM0Zvb3ZFVWxSVF9SMVhJ aUVFMV9FdlMxXzoiIH0gfQorLy8geyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJfWjNl YXRJWjNGb292RVVsUEE1X1RfRTJfRXZSUzBfOiIgfSB9CisvLyB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXIgIl9aM2VhdElQaVozRm9vdkVVbFBmUzFfRTNfRXZSVF9SVDBfOiIgfSB9 CisvLyB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgIl9aM2VhdElQaVozRm9vdkVVbFBU X1BUMF9FNF9FdlJTMV9SUzNfOiIgfSB9CisvLyB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXIgIl9aM2VhdElaM0Zvb3ZFVWxQVF9QVDBfRTRfWjNGb292RVVsUzFfUzNfRTVfRXZSUzBf UlMyXzoiIH0gfQorLy8geyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJfWjNlYXRJUGla M0JhcklzRXZ2RVVsUHNQZlMzX0VfRXZSVF9SVDBfOiIgfSB9CisvLyB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXIgIl9aM2VhdElQaVozQmFySXNFdnZFVWxQc1BUX1BUMF9FMF9FdlJT M19SUzVfOiIgfSB9CisvLyB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgIl9aM2VhdElQ aVozQmFySXNFdnZFVWxQc0RwUFRfRTFfRXZSVF9SVDBfOiIgfSB9CmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2crKy5kZy9jcHAxeS9sYW1iZGEtbWFuZ2xlLTEtMTcuQyBiL2djYy90 ZXN0c3VpdGUvZysrLmRnL2NwcDF5L2xhbWJkYS1tYW5nbGUtMS0xNy5DCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zMWFmNWI4OWJmZAotLS0gL2Rldi9udWxs CisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NwcDF5L2xhbWJkYS1tYW5nbGUtMS0xNy5D CkBAIC0wLDAgKzEsMjUgQEAKKy8vIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCBjKysxNCB9 IH0KKy8vIHsgZGctYWRkaXRpb25hbC1vcHRpb25zIC1mYWJpLXZlcnNpb249MTcgfQorCisv LyBQUnMgNzg2MjEKKworI2luY2x1ZGUgImxhbWJkYS1tYW5nbGUtMS5oIgorCisvLyBXZSBl cnJvbmVvdXNseSBtYW5nbGVkIGxhbWJkYSBhdXRvIHBhcm1zIGFzLWlmIHRlbXBsYXRlIHBh cmFtZXRlcnMgKFQ8bj5fKSwKKy8vIHJhdGhlciB0aGFuIGF1dG8gKERhKS4gRml4ZWQgaW4g YWJpIHZlcnNpb24gMTEKKy8vIFVwIHRvIGFiaSB2ZXJzaW9uIDE3IHdlIGhhZCBhIHNpbmds ZSBwZXItc2NvcGUgZGlzY3JpbWluYXRvcgorCisvLyB7IGRnLWZpbmFsIHsgc2Nhbi1hc3Nl bWJsZXIgIl9aN2ZvcndhcmRJWjNGb292RVVsUlRfRV9FT1MwX1MxXzoiIH0gfQorLy8geyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJfWjdmb3J3YXJkSVozRm9vdkVVbFJpUlRfRTBf RU9TMV9TMl86IiB9IH0KKy8vIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAiX1o3Zm9y d2FyZElaM0Zvb3ZFVWxSVF9SMVhJaUVFMV9FT1MwX1MxXzoiIH0gfQorLy8geyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyICJfWjdmb3J3YXJkSVozRm9vdkVVbFBBNV9UX0UyX0VPUzBf UlMwXzoiIH0gfQorLy8geyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJfWjNlYXRJWjNG b292RVVsUlRfRV9FdlMxXzoiIH0gfQorLy8geyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy ICJfWjNlYXRJWjNGb292RVVsUmlSVF9FMF9FdlMyXzoiIH0gfQorLy8geyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyICJfWjNlYXRJWjNGb292RVVsUlRfUjFYSWlFRTFfRXZTMV86IiB9 IH0KKy8vIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAiX1ozZWF0SVozRm9vdkVVbFBB NV9UX0UyX0V2UlMwXzoiIH0gfQorLy8geyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJf WjNlYXRJUGlaM0Zvb3ZFVWxQZlMxX0UzX0V2UlRfUlQwXzoiIH0gfQorLy8geyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyICJfWjNlYXRJUGlaM0Zvb3ZFVWxQVF9QVDBfRTRfRXZSUzFf UlMzXzoiIH0gfQorLy8geyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJfWjNlYXRJWjNG b292RVVsUFRfUFQwX0U0X1ozRm9vdkVVbFMxX1MzX0U1X0V2UlMwX1JTMl86IiB9IH0KKy8v IHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAiX1ozZWF0SVBpWjNCYXJJc0V2dkVVbFBz UGZTM19FX0V2UlRfUlQwXzoiIH0gfQorLy8geyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy ICJfWjNlYXRJUGlaM0JhcklzRXZ2RVVsUHNQVF9QVDBfRTBfRXZSUzNfUlM1XzoiIH0gfQor Ly8geyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJfWjNlYXRJUGlaM0JhcklzRXZ2RVVs UHNEcFBUX0UxX0V2UlRfUlQwXzoiIH0gfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n KysuZGcvY3BwMXkvbGFtYmRhLW1hbmdsZS0xLkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9j cHAxeS9sYW1iZGEtbWFuZ2xlLTEuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJv bSBnY2MvdGVzdHN1aXRlL2crKy5kZy9jcHAxeS9sYW1iZGEtbWFuZ2xlLTEuQwpyZW5hbWUg dG8gZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMXkvbGFtYmRhLW1hbmdsZS0xLmgKaW5kZXgg OGYxMzUzNTg0NjUuLmM5MWNlMDE4NmQ4IDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2cr Ky5kZy9jcHAxeS9sYW1iZGEtbWFuZ2xlLTEuQworKysgYi9nY2MvdGVzdHN1aXRlL2crKy5k Zy9jcHAxeS9sYW1iZGEtbWFuZ2xlLTEuaApAQCAtMjMsNyArMjMsNyBAQCB0ZW1wbGF0ZTx0 eXBlbmFtZSBTLCB0eXBlbmFtZSBUPgogewogfQogCi12b2lkIEZvbyAoKQoraW5saW5lIHZv aWQgRm9vICgpCiB7CiAgIGF1dG8gbGFtID0gW10oYXV0byAmKSB7IH07CiAgIGF1dG8gbGFt XzEgPSBbXShpbnQgJiwgYXV0byAmKSB7IH07CkBAIC03MCw2ICs3MCw3IEBAIHRlbXBsYXRl PHR5cGVuYW1lIFg+IHZvaWQgQmFyICgpCiB2b2lkIEJheiAoKQogewogICBCYXI8c2hvcnQ+ ICgpOworICBGb28gKCk7CiB9CiAKIC8vIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAi X1o3Zm9yd2FyZElaM0Zvb3ZFVWxSVF9FX0VPUzBfUzFfOiIgfSB9CmRpZmYgLS1naXQgYS9s aWJjYzEvbGliY3AxcGx1Z2luLmNjIGIvbGliY2MxL2xpYmNwMXBsdWdpbi5jYwppbmRleCBl MmQ1MDM5YTBhMS4uYjBmMGNiOTY2MjYgMTAwNjQ0Ci0tLSBhL2xpYmNjMS9saWJjcDFwbHVn aW4uY2MKKysrIGIvbGliY2MxL2xpYmNwMXBsdWdpbi5jYwpAQCAtMTY1NSw3ICsxNjU1LDcg QEAgcGx1Z2luX3N0YXJ0X2Nsb3N1cmVfY2xhc3NfdHlwZSAoY2MxX3BsdWdpbjo6Y29ubmVj dGlvbiAqc2VsZiwKIAogICAvKiBJbnN0ZWFkIG9mIGNhbGxpbmcgcmVjb3JkX2xhbWJkYV9z Y29wZSwgZG8gdGhpczogICovCiAgIExBTUJEQV9FWFBSX0VYVFJBX1NDT1BFIChsYW1iZGFf ZXhwcikgPSBleHRyYV9zY29wZTsKLSAgTEFNQkRBX0VYUFJfRElTQ1JJTUlOQVRPUiAobGFt YmRhX2V4cHIpID0gZGlzY3JpbWluYXRvcjsKKyAgTEFNQkRBX0VYUFJfU0NPUEVfT05MWV9E SVNDUklNSU5BVE9SIChsYW1iZGFfZXhwcikgPSBkaXNjcmltaW5hdG9yOwogCiAgIHRyZWUg ZGVjbCA9IFRZUEVfTkFNRSAodHlwZSk7CiAgIGRldGVybWluZV92aXNpYmlsaXR5IChkZWNs KTsKLS0gCjIuMzguMQoK --------------9TYi7TiM4vFQUs9QZjoy8H3C--