From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 58DCA466E2 for ; Fri, 2 Jun 2023 17:12:33 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BFEC868C35F; Fri, 2 Jun 2023 20:12:31 +0300 (EEST) Received: from mail-vs1-f47.google.com (mail-vs1-f47.google.com [209.85.217.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7467668C277 for ; Fri, 2 Jun 2023 20:12:25 +0300 (EEST) Received: by mail-vs1-f47.google.com with SMTP id ada2fe7eead31-43b2da5b307so205938137.2 for ; Fri, 02 Jun 2023 10:12:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1685725944; x=1688317944; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=ZUXG6LnAfDLQWjsUTdvMPeKcFziI5MImeT2cSxBUPPY=; b=Csjh31dtUmmdi7nmUMfQQ8m6s4RVbP6FYhnt7pHYiuZXSE7B2UK4Do6TNQwlNcUslF NEOqKJq+AxNryKSGiD8QsmHHtTPNs9yqLXXBGpNxJxoXnVfFhj1ey+KJrtxTmKns0Obf SbZlMpMOPypQ1JKzVzqCbNw8uqHzvyvk7F6pjY1eorEqSVHXeUHu0FdY+CqWvNcNqIs3 vnOJO8BVomMGbH8EGTvfCY3LjsIv/7iXYnTrmwgCyzV1mp3AWOa+nVN3TeHbvHnIwg53 5JqvhNdwzQLPNKZRIq2cNE+YYq/s7ytntV3MVXvLoI0Q9S7ynyXCbkY8E/88elgjTM1P gcbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685725944; x=1688317944; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ZUXG6LnAfDLQWjsUTdvMPeKcFziI5MImeT2cSxBUPPY=; b=SBC4wmPv5ik/C66aAO1Uu8uGL4+RxvjoDr3vuncubBhBsFIGX2tLTTjHYthryqrhlY m8uCWUN74/L4EDnG9D6uCXoYJNsgH9l531jVarUvvL5vKbwoY5mP+U3BBQBQqGMStShS B357D+a5UY3nb8E/mz9ZCwLatnWOWtSDzN5lIRVUlfxBPtEFIm8EECQjYc9N9z2PpNqu 1Q1Jw9+S+ipXiPdfWEatR68T5mbj9+zapgkD8XafIsyoaZY8VqaojDvYc/Mfx9lzq7jO 20+yb+pCD8vcck4WvaiIFBFa9wiNNl2a2yIq6+p8N24hrg4Mo71iwA0BvPmgA43nmeEC /hIw== X-Gm-Message-State: AC+VfDydn01BHapNjNSviQXAzWlPuDY13eRWAqChRa4E6J3AlmH0fKJz NTasSX8b+NmF5jbjoySD/tsC6Rwr4vftfHv5Wv5c9aIO X-Google-Smtp-Source: ACHHUZ4edgBTmfJH3PTKP0L3cynlpVMG1H3tbTCAvUlq/KcW5L3OYEgxx7XZFtDRM7f9tMaGuS7yKbEPuns+RMpTYj4= X-Received: by 2002:a67:ffcd:0:b0:43b:19f4:88d9 with SMTP id w13-20020a67ffcd000000b0043b19f488d9mr3000123vsq.21.1685725943814; Fri, 02 Jun 2023 10:12:23 -0700 (PDT) MIME-Version: 1.0 References: <8d713a21-f2f0-5c8d-fa93-0278965509e5@tiscali.it> <47ee718c-bce0-cffa-9c6a-2889a6547017@tiscali.it> <9ae25c06-73ce-f3b6-7a29-3dd8e3e530c3@tiscali.it> <167898554590.31370.14710235662474104045@lain.khirnov.net> <6ff579f4-dbed-5d62-a72c-96a2b9a18aef@tiscali.it> In-Reply-To: From: Paul B Mahol Date: Fri, 2 Jun 2023 19:12:11 +0200 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] drawtext filter X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: T24gRnJpLCBNYXkgMjYsIDIwMjMgYXQgMjoxOeKAr1BNIEZyYW5jZXNjbyBDYXJ1c2kgPGtsaW1r bGltQHRpc2NhbGkuaXQ+Cndyb3RlOgoKPiBJIGFkZGVkIGEgcGF0Y2ggc3BlY2lmaWNhbGx5IHRv IGluY2x1ZGUgY29zbWV0aWMgY2hhbmdlcy4gSSBhbHNvIHJlbW92ZWQKPiB0aGUgY2hhbmdlIGxv ZyBzZWN0aW9uLCB0aGUgZm9yd2FyZCBkZWNsYXJhdGlvbnMgYW5kIGltcHJvdmVkIGVycm9yCj4g Y2hlY2tpbmcuCj4gVGhlIGNoYW5nZXMgdG8gdGhlIGNvbmZpZ3VyZSBmaWxlIGFyZSBpbiBhIGRl ZGljYXRlZCBwYXRjaCAodGhlIGxhc3QKPiBvbmU6IDAwMDkpLgo+Cj4KV2lsbCBjYXJlZnVsbHkg cmV2aWV3IGFuZCBhcHBseSB3aG9sZSBzZXQgaWYgdGltZSBwZXJtaXRzLgoKCj4KPiBPbiAyMC8w My8yMDIzIDA5OjUwLCBQYXVsIEIgTWFob2wgd3JvdGU6Cj4gPiBPbiBNb24sIE1hciAyMCwgMjAy MyBhdCA4OjQx4oCvQU0gRnJhbmNlc2NvIENhcnVzaSA8a2xpbWtsaW1AdGlzY2FsaS5pdD4KPiA+ IHdyb3RlOgo+ID4KPiA+PiBXb3VsZCBpdCBiZSBvayBpZiBJIHNwbGl0IHRoZSBwYXRjaCBzbyB0 aGF0IG9uZSBpcyBkZWRpY2F0ZWQgdG8KPiA+PiBjb3NtZXRpY3MgYW5kIG9uZSB0byB0aGUgaW1w bGVtZW50YXRpb24/Cj4gPj4gSSdsbCBhbHNvIHJlbW92ZSB0aGUgY2hhbmdlIGxvZyBzZWN0aW9u IGFuZCB0aGUgZm9yd2FyZCBkZWNsYXJhdGlvbnMgYW5kCj4gPj4gaW1wcm92ZSB0aGUgZXJyb3Ig Y2hlY2tpbmcuCj4gPj4KPiA+IFllcyBzcGxpdCBpdC4KPiA+Cj4gPgo+ID4gTm90ZSB0aGF0IHJl dmlld2VycyBoZXJlIHRlbmQgdG8gcmV2aWV3IG9ubHkgYWZ0ZXIgYmlnIHRpbWUgcGFzc2VzIGFu ZAo+IGFyZQo+ID4gdXN1YWxseSBuaXRwaWNraW5nIGFsbCB0aGUgdGltZS4KPiA+Cj4gPgo+ID4+ IE9uIDE2LzAzLzIwMjMgMTc6NTIsIEFudG9uIEtoaXJub3Ygd3JvdGU6Cj4gPj4+IE92ZXJhbGwg dGhpcyBwYXRjaCBjb3VsZCB1c2UgYSBsb3QgbW9yZSBwb2xpc2guIEkgcmVhbGx5IHdpc2ggeW91 Cj4gPj4+IGRldmVsb3BlZCBpdCBpbiBhIG1vcmUgcmV2aWV3LWZyaWVuZGx5IGZvcm0uCj4gPj4+ IFRoZSBjb21taXQgbWVzc2FnZSBzaG91bGQgdXNlIHN0YW5kYXJkIGZvcm0gYW5kIGVsYWJvcmF0 ZSBvbiB3aGF0Cj4gPj4+IGFkdmFudGFnZSBkbyB3ZSBnZXQgZnJvbSB0aGlzIGh1Z2UgY2hhbmdl LCB3aGljaCBhbHNvIGFkZHMgYSBuZXcKPiA+Pj4gZGVwZW5kZW5kZW5jeS4KPiA+Pj4KPiA+Pj4K PiA+Pj4gUXVvdGluZyBGcmFuY2VzY28gQ2FydXNpICgyMDIzLTAyLTAzIDE1OjE4OjIxKQo+ID4+ Pj4gZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL3ZmX2RyYXd0ZXh0LmMgYi9saWJhdmZpbHRlci92 Zl9kcmF3dGV4dC5jCj4gPj4+PiBpbmRleCA1MDAxMmJiMjU4Li43YTBhMjU1YzVlIDEwMDY0NAo+ ID4+Pj4gLS0tIGEvbGliYXZmaWx0ZXIvdmZfZHJhd3RleHQuYwo+ID4+Pj4gKysrIGIvbGliYXZm aWx0ZXIvdmZfZHJhd3RleHQuYwo+ID4+PiBZb3UgYXJlIGFkZGluZyBhIGJ1bmNoIG9mIHRyYWls aW5nIHdoaXRlc3BhY2UgaW4gdGhlIGZpbGUsIHdoaWNoIGlzCj4gPj4+IGZvcmJpZGRlbi4KPiA+ Pj4KPiA+Pj4+IEBAIC0xLDQgKzEsNSBAQAo+ID4+Pj4gICAgLyoKPiA+Pj4+ICsgKiBDb3B5cmln aHQgKGMpIDIwMjMgRnJhbmNlc2NvIENhcnVzaQo+ID4+Pj4gICAgICogQ29weXJpZ2h0IChjKSAy MDExIFN0ZWZhbm8gU2FiYXRpbmkKPiA+Pj4+ICAgICAqIENvcHlyaWdodCAoYykgMjAxMCBTLk4u IEhlbWFudGggTWVlbmFrc2hpc3VuZGFyYW0KPiA+Pj4+ICAgICAqIENvcHlyaWdodCAoYykgMjAw MyBHdXN0YXZvIFN2ZXJ6dXQgQmFyYmllcmkgPAo+ID4+IGdzYmFyYmllcmlAeWFob28uY29tLmJy Pgo+ID4+Pj4gQEAgLTIwLDYgKzIxLDE0IEBACj4gPj4+PiAgICAgKiBGb3VuZGF0aW9uLCBJbmMu LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCj4gPj4gMDIxMTAt MTMwMSBVU0EKPiA+Pj4+ICAgICAqLwo+ID4+Pj4KPiA+Pj4+ICsvKgo+ID4+Pj4gKyAqIENoYW5n ZWxvZyAtIDIwMjMKPiA+Pj4+ICsgKgo+ID4+Pj4gKyAqIC0gVGhpcyBmaWx0ZXIgbm93IGRlcGVu ZHMgb24gbGliaGFyZmJ1enogZm9yIHRleHQgc2hhcGluZy4KPiA+Pj4+ICsgKiAtIEdseXBocyBw b3NpdGlvbiBpcyBub3cgYWNjdXJhdGUgdG8gMS80IHBpeGVsIGluIGJvdGggZGlyZWN0aW9ucwo+ ID4+Pj4gKyAqIC0gVGhlIGRlZmF1bHQgbGluZSBoZWlnaHQgaXMgbm93IHRoZSBvbmUgZGVmaW5l ZCBpbiB0aGUgZm9udAo+ID4+Pj4gKyAqLwo+ID4+PiBUaGlzIGlzIG5vdCB0aGUgcGxhY2UgZm9y IGEgY2hhbmdlbG9nLCB0aGF0J3Mgd2hhdCBjb21taXQgbWVzc2FnZXMgYW5kCj4gPj4+IHRoZSBD aGFuZ2Vsb2cgZmlsZSBhcmUgZm9yLgo+ID4+Pgo+ID4+Pj4gKwo+ID4+Pj4gICAgLyoqCj4gPj4+ PiAgICAgKiBAZmlsZQo+ID4+Pj4gICAgICogZHJhd3RleHQgZmlsdGVyLCBiYXNlZCBvbiB0aGUg b3JpZ2luYWwgdmhvb2svZHJhd3RleHQuYwo+ID4+Pj4gQEAgLTcyLDE0ICs4MSwyMCBAQAo+ID4+ Pj4gICAgI2luY2x1ZGUgRlRfR0xZUEhfSAo+ID4+Pj4gICAgI2luY2x1ZGUgRlRfU1RST0tFUl9I Cj4gPj4+Pgo+ID4+Pj4gKyNpbmNsdWRlIDxoYi5oPgo+ID4+Pj4gKyNpbmNsdWRlIDxoYi1mdC5o Pgo+ID4+Pj4gKwo+ID4+Pj4gKy8vIENlaWxpbmcgb3BlcmF0aW9uIGZvciBwb3NpdGl2ZSBpbnRl Z2VycyBkaXZpc2lvbgo+ID4+Pj4gKyNkZWZpbmUgUE9TX0NFSUwoeCwgeSkgKCh4KS8oeSkgKyAo KHgpJSh5KSAhPSAwKSkKPiA+Pj4+ICsKPiA+Pj4+ICAgIHN0YXRpYyBjb25zdCBjaGFyICpjb25z dCB2YXJfbmFtZXNbXSA9IHsKPiA+Pj4+ICAgICAgICAiZGFyIiwKPiA+Pj4+ICAgICAgICAiaHN1 YiIsICJ2c3ViIiwKPiA+Pj4+IC0gICAgImxpbmVfaCIsICJsaCIsICAgICAgICAgICAvLy88IGxp bmUgaGVpZ2h0LCBzYW1lIGFzIG1heF9nbHlwaF9oCj4gPj4+PiArICAgICJsaW5lX2giLCAibGgi LCAgICAgICAgICAgLy8vPCBsaW5lIGhlaWdodAo+ID4+Pj4gICAgICAgICJtYWluX2giLCAiaCIs ICJIIiwgICAgICAgLy8vPCBoZWlnaHQgb2YgdGhlIGlucHV0IHZpZGVvCj4gPj4+PiAgICAgICAg Im1haW5fdyIsICJ3IiwgIlciLCAgICAgICAvLy88IHdpZHRoICBvZiB0aGUgaW5wdXQgdmlkZW8K PiA+Pj4+IC0gICAgIm1heF9nbHlwaF9hIiwgImFzY2VudCIsICAvLy88IG1heCBnbHlwaCBhc2Nl bnQKPiA+Pj4+IC0gICAgIm1heF9nbHlwaF9kIiwgImRlc2NlbnQiLCAvLy88IG1pbiBnbHlwaCBk ZXNjZW50Cj4gPj4+PiArICAgICJtYXhfZ2x5cGhfYSIsICJhc2NlbnQiLCAgLy8vPCBtYXggZ2x5 cGggYXNjZW5kZXIKPiA+Pj4+ICsgICAgIm1heF9nbHlwaF9kIiwgImRlc2NlbnQiLCAvLy88IG1p biBnbHlwaCBkZXNjZW5kZXIKPiA+Pj4gU2VlbXMgbGlrZSB0aGlzIHNob3VsZCBub3QgYmUgaW4g dGhpcyBwYXRjaC4KPiA+Pj4KPiA+Pj4+ICAgIHN0YXRpYyBjb25zdCBBVk9wdGlvbiBkcmF3dGV4 dF9vcHRpb25zW109IHsKPiA+Pj4+IC0gICAgeyJmb250ZmlsZSIsICAgICJzZXQgZm9udCBmaWxl IiwgICAgICAgIE9GRlNFVChmb250ZmlsZSksCj4gPj4gICBBVl9PUFRfVFlQRV9TVFJJTkcsIHsu c3RyPU5VTEx9LCAgMCwgMCwgRkxBR1N9LAo+ID4+Pj4gLSAgICB7InRleHQiLCAgICAgICAgInNl dCB0ZXh0IiwgICAgICAgICAgICAgT0ZGU0VUKHRleHQpLAo+ID4+ICAgQVZfT1BUX1RZUEVfU1RS SU5HLCB7LnN0cj1OVUxMfSwgIDAsIDAsIEZMQUdTfSwKPiA+Pj4+IC0gICAgeyJ0ZXh0ZmlsZSIs ICAgICJzZXQgdGV4dCBmaWxlIiwgICAgICAgIE9GRlNFVCh0ZXh0ZmlsZSksCj4gPj4gICBBVl9P UFRfVFlQRV9TVFJJTkcsIHsuc3RyPU5VTEx9LCAgMCwgMCwgRkxBR1N9LAo+ID4+Pj4gLSAgICB7 ImZvbnRjb2xvciIsICAgInNldCBmb3JlZ3JvdW5kIGNvbG9yIiwgT0ZGU0VUKGZvbnRjb2xvci5y Z2JhKSwKPiA+PiAgIEFWX09QVF9UWVBFX0NPTE9SLCAgey5zdHI9ImJsYWNrIn0sIDAsIDAsIEZM QUdTfSwKPiA+Pj4+ICsgICAgeyJmb250ZmlsZSIsICAgICAgICJzZXQgZm9udCBmaWxlIiwgICAg ICAgICBPRkZTRVQoZm9udGZpbGUpLAo+ID4+ICAgICAgIEFWX09QVF9UWVBFX1NUUklORywgey5z dHI9TlVMTH0sICAwLCAwLCBGTEFHU30sCj4gPj4+PiArICAgIHsidGV4dCIsICAgICAgICAgICAi c2V0IHRleHQiLCAgICAgICAgICAgICAgT0ZGU0VUKHRleHQpLAo+ID4+ICAgICAgIEFWX09QVF9U WVBFX1NUUklORywgey5zdHI9TlVMTH0sICAwLCAwLCBGTEFHU30sCj4gPj4+PiArICAgIHsidGV4 dGZpbGUiLCAgICAgICAic2V0IHRleHQgZmlsZSIsICAgICAgICAgT0ZGU0VUKHRleHRmaWxlKSwK PiA+PiAgICAgICBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyPU5VTEx9LCAgMCwgMCwgRkxBR1N9 LAo+ID4+Pj4gKyAgICB7ImZvbnRjb2xvciIsICAgICAgInNldCBmb3JlZ3JvdW5kIGNvbG9yIiwK PiA+PiBPRkZTRVQoZm9udGNvbG9yLnJnYmEpLCAgICAgQVZfT1BUX1RZUEVfQ09MT1IsICB7LnN0 cj0iYmxhY2sifSwgMCwgMCwKPiA+PiBGTEFHU30sCj4gPj4+PiAgICAgICAgeyJmb250Y29sb3Jf ZXhwciIsICJzZXQgZm9yZWdyb3VuZCBjb2xvciBleHByZXNzaW9uIiwKPiA+PiBPRkZTRVQoZm9u dGNvbG9yX2V4cHIpLCBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyPSIifSwgMCwgMCwgRkxBR1N9 LAo+ID4+Pj4gLSAgICB7ImJveGNvbG9yIiwgICAgInNldCBib3ggY29sb3IiLCAgICAgICAgT0ZG U0VUKGJveGNvbG9yLnJnYmEpLAo+ID4+ICAgIEFWX09QVF9UWVBFX0NPTE9SLCAgey5zdHI9Indo aXRlIn0sIDAsIDAsIEZMQUdTfSwKPiA+Pj4+IC0gICAgeyJib3JkZXJjb2xvciIsICJzZXQgYm9y ZGVyIGNvbG9yIiwgICAgIE9GRlNFVChib3JkZXJjb2xvci5yZ2JhKSwKPiA+PiAgIEFWX09QVF9U WVBFX0NPTE9SLCAgey5zdHI9ImJsYWNrIn0sIDAsIDAsIEZMQUdTfSwKPiA+Pj4+IC0gICAgeyJz aGFkb3djb2xvciIsICJzZXQgc2hhZG93IGNvbG9yIiwgICAgIE9GRlNFVChzaGFkb3djb2xvci5y Z2JhKSwKPiA+PiAgIEFWX09QVF9UWVBFX0NPTE9SLCAgey5zdHI9ImJsYWNrIn0sIDAsIDAsIEZM QUdTfSwKPiA+Pj4+IC0gICAgeyJib3giLCAgICAgICAgICJzZXQgYm94IiwgICAgICAgICAgICAg IE9GRlNFVChkcmF3X2JveCksCj4gPj4gICBBVl9PUFRfVFlQRV9CT09MLCAgIHsuaTY0PTB9LCAg ICAgMCwgICAgICAgIDEgICAgICAgLCBGTEFHU30sCj4gPj4+PiAtICAgIHsiYm94Ym9yZGVydyIs ICAic2V0IGJveCBib3JkZXIgd2lkdGgiLCBPRkZTRVQoYm94Ym9yZGVydyksCj4gPj4gICBBVl9P UFRfVFlQRV9JTlQsICAgIHsuaTY0PTB9LCAgICAgSU5UX01JTiwgIElOVF9NQVggLCBGTEFHU30s Cj4gPj4+PiAtICAgIHsibGluZV9zcGFjaW5nIiwgICJzZXQgbGluZSBzcGFjaW5nIGluIHBpeGVs cyIsCj4gPj4gT0ZGU0VUKGxpbmVfc3BhY2luZyksICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7Lmk2 ND0wfSwgICAgIElOVF9NSU4sCj4gPj4gSU5UX01BWCxGTEFHU30sCj4gPj4+PiAtICAgIHsiZm9u dHNpemUiLCAgICAic2V0IGZvbnQgc2l6ZSIsICAgICAgICBPRkZTRVQoZm9udHNpemVfZXhwciks Cj4gPj4gICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0cj1OVUxMfSwgIDAsIDAgLCBGTEFHU30s Cj4gPj4+PiAtICAgIHsieCIsICAgICAgICAgICAic2V0IHggZXhwcmVzc2lvbiIsICAgICBPRkZT RVQoeF9leHByKSwKPiA+PiAgIEFWX09QVF9UWVBFX1NUUklORywgey5zdHI9IjAifSwgICAwLCAw LCBGTEFHU30sCj4gPj4+PiAtICAgIHsieSIsICAgICAgICAgICAic2V0IHkgZXhwcmVzc2lvbiIs ICAgICBPRkZTRVQoeV9leHByKSwKPiA+PiAgIEFWX09QVF9UWVBFX1NUUklORywgey5zdHI9IjAi fSwgICAwLCAwLCBGTEFHU30sCj4gPj4+PiAtICAgIHsic2hhZG93eCIsICAgICAic2V0IHNoYWRv dyB4IG9mZnNldCIsICBPRkZTRVQoc2hhZG93eCksCj4gPj4gICAgQVZfT1BUX1RZUEVfSU5ULCAg ICB7Lmk2ND0wfSwgICAgIElOVF9NSU4sICBJTlRfTUFYICwgRkxBR1N9LAo+ID4+Pj4gLSAgICB7 InNoYWRvd3kiLCAgICAgInNldCBzaGFkb3cgeSBvZmZzZXQiLCAgT0ZGU0VUKHNoYWRvd3kpLAo+ ID4+ICAgIEFWX09QVF9UWVBFX0lOVCwgICAgey5pNjQ9MH0sICAgICBJTlRfTUlOLCAgSU5UX01B WCAsIEZMQUdTfSwKPiA+Pj4+IC0gICAgeyJib3JkZXJ3IiwgICAgICJzZXQgYm9yZGVyIHdpZHRo IiwgICAgIE9GRlNFVChib3JkZXJ3KSwKPiA+PiAgICBBVl9PUFRfVFlQRV9JTlQsICAgIHsuaTY0 PTB9LCAgICAgSU5UX01JTiwgIElOVF9NQVggLCBGTEFHU30sCj4gPj4+PiAtICAgIHsidGFic2l6 ZSIsICAgICAic2V0IHRhYiBzaXplIiwgICAgICAgICBPRkZTRVQodGFic2l6ZSksCj4gPj4gICAg QVZfT1BUX1RZUEVfSU5ULCAgICB7Lmk2ND00fSwgICAgIDAsICAgICAgICBJTlRfTUFYICwgRkxB R1N9LAo+ID4+Pj4gLSAgICB7ImJhc2V0aW1lIiwgICAgInNldCBiYXNlIHRpbWUiLCAgICAgICAg T0ZGU0VUKGJhc2V0aW1lKSwKPiA+PiAgIEFWX09QVF9UWVBFX0lOVDY0LCAgey5pNjQ9QVZfTk9Q VFNfVkFMVUV9LCBJTlQ2NF9NSU4sIElOVDY0X01BWCAsCj4gRkxBR1N9LAo+ID4+Pj4gKyAgICB7 ImJveGNvbG9yIiwgICAgICAgInNldCBib3ggY29sb3IiLAo+ID4+ICAgT0ZGU0VUKGJveGNvbG9y LnJnYmEpLCAgICAgIEFWX09QVF9UWVBFX0NPTE9SLCAgey5zdHI9IndoaXRlIn0sIDAsIDAsCj4g Pj4gRkxBR1N9LAo+ID4+Pj4gKyAgICB7ImJvcmRlcmNvbG9yIiwgICAgInNldCBib3JkZXIgY29s b3IiLAo+ID4+IE9GRlNFVChib3JkZXJjb2xvci5yZ2JhKSwgICBBVl9PUFRfVFlQRV9DT0xPUiwg IHsuc3RyPSJibGFjayJ9LCAwLCAwLAo+ID4+IEZMQUdTfSwKPiA+Pj4+ICsgICAgeyJzaGFkb3dj b2xvciIsICAgICJzZXQgc2hhZG93IGNvbG9yIiwKPiA+PiBPRkZTRVQoc2hhZG93Y29sb3Iucmdi YSksICAgQVZfT1BUX1RZUEVfQ09MT1IsICB7LnN0cj0iYmxhY2sifSwgMCwgMCwKPiA+PiBGTEFH U30sCj4gPj4+PiArICAgIHsiYm94IiwgICAgICAgICAgICAic2V0IGJveCIsICAgICAgICAgICAg ICAgT0ZGU0VUKGRyYXdfYm94KSwKPiA+PiAgICAgICBBVl9PUFRfVFlQRV9CT09MLCAgIHsuaTY0 PTB9LCAgICAgMCwgMSwgRkxBR1N9LAo+ID4+Pj4gKyAgICB7ImJveGJvcmRlcnciLCAgICAgInNl dCBib3ggYm9yZGVycyB3aWR0aCIsIE9GRlNFVChib3hib3JkZXJ3KSwKPiA+PiAgICAgICBBVl9P UFRfVFlQRV9JTlQsICAgIHsuaTY0PTB9LCAgICAgMCwgSU5UX01BWCwgRkxBR1N9LAo+ID4+Pj4g KyAgICB7ImxpbmVfc3BhY2luZyIsICAgInNldCBsaW5lIHNwYWNpbmcgaW4gcGl4ZWxzIiwKPiA+ PiBPRkZTRVQobGluZV9zcGFjaW5nKSwgIEFWX09QVF9UWVBFX0lOVCwgICAgey5pNjQ9LTF9LCAg ICBJTlRfTUlOLAo+IElOVF9NQVgsCj4gPj4gRkxBR1N9LAo+ID4+Pj4gKyAgICB7ImZvbnRzaXpl IiwgICAgICAgInNldCBmb250IHNpemUiLAo+ID4+ICAgT0ZGU0VUKGZvbnRzaXplX2V4cHIpLCAg ICAgIEFWX09QVF9UWVBFX1NUUklORywgey5zdHI9TlVMTH0sICAwLCAwLAo+IEZMQUdTfSwKPiA+ Pj4+ICsgICAgeyJ4IiwgICAgICAgICAgICAgICJzZXQgeCBleHByZXNzaW9uIiwgICAgICBPRkZT RVQoeF9leHByKSwKPiA+PiAgICAgICBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyPSIwIn0sICAg MCwgMCwgRkxBR1N9LAo+ID4+Pj4gKyAgICB7InkiLCAgICAgICAgICAgICAgInNldCB5IGV4cHJl c3Npb24iLCAgICAgIE9GRlNFVCh5X2V4cHIpLAo+ID4+ICAgICAgIEFWX09QVF9UWVBFX1NUUklO Rywgey5zdHI9IjAifSwgICAwLCAwLCBGTEFHU30sCj4gPj4+PiArICAgIHsic2hhZG93eCIsICAg ICAgICAic2V0IHNoYWRvdyB4IG9mZnNldCIsICAgT0ZGU0VUKHNoYWRvd3gpLAo+ID4+ICAgICAg ICBBVl9PUFRfVFlQRV9JTlQsICAgIHsuaTY0PTB9LCAgICAgSU5UX01JTiwgSU5UX01BWCwgRkxB R1N9LAo+ID4+Pj4gKyAgICB7InNoYWRvd3kiLCAgICAgICAgInNldCBzaGFkb3cgeSBvZmZzZXQi LCAgIE9GRlNFVChzaGFkb3d5KSwKPiA+PiAgICAgICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7Lmk2 ND0wfSwgICAgIElOVF9NSU4sIElOVF9NQVgsIEZMQUdTfSwKPiA+Pj4+ICsgICAgeyJib3JkZXJ3 IiwgICAgICAgICJzZXQgYm9yZGVyIHdpZHRoIiwgICAgICBPRkZTRVQoYm9yZGVydyksCj4gPj4g ICAgICAgIEFWX09QVF9UWVBFX0lOVCwgICAgey5pNjQ9MH0sICAgICBJTlRfTUlOLCBJTlRfTUFY LCBGTEFHU30sCj4gPj4+PiArICAgIHsidGFic2l6ZSIsICAgICAgICAic2V0IHRhYiBzaXplIiwg ICAgICAgICAgT0ZGU0VUKHRhYnNpemUpLAo+ID4+ICAgICAgICBBVl9PUFRfVFlQRV9JTlQsICAg IHsuaTY0PTR9LCAgICAgMCwgSU5UX01BWCwgRkxBR1N9LAo+ID4+Pj4gKyAgICB7ImJhc2V0aW1l IiwgICAgICAgInNldCBiYXNlIHRpbWUiLCAgICAgICAgIE9GRlNFVChiYXNldGltZSksCj4gPj4g ICAgICAgQVZfT1BUX1RZUEVfSU5UNjQsICB7Lmk2ND1BVl9OT1BUU19WQUxVRX0sIElOVDY0X01J TiwgSU5UNjRfTUFYLAo+ID4+IEZMQUdTfSwKPiA+Pj4+ICAgICNpZiBDT05GSUdfTElCRk9OVENP TkZJRwo+ID4+Pj4gICAgICAgIHsgImZvbnQiLCAgICAgICAgIkZvbnQgbmFtZSIsICAgICAgICAg ICAgT0ZGU0VUKGZvbnQpLAo+ID4+ICAgICBBVl9PUFRfVFlQRV9TVFJJTkcsIHsgLnN0ciA9ICJT YW5zIiB9LCAgICAgICAgICAgLmZsYWdzID0gRkxBR1MgfSwKPiA+Pj4+ICAgICNlbmRpZgo+ID4+ Pj4gQEAgLTI0OCwxNSArMzM4LDE1IEBAIHN0YXRpYyBjb25zdCBBVk9wdGlvbiBkcmF3dGV4dF9v cHRpb25zW109IHsKPiA+Pj4+ICAgICAgICAgICAgeyJzdHJmdGltZSIsICJzZXQgc3RyZnRpbWUg ZXhwYW5zaW9uIChkZXByZWNhdGVkKSIsCj4gPj4gT0ZGU0VUKGV4cF9tb2RlKSwgQVZfT1BUX1RZ UEVfQ09OU1QsIHsuaTY0PUVYUF9TVFJGVElNRX0sIDAsIDAsIEZMQUdTLAo+ID4+ICJleHBhbnNp b24ifSwKPiA+Pj4+ICAgICAgICB7InRpbWVjb2RlIiwgICAgICAgICJzZXQgaW5pdGlhbCB0aW1l Y29kZSIsCj4gPj4gICBPRkZTRVQodGNfb3B0X3N0cmluZyksIEFWX09QVF9UWVBFX1NUUklORywg ICB7LnN0cj1OVUxMfSwgMCwgMCwKPiBGTEFHU30sCj4gPj4+PiAtICAgIHsidGMyNGhtYXgiLCAg ICAgICAgInNldCAyNCBob3VycyBtYXggKHRpbWVjb2RlIG9ubHkpIiwKPiA+PiBPRkZTRVQodGMy NGhtYXgpLCAgICAgIEFWX09QVF9UWVBFX0JPT0wsICAgICB7Lmk2ND0wfSwgICAgICAgICAgIDAs Cj4gPj4gMSwgRkxBR1N9LAo+ID4+Pj4gLSAgICB7InRpbWVjb2RlX3JhdGUiLCAgICJzZXQgcmF0 ZSAodGltZWNvZGUgb25seSkiLAo+ID4+ICAgT0ZGU0VUKHRjX3JhdGUpLCAgICAgICBBVl9PUFRf VFlQRV9SQVRJT05BTCwgey5kYmw9MH0sICAgICAgICAgICAwLAo+ID4+IElOVF9NQVgsIEZMQUdT fSwKPiA+Pj4+IC0gICAgeyJyIiwgICAgICAgICAgICAgICAic2V0IHJhdGUgKHRpbWVjb2RlIG9u bHkpIiwKPiA+PiAgIE9GRlNFVCh0Y19yYXRlKSwgICAgICAgQVZfT1BUX1RZUEVfUkFUSU9OQUws IHsuZGJsPTB9LCAgICAgICAgICAgMCwKPiA+PiBJTlRfTUFYLCBGTEFHU30sCj4gPj4+PiAtICAg IHsicmF0ZSIsICAgICAgICAgICAgInNldCByYXRlICh0aW1lY29kZSBvbmx5KSIsCj4gPj4gICBP RkZTRVQodGNfcmF0ZSksICAgICAgIEFWX09QVF9UWVBFX1JBVElPTkFMLCB7LmRibD0wfSwgICAg ICAgICAgIDAsCj4gPj4gSU5UX01BWCwgRkxBR1N9LAo+ID4+Pj4gLSAgICB7InJlbG9hZCIsICAg ICAicmVsb2FkIHRleHQgZmlsZSBhdCBzcGVjaWZpZWQgZnJhbWUgaW50ZXJ2YWwiLAo+ID4+IE9G RlNFVChyZWxvYWQpLCAgICAgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2ND0wfSwgMCwgSU5UX01BWCwg RkxBR1N9LAo+ID4+Pj4gLSAgICB7ICJhbHBoYSIsICAgICAgICJhcHBseSBhbHBoYSB3aGlsZSBy ZW5kZXJpbmciLCBPRkZTRVQoYV9leHByKSwKPiA+PiAgICBBVl9PUFRfVFlQRV9TVFJJTkcsIHsg LnN0ciA9ICIxIiAgICAgfSwgICAgICAgICAgLmZsYWdzID0gRkxBR1MgfSwKPiA+Pj4+IC0gICAg eyJmaXhfYm91bmRzIiwgImNoZWNrIGFuZCBmaXggdGV4dCBjb29yZHMgdG8gYXZvaWQgY2xpcHBp bmciLAo+ID4+IE9GRlNFVChmaXhfYm91bmRzKSwgQVZfT1BUX1RZUEVfQk9PTCwgey5pNjQ9MH0s IDAsIDEsIEZMQUdTfSwKPiA+Pj4+IC0gICAgeyJzdGFydF9udW1iZXIiLCAic3RhcnQgZnJhbWUg bnVtYmVyIGZvciBuL2ZyYW1lX251bSB2YXJpYWJsZSIsCj4gPj4gT0ZGU0VUKHN0YXJ0X251bWJl ciksIEFWX09QVF9UWVBFX0lOVCwgey5pNjQ9MH0sIDAsIElOVF9NQVgsIEZMQUdTfSwKPiA+Pj4+ IC0gICAgeyJ0ZXh0X3NvdXJjZSIsICJ0aGUgc291cmNlIG9mIHRleHQiLCBPRkZTRVQodGV4dF9z b3VyY2Vfc3RyaW5nKSwKPiA+PiBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyPU5VTEx9LCAwLCAx LCBGTEFHUyB9LAo+ID4+Pj4gKyAgICB7InRjMjRobWF4IiwgICAgICAgICJzZXQgMjQgaG91cnMg bWF4ICh0aW1lY29kZSBvbmx5KSIsCj4gPj4gT0ZGU0VUKHRjMjRobWF4KSwgICAgICBBVl9PUFRf VFlQRV9CT09MLCAgICAgey5pNjQ9MH0sICAgIDAsIDEsIEZMQUdTfSwKPiA+Pj4+ICsgICAgeyJ0 aW1lY29kZV9yYXRlIiwgICAic2V0IHJhdGUgKHRpbWVjb2RlIG9ubHkpIiwKPiA+PiAgIE9GRlNF VCh0Y19yYXRlKSwgICAgICAgQVZfT1BUX1RZUEVfUkFUSU9OQUwsIHsuZGJsPTB9LCAgICAwLCBJ TlRfTUFYLAo+ID4+IEZMQUdTfSwKPiA+Pj4+ICsgICAgeyJyIiwgICAgICAgICAgICAgICAic2V0 IHJhdGUgKHRpbWVjb2RlIG9ubHkpIiwKPiA+PiAgIE9GRlNFVCh0Y19yYXRlKSwgICAgICAgQVZf T1BUX1RZUEVfUkFUSU9OQUwsIHsuZGJsPTB9LCAgICAwLCBJTlRfTUFYLAo+ID4+IEZMQUdTfSwK PiA+Pj4+ICsgICAgeyJyYXRlIiwgICAgICAgICAgICAic2V0IHJhdGUgKHRpbWVjb2RlIG9ubHkp IiwKPiA+PiAgIE9GRlNFVCh0Y19yYXRlKSwgICAgICAgQVZfT1BUX1RZUEVfUkFUSU9OQUwsIHsu ZGJsPTB9LCAgICAwLCBJTlRfTUFYLAo+ID4+IEZMQUdTfSwKPiA+Pj4+ICsgICAgeyJyZWxvYWQi LCAgICAgICAgICAicmVsb2FkIHRleHQgZmlsZSBhdCBzcGVjaWZpZWQgZnJhbWUKPiA+PiBpbnRl cnZhbCIsIE9GRlNFVChyZWxvYWQpLCBBVl9PUFRfVFlQRV9JTlQsIHsuaTY0PTB9LCAgICAwLCBJ TlRfTUFYLAo+IEZMQUdTfSwKPiA+Pj4+ICsgICAgeyJhbHBoYSIsICAgICAgICAgICAiYXBwbHkg YWxwaGEgd2hpbGUgcmVuZGVyaW5nIiwKPiA+PiBPRkZTRVQoYV9leHByKSwgICAgICAgIEFWX09Q VF9UWVBFX1NUUklORywgICB7LnN0ciA9ICIxIn0sIC5mbGFncyA9Cj4gRkxBR1N9LAo+ID4+Pj4g KyAgICB7ImZpeF9ib3VuZHMiLCAgICAgICJjaGVjayBhbmQgZml4IHRleHQgY29vcmRzIHRvIGF2 b2lkCj4gY2xpcHBpbmciLAo+ID4+IE9GRlNFVChmaXhfYm91bmRzKSwgQVZfT1BUX1RZUEVfQk9P TCwgey5pNjQ9MH0sIDAsIDEsIEZMQUdTfSwKPiA+Pj4+ICsgICAgeyJzdGFydF9udW1iZXIiLCAg ICAic3RhcnQgZnJhbWUgbnVtYmVyIGZvciBuL2ZyYW1lX251bQo+IHZhcmlhYmxlIiwKPiA+PiBP RkZTRVQoc3RhcnRfbnVtYmVyKSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2ND0wfSwgMCwgSU5UX01B WCwgRkxBR1N9LAo+ID4+Pj4gKyAgICB7InRleHRfc291cmNlIiwgICAgICJ0aGUgc291cmNlIG9m IHRleHQiLAo+ID4+IE9GRlNFVCh0ZXh0X3NvdXJjZV9zdHJpbmcpLCBBVl9PUFRfVFlQRV9TVFJJ TkcsIHsuc3RyPU5VTEx9LCAwLCAxLAo+IEZMQUdTIH0sCj4gPj4+IE1vc3Qgb2YgdGhlc2UgY2hh bmdlcyBzZWVtIGNvc21ldGljLCB0aGV5IGRvIG5vdCBiZWxvbmcgaW4gdGhpcyBwYXRjaC4KPiA+ Pj4KPiA+Pj4+ICAgICNpZiBDT05GSUdfTElCRlJJQklESQo+ID4+Pj4gICAgICAgIHsidGV4dF9z aGFwaW5nIiwgImF0dGVtcHQgdG8gc2hhcGUgdGV4dCBiZWZvcmUgZHJhd2luZyIsCj4gPj4gT0ZG U0VUKHRleHRfc2hhcGluZyksIEFWX09QVF9UWVBFX0JPT0wsIHsuaTY0PTF9LCAwLCAxLCBGTEFH U30sCj4gPj4+PiBAQCAtMjk3LDE4ICszODcsMjQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmdF9l cnJvciB7Cj4gPj4+Pgo+ID4+Pj4gICAgI2RlZmluZSBGVF9FUlJNU0coZSkgZnRfZXJyb3JzW2Vd LmVycl9tc2cKPiA+Pj4+Cj4gPj4+PiAtdHlwZWRlZiBzdHJ1Y3QgR2x5cGggewo+ID4+Pj4gLSAg ICBGVF9HbHlwaCBnbHlwaDsKPiA+Pj4+IC0gICAgRlRfR2x5cGggYm9yZGVyX2dseXBoOwo+ID4+ Pj4gLSAgICB1aW50MzJfdCBjb2RlOwo+ID4+Pj4gLSAgICB1bnNpZ25lZCBpbnQgZm9udHNpemU7 Cj4gPj4+PiAtICAgIEZUX0JpdG1hcCBiaXRtYXA7IC8vLzwgYXJyYXkgaG9sZGluZyBiaXRtYXBz IG9mIGZvbnQKPiA+Pj4+IC0gICAgRlRfQml0bWFwIGJvcmRlcl9iaXRtYXA7IC8vLzwgYXJyYXkg aG9sZGluZyBiaXRtYXBzIG9mIGZvbnQKPiBib3JkZXIKPiA+Pj4+IC0gICAgRlRfQkJveCBiYm94 Owo+ID4+Pj4gLSAgICBpbnQgYWR2YW5jZTsKPiA+Pj4+IC0gICAgaW50IGJpdG1hcF9sZWZ0Owo+ ID4+Pj4gLSAgICBpbnQgYml0bWFwX3RvcDsKPiA+Pj4+IC19IEdseXBoOwo+ID4+Pj4gKwo+ID4+ Pj4gKy8vIExvYWRzIGFuZCAob3B0aW9uYWxseSkgcmVuZGVycyBhIGdseXBoCj4gPj4+PiArc3Rh dGljIGludCBsb2FkX2dseXBoKEFWRmlsdGVyQ29udGV4dCAqY3R4LCBHbHlwaCAqKmdseXBoX3B0 ciwKPiA+PiB1aW50MzJfdCBjb2RlLAo+ID4+Pj4gKyAgICAgaW50OF90IHNoaWZ0X3g2NCwgaW50 OF90IHNoaWZ0X3k2NCk7Cj4gPj4+PiArCj4gPj4+PiArLy8gU2hhcGVzIGEgbGluZSBvZiB0ZXh0 IHVzaW5nIGxpYmhhcmZidXp6Cj4gPj4+PiArc3RhdGljIHZvaWQgc2hhcGVfdGV4dF9oYihEcmF3 VGV4dENvbnRleHQgKnMsIEhhcmZidXp6RGF0YSogaGIsIGNvbnN0Cj4gPj4gY2hhciogdGV4dCwg aW50IHRleHRMZW4pOwo+ID4+Pj4gKwo+ID4+Pj4gKy8vIFBlcmZvcm1zIHRleHQgbWVhc3VyZW1l bnRzCj4gPj4+PiArc3RhdGljIGludCBtZWFzdXJlX3RleHQoQVZGaWx0ZXJDb250ZXh0ICpjdHgs IFRleHRNZXRyaWNzICptZXRyaWNzKTsKPiA+Pj4+ICsKPiA+Pj4+ICsvLyBEcmF3cyBnbHlwaHMg b24gdGhlIGZyYW1lCj4gPj4+PiArc3RhdGljIGludCBkcmF3X2dseXBocyhEcmF3VGV4dENvbnRl eHQgKnMsIEFWRnJhbWUgKmZyYW1lLAo+ID4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgRkZE cmF3Q29sb3IgKmNvbG9yLCBUZXh0TWV0cmljcyAqbWV0cmljcywKPiA+Pj4+ICsgICAgICAgICAg ICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IGJvcmRlcncpOwo+ID4+Pj4gKwo+ID4+Pj4g Ky8vIERyYXdzIHRleHQgb24gdGhlIGZyYW1lCj4gPj4+PiArc3RhdGljIGludCBkcmF3X3RleHQo QVZGaWx0ZXJDb250ZXh0ICpjdHgsIEFWRnJhbWUgKmZyYW1lKTsKPiA+Pj4gV2h5IGlzIHRoZXJl IGEgbmVlZCBmb3IgZm9yd2FyZCBkZWNsYXJhdGlvbnM/Cj4gPj4+Cj4gPj4+PiAgICBzdGF0aWMg aW50IGdseXBoX2NtcChjb25zdCB2b2lkICprZXksIGNvbnN0IHZvaWQgKmIpCj4gPj4+PiAgICB7 Cj4gPj4+PiBAQCAtMzE2LDgwICs0MTIsOSBAQCBzdGF0aWMgaW50IGdseXBoX2NtcChjb25zdCB2 b2lkICprZXksIGNvbnN0IHZvaWQKPiA+PiAqYikKPiA+Pj4+ICAgICAgICBpbnQ2NF90IGRpZmYg PSAoaW50NjRfdClhLT5jb2RlIC0gKGludDY0X3QpYmItPmNvZGU7Cj4gPj4+Pgo+ID4+Pj4gICAg ICAgIGlmIChkaWZmICE9IDApCj4gPj4+PiAtICAgICAgICAgcmV0dXJuIGRpZmYgPiAwID8gMSA6 IC0xOwo+ID4+Pj4gKyAgICAgICAgcmV0dXJuIGRpZmYgPiAwID8gMSA6IC0xOwo+ID4+PiB1bnJl bGF0ZWQgY29zbWV0aWNzCj4gPj4+Cj4gPj4+PiBAQCAtNDM5LDcgKzQ2NCw2IEBAIHN0YXRpYyBh dl9jb2xkIGludCB1cGRhdGVfZm9udHNpemUoQVZGaWx0ZXJDb250ZXh0Cj4gPj4gKmN0eCkKPiA+ Pj4+ICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKPiA+Pj4+Cj4gPj4+PiAgICAgICAgICAgIHNp emUgPSBhdl9leHByX2V2YWwocy0+Zm9udHNpemVfcGV4cHIsIHMtPnZhcl92YWx1ZXMsCj4gPj4g JnMtPnBybmcpOwo+ID4+Pj4gLQo+ID4+PiB1bnJlbGF0ZWQgY29zbWV0aWNzCj4gPj4+Cj4gPj4+ PiAgICAgICAgICAgIGlmICghaXNuYW4oc2l6ZSkpIHsKPiA+Pj4+ICAgICAgICAgICAgICAgIHJv dW5kZWRzaXplID0gcm91bmQoc2l6ZSk7Cj4gPj4+PiAgICAgICAgICAgICAgICAvLyB0ZXN0IGZv ciBvdmVyZmxvdyBiZWZvcmUgY2FzdAo+ID4+Pj4gQEAgLTQ0Nyw3ICs0NzEsNiBAQCBzdGF0aWMg YXZfY29sZCBpbnQgdXBkYXRlX2ZvbnRzaXplKEFWRmlsdGVyQ29udGV4dAo+ID4+ICpjdHgpCj4g Pj4+PiAgICAgICAgICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiZm9udHNp emUgb3ZlcmZsb3dcbiIpOwo+ID4+Pj4gICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9S KEVJTlZBTCk7Cj4gPj4+PiAgICAgICAgICAgICAgICB9Cj4gPj4+PiAtCj4gPj4+IHVucmVsYXRl ZCBjb3NtZXRpY3MKPiA+Pj4KPiA+Pj4+ICAgICAgICAgICAgICAgIGZvbnRzaXplID0gcm91bmRl ZHNpemU7Cj4gPj4+PiAgICAgICAgICAgIH0KPiA+Pj4+ICAgICAgICB9Cj4gPj4+PiBAQCAtNTQ4 LDcgKzU3MSw3IEBAIHN0YXRpYyBpbnQgbG9hZF9mb250X2ZvbnRjb25maWcoQVZGaWx0ZXJDb250 ZXh0Cj4gPj4gKmN0eCkKPiA+Pj4+ICAgICAgICAgICAgZ290byBmYWlsOwo+ID4+Pj4gICAgICAg IH0KPiA+Pj4+Cj4gPj4+PiAtICAgIGF2X2xvZyhjdHgsIEFWX0xPR19JTkZPLCAiVXNpbmcgXCIl c1wiXG4iLCBmaWxlbmFtZSk7Cj4gPj4+PiArICAgIGF2X2xvZyhjdHgsIEFWX0xPR19WRVJCT1NF LCAiVXNpbmcgXCIlc1wiXG4iLCBmaWxlbmFtZSk7Cj4gPj4+IHVucmVsYXRlZCBjb3NtZXRpY3MK PiA+Pj4KPiA+Pj4+ICAgICAgICBpZiAocGFyc2VfZXJyKQo+ID4+Pj4gICAgICAgICAgICBzLT5k ZWZhdWx0X2ZvbnRzaXplID0gc2l6ZSArIDAuNTsKPiA+Pj4+Cj4gPj4+PiBAQCAtNjkwLDYgKzcx Myw3IEBAIHN0YXRpYyBpbnQgc2hhcGVfdGV4dChBVkZpbHRlckNvbnRleHQgKmN0eCkKPiA+Pj4+ ICAgICAgICBzLT50ZXh0ID0gdG1wOwo+ID4+Pj4gICAgICAgIGxlbiA9IGZyaWJpZGlfdW5pY29k ZV90b19jaGFyc2V0KEZSSUJJRElfQ0hBUl9TRVRfVVRGOCwKPiA+Pj4+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bmljb2Rlc3RyLCBsZW4sIHMtPnRleHQpOwo+ID4+ Pj4gKwo+ID4+PiB1bnJlbGF0ZWQgY29zbWV0aWNzCj4gPj4+Cj4gPj4+PiArc3RhdGljIHZvaWQg c2hhcGVfdGV4dF9oYihEcmF3VGV4dENvbnRleHQgKnMsIEhhcmZidXp6RGF0YSogaGIsIGNvbnN0 Cj4gPj4gY2hhciogdGV4dCwgaW50IHRleHRMZW4pCj4gPj4+PiArewo+ID4+Pj4gKyAgICBoYi0+ YnVmID0gaGJfYnVmZmVyX2NyZWF0ZSgpOwo+ID4+PiBTZWVtcyBsaWtlIGl0IGF0IGxlYXN0IHRo aXMgbmVlZHMgdG8gYmUgY2hlY2tlZCBmb3IgZXJyb3JzLCBtYXliZSBzb21lCj4gPj4+IG9mIHRo ZSBvdGhlciBjYWxscyB0b28uCj4gPj4+Cj4gPj4+PiBAQCAtMTU1OSw1NiArMTc5NSwxNDIgQEAg Y29udGludWVfb25faW52YWxpZDI6Cj4gPj4+PiAgICAgICAgdXBkYXRlX2NvbG9yX3dpdGhfYWxw aGEocywgJmJvcmRlcmNvbG9yLCBzLT5ib3JkZXJjb2xvcik7Cj4gPj4+PiAgICAgICAgdXBkYXRl X2NvbG9yX3dpdGhfYWxwaGEocywgJmJveGNvbG9yICAgLCBzLT5ib3hjb2xvciAgICk7Cj4gPj4+ Pgo+ID4+Pj4gLSAgICBib3hfdyA9IG1heF90ZXh0X2xpbmVfdzsKPiA+Pj4+IC0gICAgYm94X2gg PSB5ICsgcy0+bWF4X2dseXBoX2g7Cj4gPj4+PiArICAgIGlmIChzLT5kcmF3X2JveCAmJiBzLT5i b3hib3JkZXJ3KSB7Cj4gPj4+PiArICAgICAgICBzLT5iYl90b3AgPSBzLT5iYl9yaWdodCA9IHMt PmJiX2JvdHRvbSA9IHMtPmJiX2xlZnQgPQo+ID4+IHMtPmJveGJvcmRlcnc7Cj4gPj4+PiArICAg IH0gZWxzZSB7Cj4gPj4+PiArICAgICAgICBzLT5iYl90b3AgPSBzLT5iYl9yaWdodCA9IHMtPmJi X2JvdHRvbSA9IHMtPmJiX2xlZnQgPSAwOwo+ID4+Pj4gKyAgICB9Cj4gPj4+Pgo+ID4+Pj4gICAg ICAgIGlmIChzLT5maXhfYm91bmRzKSB7Cj4gPj4+PiAtCj4gPj4+PiAgICAgICAgICAgIC8qIGNh bGN1bGF0ZSBmb290cHJpbnQgb2YgdGV4dCBlZmZlY3RzICovCj4gPj4+PiAtICAgICAgICBpbnQg Ym94b2Zmc2V0ICAgICA9IHMtPmRyYXdfYm94ID8gRkZNQVgocy0+Ym94Ym9yZGVydywgMCkgOgo+ IDA7Cj4gPj4+PiAgICAgICAgICAgIGludCBib3JkZXJvZmZzZXQgID0gcy0+Ym9yZGVydyAgPyBG Rk1BWChzLT5ib3JkZXJ3LCAwKSA6IDA7Cj4gPj4+Pgo+ID4+Pj4gLSAgICAgICAgaW50IG9mZnNl dGxlZnQgPSBGRk1BWDMoYm94b2Zmc2V0LCBib3JkZXJvZmZzZXQsCj4gPj4+PiArICAgICAgICBp bnQgb2Zmc2V0bGVmdCA9IEZGTUFYMyhGRk1BWChzLT5iYl9sZWZ0LCAwKSwgYm9yZGVyb2Zmc2V0 LAo+ID4+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocy0+c2hhZG93eCA8 IDAgPwo+IEZGQUJTKHMtPnNoYWRvd3gpIDoKPiA+PiAwKSk7Cj4gPj4+PiAtICAgICAgICBpbnQg b2Zmc2V0dG9wID0gRkZNQVgzKGJveG9mZnNldCwgYm9yZGVyb2Zmc2V0LAo+ID4+Pj4gKyAgICAg ICAgaW50IG9mZnNldHRvcCA9IEZGTUFYMyhGRk1BWChzLT5iYl90b3AsIDApLCBib3JkZXJvZmZz ZXQsCj4gPj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzLT5zaGFkb3d5 IDwgMCA/Cj4gRkZBQlMocy0+c2hhZG93eSkgOgo+ID4+IDApKTsKPiA+Pj4+IC0KPiA+Pj4+IC0g ICAgICAgIGludCBvZmZzZXRyaWdodCA9IEZGTUFYMyhib3hvZmZzZXQsIGJvcmRlcm9mZnNldCwK PiA+Pj4+ICsgICAgICAgIGludCBvZmZzZXRyaWdodCA9IEZGTUFYMyhGRk1BWChzLT5iYl9yaWdo dCwgMCksIGJvcmRlcm9mZnNldCwKPiA+Pj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChzLT5zaGFkb3d4ID4gMCA/IHMtPnNoYWRvd3ggOgo+IDApKTsKPiA+Pj4+IC0gICAg ICAgIGludCBvZmZzZXRib3R0b20gPSBGRk1BWDMoYm94b2Zmc2V0LCBib3JkZXJvZmZzZXQsCj4g Pj4+PiArICAgICAgICBpbnQgb2Zmc2V0Ym90dG9tID0gRkZNQVgzKEZGTUFYKHMtPmJiX2JvdHRv bSwgMCksCj4gYm9yZGVyb2Zmc2V0LAo+ID4+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChzLT5zaGFkb3d5ID4gMCA/IHMtPnNoYWRvd3kgOgo+IDApKTsKPiA+Pj4+Cj4g Pj4+PiAtCj4gPj4+PiAgICAgICAgICAgIGlmIChzLT54IC0gb2Zmc2V0bGVmdCA8IDApIHMtPngg PSBvZmZzZXRsZWZ0Owo+ID4+Pj4gICAgICAgICAgICBpZiAocy0+eSAtIG9mZnNldHRvcCA8IDAp ICBzLT55ID0gb2Zmc2V0dG9wOwo+ID4+Pj4KPiA+Pj4+IC0gICAgICAgIGlmIChzLT54ICsgYm94 X3cgKyBvZmZzZXRyaWdodCA+IHdpZHRoKQo+ID4+Pj4gLSAgICAgICAgICAgIHMtPnggPSBGRk1B WCh3aWR0aCAtIGJveF93IC0gb2Zmc2V0cmlnaHQsIDApOwo+ID4+Pj4gLSAgICAgICAgaWYgKHMt PnkgKyBib3hfaCArIG9mZnNldGJvdHRvbSA+IGhlaWdodCkKPiA+Pj4+IC0gICAgICAgICAgICBz LT55ID0gRkZNQVgoaGVpZ2h0IC0gYm94X2ggLSBvZmZzZXRib3R0b20sIDApOwo+ID4+Pj4gKyAg ICAgICAgaWYgKHMtPnggKyBtZXRyaWNzLndpZHRoICsgb2Zmc2V0cmlnaHQgPiB3aWR0aCkKPiA+ Pj4+ICsgICAgICAgICAgICBzLT54ID0gRkZNQVgod2lkdGggLSBtZXRyaWNzLndpZHRoIC0gb2Zm c2V0cmlnaHQsIDApOwo+ID4+Pj4gKyAgICAgICAgaWYgKHMtPnkgKyBtZXRyaWNzLmhlaWdodCAr IG9mZnNldGJvdHRvbSA+IGhlaWdodCkKPiA+Pj4+ICsgICAgICAgICAgICBzLT55ID0gRkZNQVgo aGVpZ2h0IC0gbWV0cmljcy5oZWlnaHQgLSBvZmZzZXRib3R0b20sIDApOwo+ID4+Pj4gICAgICAg IH0KPiA+Pj4+Cj4gPj4+PiAtICAgIC8qIGRyYXcgYm94ICovCj4gPj4+PiAtICAgIGlmIChzLT5k cmF3X2JveCkKPiA+Pj4+IC0gICAgICAgIGZmX2JsZW5kX3JlY3RhbmdsZSgmcy0+ZGMsICZib3hj b2xvciwKPiA+Pj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS0+ZGF0YSwgZnJh bWUtPmxpbmVzaXplLCB3aWR0aCwKPiBoZWlnaHQsCj4gPj4+PiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgcy0+eCAtIHMtPmJveGJvcmRlcncsIHMtPnkgLQo+IHMtPmJveGJvcmRlcncsCj4g Pj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94X3cgKyBzLT5ib3hib3JkZXJ3ICog MiwgYm94X2ggKwo+ID4+IHMtPmJveGJvcmRlcncgKiAyKTsKPiA+Pj4+ICsgICAgeCA9IDA7Cj4g Pj4+PiArICAgIHkgPSAwOwo+ID4+Pj4gKyAgICB4NjQgPSAoaW50KShzLT54ICogNjQuKTsKPiA+ Pj4+ICsgICAgeTY0ID0gKGludCkocy0+eSAqIDY0LiArIG1ldHJpY3Mub2Zmc2V0X3RvcDY0KTsK PiA+Pj4+ICsKPiA+Pj4+ICsgICAgZm9yIChpbnQgbCA9IDA7IGwgPCBzLT5saW5lX2NvdW50OyAr K2wpIHsKPiA+Pj4+ICsgICAgICAgIFRleHRMaW5lICpsaW5lID0gJnMtPmxpbmVzW2xdOwo+ID4+ Pj4gKyAgICAgICAgSGFyZmJ1enpEYXRhICpoYiA9ICZsaW5lLT5oYl9kYXRhOwo+ID4+Pj4gKyAg ICAgICAgbGluZS0+Z2x5cGhzID0gYXZfbWFsbG9jeihoYi0+Z2x5cGhfY291bnQgKgo+IHNpemVv ZihHbHlwaEluZm8pKTsKPiA+Pj4+ICsKPiA+Pj4+ICsgICAgICAgIGZvciAoaW50IHQgPSAwOyB0 IDwgaGItPmdseXBoX2NvdW50OyArK3QpIHsKPiA+Pj4+ICsgICAgICAgICAgICBHbHlwaEluZm8g KmdfaW5mbyA9ICZsaW5lLT5nbHlwaHNbdF07Cj4gPj4+PiArICAgICAgICAgICAgdWludDhfdCBp c190YWIgPSBsYXN0X3RhYl9pZHggPCBzLT50YWJfY291bnQgJiYKPiA+Pj4+ICsgICAgICAgICAg ICAgICAgaGItPmdseXBoX2luZm9bdF0uY2x1c3RlciA9PQo+ID4+IHMtPnRhYl9jbHVzdGVyc1ts YXN0X3RhYl9pZHhdIC0gbGluZS0+Y2x1c3Rlcl9vZmZzZXQ7Cj4gPj4+PiArICAgICAgICAgICAg aW50IHRydWVfeCwgdHJ1ZV95Owo+ID4+Pj4gKyAgICAgICAgICAgIGlmIChpc190YWIpIHsKPiA+ Pj4+ICsgICAgICAgICAgICAgICAgKytsYXN0X3RhYl9pZHg7Cj4gPj4+PiArICAgICAgICAgICAg fQo+ID4+Pj4gKyAgICAgICAgICAgIHRydWVfeCA9IHggKyBoYi0+Z2x5cGhfcG9zW3RdLnhfb2Zm c2V0Owo+ID4+Pj4gKyAgICAgICAgICAgIHRydWVfeSA9IHkgKyBoYi0+Z2x5cGhfcG9zW3RdLnlf b2Zmc2V0Owo+ID4+Pj4gKyAgICAgICAgICAgIHNoaWZ0X3g2NCA9ICgoKHg2NCArIHRydWVfeCkg Pj4gNCkgJiAwYjAwMTEpIDw8IDQ7Cj4gPj4+PiArICAgICAgICAgICAgc2hpZnRfeTY0ID0gKCg0 IC0gKCgoeTY0ICsgdHJ1ZV95KSA+PiA0KSAmIDBiMDAxMSkpICYKPiA+PiAwYjAwMTEpIDw8IDQ7 Cj4gPj4+PiArCj4gPj4+PiArICAgICAgICAgICAgcmV0ID0gbG9hZF9nbHlwaChjdHgsICZnbHlw aCwKPiBoYi0+Z2x5cGhfaW5mb1t0XS5jb2RlcG9pbnQsCj4gPj4gc2hpZnRfeDY0LCBzaGlmdF95 NjQpOwo+ID4+Pj4gKyAgICAgICAgICAgIGlmIChyZXQgIT0gMCkgewo+ID4+Pj4gKyAgICAgICAg ICAgICAgICByZXR1cm4gcmV0Owo+ID4+Pj4gKyAgICAgICAgICAgIH0KPiA+Pj4+ICsgICAgICAg ICAgICBnX2luZm8tPmNvZGUgPSBoYi0+Z2x5cGhfaW5mb1t0XS5jb2RlcG9pbnQ7Cj4gPj4+PiAr ICAgICAgICAgICAgZ19pbmZvLT54ID0gKHg2NCArIHRydWVfeCkgPj4gNjsKPiA+Pj4+ICsgICAg ICAgICAgICBnX2luZm8tPnkgPSAoKHk2NCArIHRydWVfeSkgPj4gNikgKyAoc2hpZnRfeTY0ID4g MCA/IDEgOgo+ID4+IDApOwo+ID4+Pj4gKyAgICAgICAgICAgIGdfaW5mby0+c2hpZnRfeDY0ID0g c2hpZnRfeDY0Owo+ID4+Pj4gKyAgICAgICAgICAgIGdfaW5mby0+c2hpZnRfeTY0ID0gc2hpZnRf eTY0Owo+ID4+Pj4gKwo+ID4+Pj4gKyAgICAgICAgICAgIGlmICghaXNfdGFiKSB7Cj4gPj4+PiAr ICAgICAgICAgICAgICAgIHggKz0gaGItPmdseXBoX3Bvc1t0XS54X2FkdmFuY2U7Cj4gPj4+PiAr ICAgICAgICAgICAgfSBlbHNlIHsKPiA+Pj4+ICsgICAgICAgICAgICAgICAgaW50IHNpemUgPSBz LT5ibGFua19hZHZhbmNlNjQgKiBzLT50YWJzaXplOwo+ID4+Pj4gKyAgICAgICAgICAgICAgICB4 ID0gKHggLyBzaXplICsgMSkgKiBzaXplOwo+ID4+Pj4gKyAgICAgICAgICAgIH0KPiA+Pj4+ICsg ICAgICAgICAgICB5ICs9IGhiLT5nbHlwaF9wb3NbdF0ueV9hZHZhbmNlOwo+ID4+Pj4gKyAgICAg ICAgfQo+ID4+Pj4KPiA+Pj4+IC0gICAgaWYgKHMtPnNoYWRvd3ggfHwgcy0+c2hhZG93eSkgewo+ ID4+Pj4gLSAgICAgICAgaWYgKChyZXQgPSBkcmF3X2dseXBocyhzLCBmcmFtZSwgd2lkdGgsIGhl aWdodCwKPiA+Pj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNoYWRvd2NvbG9y LCBzLT5zaGFkb3d4LCBzLT5zaGFkb3d5LAo+ID4+IDApKSA8IDApCj4gPj4+PiAtICAgICAgICAg ICAgcmV0dXJuIHJldDsKPiA+Pj4+ICsgICAgICAgIHkgKz0gbWV0cmljcy5saW5lX2hlaWdodDY0 ICsgcy0+bGluZV9zcGFjaW5nICogNjQ7Cj4gPj4+PiArICAgICAgICB4ID0gMDsKPiA+Pj4+ICAg ICAgICB9Cj4gPj4+Pgo+ID4+Pj4gLSAgICBpZiAocy0+Ym9yZGVydykgewo+ID4+Pj4gLSAgICAg ICAgaWYgKChyZXQgPSBkcmF3X2dseXBocyhzLCBmcmFtZSwgd2lkdGgsIGhlaWdodCwKPiA+Pj4+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJvcmRlcmNvbG9yLCAwLCAwLCBzLT5i b3JkZXJ3KSkgPCAwKQo+ID4+Pj4gKyAgICBtZXRyaWNzLnJlY3RfeCA9IHMtPng7Cj4gPj4+PiAr ICAgIG1ldHJpY3MucmVjdF95ID0gcy0+eTsKPiA+Pj4+ICsKPiA+Pj4+ICsgICAgcy0+Ym94X3dp ZHRoID0gbWV0cmljcy53aWR0aDsKPiA+Pj4+ICsgICAgcy0+Ym94X2hlaWdodCA9IG1ldHJpY3Mu aGVpZ2h0Owo+ID4+PiBXaGF0IGlzIHRoZSBwb2ludCBvZiBkdXBsaWNhdGluZyB0aGVzZSB2YWx1 ZXMgaW4gYm90aCBzdHJ1Y3RzPwo+ID4+Pgo+ID4+Pgo+ID4+IF9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gPj4gZmZtcGVnLWRldmVsIG1haWxpbmcgbGlz dAo+ID4+IGZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCj4gPj4gaHR0cHM6Ly9mZm1wZWcub3JnL21h aWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCj4gPj4KPiA+PiBUbyB1bnN1YnNjcmliZSwgdmlz aXQgbGluayBhYm92ZSwgb3IgZW1haWwKPiA+PiBmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcu b3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo+ID4+Cj4gPiBfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ID4gZmZtcGVnLWRldmVsIG1haWxpbmcg bGlzdAo+ID4gZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKPiA+IGh0dHBzOi8vZmZtcGVnLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAo+ID4KPiA+IFRvIHVuc3Vic2NyaWJlLCB2aXNp dCBsaW5rIGFib3ZlLCBvciBlbWFpbAo+ID4gZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9y ZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4KPiBfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwo+IGZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKPiBmZm1w ZWctZGV2ZWxAZmZtcGVnLm9yZwo+IGh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ZmbXBlZy1kZXZlbAo+Cj4gVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVt YWlsCj4gZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vi c2NyaWJlIi4KPgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBz Oi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3Jp YmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBl Zy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==