From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 92BE7C433DB for ; Mon, 8 Feb 2021 23:03:46 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 4621964DE1 for ; Mon, 8 Feb 2021 23:03:46 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4621964DE1 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=nouveau-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C02446EA1E; Mon, 8 Feb 2021 23:03:45 +0000 (UTC) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id 970656EA1F for ; Mon, 8 Feb 2021 23:03:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612825423; h=from:from:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=y/RBnNgi9OnrvChaCdqYsdl0p+J4hsa7jig9PgSieig=; b=OUyDAAo0V/wT23geBrQ90YlzfDtj9W+SVHwpgkAl3Fi11vwf1GbVFvpk50ociqKZML84F4 G59LjIeRLKR9S0lqIvXsnLp839hdKFH3Ud0zytZmONZCgbKD9WzRfawP6Ry5MN/wG1chiS umUUY1vqFB+bBy/9tPWubcH8GqYu7sY= Received: from mail-qv1-f71.google.com (mail-qv1-f71.google.com [209.85.219.71]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-244--UiGXTZoMvaqz7Vl6QaUcw-1; Mon, 08 Feb 2021 18:03:38 -0500 X-MC-Unique: -UiGXTZoMvaqz7Vl6QaUcw-1 Received: by mail-qv1-f71.google.com with SMTP id j13so11799462qvy.19 for ; Mon, 08 Feb 2021 15:03:38 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:subject:from:reply-to:to:cc:date :in-reply-to:references:organization:user-agent:mime-version :content-transfer-encoding; bh=y/RBnNgi9OnrvChaCdqYsdl0p+J4hsa7jig9PgSieig=; b=cxolCgTZnajhDUIPf3AYhC2crZMCRMwDm8KHVCBFu5InMg1l72yugrW9MVNLDx1HJa IaD8ezuScKkPX9nwoVDTjUdgQ+OdYsA8Ue4MTvJEE8JxIdF7UK43uM131DXqZhZd58W3 c9biGz3qVjruvG+cA9qP4tMAI52j/F83Jxstr+CwAaLW9LB8Lg2V+RKQwGi7Ta87LIBq dYEPAnDfVX93JYZGWOQqE8pGMsduyrn7bA20bBFQpDjESyqMjwmiRIT4bmeVvO5KJXzq IsntczFpCVFHihKQgkh+uUYk2ZsGM6i9zJU3xS8LMLPy1iHCq7fgjOq6MSGohPAwlrhD qpxQ== X-Gm-Message-State: AOAM5315XGmrCKkDsXjD5/5VscRmROGKvR1sI9a4r0JxOTnZbqylsWQi F/KI97h8hhSdi+s/9+ex8/01oxrnMHlV2TY+YQ2v9sNJcys9pqsfG+uQZ8jhPHMiQ1rBVJRbunK eNesFfKXvFX50NJG4LR5vT5diZQ== X-Received: by 2002:a05:6214:11ab:: with SMTP id u11mr18246434qvv.17.1612825417896; Mon, 08 Feb 2021 15:03:37 -0800 (PST) X-Google-Smtp-Source: ABdhPJx1LezaRGG6JzNfV7miEhfuMZ7qyoPi6WFFGCQwE9stxgFj+RC1TyAdH2fpWzOkII6HQ/W6wQ== X-Received: by 2002:a05:6214:11ab:: with SMTP id u11mr18246390qvv.17.1612825417550; Mon, 08 Feb 2021 15:03:37 -0800 (PST) Received: from Whitewolf.lyude.net (pool-108-49-102-102.bstnma.fios.verizon.net. [108.49.102.102]) by smtp.gmail.com with ESMTPSA id a25sm3561476qko.83.2021.02.08.15.03.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Feb 2021 15:03:36 -0800 (PST) Message-ID: <055a9b6c92abb349127e48c02e12ad75a1df0211.camel@redhat.com> From: Lyude Paul To: Thomas Zimmermann , dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, intel-gfx@lists.freedesktop.org Date: Mon, 08 Feb 2021 18:03:35 -0500 In-Reply-To: References: <20210205234515.1216538-1-lyude@redhat.com> <20210205234515.1216538-11-lyude@redhat.com> Organization: Red Hat User-Agent: Evolution 3.38.3 (3.38.3-1.fc33) MIME-Version: 1.0 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=lyude@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Subject: Re: [Nouveau] [RFC v3 10/10] drm/dp: Extract i915's eDP backlight code into DRM helpers X-BeenThere: nouveau@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Nouveau development list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: lyude@redhat.com Cc: greg.depoire@gmail.com, Jani Nikula , Anshuman Gupta , Lucas De Marchi , open list , Gwan-gyeong Mun , Manasi Navare , David Airlie , Uma Shankar , Sean Paul , Rodrigo Vivi , Dave Airlie Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: nouveau-bounces@lists.freedesktop.org Sender: "Nouveau" T24gTW9uLCAyMDIxLTAyLTA4IGF0IDA5OjQ2ICswMTAwLCBUaG9tYXMgWmltbWVybWFubiB3cm90 ZToKPiBIaQo+IAo+IEFtIDA2LjAyLjIxIHVtIDAwOjQ1IHNjaHJpZWIgTHl1ZGUgUGF1bDoKPiA+ IFNpbmNlIHdlJ3JlIGFib3V0IHRvIGltcGxlbWVudCBlRFAgYmFja2xpZ2h0IHN1cHBvcnQgaW4g bm91dmVhdSB1c2luZyB0aGUKPiA+IHN0YW5kYXJkIHByb3RvY29sIGZyb20gVkVTQSwgd2UgbWln aHQgYXMgd2VsbCBqdXN0IHRha2UgdGhlIGNvZGUgdGhhdCdzCj4gPiBhbHJlYWR5IHdyaXR0ZW4g Zm9yIHRoaXMgYW5kIG1vdmUgaXQgaW50byBhIHNldCBvZiBzaGFyZWQgRFJNIGhlbHBlcnMuCj4g PiAKPiA+IE5vdGUgdGhhdCB0aGVzZSBoZWxwZXJzIGFyZSBpbnRlbmRlZCB0byBoYW5kbGUgRFBD RCByZWxhdGVkIGJhY2tsaWdodAo+ID4gY29udHJvbCBiaXRzIHN1Y2ggYXMgc2V0dGluZyB0aGUg YnJpZ2h0bmVzcyBsZXZlbCBvdmVyIEFVWCwgcHJvYmluZyB0aGUKPiA+IGJhY2tsaWdodCdzIFRD T04sIGVuYWJsaW5nL2Rpc2FibGluZyB0aGUgYmFja2xpZ2h0IG92ZXIgQVVYIGlmIHN1cHBvcnRl ZCwKPiA+IGV0Yy4gQW55IFBXTS1yZWxhdGVkIHBvcnRpb25zIG9mIGJhY2tsaWdodCBjb250cm9s IGFyZSBleHBsaWNpdGx5IGxlZnQgdXAKPiA+IHRvIHRoZSBkcml2ZXIsIGFzIHRoZXNlIHdpbGwg dmFyeSBmcm9tIHBsYXRmb3JtIHRvIHBsYXRmb3JtLgo+ID4gCj4gPiBUaGUgb25seSBleGNlcHRp b24gdG8gdGhpcyBpcyB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIFBXTSBmcmVxdWVuY3kKPiA+IHBy ZS1kaXZpZGVyIHZhbHVlLiBUaGlzIGlzIGJlY2F1c2UgdGhlIG9ubHkgcGxhdGZvcm0tc3BlY2lm aWMgaW5mb3JtYXRpb24KPiA+IHJlcXVpcmVkIGZvciB0aGlzIGlzIHRoZSBQV00gZnJlcXVlbmN5 IG9mIHRoZSBwYW5lbCwgd2hpY2ggdGhlIGRyaXZlciBpcwo+ID4gZXhwZWN0ZWQgdG8gcHJvdmlk ZSBpZiBhdmFpbGFibGUuIFRoZSBhY3R1YWwgYWxnb3JpdGhtIGZvciBjYWxjdWxhdGluZyB0aGlz Cj4gPiB2YWx1ZSBpcyBzdGFuZGFyZCBhbmQgaXMgZGVmaW5lZCBpbiB0aGUgZURQIHNwZWNpZmlj YXRpb24gZnJvbSBWRVNBLgo+ID4gCj4gPiBOb3RlIHRoYXQgdGhlc2UgaGVscGVycyBkbyBub3Qg eWV0IGltcGxlbWVudCB0aGUgZnVsbCByYW5nZSBvZiBmZWF0dXJlcwo+ID4gdGhlIFZFU0EgYmFj a2xpZ2h0IGludGVyZmFjZSBwcm92aWRlcywgYW5kIG9ubHkgcHJvdmlkZSB0aGUgZm9sbG93aW5n Cj4gPiBmdW5jdGlvbmFsaXR5IChhbGwgb2Ygd2hpY2ggd2FzIGFscmVhZHkgcHJlc2VudCBpbiBp OTE1J3MgRFBDRCBiYWNrbGlnaHQKPiA+IHN1cHBvcnQpOgo+ID4gCj4gPiAqIEJhc2ljIGNvbnRy b2wgb2YgYnJpZ2h0bmVzcyBsZXZlbHMKPiA+ICogQmFzaWMgcHJvYmluZyBvZiBiYWNrbGlnaHQg Y2FwYWJpbGl0aWVzCj4gPiAqIEhlbHBlcnMgZm9yIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgdGhl IGJhY2tsaWdodAo+ID4gCj4gPiB2MzoKPiA+ICogU3BsaXQgb3V0IGNoYW5nZXMgdG8gaTkxNSdz IGJhY2tsaWdodCBjb2RlIHRvIHNlcGFyYXRlIHBhdGNoZXMgdG8gbWFrZSBpdAo+ID4gwqDCoCBl YXNpZXIgdG8gcmV2aWV3Cj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6IEx5dWRlIFBhdWwgPGx5dWRl QHJlZGhhdC5jb20+Cj4gPiBDYzogSmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGludGVsLmNvbT4K PiA+IENjOiBEYXZlIEFpcmxpZSA8YWlybGllZEBnbWFpbC5jb20+Cj4gPiBDYzogZ3JlZy5kZXBv aXJlQGdtYWlsLmNvbQo+ID4gLS0tCj4gPiDCoCBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2hlbHBl ci5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IDMzMiArKysrKysrKysrKysrKysrKysK PiA+IMKgIC4uLi9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaMKgwqDCoCB8 wqDCoCA1ICstCj4gPiDCoCAuLi4vZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9hdXhfYmFja2xp Z2h0LmMgfCAyODUgKystLS0tLS0tLS0tLS0tCj4gPiDCoCBpbmNsdWRlL2RybS9kcm1fZHBfaGVs cGVyLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDQ4ICsrKwo+ID4g wqAgNCBmaWxlcyBjaGFuZ2VkLCA0MTIgaW5zZXJ0aW9ucygrKSwgMjU4IGRlbGV0aW9ucygtKQo+ ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9oZWxwZXIuYwo+ID4g Yi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2hlbHBlci5jCj4gPiBpbmRleCBlZWRiYjQ4ODE1Yjcu LjA0Y2IyYjY5NzBhOCAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfaGVs cGVyLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfaGVscGVyLmMKPiA+IEBAIC0z MDgyLDMgKzMwODIsMzM1IEBAIGludCBkcm1fZHBfcGNvbl9jb252ZXJ0X3JnYl90b195Y2Jjcihz dHJ1Y3QKPiA+IGRybV9kcF9hdXggKmF1eCwgdTggY29sb3Jfc3BjKQo+ID4gwqDCoMKgwqDCoMKg wqDCoHJldHVybiAwOwo+ID4gwqAgfQo+ID4gwqAgRVhQT1JUX1NZTUJPTChkcm1fZHBfcGNvbl9j b252ZXJ0X3JnYl90b195Y2Jjcik7Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX2VkcF9iYWNr bGlnaHRfc2V0X2xldmVsKCkgLSBTZXQgdGhlIGJhY2tsaWdodCBsZXZlbCBvZiBhbiBlRFAgcGFu ZWwKPiA+IHZpYSBBVVgKPiA+ICsgKiBAYXV4OiBUaGUgRFAgQVVYIGNoYW5uZWwgdG8gdXNlCj4g PiArICogQGJsOiBCYWNrbGlnaHQgY2FwYWJpbGl0eSBpbmZvIGZyb20gZHJtX2VkcF9iYWNrbGln aHRfaW5pdCgpCj4gPiArICogQGxldmVsOiBUaGUgYnJpZ2h0bmVzcyBsZXZlbCB0byBzZXQKPiA+ ICsgKgo+ID4gKyAqIFNldHMgdGhlIGJyaWdodG5lc3MgbGV2ZWwgb2YgYW4gZURQIHBhbmVsJ3Mg YmFja2xpZ2h0LiBOb3RlIHRoYXQgdGhlCj4gPiBwYW5lbCdzIGJhY2tsaWdodCBtdXN0Cj4gPiAr ICogYWxyZWFkeSBoYXZlIGJlZW4gZW5hYmxlZCBieSB0aGUgZHJpdmVyIGJ5IGNhbGxpbmcKPiA+ IGRybV9lZHBfYmFja2xpZ2h0X2VuYWJsZSgpLgo+ID4gKyAqCj4gPiArICogUmV0dXJuczogJTAg b24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlCj4gPiArICovCj4gPiAr aW50IGRybV9lZHBfYmFja2xpZ2h0X3NldF9sZXZlbChzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LCBj b25zdCBzdHJ1Y3QKPiA+IGRybV9lZHBfYmFja2xpZ2h0X2luZm8gKmJsLAo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTE2 IGxldmVsKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gPiArwqDCoMKgwqDC oMKgwqB1OCBidWZbMl0gPSB7IDAgfTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChibC0+ bHNiX3JlZ191c2VkKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnVmWzBd ID0gKGxldmVsICYgMHhGRjAwKSA+PiA4Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGJ1ZlsxXSA9IChsZXZlbCAmIDB4MDBGRik7Cj4gCj4gTWF5YmUgMHgwMGZmIGFuZCAweGZm MDAgZm9yIGFlc3RoZXRpYyByZWFzb25zLgo+IAo+ID4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIHsK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBidWZbMF0gPSBsZXZlbDsKPiA+ICvC oMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGRybV9kcF9kcGNk X3dyaXRlKGF1eCwgRFBfRURQX0JBQ0tMSUdIVF9CUklHSFRORVNTX01TQiwgYnVmLAo+ID4gc2l6 ZW9mKGJ1ZikpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCAhPSBzaXplb2YoYnVmKSkgewo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9FUlJPUigiJXM6IEZhaWxlZCB0 byB3cml0ZSBhdXggYmFja2xpZ2h0IGxldmVsOiAlZFxuIiwKPiA+IGF1eC0+bmFtZSwgcmV0KTsK PiAKPiBTaW5jZSB5b3UncmUgYWRkaW5nIHRoaXMgY29kZSwgeW91IHNob3VsZCBwcm9iYWJseSBj b252ZXJ0IHRvIGRybV9lcnIoKSAKPiBoZWxwZXJzIGFzIHdlbGwuIEhlcmUgYW5kIGVsc2V3aGVy ZS4KCnRoaXMgaXMgbmV4dCB1cCBvbiBteSB0b2RvIGxpc3QgSkZZSS1JIGRvbid0IGRvIGl0IHJp Z2h0IG5vdyBiZWNhdXNlIHRoZXJlIGlzbid0CmFjdHVhbGx5IGFueSBiYWNrcG9pbnRlciB0byB0 aGUgZHJtIGRyaXZlciAoYW5kIHlvdSBjYW4ndCBqdXN0IHVzZSB0aGUgcGFyZW50IG9mCnRoZSBh dXggZGV2aWNlLCBzaW5jZSB0aGF0IHRlY2huaWNhbGx5IGRvZXNuJ3QgbmVlZCB0byBiZSB0aGUg ZHJtIGRyaXZlcikuCgpJJ2QgYWRkIGl0IGluIHRoaXMgc2VyaWVzLCBidXQgdGhhdCdzIGdvaW5n IHRvIGludm9sdmUgdXBkYXRpbmcgZnVuY3Rpb25zIGFjcm9zcwp0aGUgdHJlZSBsaWtlIGRybV9k cF9hdXhfaW5pdCgpIHNvIEknZCBsaWtlIHRvIGRvIGl0IGluIGEgZGlmZmVyZW50IHBhdGNoIHNl cmllcwoKPiAKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0IDwg MCA/IHJldCA6IC1FSU87Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDC oMKgwqByZXR1cm4gMDsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fZWRwX2JhY2tsaWdo dF9zZXRfbGV2ZWwpOwo+ID4gKwo+ID4gK3N0YXRpYyBpbnQKPiA+ICtkcm1fZWRwX2JhY2tsaWdo dF9zZXRfZW5hYmxlKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsIGNvbnN0IHN0cnVjdAo+ID4gZHJt X2VkcF9iYWNrbGlnaHRfaW5mbyAqYmwsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJvb2wgZW5hYmxlKQo+ID4gK3sKPiA+ICvCoMKg wqDCoMKgwqDCoGludCByZXQ7Cj4gPiArwqDCoMKgwqDCoMKgwqB1OCBidWY7Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgwqAvKiBUaGUgcGFuZWwgdXNlcyBzb21ldGhpbmcgb3RoZXIgdGhlbiBEUENE IGZvciBlbmFibGluZyBpdCdzCj4gPiBiYWNrbGlnaHQgKi8KPiAKPiAnaXRzJwo+IAo+IEJlc3Qg cmVnYXJkcwo+IFRob21hcwo+IAo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFibC0+YXV4X2VuYWJs ZSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqDCoHJldCA9IGRybV9kcF9kcGNkX3JlYWRiKGF1eCwgRFBfRURQX0RJU1BM QVlfQ09OVFJPTF9SRUdJU1RFUiwgJmJ1Zik7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0ICE9 IDEpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fRVJST1IoIiVzOiBG YWlsZWQgdG8gcmVhZCBlRFAgZGlzcGxheSBjb250cm9sIHJlZ2lzdGVyOgo+ID4gJWRcbiIsIGF1 eC0+bmFtZSwgcmV0KTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g cmV0IDwgMCA/IHJldCA6IC1FSU87Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArwqDCoMKgwqDC oMKgwqBpZiAoZW5hYmxlKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJ1ZiB8 PSBEUF9FRFBfQkFDS0xJR0hUX0VOQUJMRTsKPiA+ICvCoMKgwqDCoMKgwqDCoGVsc2UKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBidWYgJj0gfkRQX0VEUF9CQUNLTElHSFRfRU5B QkxFOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gZHJtX2RwX2RwY2Rfd3JpdGViKGF1 eCwgRFBfRURQX0RJU1BMQVlfQ09OVFJPTF9SRUdJU1RFUiwgYnVmKTsKPiA+ICvCoMKgwqDCoMKg wqDCoGlmIChyZXQgIT0gMSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERS TV9FUlJPUigiJXM6IEZhaWxlZCB0byB3cml0ZSBlRFAgZGlzcGxheSBjb250cm9sIHJlZ2lzdGVy Ogo+ID4gJWRcbiIsIGF1eC0+bmFtZSwgcmV0KTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm4gcmV0IDwgMCA/IHJldCA6IC1FSU87Cj4gPiArwqDCoMKgwqDCoMKgwqB9 Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArLyoq Cj4gPiArICogZHJtX2VkcF9iYWNrbGlnaHRfZW5hYmxlKCkgLSBFbmFibGUgYW4gZURQIHBhbmVs J3MgYmFja2xpZ2h0IHVzaW5nIERQQ0QKPiA+ICsgKiBAYXV4OiBUaGUgRFAgQVVYIGNoYW5uZWwg dG8gdXNlCj4gPiArICogQGJsOiBCYWNrbGlnaHQgY2FwYWJpbGl0eSBpbmZvIGZyb20gZHJtX2Vk cF9iYWNrbGlnaHRfaW5pdCgpCj4gPiArICogQGxldmVsOiBUaGUgaW5pdGlhbCBiYWNrbGlnaHQg bGV2ZWwgdG8gc2V0IHZpYSBBVVgsIGlmIHRoZXJlIGlzIG9uZQo+ID4gKyAqCj4gPiArICogVGhp cyBmdW5jdGlvbiBoYW5kbGVzIGVuYWJsaW5nIERQQ0QgYmFja2xpZ2h0IGNvbnRyb2xzIG9uIGEg cGFuZWwgb3Zlcgo+ID4gRFBDRCwgd2hpbGUgYWRkaXRpb25hbGx5Cj4gPiArICogcmVzdG9yaW5n IGFueSBpbXBvcnRhbnQgYmFja2xpZ2h0IHN0YXRlIHN1Y2ggYXMgdGhlIGdpdmVuIGJhY2tsaWdo dAo+ID4gbGV2ZWwsIHRoZSBicmlnaHRuZXNzIGJ5dGUKPiA+ICsgKiBjb3VudCwgYmFja2xpZ2h0 IGZyZXF1ZW5jeSwgZXRjLgo+ID4gKyAqCj4gPiArICogTm90ZSB0aGF0IGNlcnRhaW4gcGFuZWxz LCB3aGlsZSBzdXBwb3J0aW5nIGJyaWdodG5lc3MgbGV2ZWwgY29udHJvbHMKPiA+IG92ZXIgRFBD RCwgbWF5IG5vdCBzdXBwb3J0Cj4gPiArICogaGF2aW5nIHRoZWlyIGJhY2tsaWdodHMgZW5hYmxl ZCB2aWEgdGhlIHN0YW5kYXJkCj4gPiAlRFBfRURQX0RJU1BMQVlfQ09OVFJPTF9SRUdJU1RFUi4g T24gc3VjaCBwYW5lbHMKPiA+ICsgKiAmZHJtX2VkcF9iYWNrbGlnaHRfaW5mby5hdXhfZW5hYmxl IHdpbGwgYmUgc2V0IHRvICVmYWxzZSwgdGhpcyBmdW5jdGlvbgo+ID4gd2lsbCBza2lwIHRoZSBz dGVwIG9mCj4gPiArICogcHJvZ3JhbW1pbmcgdGhlICVEUF9FRFBfRElTUExBWV9DT05UUk9MX1JF R0lTVEVSLCBhbmQgdGhlIGRyaXZlciBtdXN0Cj4gPiBwZXJmb3JtIHRoZSByZXF1aXJlZAo+ID4g KyAqIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHN0ZXAgZm9yIGVuYWJsaW5nIHRoZSBiYWNrbGln aHQgYWZ0ZXIgY2FsbGluZwo+ID4gdGhpcyBmdW5jdGlvbi4KPiA+ICsgKgo+ID4gKyAqIFJldHVy bnM6ICUwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiA+ICsg Ki8KPiA+ICtpbnQgZHJtX2VkcF9iYWNrbGlnaHRfZW5hYmxlKHN0cnVjdCBkcm1fZHBfYXV4ICph dXgsIGNvbnN0IHN0cnVjdAo+ID4gZHJtX2VkcF9iYWNrbGlnaHRfaW5mbyAqYmwsCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0 IHUxNiBsZXZlbCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ID4gK8KgwqDC oMKgwqDCoMKgdTggZHBjZF9idWYsIG5ld19kcGNkX2J1ZjsKPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqDCoHJldCA9IGRybV9kcF9kcGNkX3JlYWRiKGF1eCwgRFBfRURQX0JBQ0tMSUdIVF9NT0RFX1NF VF9SRUdJU1RFUiwKPiA+ICZkcGNkX2J1Zik7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0ICE9 IDEpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVCVUdfS01TKCIl czogRmFpbGVkIHRvIHJlYWQgYmFja2xpZ2h0IG1vZGU6ICVkXG4iLAo+ID4gYXV4LT5uYW1lLCBy ZXQpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQgPCAwID8g cmV0IDogLUVJTzsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDC oG5ld19kcGNkX2J1ZiA9IGRwY2RfYnVmOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKChk cGNkX2J1ZiAmIERQX0VEUF9CQUNLTElHSFRfQ09OVFJPTF9NT0RFX01BU0spICE9Cj4gPiBEUF9F RFBfQkFDS0xJR0hUX0NPTlRST0xfTU9ERV9EUENEKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgbmV3X2RwY2RfYnVmICY9IH5EUF9FRFBfQkFDS0xJR0hUX0NPTlRST0xfTU9E RV9NQVNLOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG5ld19kcGNkX2J1ZiB8 PSBEUF9FRFBfQkFDS0xJR0hUX0NPTlRST0xfTU9ERV9EUENEOwo+ID4gKwo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IGRybV9kcF9kcGNkX3dyaXRlYihhdXgsIERQX0VE UF9QV01HRU5fQklUX0NPVU5ULCBibC0KPiA+ID5wd21nZW5fYml0X2NvdW50KTsKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0ICE9IDEpCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERUJVR19LTVMoIiVzOiBGYWls ZWQgdG8gd3JpdGUgYXV4IHB3bWdlbiBiaXQKPiA+IGNvdW50OiAlZFxuIiwKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgYXV4LT5uYW1lLCByZXQpOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoMKgaWYgKGJsLT5wd21fZnJlcV9wcmVfZGl2aWRlcikgewo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IGRybV9kcF9kcGNkX3dyaXRlYihhdXgsIERQ X0VEUF9CQUNLTElHSFRfRlJFUV9TRVQsIGJsLQo+ID4gPnB3bV9mcmVxX3ByZV9kaXZpZGVyKTsK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0ICE9IDEpCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERUJVR19LTVMo IiVzOiBGYWlsZWQgdG8gd3JpdGUgYXV4IGJhY2tsaWdodAo+ID4gZnJlcXVlbmN5OiAlZFxuIiwK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYXV4LT5uYW1lLCByZXQpOwo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGVsc2UKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgbmV3X2RwY2RfYnVmIHw9Cj4gPiBEUF9FRFBfQkFDS0xJR0hUX0ZSRVFf QVVYX1NFVF9FTkFCTEU7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDC oMKgwqBpZiAobmV3X2RwY2RfYnVmICE9IGRwY2RfYnVmKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0ID0gZHJtX2RwX2RwY2Rfd3JpdGViKGF1eCwKPiA+IERQX0VEUF9C QUNLTElHSFRfTU9ERV9TRVRfUkVHSVNURVIsIG5ld19kcGNkX2J1Zik7Cj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCAhPSAxKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERUJVR19LTVMoIiVzOiBGYWlsZWQg dG8gd3JpdGUgYXV4IGJhY2tsaWdodAo+ID4gbW9kZTogJWRcbiIsCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGF1eC0+bmFtZSwgcmV0KTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldCA8IDAgPyByZXQgOiAtRUlPOwo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvC oMKgwqDCoMKgwqDCoHJldCA9IGRybV9lZHBfYmFja2xpZ2h0X3NldF9sZXZlbChhdXgsIGJsLCBs ZXZlbCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gZHJt X2VkcF9iYWNrbGlnaHRfc2V0X2VuYWJsZShhdXgsIGJsLCB0cnVlKTsKPiA+ICvCoMKgwqDCoMKg wqDCoGlmIChyZXQgPCAwKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ICt9Cj4gPiArRVhQ T1JUX1NZTUJPTChkcm1fZWRwX2JhY2tsaWdodF9lbmFibGUpOwo+ID4gKwo+ID4gKy8qKgo+ID4g KyAqIGRybV9lZHBfYmFja2xpZ2h0X2Rpc2FibGUoKSAtIERpc2FibGUgYW4gZURQIGJhY2tsaWdo dCB1c2luZyBEUENELCBpZgo+ID4gc3VwcG9ydGVkCj4gPiArICogQGF1eDogVGhlIERQIEFVWCBj aGFubmVsIHRvIHVzZQo+ID4gKyAqIEBibDogQmFja2xpZ2h0IGNhcGFiaWxpdHkgaW5mbyBmcm9t IGRybV9lZHBfYmFja2xpZ2h0X2luaXQoKQo+ID4gKyAqCj4gPiArICogVGhpcyBmdW5jdGlvbiBo YW5kbGVzIGRpc2FibGluZyBEUENEIGJhY2tsaWdodCBjb250cm9scyBvbiBhIHBhbmVsIG92ZXIK PiA+IEFVWC4gTm90ZSB0aGF0IHNvbWUKPiA+ICsgKiBwYW5lbHMgaGF2ZSBiYWNrbGlnaHRzIHRo YXQgYXJlIGVuYWJsZWQvZGlzYWJsZWQgYnkgb3RoZXIgbWVhbnMsIGRlc3BpdGUKPiA+IGhhdmlu ZyB0aGVpciBicmlnaHRuZXNzCj4gPiArICogdmFsdWVzIGNvbnRyb2xsZWQgdGhyb3VnaCBEUENE LiBPbiBzdWNoIHBhbmVscwo+ID4gJmRybV9lZHBfYmFja2xpZ2h0X2luZm8uYXV4X2VuYWJsZSB3 aWxsIGJlIHNldCB0bwo+ID4gKyAqICVmYWxzZSwgdGhpcyBmdW5jdGlvbiB3aWxsIGJlY29tZSBh IG5vLW9wIChhbmQgd2Ugd2lsbCBza2lwIHVwZGF0aW5nCj4gPiArICogJURQX0VEUF9ESVNQTEFZ X0NPTlRST0xfUkVHSVNURVIpLCBhbmQgdGhlIGRyaXZlciBtdXN0IHRha2UgY2FyZSB0bwo+ID4g cGVyZm9ybSBpdCdzIG93bgo+ID4gKyAqIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHN0ZXAgZm9y IGRpc2FibGluZyB0aGUgYmFja2xpZ2h0Lgo+ID4gKyAqCj4gPiArICogUmV0dXJuczogJTAgb24g c3VjY2VzcyBvciBuby1vcCwgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ID4gKyAq Lwo+ID4gK2ludCBkcm1fZWRwX2JhY2tsaWdodF9kaXNhYmxlKHN0cnVjdCBkcm1fZHBfYXV4ICph dXgsIGNvbnN0IHN0cnVjdAo+ID4gZHJtX2VkcF9iYWNrbGlnaHRfaW5mbyAqYmwpCj4gPiArewo+ ID4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9 IGRybV9lZHBfYmFja2xpZ2h0X3NldF9lbmFibGUoYXV4LCBibCwgZmFsc2UpOwo+ID4gK8KgwqDC oMKgwqDCoMKgaWYgKHJldCA8IDApCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ID4gK30KPiA+ ICtFWFBPUlRfU1lNQk9MKGRybV9lZHBfYmFja2xpZ2h0X2Rpc2FibGUpOwo+ID4gKwo+ID4gK3N0 YXRpYyBpbmxpbmUgaW50Cj4gPiArZHJtX2VkcF9iYWNrbGlnaHRfcHJvYmVfbWF4KHN0cnVjdCBk cm1fZHBfYXV4ICphdXgsIHN0cnVjdAo+ID4gZHJtX2VkcF9iYWNrbGlnaHRfaW5mbyAqYmwsCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1 MTYgZHJpdmVyX3B3bV9mcmVxX2h6LCBjb25zdCB1OAo+ID4gZWRwX2RwY2RbRURQX0RJU1BMQVlf Q1RMX0NBUF9TSVpFXSkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgZnhwLCBmeHBfbWlu LCBmeHBfbWF4LCBmeHBfYWN0dWFsLCBmID0gMTsKPiA+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7 Cj4gPiArwqDCoMKgwqDCoMKgwqB1OCBwbiwgcG5fbWluLCBwbl9tYXg7Cj4gPiArCj4gPiArwqDC oMKgwqDCoMKgwqByZXQgPSBkcm1fZHBfZHBjZF9yZWFkYihhdXgsIERQX0VEUF9QV01HRU5fQklU X0NPVU5ULCAmcG4pOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCAhPSAxKSB7Cj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFQlVHX0tNUygiJXM6IEZhaWxlZCB0byBy ZWFkIHB3bWdlbiBiaXQgY291bnQgY2FwOgo+ID4gJWRcbiIsIGF1eC0+bmFtZSwgcmV0KTsKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT0RFVjsKPiA+ICvCoMKg wqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHBuICY9IERQX0VEUF9QV01HRU5f QklUX0NPVU5UX01BU0s7Cj4gPiArwqDCoMKgwqDCoMKgwqBibC0+bWF4ID0gKDEgPDwgcG4pIC0g MTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmICghZHJpdmVyX3B3bV9mcmVxX2h6KQo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDC oMKgLyoKPiA+ICvCoMKgwqDCoMKgwqDCoCAqIFNldCBQV00gRnJlcXVlbmN5IGRpdmlkZXIgdG8g bWF0Y2ggZGVzaXJlZCBmcmVxdWVuY3kgcHJvdmlkZWQgYnkKPiA+IHRoZSBkcml2ZXIuCj4gPiAr wqDCoMKgwqDCoMKgwqAgKiBUaGUgUFdNIEZyZXF1ZW5jeSBpcyBjYWxjdWxhdGVkIGFzIDI3TWh6 IC8gKEYgeCBQKS4KPiA+ICvCoMKgwqDCoMKgwqDCoCAqIC0gV2hlcmUgRiA9IFBXTSBGcmVxdWVu Y3kgUHJlLURpdmlkZXIgdmFsdWUgcHJvZ3JhbW1lZCBieSBmaWVsZAo+ID4gNzowIG9mIHRoZQo+ ID4gK8KgwqDCoMKgwqDCoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRURQX0JBQ0tMSUdI VF9GUkVRX1NFVCByZWdpc3RlciAoRFBDRCBBZGRyZXNzIDAwNzI4aCkKPiA+ICvCoMKgwqDCoMKg wqDCoCAqIC0gV2hlcmUgUCA9IDJeUG4sIHdoZXJlIFBuIGlzIHRoZSB2YWx1ZSBwcm9ncmFtbWVk IGJ5IGZpZWxkIDQ6MAo+ID4gb2YgdGhlCj4gPiArwqDCoMKgwqDCoMKgwqAgKsKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBFRFBfUFdNR0VOX0JJVF9DT1VOVCByZWdpc3RlciAoRFBDRCBBZGRyZXNz IDAwNzI0aCkKPiA+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKg LyogRmluZCBkZXNpcmVkIHZhbHVlIG9mIChGIHggUCkKPiA+ICvCoMKgwqDCoMKgwqDCoCAqIE5v dGUgdGhhdCwgaWYgRiB4IFAgaXMgb3V0IG9mIHN1cHBvcnRlZCByYW5nZSwgdGhlIG1heGltdW0g dmFsdWUKPiA+IG9yIG1pbmltdW0gdmFsdWUgd2lsbAo+ID4gK8KgwqDCoMKgwqDCoMKgICogYXBw bGllZCBhdXRvbWF0aWNhbGx5LiBTbyBubyBuZWVkIHRvIGNoZWNrIHRoYXQuCj4gPiArwqDCoMKg wqDCoMKgwqAgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoGZ4cCA9IERJVl9ST1VORF9DTE9TRVNUKDEw MDAgKiBEUF9FRFBfQkFDS0xJR0hUX0ZSRVFfQkFTRV9LSFosCj4gPiBkcml2ZXJfcHdtX2ZyZXFf aHopOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgLyogVXNlIGhpZ2hlc3QgcG9zc2libGUgdmFs dWUgb2YgUG4gZm9yIG1vcmUgZ3JhbnVsYXJpdHkgb2YKPiA+IGJyaWdodG5lc3MgYWRqdXN0bWVu dCB3aGlsZQo+ID4gK8KgwqDCoMKgwqDCoMKgICogc2F0aWZ5aW5nIHRoZSBjb25kaXRpb25zIGJl bG93Lgo+ID4gK8KgwqDCoMKgwqDCoMKgICogLSBQbiBpcyBpbiB0aGUgcmFuZ2Ugb2YgUG5fbWlu IGFuZCBQbl9tYXgKPiA+ICvCoMKgwqDCoMKgwqDCoCAqIC0gRiBpcyBpbiB0aGUgcmFuZ2Ugb2Yg MSBhbmQgMjU1Cj4gPiArwqDCoMKgwqDCoMKgwqAgKiAtIEZ4UCBpcyB3aXRoaW4gMjUlIG9mIGRl c2lyZWQgdmFsdWUuCj4gPiArwqDCoMKgwqDCoMKgwqAgKsKgwqAgTm90ZTogMjUlIGlzIGFyYml0 cmFyeSB2YWx1ZSBhbmQgbWF5IG5lZWQgc29tZSB0d2Vhay4KPiA+ICvCoMKgwqDCoMKgwqDCoCAq Lwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gZHJtX2RwX2RwY2RfcmVhZGIoYXV4LCBEUF9FRFBf UFdNR0VOX0JJVF9DT1VOVF9DQVBfTUlOLAo+ID4gJnBuX21pbik7Cj4gPiArwqDCoMKgwqDCoMKg wqBpZiAocmV0ICE9IDEpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1f REVCVUdfS01TKCIlczogRmFpbGVkIHRvIHJlYWQgcHdtZ2VuIGJpdCBjb3VudCBjYXAgbWluOgo+ ID4gJWRcbiIsIGF1eC0+bmFtZSwgcmV0KTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXR1cm4gMDsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICvCoMKgwqDCoMKgwqDCoHJl dCA9IGRybV9kcF9kcGNkX3JlYWRiKGF1eCwgRFBfRURQX1BXTUdFTl9CSVRfQ09VTlRfQ0FQX01B WCwKPiA+ICZwbl9tYXgpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCAhPSAxKSB7Cj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFQlVHX0tNUygiJXM6IEZhaWxlZCB0 byByZWFkIHB3bWdlbiBiaXQgY291bnQgY2FwIG1heDoKPiA+ICVkXG4iLCBhdXgtPm5hbWUsIHJl dCk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiArwqDC oMKgwqDCoMKgwqB9Cj4gPiArwqDCoMKgwqDCoMKgwqBwbl9taW4gJj0gRFBfRURQX1BXTUdFTl9C SVRfQ09VTlRfTUFTSzsKPiA+ICvCoMKgwqDCoMKgwqDCoHBuX21heCAmPSBEUF9FRFBfUFdNR0VO X0JJVF9DT1VOVF9NQVNLOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgLyogRW5zdXJlIGZyZXF1 ZW5jeSBpcyB3aXRoaW4gMjUlIG9mIGRlc2lyZWQgdmFsdWUgKi8KPiA+ICvCoMKgwqDCoMKgwqDC oGZ4cF9taW4gPSBESVZfUk9VTkRfQ0xPU0VTVChmeHAgKiAzLCA0KTsKPiA+ICvCoMKgwqDCoMKg wqDCoGZ4cF9tYXggPSBESVZfUk9VTkRfQ0xPU0VTVChmeHAgKiA1LCA0KTsKPiA+ICvCoMKgwqDC oMKgwqDCoGlmIChmeHBfbWluIDwgKDEgPDwgcG5fbWluKSB8fCAoMjU1IDw8IHBuX21heCkgPCBm eHBfbWF4KSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFQlVHX0tN UygiJXM6IERyaXZlciBkZWZpbmVkIGJhY2tsaWdodCBmcmVxdWVuY3kgKCVkKQo+ID4gb3V0IG9m IHJhbmdlXG4iLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGF1eC0+bmFtZSwgZHJpdmVyX3B3bV9mcmVxX2h6KTsKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ICvCoMKgwqDCoMKgwqDCoH0K PiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGZvciAocG4gPSBwbl9tYXg7IHBuID49IHBuX21pbjsg cG4tLSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGYgPSBjbGFtcChESVZf Uk9VTkRfQ0xPU0VTVChmeHAsIDEgPDwgcG4pLCAxLCAyNTUpOwo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGZ4cF9hY3R1YWwgPSBmIDw8IHBuOwo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGlmIChmeHBfbWluIDw9IGZ4cF9hY3R1YWwgJiYgZnhwX2FjdHVhbCA8 PSBmeHBfbWF4KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBicmVhazsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDC oHJldCA9IGRybV9kcF9kcGNkX3dyaXRlYihhdXgsIERQX0VEUF9QV01HRU5fQklUX0NPVU5ULCBw bik7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0ICE9IDEpIHsKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBEUk1fREVCVUdfS01TKCIlczogRmFpbGVkIHRvIHdyaXRlIGF1eCBw d21nZW4gYml0IGNvdW50Ogo+ID4gJWRcbiIsIGF1eC0+bmFtZSwgcmV0KTsKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ ICvCoMKgwqDCoMKgwqDCoGJsLT5wd21nZW5fYml0X2NvdW50ID0gcG47Cj4gPiArwqDCoMKgwqDC oMKgwqBibC0+bWF4ID0gKDEgPDwgcG4pIC0gMTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlm IChlZHBfZHBjZFsyXSAmIERQX0VEUF9CQUNLTElHSFRfRlJFUV9BVVhfU0VUX0NBUCkgewo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJsLT5wd21fZnJlcV9wcmVfZGl2aWRlciA9 IGY7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFQlVHX0tNUygiJXM6 IFVzaW5nIGJhY2tsaWdodCBmcmVxdWVuY3kgZnJvbSBkcml2ZXIKPiA+ICglZEh6KVxuIiwKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBhdXgtPm5hbWUsIGRyaXZlcl9wd21fZnJlcV9oeik7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4g PiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGlj IGlubGluZSBpbnQKPiA+ICtkcm1fZWRwX2JhY2tsaWdodF9wcm9iZV9sZXZlbChzdHJ1Y3QgZHJt X2RwX2F1eCAqYXV4LCBzdHJ1Y3QKPiA+IGRybV9lZHBfYmFja2xpZ2h0X2luZm8gKmJsLAo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHU4ICpjdXJyZW50X21vZGUpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPiA+ ICvCoMKgwqDCoMKgwqDCoHU4IGJ1ZlsyXTsKPiA+ICvCoMKgwqDCoMKgwqDCoHU4IG1vZGVfcmVn Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gZHJtX2RwX2RwY2RfcmVhZGIoYXV4LCBE UF9FRFBfQkFDS0xJR0hUX01PREVfU0VUX1JFR0lTVEVSLAo+ID4gJm1vZGVfcmVnKTsKPiA+ICvC oMKgwqDCoMKgwqDCoGlmIChyZXQgIT0gMSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoERSTV9ERUJVR19LTVMoIiVzOiBGYWlsZWQgdG8gcmVhZCBiYWNrbGlnaHQgbW9kZTog JWRcbiIsCj4gPiBhdXgtPm5hbWUsIHJldCk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIHJldCA8IDAgPyByZXQgOiAtRUlPOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgKmN1cnJlbnRfbW9kZSA9IChtb2RlX3JlZyAmIERQX0VE UF9CQUNLTElHSFRfQ09OVFJPTF9NT0RFX01BU0spOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCpj dXJyZW50X21vZGUgPT0gRFBfRURQX0JBQ0tMSUdIVF9DT05UUk9MX01PREVfRFBDRCkgewo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCBzaXplID0gMSArIGJsLT5sc2JfcmVn X3VzZWQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gZHJt X2RwX2RwY2RfcmVhZChhdXgsIERQX0VEUF9CQUNLTElHSFRfQlJJR0hUTkVTU19NU0IsCj4gPiBi dWYsIHNpemUpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQgIT0g c2l6ZSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBEUk1fREVCVUdfS01TKCIlczogRmFpbGVkIHRvIHJlYWQgYmFja2xpZ2h0IGxldmVsOgo+ID4g JWRcbiIsIGF1eC0+bmFtZSwgcmV0KTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldCA8IDAgPyByZXQgOiAtRUlPOwo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpZiAoYmwtPmxzYl9yZWdfdXNlZCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIChidWZbMF0gPDwgOCkgfCBidWZbMV07 Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZWxzZQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gYnVmWzBdOwo+ID4gK8Kg wqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgLyoKPiA+ICvCoMKgwqDCoMKg wqDCoCAqIElmIHdlJ3JlIG5vdCBpbiBEUENEIGNvbnRyb2wgbW9kZSB5ZXQsIHRoZSBwcm9ncmFt bWVkIGJyaWdodG5lc3MKPiA+IHZhbHVlIGlzIG1lYW5pbmdsZXNzIGFuZAo+ID4gK8KgwqDCoMKg wqDCoMKgICogdGhlIGRyaXZlciBzaG91bGQgYXNzdW1lIG1heCBicmlnaHRuZXNzCj4gPiArwqDC oMKgwqDCoMKgwqAgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBibC0+bWF4Owo+ID4gK30K PiA+ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1fZWRwX2JhY2tsaWdodF9pbml0KCkgLSBQcm9iZSBh IGRpc3BsYXkgcGFuZWwncyBUQ09OIHVzaW5nIHRoZQo+ID4gc3RhbmRhcmQgVkVTQSBlRFAgYmFj a2xpZ2h0Cj4gPiArICogaW50ZXJmYWNlLgo+ID4gKyAqIEBhdXg6IFRoZSBEUCBhdXggZGV2aWNl IHRvIHVzZSBmb3IgcHJvYmluZwo+ID4gKyAqIEBibDogVGhlICZkcm1fZWRwX2JhY2tsaWdodF9p bmZvIHN0cnVjdCB0byBmaWxsIG91dCB3aXRoIGluZm9ybWF0aW9uIG9uCj4gPiB0aGUgYmFja2xp Z2h0Cj4gPiArICogQGRyaXZlcl9wd21fZnJlcV9oejogT3B0aW9uYWwgUFdNIGZyZXF1ZW5jeSBm cm9tIHRoZSBkcml2ZXIgaW4gaHoKPiA+ICsgKiBAZWRwX2RwY2Q6IEEgY2FjaGVkIGNvcHkgb2Yg dGhlIGVEUCBEUENECj4gPiArICogQGN1cnJlbnRfbGV2ZWw6IFdoZXJlIHRvIHN0b3JlIHRoZSBw cm9iZWQgYnJpZ2h0bmVzcyBsZXZlbAo+ID4gKyAqIEBjdXJyZW50X21vZGU6IFdoZXJlIHRvIHN0 b3JlIHRoZSBjdXJyZW50bHkgc2V0IGJhY2tsaWdodCBjb250cm9sIG1vZGUKPiA+ICsgKgo+ID4g KyAqIEluaXRpYWxpemVzIGEgJmRybV9lZHBfYmFja2xpZ2h0X2luZm8gc3RydWN0IGJ5IHByb2Jp bmcgQGF1eCBmb3IgaXQncwo+ID4gYmFja2xpZ2h0IGNhcGFiaWxpdGllcywKPiA+ICsgKiBhbG9u ZyB3aXRoIGFsc28gcHJvYmluZyB0aGUgY3VycmVudCBhbmQgbWF4aW11bSBzdXBwb3J0ZWQgYnJp Z2h0bmVzcwo+ID4gbGV2ZWxzLgo+ID4gKyAqCj4gPiArICogSWYgQGRyaXZlcl9wd21fZnJlcV9o eiBpcyBub24temVybywgdGhpcyB3aWxsIGJlIHVzZWQgYXMgdGhlIGJhY2tsaWdodAo+ID4gZnJl cXVlbmN5LiBPdGhlcndpc2UsIHRoZQo+ID4gKyAqIGRlZmF1bHQgZnJlcXVlbmN5IGZyb20gdGhl IHBhbmVsIGlzIHVzZWQuCj4gPiArICoKPiA+ICsgKiBSZXR1cm5zOiAlMCBvbiBzdWNjZXNzLCBu ZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gPiArICovCj4gPiAraW50Cj4gPiArZHJt X2VkcF9iYWNrbGlnaHRfaW5pdChzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LCBzdHJ1Y3QKPiA+IGRy bV9lZHBfYmFja2xpZ2h0X2luZm8gKmJsLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB1MTYgZHJpdmVyX3B3bV9mcmVxX2h6LCBjb25zdCB1OAo+ID4gZWRw X2RwY2RbRURQX0RJU1BMQVlfQ1RMX0NBUF9TSVpFXSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTE2ICpjdXJyZW50X2xldmVsLCB1OCAqY3VycmVudF9t b2RlKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgwqBpZiAoZWRwX2RwY2RbMV0gJiBEUF9FRFBfQkFDS0xJR0hUX0FVWF9FTkFCTEVfQ0FQ KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJsLT5hdXhfZW5hYmxlID0gdHJ1 ZTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChlZHBfZHBjZFsyXSAmIERQX0VEUF9CQUNLTElHSFRf QlJJR0hUTkVTU19CWVRFX0NPVU5UKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGJsLT5sc2JfcmVnX3VzZWQgPSB0cnVlOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0g ZHJtX2VkcF9iYWNrbGlnaHRfcHJvYmVfbWF4KGF1eCwgYmwsIGRyaXZlcl9wd21fZnJlcV9oeiwK PiA+IGVkcF9kcGNkKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKQo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDC oMKgwqByZXQgPSBkcm1fZWRwX2JhY2tsaWdodF9wcm9iZV9sZXZlbChhdXgsIGJsLCBjdXJyZW50 X21vZGUpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ICvCoMKgwqDCoMKgwqDCoCpjdXJyZW50 X2xldmVsID0gcmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgRFJNX0RFQlVHX0tNUygiJXM6 IEZvdW5kIGJhY2tsaWdodCBsZXZlbD0lZC8lZAo+ID4gcHdtX2ZyZXFfcHJlX2RpdmlkZXI9JWQg bW9kZT0leFxuIiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGF1eC0+bmFtZSwgKmN1cnJlbnRfbGV2ZWwsIGJsLT5tYXgsIGJsLQo+ID4gPnB3bV9mcmVxX3By ZV9kaXZpZGVyLCAqY3VycmVudF9tb2RlKTsKPiA+ICvCoMKgwqDCoMKgwqDCoERSTV9ERUJVR19L TVMoIiVzOiBCYWNrbGlnaHQgY2FwczogcHdtZ2VuX2JpdF9jb3VudD0lZAo+ID4gbHNiX3JlZ191 c2VkPSVkIGF1eF9lbmFibGU9JWRcbiIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBhdXgtPm5hbWUsIGJsLT5wd21nZW5fYml0X2NvdW50LCBibC0+bHNiX3Jl Z191c2VkLCBibC0KPiA+ID5hdXhfZW5hYmxlKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAw Owo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9lZHBfYmFja2xpZ2h0X2luaXQpOwo+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90 eXBlcy5oCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90 eXBlcy5oCj4gPiBpbmRleCAxNjgyNGViM2VmOTMuLjAzMDUxYWI3NWQzMCAxMDA2NDQKPiA+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oCj4g PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMu aAo+ID4gQEAgLTI2MywxMCArMjYzLDcgQEAgc3RydWN0IGludGVsX3BhbmVsIHsKPiA+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogRFBDRCBiYWNrbGlnaHQgKi8KPiA+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdW5pb24gewo+ID4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHsKPiA+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHU4IHB3bWdl bl9iaXRfY291bnQ7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1OCBwd21fZnJlcV9wcmVfZGl2aWRlcjsKPiA+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGJvb2wgbHNiX3JlZ191c2VkOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYm9vbCBhdXhfZW5hYmxlOwo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg c3RydWN0IGRybV9lZHBfYmFja2xpZ2h0X2luZm8gaW5mbzsKPiA+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0gdmVzYTsKPiA+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCB7Cj4gPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYm9v bCBzZHJfdXNlc19hdXg7Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9kcF9hdXhfYmFja2xpZ2h0LmMKPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9kcF9hdXhfYmFja2xpZ2h0LmMKPiA+IGluZGV4IDgxM2Y2YzU1MzE1Ni4u Mjg2ZWIzMzc0NDhlIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9kcF9hdXhfYmFja2xpZ2h0LmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfZHBfYXV4X2JhY2tsaWdodC5jCj4gPiBAQCAtMjcwLDExNCArMjcwLDE5 IEBAIGludGVsX2RwX2F1eF9oZHJfc2V0dXBfYmFja2xpZ2h0KHN0cnVjdAo+ID4gaW50ZWxfY29u bmVjdG9yICpjb25uZWN0b3IsIGVudW0gcGlwZSBwaQo+ID4gwqAgfQo+ID4gwqAgCj4gPiDCoCAv KiBWRVNBIGJhY2tsaWdodCBjYWxsYmFja3MgKi8KPiA+IC1zdGF0aWMgYm9vbCBpbnRlbF9kcF9h dXhfdmVzYV9iYWNrbGlnaHRfZHBjZF9tb2RlKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IKPiA+ICpj b25uZWN0b3IpCj4gPiAtewo+ID4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IGludGVsX2RwICppbnRl bF9kcCA9IGludGVsX2F0dGFjaGVkX2RwKGNvbm5lY3Rvcik7Cj4gPiAtwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ID4g LcKgwqDCoMKgwqDCoMKgaW50IHJldDsKPiA+IC3CoMKgwqDCoMKgwqDCoHU4IG1vZGVfcmVnOwo+ ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgcmV0ID0gZHJtX2RwX2RwY2RfcmVhZGIoJmludGVsX2Rw LT5hdXgsCj4gPiBEUF9FRFBfQkFDS0xJR0hUX01PREVfU0VUX1JFR0lTVEVSLCAmbW9kZV9yZWcp Owo+ID4gLcKgwqDCoMKgwqDCoMKgaWYgKHJldCAhPSAxKSB7Cj4gPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwgIkZhaWxlZCB0byByZWFkIGJh Y2tsaWdodCBtb2RlOgo+ID4gJWRcbiIsIHJldCk7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIGZhbHNlOwo+ID4gLcKgwqDCoMKgwqDCoMKgfQo+ID4gLQo+ID4gLcKg wqDCoMKgwqDCoMKgcmV0dXJuIChtb2RlX3JlZyAmIERQX0VEUF9CQUNLTElHSFRfQ09OVFJPTF9N T0RFX01BU0spID09Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRFBfRURQX0JBQ0tM SUdIVF9DT05UUk9MX01PREVfRFBDRDsKPiA+IC19Cj4gPiAtCj4gPiAtLyoKPiA+IC0gKiBSZWFk IHRoZSBjdXJyZW50IGJhY2tsaWdodCB2YWx1ZSBmcm9tIERQQ0QgcmVnaXN0ZXIocykgYmFzZWQK PiA+IC0gKiBvbiBpZiA4LWJpdChNU0IpIG9yIDE2LWJpdChNU0IgYW5kIExTQikgdmFsdWVzIGFy ZSBzdXBwb3J0ZWQKPiA+IC0gKi8KPiA+IMKgIHN0YXRpYyB1MzIgaW50ZWxfZHBfYXV4X3Zlc2Ff Z2V0X2JhY2tsaWdodChzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yCj4gPiAqY29ubmVjdG9yLCBlbnVt IHBpcGUgdW51c2VkKQo+ID4gwqAgewo+ID4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCA9IGludGVsX2F0dGFjaGVkX2RwKGNvbm5lY3Rvcik7Cj4gPiAtwqDCoMKgwqDC oMKgwqBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGRwX3RvX2k5MTUoaW50ZWxfZHAp Owo+ID4gLcKgwqDCoMKgwqDCoMKgaW50IHJldDsKPiA+IC3CoMKgwqDCoMKgwqDCoHU4IHJlYWRf dmFsWzJdID0geyAweDAgfTsKPiA+IC3CoMKgwqDCoMKgwqDCoHUxNiBsZXZlbCA9IDA7Cj4gPiAt Cj4gPiAtwqDCoMKgwqDCoMKgwqAvKgo+ID4gLcKgwqDCoMKgwqDCoMKgICogSWYgd2UncmUgbm90 IGluIERQQ0QgY29udHJvbCBtb2RlIHlldCwgdGhlIHByb2dyYW1tZWQgYnJpZ2h0bmVzcwo+ID4g LcKgwqDCoMKgwqDCoMKgICogdmFsdWUgaXMgbWVhbmluZ2xlc3MgYW5kIHdlIHNob3VsZCBhc3N1 bWUgbWF4IGJyaWdodG5lc3MKPiA+IC3CoMKgwqDCoMKgwqDCoCAqLwo+ID4gLcKgwqDCoMKgwqDC oMKgaWYgKCFpbnRlbF9kcF9hdXhfdmVzYV9iYWNrbGlnaHRfZHBjZF9tb2RlKGNvbm5lY3Rvcikp Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGNvbm5lY3Rvci0+cGFu ZWwuYmFja2xpZ2h0Lm1heDsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoHJldCA9IGRybV9kcF9k cGNkX3JlYWQoJmludGVsX2RwLT5hdXgsCj4gPiBEUF9FRFBfQkFDS0xJR0hUX0JSSUdIVE5FU1Nf TVNCLCAmcmVhZF92YWwsCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplb2YocmVhZF92YWwpKTsKPiA+IC3CoMKgwqDCoMKg wqDCoGlmIChyZXQgIT0gc2l6ZW9mKHJlYWRfdmFsKSkgewo+ID4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGRybV9kYmdfa21zKCZpOTE1LT5kcm0sICJGYWlsZWQgdG8gcmVhZCBicmln aHRuZXNzIGxldmVsOgo+ID4gJWRcbiIsIHJldCk7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiAtwqDCoMKgwqDCoMKgwqB9Cj4gPiAtCj4gPiAtwqDCoMKg wqDCoMKgwqBpZiAoY29ubmVjdG9yLT5wYW5lbC5iYWNrbGlnaHQuZWRwLnZlc2EubHNiX3JlZ191 c2VkKQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxldmVsID0gKHJlYWRfdmFs WzBdIDw8IDggfCByZWFkX3ZhbFsxXSk7Cj4gPiAtwqDCoMKgwqDCoMKgwqBlbHNlCj4gPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGV2ZWwgPSByZWFkX3ZhbFswXTsKPiA+IC0KPiA+ IC3CoMKgwqDCoMKgwqDCoHJldHVybiBsZXZlbDsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBj b25uZWN0b3ItPnBhbmVsLmJhY2tsaWdodC5sZXZlbDsKPiA+IMKgIH0KPiA+IMKgIAo+ID4gLS8q Cj4gPiAtICogU2VuZHMgdGhlIGN1cnJlbnQgYmFja2xpZ2h0IGxldmVsIG92ZXIgdGhlIGF1eCBj aGFubmVsLCBjaGVja2luZyBpZiBpdHMKPiA+IHVzaW5nCj4gPiAtICogOC1iaXQgb3IgMTYgYml0 IHZhbHVlIChNU0IgYW5kIExTQikKPiA+IC0gKi8KPiA+IMKgIHN0YXRpYyB2b2lkCj4gPiAtaW50 ZWxfZHBfYXV4X3Zlc2Ffc2V0X2JhY2tsaWdodChjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9z dGF0ZQo+ID4gKmNvbm5fc3RhdGUsCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1MzIgbGV2ZWwpCj4gPiAraW50ZWxfZHBf YXV4X3Zlc2Ffc2V0X2JhY2tsaWdodChjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZQo+ ID4gKmNvbm5fc3RhdGUsIHUzMiBsZXZlbCkKPiA+IMKgIHsKPiA+IMKgwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IgPSB0b19pbnRlbF9jb25uZWN0b3IoY29u bl9zdGF0ZS0KPiA+ID5jb25uZWN0b3IpOwo+ID4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IGludGVs X2RwICppbnRlbF9kcCA9IGludGVsX2F0dGFjaGVkX2RwKGNvbm5lY3Rvcik7Cj4gPiAtwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGRwX3RvX2k5MTUoaW50ZWxf ZHApOwo+ID4gLcKgwqDCoMKgwqDCoMKgaW50IHJldDsKPiA+IC3CoMKgwqDCoMKgwqDCoHU4IHZh bHNbMl0gPSB7IDB4MCB9Owo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgLyogV3JpdGUgdGhlIE1T QiBhbmQvb3IgTFNCICovCj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAoY29ubmVjdG9yLT5wYW5lbC5i YWNrbGlnaHQuZWRwLnZlc2EubHNiX3JlZ191c2VkKSB7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgdmFsc1swXSA9IChsZXZlbCAmIDB4RkYwMCkgPj4gODsKPiA+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YWxzWzFdID0gKGxldmVsICYgMHhGRik7Cj4gPiAtwqDC oMKgwqDCoMKgwqB9IGVsc2Ugewo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZh bHNbMF0gPSBsZXZlbDsKPiA+IC3CoMKgwqDCoMKgwqDCoH0KPiA+IC0KPiA+IC3CoMKgwqDCoMKg wqDCoHJldCA9IGRybV9kcF9kcGNkX3dyaXRlKCZpbnRlbF9kcC0+YXV4LAo+ID4gRFBfRURQX0JB Q0tMSUdIVF9CUklHSFRORVNTX01TQiwgdmFscywKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNpemVvZih2YWxzKSk7Cj4g PiAtwqDCoMKgwqDCoMKgwqBpZiAocmV0ICE9IHNpemVvZih2YWxzKSkgewo+ID4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9kYmdfa21zKCZpOTE1LT5kcm0sICJGYWlsZWQgdG8g d3JpdGUgYXV4IGJhY2tsaWdodAo+ID4gbGV2ZWw6ICVkXG4iLCByZXQpOwo+ID4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsKPiA+IC3CoMKgwqDCoMKgwqDCoH0KPiA+IC19 Cj4gPiAtCj4gPiAtc3RhdGljIHZvaWQgc2V0X3Zlc2FfYmFja2xpZ2h0X2VuYWJsZShzdHJ1Y3Qg aW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiBib29sIGVuYWJsZSkKPiA+IC17Cj4gPiAt wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gaW50ZWxfYXR0YWNoZWRf ZHAoY29ubmVjdG9yKTsKPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gPiAtwqDCoMKgwqDCoMKgwqBpbnQgcmV0 Owo+ID4gLcKgwqDCoMKgwqDCoMKgdTggcmVnX3ZhbCA9IDA7Cj4gPiAtCj4gPiAtwqDCoMKgwqDC oMKgwqAvKiBFYXJseSByZXR1cm4gd2hlbiBkaXNwbGF5IHVzZSBvdGhlciBtZWNoYW5pc20gdG8g ZW5hYmxlCj4gPiBiYWNrbGlnaHQuICovCj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAoIWNvbm5lY3Rv ci0+cGFuZWwuYmFja2xpZ2h0LmVkcC52ZXNhLmF1eF9lbmFibGUpCj4gPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgcmV0ID0g ZHJtX2RwX2RwY2RfcmVhZGIoJmludGVsX2RwLT5hdXgsCj4gPiBEUF9FRFBfRElTUExBWV9DT05U Uk9MX1JFR0lTVEVSLCAmcmVnX3ZhbCk7Cj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAocmV0ICE9IDEp IHsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZGJnX2ttcygmaTkxNS0+ ZHJtLCAiRmFpbGVkIHRvIHJlYWQgZURQIGRpc3BsYXkgY29udHJvbAo+ID4gcmVnaXN0ZXI6ICVk XG4iLCByZXQpOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsKPiA+ IC3CoMKgwqDCoMKgwqDCoH0KPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoGlmIChlbmFibGUpCj4g PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVnX3ZhbCB8PSBEUF9FRFBfQkFDS0xJ R0hUX0VOQUJMRTsKPiA+IC3CoMKgwqDCoMKgwqDCoGVsc2UKPiA+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZWdfdmFsICY9IH4oRFBfRURQX0JBQ0tMSUdIVF9FTkFCTEUpOwo+ID4g K8KgwqDCoMKgwqDCoMKgc3RydWN0IGludGVsX3BhbmVsICpwYW5lbCA9ICZjb25uZWN0b3ItPnBh bmVsOwo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190 b19pbnRlbF9kcChjb25uZWN0b3ItPmVuY29kZXIpOwo+ID4gwqAgCj4gPiAtwqDCoMKgwqDCoMKg wqByZXQgPSBkcm1fZHBfZHBjZF93cml0ZWIoJmludGVsX2RwLT5hdXgsCj4gPiBEUF9FRFBfRElT UExBWV9DT05UUk9MX1JFR0lTVEVSLCByZWdfdmFsKTsKPiA+IC3CoMKgwqDCoMKgwqDCoGlmIChy ZXQgIT0gMSkgewo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9kYmdfa21z KCZpOTE1LT5kcm0sICJGYWlsZWQgdG8gJXMgYXV4IGJhY2tsaWdodDogJWRcbiIsCj4gPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbmFibGUg PyAiZW5hYmxlIiA6ICJkaXNhYmxlIiwgcmV0KTsKPiA+IC3CoMKgwqDCoMKgwqDCoH0KPiA+ICvC oMKgwqDCoMKgwqDCoGRybV9lZHBfYmFja2xpZ2h0X3NldF9sZXZlbCgmaW50ZWxfZHAtPmF1eCwg JnBhbmVsLQo+ID4gPmJhY2tsaWdodC5lZHAudmVzYS5pbmZvLCBsZXZlbCk7Cj4gPiDCoCB9Cj4g PiDCoCAKPiA+IMKgIHN0YXRpYyB2b2lkCj4gPiBAQCAtMzg1LDE3MCArMjkwLDQ2IEBAIGludGVs X2RwX2F1eF92ZXNhX2VuYWJsZV9iYWNrbGlnaHQoY29uc3Qgc3RydWN0Cj4gPiBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3Qgc3RydWN0IGRybV9jb25u ZWN0b3Jfc3RhdGUKPiA+ICpjb25uX3N0YXRlLCB1MzIgbGV2ZWwpCj4gPiDCoCB7Cj4gPiDCoMKg wqDCoMKgwqDCoMKgc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gdG9faW50ZWxf Y29ubmVjdG9yKGNvbm5fc3RhdGUtCj4gPiA+Y29ubmVjdG9yKTsKPiA+IC3CoMKgwqDCoMKgwqDC oHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBpbnRlbF9hdHRhY2hlZF9kcChjb25uZWN0b3Ip Owo+ID4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBkcF90 b19pOTE1KGludGVsX2RwKTsKPiA+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaW50ZWxfcGFuZWwg KnBhbmVsID0gJmNvbm5lY3Rvci0+cGFuZWw7Cj4gPiAtwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ ID4gLcKgwqDCoMKgwqDCoMKgdTggZHBjZF9idWYsIG5ld19kcGNkX2J1ZjsKPiA+IC3CoMKgwqDC oMKgwqDCoHU4IHB3bWdlbl9iaXRfY291bnQgPSBwYW5lbC0+YmFja2xpZ2h0LmVkcC52ZXNhLnB3 bWdlbl9iaXRfY291bnQ7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqByZXQgPSBkcm1fZHBfZHBj ZF9yZWFkYigmaW50ZWxfZHAtPmF1eCwKPiA+IERQX0VEUF9CQUNLTElHSFRfTU9ERV9TRVRfUkVH SVNURVIsICZkcGNkX2J1Zik7Cj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAocmV0ICE9IDEpIHsKPiA+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAi RmFpbGVkIHRvIHJlYWQgYmFja2xpZ2h0IG1vZGU6Cj4gPiAlZFxuIiwgcmV0KTsKPiA+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gPiAtwqDCoMKgwqDCoMKgwqB9Cj4g PiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBuZXdfZHBjZF9idWYgPSBkcGNkX2J1ZjsKPiA+IC0KPiA+ IC3CoMKgwqDCoMKgwqDCoGlmICgoZHBjZF9idWYgJiBEUF9FRFBfQkFDS0xJR0hUX0NPTlRST0xf TU9ERV9NQVNLKSAhPQo+ID4gRFBfRURQX0JBQ0tMSUdIVF9DT05UUk9MX01PREVfTUFTSykgewo+ ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG5ld19kcGNkX2J1ZiAmPSB+RFBfRURQ X0JBQ0tMSUdIVF9DT05UUk9MX01PREVfTUFTSzsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBuZXdfZHBjZF9idWYgfD0gRFBfRURQX0JBQ0tMSUdIVF9DT05UUk9MX01PREVfRFBD RDsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBkcm1fZHBf ZHBjZF93cml0ZWIoJmludGVsX2RwLT5hdXgsCj4gPiBEUF9FRFBfUFdNR0VOX0JJVF9DT1VOVCwg cHdtZ2VuX2JpdF9jb3VudCk7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYg KHJldCAhPSAxKQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAiRmFpbGVkIHRvIHdyaXRlIGF1eCBwd21nZW4K PiA+IGJpdCBjb3VudDogJWRcbiIsIHJldCk7Cj4gPiAtwqDCoMKgwqDCoMKgwqB9Cj4gPiAtCj4g PiAtwqDCoMKgwqDCoMKgwqBpZiAocGFuZWwtPmJhY2tsaWdodC5lZHAudmVzYS5wd21fZnJlcV9w cmVfZGl2aWRlcikgewo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IGRy bV9kcF9kcGNkX3dyaXRlYigmaW50ZWxfZHAtPmF1eCwKPiA+IERQX0VEUF9CQUNLTElHSFRfRlJF UV9TRVQsCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBhbmVsLQo+ID4gPmJhY2tsaWdodC5l ZHAudmVzYS5wd21fZnJlcV9wcmVfZGl2aWRlcik7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaWYgKHJldCA9PSAxKQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBuZXdfZHBjZF9idWYgfD0KPiA+IERQX0VEUF9CQUNLTElHSFRfRlJF UV9BVVhfU0VUX0VOQUJMRTsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbHNl Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9k Ymdfa21zKCZpOTE1LT5kcm0sICJGYWlsZWQgdG8gd3JpdGUgYXV4Cj4gPiBiYWNrbGlnaHQgZnJl cXVlbmN5OiAlZFxuIiwKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQpOwo+ID4gLcKgwqDCoMKgwqDCoMKg fQo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgaWYgKG5ld19kcGNkX2J1ZiAhPSBkcGNkX2J1Zikg ewo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IGRybV9kcF9kcGNkX3dy aXRlYigmaW50ZWxfZHAtPmF1eCwKPiA+IERQX0VEUF9CQUNLTElHSFRfTU9ERV9TRVRfUkVHSVNU RVIsCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5ld19kcGNkX2J1Zik7Cj4gPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCAhPSAxKQo+ID4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAi RmFpbGVkIHRvIHdyaXRlIGF1eAo+ID4gYmFja2xpZ2h0IG1vZGU6ICVkXG4iLCByZXQpOwo+ID4g LcKgwqDCoMKgwqDCoMKgfQo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGludGVsX2RwICppbnRl bF9kcCA9IGVuY190b19pbnRlbF9kcChjb25uZWN0b3ItPmVuY29kZXIpOwo+ID4gwqAgCj4gPiAt wqDCoMKgwqDCoMKgwqBpbnRlbF9kcF9hdXhfdmVzYV9zZXRfYmFja2xpZ2h0KGNvbm5fc3RhdGUs IGxldmVsKTsKPiA+IC3CoMKgwqDCoMKgwqDCoHNldF92ZXNhX2JhY2tsaWdodF9lbmFibGUoY29u bmVjdG9yLCB0cnVlKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGRybV9lZHBfYmFja2xpZ2h0X2VuYWJs ZSgmaW50ZWxfZHAtPmF1eCwgJnBhbmVsLQo+ID4gPmJhY2tsaWdodC5lZHAudmVzYS5pbmZvLCBs ZXZlbCk7Cj4gPiDCoCB9Cj4gPiDCoCAKPiA+IMKgIHN0YXRpYyB2b2lkIGludGVsX2RwX2F1eF92 ZXNhX2Rpc2FibGVfYmFja2xpZ2h0KGNvbnN0IHN0cnVjdAo+ID4gZHJtX2Nvbm5lY3Rvcl9zdGF0 ZSAqb2xkX2Nvbm5fc3RhdGUsCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB1MzIgbGV2ZWwpCj4gPiDCoCB7Cj4gPiAtwqDCoMKgwqDCoMKgwqBzZXRfdmVzYV9iYWNr bGlnaHRfZW5hYmxlKHRvX2ludGVsX2Nvbm5lY3RvcihvbGRfY29ubl9zdGF0ZS0KPiA+ID5jb25u ZWN0b3IpLCBmYWxzZSk7Cj4gPiAtfQo+ID4gLQo+ID4gLS8qCj4gPiAtICogQ29tcHV0ZSBQV00g ZnJlcXVlbmN5IGRpdmlkZXIgdmFsdWUgYmFzZWQgb2ZmIHRoZSBmcmVxdWVuY3kgcHJvdmlkZWQg dG8KPiA+IHVzIGJ5IHRoZSB2YnQuCj4gPiAtICogVGhlIFBXTSBGcmVxdWVuY3kgaXMgY2FsY3Vs YXRlZCBhcyAyN01oeiAvIChGIHggUCkuCj4gPiAtICogLSBXaGVyZSBGID0gUFdNIEZyZXF1ZW5j eSBQcmUtRGl2aWRlciB2YWx1ZSBwcm9ncmFtbWVkIGJ5IGZpZWxkIDc6MCBvZgo+ID4gdGhlCj4g PiAtICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRURQX0JBQ0tMSUdIVF9GUkVRX1NFVCByZWdp c3RlciAoRFBDRCBBZGRyZXNzIDAwNzI4aCkKPiA+IC0gKiAtIFdoZXJlIFAgPSAyXlBuLCB3aGVy ZSBQbiBpcyB0aGUgdmFsdWUgcHJvZ3JhbW1lZCBieSBmaWVsZCA0OjAgb2YgdGhlCj4gPiAtICrC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRURQX1BXTUdFTl9CSVRfQ09VTlQgcmVnaXN0ZXIgKERQ Q0QgQWRkcmVzcyAwMDcyNGgpCj4gPiAtICovCj4gPiAtc3RhdGljIHUzMiBpbnRlbF9kcF9hdXhf dmVzYV9jYWxjX21heF9iYWNrbGlnaHQoc3RydWN0IGludGVsX2Nvbm5lY3Rvcgo+ID4gKmNvbm5l Y3RvcikKPiA+IC17Cj4gPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSA9IHRvX2k5MTUoY29ubmVjdG9yLT5iYXNlLmRldik7Cj4gPiAtwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gaW50ZWxfYXR0YWNoZWRfZHAoY29ubmVjdG9yKTsK PiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciA9Cj4g PiB0b19pbnRlbF9jb25uZWN0b3Iob2xkX2Nvbm5fc3RhdGUtPmNvbm5lY3Rvcik7Cj4gPiDCoMKg wqDCoMKgwqDCoMKgc3RydWN0IGludGVsX3BhbmVsICpwYW5lbCA9ICZjb25uZWN0b3ItPnBhbmVs Owo+ID4gLcKgwqDCoMKgwqDCoMKgdTMyIG1heF9iYWNrbGlnaHQgPSAwOwo+ID4gLcKgwqDCoMKg wqDCoMKgaW50IHJldCwgZnJlcSwgZnhwLCBmeHBfbWluLCBmeHBfbWF4LCBmeHBfYWN0dWFsLCBm ID0gMTsKPiA+IC3CoMKgwqDCoMKgwqDCoHU4IHBuLCBwbl9taW4sIHBuX21heDsKPiA+IC0KPiA+ IC3CoMKgwqDCoMKgwqDCoHJldCA9IGRybV9kcF9kcGNkX3JlYWRiKCZpbnRlbF9kcC0+YXV4LCBE UF9FRFBfUFdNR0VOX0JJVF9DT1VOVCwKPiA+ICZwbik7Cj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAo cmV0ICE9IDEpIHsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZGJnX2tt cygmaTkxNS0+ZHJtLCAiRmFpbGVkIHRvIHJlYWQgcHdtZ2VuIGJpdCBjb3VudAo+ID4gY2FwOiAl ZFxuIiwgcmV0KTsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsK PiA+IC3CoMKgwqDCoMKgwqDCoH0KPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoHBuICY9IERQX0VE UF9QV01HRU5fQklUX0NPVU5UX01BU0s7Cj4gPiAtwqDCoMKgwqDCoMKgwqBtYXhfYmFja2xpZ2h0 ID0gKDEgPDwgcG4pIC0gMTsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoC8qIEZpbmQgZGVzaXJl ZCB2YWx1ZSBvZiAoRiB4IFApCj4gPiAtwqDCoMKgwqDCoMKgwqAgKiBOb3RlIHRoYXQsIGlmIEYg eCBQIGlzIG91dCBvZiBzdXBwb3J0ZWQgcmFuZ2UsIHRoZSBtYXhpbXVtIHZhbHVlCj4gPiBvcgo+ ID4gLcKgwqDCoMKgwqDCoMKgICogbWluaW11bSB2YWx1ZSB3aWxsIGFwcGxpZWQgYXV0b21hdGlj YWxseS4gU28gbm8gbmVlZCB0byBjaGVjawo+ID4gdGhhdC4KPiA+IC3CoMKgwqDCoMKgwqDCoCAq Lwo+ID4gLcKgwqDCoMKgwqDCoMKgZnJlcSA9IGk5MTUtPnZidC5iYWNrbGlnaHQucHdtX2ZyZXFf aHo7Cj4gPiAtwqDCoMKgwqDCoMKgwqBkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAiVkJUIGRlZmlu ZWQgYmFja2xpZ2h0IGZyZXF1ZW5jeSAldSBIelxuIiwKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZnJlcSk7Cj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAoIWZyZXEpIHsK PiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZGJnX2ttcygmaTkxNS0+ZHJt LAo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgIlVzZSBwYW5lbCBkZWZhdWx0IGJhY2tsaWdodCBmcmVxdWVuY3lcbiIpOwo+ID4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBtYXhfYmFja2xpZ2h0Owo+ID4gLcKgwqDC oMKgwqDCoMKgfQo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgZnhwID0gRElWX1JPVU5EX0NMT1NF U1QoS0h6KERQX0VEUF9CQUNLTElHSFRfRlJFUV9CQVNFX0tIWiksIGZyZXEpOwo+ID4gLQo+ID4g LcKgwqDCoMKgwqDCoMKgLyogVXNlIGhpZ2hlc3QgcG9zc2libGUgdmFsdWUgb2YgUG4gZm9yIG1v cmUgZ3JhbnVsYXJpdHkgb2YKPiA+IGJyaWdodG5lc3MKPiA+IC3CoMKgwqDCoMKgwqDCoCAqIGFk anVzdG1lbnQgd2hpbGUgc2F0aWZ5aW5nIHRoZSBjb25kaXRpb25zIGJlbG93Lgo+ID4gLcKgwqDC oMKgwqDCoMKgICogLSBQbiBpcyBpbiB0aGUgcmFuZ2Ugb2YgUG5fbWluIGFuZCBQbl9tYXgKPiA+ IC3CoMKgwqDCoMKgwqDCoCAqIC0gRiBpcyBpbiB0aGUgcmFuZ2Ugb2YgMSBhbmQgMjU1Cj4gPiAt wqDCoMKgwqDCoMKgwqAgKiAtIEZ4UCBpcyB3aXRoaW4gMjUlIG9mIGRlc2lyZWQgdmFsdWUuCj4g PiAtwqDCoMKgwqDCoMKgwqAgKsKgwqAgTm90ZTogMjUlIGlzIGFyYml0cmFyeSB2YWx1ZSBhbmQg bWF5IG5lZWQgc29tZSB0d2Vhay4KPiA+IC3CoMKgwqDCoMKgwqDCoCAqLwo+ID4gLcKgwqDCoMKg wqDCoMKgcmV0ID0gZHJtX2RwX2RwY2RfcmVhZGIoJmludGVsX2RwLT5hdXgsCj4gPiBEUF9FRFBf UFdNR0VOX0JJVF9DT1VOVF9DQVBfTUlOLCAmcG5fbWluKTsKPiA+IC3CoMKgwqDCoMKgwqDCoGlm IChyZXQgIT0gMSkgewo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9kYmdf a21zKCZpOTE1LT5kcm0sICJGYWlsZWQgdG8gcmVhZCBwd21nZW4gYml0IGNvdW50IGNhcAo+ID4g bWluOiAlZFxuIiwgcmV0KTsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gbWF4X2JhY2tsaWdodDsKPiA+IC3CoMKgwqDCoMKgwqDCoH0KPiA+IC3CoMKgwqDCoMKgwqDC oHJldCA9IGRybV9kcF9kcGNkX3JlYWRiKCZpbnRlbF9kcC0+YXV4LAo+ID4gRFBfRURQX1BXTUdF Tl9CSVRfQ09VTlRfQ0FQX01BWCwgJnBuX21heCk7Cj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAocmV0 ICE9IDEpIHsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZGJnX2ttcygm aTkxNS0+ZHJtLCAiRmFpbGVkIHRvIHJlYWQgcHdtZ2VuIGJpdCBjb3VudCBjYXAKPiA+IG1heDog JWRcbiIsIHJldCk7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIG1h eF9iYWNrbGlnaHQ7Cj4gPiAtwqDCoMKgwqDCoMKgwqB9Cj4gPiAtwqDCoMKgwqDCoMKgwqBwbl9t aW4gJj0gRFBfRURQX1BXTUdFTl9CSVRfQ09VTlRfTUFTSzsKPiA+IC3CoMKgwqDCoMKgwqDCoHBu X21heCAmPSBEUF9FRFBfUFdNR0VOX0JJVF9DT1VOVF9NQVNLOwo+ID4gLQo+ID4gLcKgwqDCoMKg wqDCoMKgLyogRW5zdXJlIGZyZXF1ZW5jeSBpcyB3aXRoaW4gMjUlIG9mIGRlc2lyZWQgdmFsdWUg Ki8KPiA+IC3CoMKgwqDCoMKgwqDCoGZ4cF9taW4gPSBESVZfUk9VTkRfQ0xPU0VTVChmeHAgKiAz LCA0KTsKPiA+IC3CoMKgwqDCoMKgwqDCoGZ4cF9tYXggPSBESVZfUk9VTkRfQ0xPU0VTVChmeHAg KiA1LCA0KTsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoGlmIChmeHBfbWluIDwgKDEgPDwgcG5f bWluKSB8fCAoMjU1IDw8IHBuX21heCkgPCBmeHBfbWF4KSB7Cj4gPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwKPiA+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJWQlQgZGVmaW5lZCBiYWNr bGlnaHQgZnJlcXVlbmN5IG91dCBvZgo+ID4gcmFuZ2VcbiIpOwo+ID4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiBtYXhfYmFja2xpZ2h0Owo+ID4gLcKgwqDCoMKgwqDCoMKg fQo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgZm9yIChwbiA9IHBuX21heDsgcG4gPj0gcG5fbWlu OyBwbi0tKSB7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZiA9IGNsYW1wKERJ Vl9ST1VORF9DTE9TRVNUKGZ4cCwgMSA8PCBwbiksIDEsIDI1NSk7Cj4gPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgZnhwX2FjdHVhbCA9IGYgPDwgcG47Cj4gPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaWYgKGZ4cF9taW4gPD0gZnhwX2FjdHVhbCAmJiBmeHBfYWN0dWFs IDw9IGZ4cF9tYXgpCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGJyZWFrOwo+ID4gLcKgwqDCoMKgwqDCoMKgfQo+ID4gLQo+ID4gLcKgwqDCoMKgwqDC oMKgZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwgIlVzaW5nIGVEUCBwd21nZW4gYml0IGNvdW50IG9m ICVkXG4iLCBwbik7Cj4gPiAtwqDCoMKgwqDCoMKgwqByZXQgPSBkcm1fZHBfZHBjZF93cml0ZWIo JmludGVsX2RwLT5hdXgsIERQX0VEUF9QV01HRU5fQklUX0NPVU5ULAo+ID4gcG4pOwo+ID4gLcKg wqDCoMKgwqDCoMKgaWYgKHJldCAhPSAxKSB7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwgIkZhaWxlZCB0byB3cml0ZSBhdXggcHdtZ2Vu IGJpdAo+ID4gY291bnQ6ICVkXG4iLCByZXQpOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybiBtYXhfYmFja2xpZ2h0Owo+ID4gLcKgwqDCoMKgwqDCoMKgfQo+ID4gLQo+ ID4gLcKgwqDCoMKgwqDCoMKgcGFuZWwtPmJhY2tsaWdodC5lZHAudmVzYS5wd21nZW5fYml0X2Nv dW50ID0gcG47Cj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAoaW50ZWxfZHAtPmVkcF9kcGNkWzJdICYg RFBfRURQX0JBQ0tMSUdIVF9GUkVRX0FVWF9TRVRfQ0FQKQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHBhbmVsLT5iYWNrbGlnaHQuZWRwLnZlc2EucHdtX2ZyZXFfcHJlX2Rpdmlk ZXIgPSBmOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgbWF4X2JhY2tsaWdodCA9ICgxIDw8IHBu KSAtIDE7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gZW5j X3RvX2ludGVsX2RwKGNvbm5lY3Rvci0+ZW5jb2Rlcik7Cj4gPiDCoCAKPiA+IC3CoMKgwqDCoMKg wqDCoHJldHVybiBtYXhfYmFja2xpZ2h0Owo+ID4gK8KgwqDCoMKgwqDCoMKgZHJtX2VkcF9iYWNr bGlnaHRfZGlzYWJsZSgmaW50ZWxfZHAtPmF1eCwgJnBhbmVsLQo+ID4gPmJhY2tsaWdodC5lZHAu dmVzYS5pbmZvKTsKPiA+IMKgIH0KPiA+IMKgIAo+ID4gLXN0YXRpYyBpbnQgaW50ZWxfZHBfYXV4 X3Zlc2Ffc2V0dXBfYmFja2xpZ2h0KHN0cnVjdCBpbnRlbF9jb25uZWN0b3IKPiA+ICpjb25uZWN0 b3IsCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW51bSBwaXBlIHBpcGUpCj4g PiArc3RhdGljIGludCBpbnRlbF9kcF9hdXhfdmVzYV9zZXR1cF9iYWNrbGlnaHQoc3RydWN0IGlu dGVsX2Nvbm5lY3Rvcgo+ID4gKmNvbm5lY3RvciwgZW51bSBwaXBlIHBpcGUpCj4gPiDCoCB7Cj4g PiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGludGVsX2F0dGFj aGVkX2RwKGNvbm5lY3Rvcik7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGludGVsX3BhbmVs ICpwYW5lbCA9ICZjb25uZWN0b3ItPnBhbmVsOwo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiA+ICvCoMKgwqDC oMKgwqDCoHUxNiBjdXJyZW50X2xldmVsOwo+ID4gK8KgwqDCoMKgwqDCoMKgdTggY3VycmVudF9t b2RlOwo+ID4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPiA+IMKgIAo+ID4gLcKgwqDCoMKgwqDC oMKgaWYgKGludGVsX2RwLT5lZHBfZHBjZFsxXSAmIERQX0VEUF9CQUNLTElHSFRfQVVYX0VOQUJM RV9DQVApCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGFuZWwtPmJhY2tsaWdo dC5lZHAudmVzYS5hdXhfZW5hYmxlID0gdHJ1ZTsKPiA+IC3CoMKgwqDCoMKgwqDCoGlmIChpbnRl bF9kcC0+ZWRwX2RwY2RbMl0gJiBEUF9FRFBfQkFDS0xJR0hUX0JSSUdIVE5FU1NfQllURV9DT1VO VCkKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYW5lbC0+YmFja2xpZ2h0LmVk cC52ZXNhLmxzYl9yZWdfdXNlZCA9IHRydWU7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBwYW5l bC0+YmFja2xpZ2h0Lm1heCA9Cj4gPiBpbnRlbF9kcF9hdXhfdmVzYV9jYWxjX21heF9iYWNrbGln aHQoY29ubmVjdG9yKTsKPiA+IC3CoMKgwqDCoMKgwqDCoGlmICghcGFuZWwtPmJhY2tsaWdodC5t YXgpCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FTk9ERVY7Cj4g PiArwqDCoMKgwqDCoMKgwqByZXQgPSBkcm1fZWRwX2JhY2tsaWdodF9pbml0KCZpbnRlbF9kcC0+ YXV4LCAmcGFuZWwtCj4gPiA+YmFja2xpZ2h0LmVkcC52ZXNhLmluZm8sCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpOTE1LT52YnQuYmFja2xpZ2h0LnB3bV9mcmVxX2h6LAo+ID4gaW50ZWxfZHAtPmVkcF9k cGNkLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmN1cnJlbnRfbGV2ZWwsICZjdXJyZW50X21vZGUpOwo+ ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+IMKgIAo+ID4gK8KgwqDCoMKgwqDCoMKgcGFuZWwtPmJh Y2tsaWdodC5tYXggPSBwYW5lbC0+YmFja2xpZ2h0LmVkcC52ZXNhLmluZm8ubWF4Owo+ID4gwqDC oMKgwqDCoMKgwqDCoHBhbmVsLT5iYWNrbGlnaHQubWluID0gMDsKPiA+IC3CoMKgwqDCoMKgwqDC oHBhbmVsLT5iYWNrbGlnaHQubGV2ZWwgPSBpbnRlbF9kcF9hdXhfdmVzYV9nZXRfYmFja2xpZ2h0 KGNvbm5lY3RvciwKPiA+IHBpcGUpOwo+ID4gLcKgwqDCoMKgwqDCoMKgcGFuZWwtPmJhY2tsaWdo dC5lbmFibGVkID0KPiA+IGludGVsX2RwX2F1eF92ZXNhX2JhY2tsaWdodF9kcGNkX21vZGUoY29u bmVjdG9yKSAmJgo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwYW5lbC0+YmFja2xpZ2h0LmxldmVsICE9IDA7Cj4g PiArwqDCoMKgwqDCoMKgwqBpZiAoY3VycmVudF9tb2RlID09IERQX0VEUF9CQUNLTElHSFRfQ09O VFJPTF9NT0RFX0RQQ0QpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYW5l bC0+YmFja2xpZ2h0LmxldmVsID0gY3VycmVudF9sZXZlbDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBwYW5lbC0+YmFja2xpZ2h0LmVuYWJsZWQgPSBwYW5lbC0+YmFja2xpZ2h0 LmxldmVsICE9IDA7Cj4gPiArwqDCoMKgwqDCoMKgwqB9IGVsc2Ugewo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHBhbmVsLT5iYWNrbGlnaHQubGV2ZWwgPSBwYW5lbC0+YmFja2xp Z2h0Lm1heDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYW5lbC0+YmFja2xp Z2h0LmVuYWJsZWQgPSBmYWxzZTsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+IMKgIAo+ID4gwqDC oMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ID4gwqAgfQo+ID4gQEAgLTU1OSwxNiArMzQwLDEyIEBA IGludGVsX2RwX2F1eF9zdXBwb3J0c192ZXNhX2JhY2tsaWdodChzdHJ1Y3QKPiA+IGludGVsX2Nv bm5lY3RvciAqY29ubmVjdG9yKQo+ID4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHAgPSBpbnRlbF9hdHRhY2hlZF9kcChjb25uZWN0b3IpOwo+ID4gwqDCoMKgwqDCoMKg wqDCoHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7 Cj4gPiDCoCAKPiA+IC3CoMKgwqDCoMKgwqDCoC8qIENoZWNrIHRoZSBlRFAgRGlzcGxheSBjb250 cm9sIGNhcGFiaWxpdGllcyByZWdpc3RlcnMgdG8gZGV0ZXJtaW5lCj4gPiBpZgo+ID4gLcKgwqDC oMKgwqDCoMKgICogdGhlIHBhbmVsIGNhbiBzdXBwb3J0IGJhY2tsaWdodCBjb250cm9sIG92ZXIg dGhlIGF1eCBjaGFubmVsLgo+ID4gLcKgwqDCoMKgwqDCoMKgICoKPiA+IC3CoMKgwqDCoMKgwqDC oCAqIFRPRE86IFdlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgQVVYIG9ubHkgYmFja2xpZ2h0Cj4g PiBjb25maWd1cmF0aW9ucywgbm90IGJhY2tsaWdodHMgd2hpY2gKPiA+ICvCoMKgwqDCoMKgwqDC oC8qIFRPRE86IFdlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgQVVYIG9ubHkgYmFja2xpZ2h0Cj4g PiBjb25maWd1cmF0aW9ucywgbm90IGJhY2tsaWdodHMgd2hpY2gKPiA+IMKgwqDCoMKgwqDCoMKg wqAgKiByZXF1aXJlIGEgbWl4IG9mIFBXTSBhbmQgQVVYIGNvbnRyb2xzIHRvIHdvcmsuIEluIHRo ZSBtZWFuIHRpbWUsCj4gPiB0aGVzZSBtYWNoaW5lcyB0eXBpY2FsbHkKPiA+IMKgwqDCoMKgwqDC oMKgwqAgKiB3b3JrIGp1c3QgZmluZSB1c2luZyBub3JtYWwgUFdNIGNvbnRyb2xzIGFueXdheS4K PiA+IMKgwqDCoMKgwqDCoMKgwqAgKi8KPiA+IC3CoMKgwqDCoMKgwqDCoGlmIChpbnRlbF9kcC0+ ZWRwX2RwY2RbMV0gJiBEUF9FRFBfVENPTl9CQUNLTElHSFRfQURKVVNUTUVOVF9DQVAgJiYKPiA+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoCAoaW50ZWxfZHAtPmVkcF9kcGNkWzFdICYgRFBfRURQX0JB Q0tMSUdIVF9BVVhfRU5BQkxFX0NBUCkgJiYKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoCAoaW50 ZWxfZHAtPmVkcF9kcGNkWzJdICYKPiA+IERQX0VEUF9CQUNLTElHSFRfQlJJR0hUTkVTU19BVVhf U0VUX0NBUCkpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmICgoaW50ZWxfZHAtPmVkcF9kcGNkWzFd ICYgRFBfRURQX0JBQ0tMSUdIVF9BVVhfRU5BQkxFX0NBUCkgJiYKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoCBkcm1fZWRwX2JhY2tsaWdodF9zdXBwb3J0ZWQoaW50ZWxfZHAtPmVkcF9kcGNkKSkg ewo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZGJnX2ttcygmaTkxNS0+ ZHJtLCAiQVVYIEJhY2tsaWdodCBDb250cm9sCj4gPiBTdXBwb3J0ZWQhXG4iKTsKPiA+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHRydWU7Cj4gPiDCoMKgwqDCoMKgwqDC oMKgfQo+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9kcF9oZWxwZXIuaCBiL2luY2x1 ZGUvZHJtL2RybV9kcF9oZWxwZXIuaAo+ID4gaW5kZXggZWRmZmQxZGNjYTNlLi4xZWNhMGI0MmZj NDUgMTAwNjQ0Cj4gPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fZHBfaGVscGVyLmgKPiA+ICsrKyBi L2luY2x1ZGUvZHJtL2RybV9kcF9oZWxwZXIuaAo+ID4gQEAgLTE3OTAsNiArMTc5MCwyNCBAQCBk cm1fZHBfc2lua19jYW5fZG9fdmlkZW9fd2l0aG91dF90aW1pbmdfbXNhKGNvbnN0IHU4Cj4gPiBk cGNkW0RQX1JFQ0VJVkVSX0NBUF9TSVpFXSkKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgRFBfTVNBX1RJTUlOR19QQVJfSUdOT1JFRDsKPiA+IMKgIH0KPiA+IMKgIAo+ID4gKy8q Kgo+ID4gKyAqIGRybV9lZHBfYmFja2xpZ2h0X3N1cHBvcnRlZCgpIC0gQ2hlY2sgYW4gZURQIERQ Q0QgZm9yIFZFU0EgYmFja2xpZ2h0Cj4gPiBzdXBwb3J0Cj4gPiArICogQGVkcF9kcGNkOiBUaGUg RFBDRCB0byBjaGVjawo+ID4gKyAqCj4gPiArICogTm90ZSB0aGF0IGN1cnJlbnRseSB0aGlzIGZ1 bmN0aW9uIHdpbGwgcmV0dXJuICVmYWxzZSBmb3IgcGFuZWxzIHdoaWNoCj4gPiBzdXBwb3J0IHZh cmlvdXMgRFBDRAo+ID4gKyAqIGJhY2tsaWdodCBmZWF0dXJlcyBidXQgd2hpY2ggcmVxdWlyZSB0 aGUgYnJpZ2h0bmVzcyBiZSBzZXQgdGhyb3VnaCBQV00sCj4gPiBhbmQgZG9uJ3Qgc3VwcG9ydCBz ZXR0aW5nCj4gPiArICogdGhlIGJyaWdodG5lc3MgbGV2ZWwgdmlhIHRoZSBEUENELiBUaGlzIGlz IGEgVE9ETy4KPiA+ICsgKgo+ID4gKyAqIFJldHVybnM6ICVUcnVlIGlmIEBlZHBfZHBjZCBpbmRp Y2F0ZXMgdGhhdCBWRVNBIGJhY2tsaWdodCBjb250cm9scyBhcmUKPiA+IHN1cHBvcnRlZCwgJWZh bHNlCj4gPiArICogb3RoZXJ3aXNlCj4gPiArICovCj4gPiArc3RhdGljIGlubGluZSBib29sCj4g PiArZHJtX2VkcF9iYWNrbGlnaHRfc3VwcG9ydGVkKGNvbnN0IHU4IGVkcF9kcGNkW0VEUF9ESVNQ TEFZX0NUTF9DQVBfU0laRV0pCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIChlZHBf ZHBjZFsxXSAmIERQX0VEUF9UQ09OX0JBQ0tMSUdIVF9BREpVU1RNRU5UX0NBUCkgJiYKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoZWRwX2RwY2RbMl0gJiBEUF9FRFBfQkFDS0xJ R0hUX0JSSUdIVE5FU1NfQVVYX1NFVF9DQVApOwo+ID4gK30KPiA+ICsKPiA+IMKgIC8qCj4gPiDC oMKgICogRGlzcGxheVBvcnQgQVVYIGNoYW5uZWwKPiA+IMKgwqAgKi8KPiA+IEBAIC0yMDg5LDYg KzIxMDcsMzYgQEAgZHJtX2RwX2hhc19xdWlyayhjb25zdCBzdHJ1Y3QgZHJtX2RwX2Rlc2MgKmRl c2MsIGVudW0KPiA+IGRybV9kcF9xdWlyayBxdWlyaykKPiA+IMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gZGVzYy0+cXVpcmtzICYgQklUKHF1aXJrKTsKPiA+IMKgIH0KPiA+IMKgIAo+ID4gKy8qKgo+ ID4gKyAqIHN0cnVjdCBkcm1fZWRwX2JhY2tsaWdodF9pbmZvIC0gUHJvYmVkIGVEUCBiYWNrbGln aHQgaW5mbyBzdHJ1Y3QKPiA+ICsgKiBAcHdtZ2VuX2JpdF9jb3VudDogVGhlIHB3bWdlbiBiaXQg Y291bnQKPiA+ICsgKiBAcHdtX2ZyZXFfcHJlX2RpdmlkZXI6IFRoZSBQV00gZnJlcXVlbmN5IHBy ZS1kaXZpZGVyIHZhbHVlIGJlaW5nIHVzZWQKPiA+IGZvciB0aGlzIGJhY2tsaWdodCwgaWYgYW55 Cj4gPiArICogQG1heDogVGhlIG1heGltdW0gYmFja2xpZ2h0IGxldmVsIHRoYXQgbWF5IGJlIHNl dAo+ID4gKyAqIEBsc2JfcmVnX3VzZWQ6IERvIHdlIGFsc28gd3JpdGUgdmFsdWVzIHRvIHRoZQo+ ID4gRFBfRURQX0JBQ0tMSUdIVF9CUklHSFRORVNTX0xTQiByZWdpc3Rlcj8KPiA+ICsgKiBAYXV4 X2VuYWJsZTogRG9lcyB0aGUgcGFuZWwgc3VwcG9ydCB0aGUgQVVYIGVuYWJsZSBjYXA/Cj4gPiAr ICoKPiA+ICsgKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyB2YXJpb3VzIGRhdGEgYWJvdXQgYW4g ZURQIGJhY2tsaWdodCwgd2hpY2ggY2FuCj4gPiBiZSBwb3B1bGF0ZWQgYnkgdXNpbmcKPiA+ICsg KiBkcm1fZWRwX2JhY2tsaWdodF9pbml0KCkuCj4gPiArICovCj4gPiArc3RydWN0IGRybV9lZHBf YmFja2xpZ2h0X2luZm8gewo+ID4gK8KgwqDCoMKgwqDCoMKgdTggcHdtZ2VuX2JpdF9jb3VudDsK PiA+ICvCoMKgwqDCoMKgwqDCoHU4IHB3bV9mcmVxX3ByZV9kaXZpZGVyOwo+ID4gK8KgwqDCoMKg wqDCoMKgdTE2IG1heDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGJvb2wgbHNiX3JlZ191c2Vk IDogMTsKPiA+ICvCoMKgwqDCoMKgwqDCoGJvb2wgYXV4X2VuYWJsZSA6IDE7Cj4gPiArfTsKPiA+ ICsKPiA+ICtpbnQKPiA+ICtkcm1fZWRwX2JhY2tsaWdodF9pbml0KHN0cnVjdCBkcm1fZHBfYXV4 ICphdXgsIHN0cnVjdAo+ID4gZHJtX2VkcF9iYWNrbGlnaHRfaW5mbyAqYmwsCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUxNiBkcml2ZXJfcHdtX2ZyZXFf aHosIGNvbnN0IHU4Cj4gPiBlZHBfZHBjZFtFRFBfRElTUExBWV9DVExfQ0FQX1NJWkVdLAo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MTYgKmN1cnJlbnRf bGV2ZWwsIHU4ICpjdXJyZW50X21vZGUpOwo+ID4gK2ludCBkcm1fZWRwX2JhY2tsaWdodF9zZXRf bGV2ZWwoc3RydWN0IGRybV9kcF9hdXggKmF1eCwgY29uc3Qgc3RydWN0Cj4gPiBkcm1fZWRwX2Jh Y2tsaWdodF9pbmZvICpibCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHUxNiBsZXZlbCk7Cj4gPiAraW50IGRybV9lZHBf YmFja2xpZ2h0X2VuYWJsZShzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LCBjb25zdCBzdHJ1Y3QKPiA+ IGRybV9lZHBfYmFja2xpZ2h0X2luZm8gKmJsLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MTYgbGV2ZWwpOwo+ID4gK2ludCBkcm1f ZWRwX2JhY2tsaWdodF9kaXNhYmxlKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsIGNvbnN0IHN0cnVj dAo+ID4gZHJtX2VkcF9iYWNrbGlnaHRfaW5mbyAqYmwpOwo+ID4gKwo+ID4gwqAgI2lmZGVmIENP TkZJR19EUk1fRFBfQ0VDCj4gPiDCoCB2b2lkIGRybV9kcF9jZWNfaXJxKHN0cnVjdCBkcm1fZHBf YXV4ICphdXgpOwo+ID4gwqAgdm9pZCBkcm1fZHBfY2VjX3JlZ2lzdGVyX2Nvbm5lY3RvcihzdHJ1 Y3QgZHJtX2RwX2F1eCAqYXV4LAo+ID4gCj4gCgotLSAKU2luY2VyZWx5LAogICBMeXVkZSBQYXVs IChzaGUvaGVyKQogICBTb2Z0d2FyZSBFbmdpbmVlciBhdCBSZWQgSGF0CiAgIApOb3RlOiBJIGRl YWwgd2l0aCBhIGxvdCBvZiBlbWFpbHMgYW5kIGhhdmUgYSBsb3Qgb2YgYnVncyBvbiBteSBwbGF0 ZS4gSWYgeW91J3ZlCmFza2VkIG1lIGEgcXVlc3Rpb24sIGFyZSB3YWl0aW5nIGZvciBhIHJldmll dy9tZXJnZSBvbiBhIHBhdGNoLCBldGMuIGFuZCBJCmhhdmVuJ3QgcmVzcG9uZGVkIGluIGEgd2hp bGUsIHBsZWFzZSBmZWVsIGZyZWUgdG8gc2VuZCBtZSBhbm90aGVyIGVtYWlsIHRvIGNoZWNrCm9u IG15IHN0YXR1cy4gSSBkb24ndCBiaXRlIQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KTm91dmVhdSBtYWlsaW5nIGxpc3QKTm91dmVhdUBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9ub3V2ZWF1Cg==