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 66B4140BEB for ; Tue, 28 Dec 2021 22:50:19 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2E1E468AF7A; Wed, 29 Dec 2021 00:50:17 +0200 (EET) Received: from mail-qv1-f44.google.com (mail-qv1-f44.google.com [209.85.219.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EC46668AEA3 for ; Wed, 29 Dec 2021 00:50:10 +0200 (EET) Received: by mail-qv1-f44.google.com with SMTP id q3so17638710qvc.7 for ; Tue, 28 Dec 2021 14:50:10 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:content-transfer-encoding:mime-version :subject:message-id:date:to; bh=IknGGDWMneE37psVzF97kslGw1+eQGvAwvSvBi6g7mI=; b=LOvct63X24BES7ZciTNbQhhELorUya3VByhFkP9MoA2Qcw7oP2lECgRllpWFqmODO9 FT96EryOx19Nru8BzaiiSL330hm6DlJ7VP/Wuh9HQp5hrTl9t01rxKnnNTSqF218j02r +XWuRfa5N7aPcVGNKgRaQloR8sPzTEo4paxZdyZOGDXR7nfyPPOgid+hl1JfNVUE1YbI i6EprfqnEyr7NpmHMEbOXei39S/+ihKdzOyaQostqmjSQzf1uz5Ptq/5jiD/+yKSTrs8 EVGvwRoHx8zyP/L4FBp7cXoWO6+3cnOqs1lXb+aOju8OVRPcTFjckjc23oDVhZsDo2BX qMKA== X-Gm-Message-State: AOAM531r7PrPtQi060ZDijtGQqyjUmofHrGCMBD/yYhfvyqMH1MgP/in gm+ZMiIMjp7/24Y43OgmDoebXsO1zwF9pA== X-Google-Smtp-Source: ABdhPJyL7Z/ulJHguNz4SaPSkZK0dvYJPOHyVtXCv5XgfinBxUt0VTy7O0iYgAAHJN9mhDy5cvXZdg== X-Received: by 2002:a05:6214:20a2:: with SMTP id 2mr16682111qvd.57.1640731808907; Tue, 28 Dec 2021 14:50:08 -0800 (PST) Received: from smtpclient.apple ([172.58.159.253]) by smtp.gmail.com with ESMTPSA id t18sm16532359qkp.84.2021.12.28.14.50.07 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 28 Dec 2021 14:50:08 -0800 (PST) From: Romain Beauxis Mime-Version: 1.0 (Mac OS X Mail 15.0 \(3693.40.0.1.81\)) Message-Id: <7580B1EB-3AD3-4D90-AEDD-43F98F9BBC53@rastageeks.org> Date: Tue, 28 Dec 2021 16:50:04 -0600 To: FFmpeg development discussions and patches X-Mailer: Apple Mail (2.3693.40.0.1.81) Subject: [FFmpeg-devel] [PATCH v6 01/03] libavdevice/avfoundation.m: use AudioConvert, extend supported formats 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: VGhpcyBpcyB0aGUgZmlyc3QgcGF0Y2ggb2YgYSBzZXJpZXMgb2YgMyB0aGF0IGZpeCwgY2xlYW51 cCBhbmQgZW5oYW5jZSB0aGUKYXZmb3VuZGF0aW9uIGltcGxlbWVudGF0aW9uIGZvciBsaWJhdmRl dmljZS4KClRoZSBwYXRjaGVzIGhhdmUgYmVlbiBzdWJtaXR0ZWQgYSBjb3VwbGUgb2YgdGltZXMg bm93IGFuZCBoYXZlCnJlY2VpdmVkIHZlcnkgbmljZSBmZWVkYmFjayBmb3IgdGhlIGxhc3QgdHdv IGhvd2V2ZXIgYnV0IHRoZXkgZG8gbm90IHNlZW0KdG8gaGF2ZSBiZWVuIGNvbnNpZGVyZWQgZm9y IGluY2x1c2lvbiB0aHVzIGZhci4gCgpUaGVzZSBwYXRjaGVzIGNvbWUgZnJvbSBhbiBhY3R1YWwg dXNlci1mYWNpbmcgYXBwbGljYXRpb24gcmVseWluZyBvbgpsaWJhdmRldmljZeKAmXMgaW1wbGVt ZW50YXRpb24gb2YgYXZmb3VuZGF0aW9uIGF1ZGlvIGlucHV0LiBXaXRob3V0IHRoZW0sCkF2Zm91 bmRhdGlvbiBpcyBwcmFjdGljYWxseSB1bnVzYWJsZSBhcyBpdCB3aWxsOgoqIFJlZnVzZSB0byBw cm9jZXNzIGNlcnRhaW4gc3BlY2lmaWMgYXVkaW8gaW5wdXQgZm9ybWF0IHRoYXQgYXJlIGFjdHVh bGx5CiAgcmV0dXJuZWQgYnkgdGhlIE9TIGZvciBzb21lIHVzZXJzIChwYWNrZWQgUENNIGF1ZGlv KQoqIERyb3AgYXVkaW8gZnJhbWVzLCByZXN1bHRpbmcgaW4gY29ycnVwdGVkIGF1ZGlvIGlucHV0 LiBUaGlzIG1pZ2h0IGhhdmUgYmVlbgogIHVubm90aWNlZCB3aXRoIHZpZGVvIGZyYW1lcyBidXQg dGhpcyBtYWtlcyBhdmZvdW5kYXRpb24gZXNzZW50aWFsbHkgdW51c2FibGUKICBmb3IgYXVkaW8u CgpUaGUgcGF0Y2hlcyBhcmUgbm93IGJlaW5nIGluY2x1ZGVkIGluIG91ciBwcm9kdWN0aW9uIGJ1 aWxkIHNvIHRoZXkgYXJlIHRlc3RlZAphbmQgdXNhYmxlIGluIHByb2R1Y3Rpb24uCgpTbywgdGhp cyBiYXJlcyB0aGUgcXVlc3Rpb246IGlzIGF2Zm91bmRhdGlvbiBzdGlsbCBzdXBwb3J0ZWQgYW5k IGFjdGl2ZWx5IG1haW50YWluZWQKaW4gbGliYXZkZXZpY2U/IEl0IGZlZWxzIHRoYXQgc3VjaCBp bXBvcnRhbnQgYnVncyBzaG91bGQgaGF2ZSBiZWVuIG5vdGljZWQgYnkgbm93CmFuZCBhbHNvIGdl bmVyYXRlZCBhIGxpdHRsZSBtb3JlIGludGVyZXN0IGluIGZpeGluZyB0aGVtLgoKVGhhbmtzIGZv ciB54oCZYWxsIGZlZWRiYWNrIQrigJQgUm9tYWluCi0tLS0tCgpDaGFuZ2VzOgoqIHYyOiBOb25l CiogdjM6IE5vbmUKKiB2NDogTm9uZQoqIHY1OiBGaXggaW5kZW50YXRpb24vd3JhcHBpbmcKKiB2 NjogTm9uZQoKKiBJbXBsZW1lbnQgc3VwcG9ydCBmb3IgQXVkaW9Db252ZXJ0ZXIKKiBTd2l0Y2gg dG8gQXVkaW9Db252ZXJ0ZXIncyBBUEkgdG8gY29udmVydCB1bnN1cHBvcnRlZCBQQ00KICBmb3Jt YXRzIChub24taW50ZXJsZWF2ZWQsIG5vbi1wYWNrZWQpIHRvIHN1cHBvcnRlZCBmb3JtYXRzCiog TWluaW1pemUgZGF0YSBjb3B5LgoKVGhpcyBmaXhlczogaHR0cHM6Ly90cmFjLmZmbXBlZy5vcmcv dGlja2V0Lzk1MDIKCkFQSSByZWY6Cmh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVu dGF0aW9uL2F1ZGlvdG9vbGJveC9hdWRpb19jb252ZXJ0ZXJfc2VydmljZXMKClNpZ25lZC1vZmYt Ynk6IFJvbWFpbiBCZWF1eGlzIDx0b290c0ByYXN0YWdlZWtzLm9yZz4KLS0tCmxpYmF2ZGV2aWNl L2F2Zm91bmRhdGlvbi5tIHwgMjUwICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0t LS0KMSBmaWxlIGNoYW5nZWQsIDE0NCBpbnNlcnRpb25zKCspLCAxMDYgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvbGliYXZkZXZpY2UvYXZmb3VuZGF0aW9uLm0gYi9saWJhdmRldmljZS9hdmZv dW5kYXRpb24ubQppbmRleCAwY2Q2ZTY0NmQ1Li43OWM5MjA3Y2ZhIDEwMDY0NAotLS0gYS9saWJh dmRldmljZS9hdmZvdW5kYXRpb24ubQorKysgYi9saWJhdmRldmljZS9hdmZvdW5kYXRpb24ubQpA QCAtMTExLDE2ICsxMTEsMTAgQEAKCiAgICBpbnQgICAgICAgICAgICAgbnVtX3ZpZGVvX2Rldmlj ZXM7CgotICAgIGludCAgICAgICAgICAgICBhdWRpb19jaGFubmVsczsKLSAgICBpbnQgICAgICAg ICAgICAgYXVkaW9fYml0c19wZXJfc2FtcGxlOwotICAgIGludCAgICAgICAgICAgICBhdWRpb19m bG9hdDsKLSAgICBpbnQgICAgICAgICAgICAgYXVkaW9fYmU7Ci0gICAgaW50ICAgICAgICAgICAg IGF1ZGlvX3NpZ25lZF9pbnRlZ2VyOwotICAgIGludCAgICAgICAgICAgICBhdWRpb19wYWNrZWQ7 Ci0gICAgaW50ICAgICAgICAgICAgIGF1ZGlvX25vbl9pbnRlcmxlYXZlZDsKLQotICAgIGludDMy X3QgICAgICAgICAqYXVkaW9fYnVmZmVyOwotICAgIGludCAgICAgICAgICAgICBhdWRpb19idWZm ZXJfc2l6ZTsKKyAgICBVSW50MzIgICAgICAgICAgICBhdWRpb19idWZmZXJzOworICAgIFVJbnQz MiAgICAgICAgICAgIGF1ZGlvX2NoYW5uZWxzOworICAgIFVJbnQzMiAgICAgICAgICAgIGJ5dGVz X3Blcl9zYW1wbGU7CisgICAgQXVkaW9Db252ZXJ0ZXJSZWYgYXVkaW9fY29udmVydGVyOwoKICAg IGVudW0gQVZQaXhlbEZvcm1hdCBwaXhlbF9mb3JtYXQ7CgpAQCAtMjk5LDcgKzI5MywxMCBAQCBz dGF0aWMgdm9pZCBkZXN0cm95X2NvbnRleHQoQVZGQ29udGV4dCogY3R4KQogICAgY3R4LT5hdmZf ZGVsZWdhdGUgICAgPSBOVUxMOwogICAgY3R4LT5hdmZfYXVkaW9fZGVsZWdhdGUgPSBOVUxMOwoK LSAgICBhdl9mcmVlcCgmY3R4LT5hdWRpb19idWZmZXIpOworICAgIGlmIChjdHgtPmF1ZGlvX2Nv bnZlcnRlcikgeworICAgICAgQXVkaW9Db252ZXJ0ZXJEaXNwb3NlKGN0eC0+YXVkaW9fY29udmVy dGVyKTsKKyAgICAgIGN0eC0+YXVkaW9fY29udmVydGVyID0gTlVMTDsKKyAgICB9CgogICAgcHRo cmVhZF9tdXRleF9kZXN0cm95KCZjdHgtPmZyYW1lX2xvY2spOwoKQEAgLTY3Myw2ICs2NzAsMTAg QEAgc3RhdGljIGludCBnZXRfYXVkaW9fY29uZmlnKEFWRm9ybWF0Q29udGV4dCAqcykKICAgIEFW RkNvbnRleHQgKmN0eCA9IChBVkZDb250ZXh0KilzLT5wcml2X2RhdGE7CiAgICBDTUZvcm1hdERl c2NyaXB0aW9uUmVmIGZvcm1hdF9kZXNjOwogICAgQVZTdHJlYW0qIHN0cmVhbSA9IGF2Zm9ybWF0 X25ld19zdHJlYW0ocywgTlVMTCk7CisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIG91 dHB1dF9mb3JtYXQgPSB7MH07CisgICAgaW50IGF1ZGlvX2JpdHNfcGVyX3NhbXBsZSwgYXVkaW9f ZmxvYXQsIGF1ZGlvX2JlOworICAgIGludCBhdWRpb19zaWduZWRfaW50ZWdlciwgYXVkaW9fcGFj a2VkLCBhdWRpb19ub25faW50ZXJsZWF2ZWQ7CisgICAgaW50IG11c3RfY29udmVydCA9IDA7Cgog ICAgaWYgKCFzdHJlYW0pIHsKICAgICAgICByZXR1cm4gMTsKQEAgLTY5MCw2MCArNjkxLDk1IEBA IHN0YXRpYyBpbnQgZ2V0X2F1ZGlvX2NvbmZpZyhBVkZvcm1hdENvbnRleHQgKnMpCiAgICBhdnBy aXZfc2V0X3B0c19pbmZvKHN0cmVhbSwgNjQsIDEsIGF2Zl90aW1lX2Jhc2UpOwoKICAgIGZvcm1h dF9kZXNjID0gQ01TYW1wbGVCdWZmZXJHZXRGb3JtYXREZXNjcmlwdGlvbihjdHgtPmN1cnJlbnRf YXVkaW9fZnJhbWUpOwotICAgIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiAqYmFz aWNfZGVzYyA9IENNQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkdldFN0cmVhbUJhc2ljRGVzY3JpcHRp b24oZm9ybWF0X2Rlc2MpOworICAgIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiAq aW5wdXRfZm9ybWF0ID0gQ01BdWRpb0Zvcm1hdERlc2NyaXB0aW9uR2V0U3RyZWFtQmFzaWNEZXNj cmlwdGlvbihmb3JtYXRfZGVzYyk7CgotICAgIGlmICghYmFzaWNfZGVzYykgeworICAgIGlmICgh aW5wdXRfZm9ybWF0KSB7CiAgICAgICAgdW5sb2NrX2ZyYW1lcyhjdHgpOwogICAgICAgIGF2X2xv ZyhzLCBBVl9MT0dfRVJST1IsICJhdWRpbyBmb3JtYXQgbm90IGF2YWlsYWJsZVxuIik7CiAgICAg ICAgcmV0dXJuIDE7CiAgICB9CgorICAgIGlmIChpbnB1dF9mb3JtYXQtPm1Gb3JtYXRJRCAhPSBr QXVkaW9Gb3JtYXRMaW5lYXJQQ00pIHsKKyAgICAgICAgdW5sb2NrX2ZyYW1lcyhjdHgpOworICAg ICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAib25seSBQQ00gYXVkaW8gZm9ybWF0IGFyZSBz dXBwb3J0ZWQgYXQgdGhlIG1vbWVudFxuIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKwog ICAgc3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfdHlwZSAgICAgPSBBVk1FRElBX1RZUEVfQVVESU87 Ci0gICAgc3RyZWFtLT5jb2RlY3Bhci0+c2FtcGxlX3JhdGUgICAgPSBiYXNpY19kZXNjLT5tU2Ft cGxlUmF0ZTsKLSAgICBzdHJlYW0tPmNvZGVjcGFyLT5jaGFubmVscyAgICAgICA9IGJhc2ljX2Rl c2MtPm1DaGFubmVsc1BlckZyYW1lOworICAgIHN0cmVhbS0+Y29kZWNwYXItPnNhbXBsZV9yYXRl ICAgID0gaW5wdXRfZm9ybWF0LT5tU2FtcGxlUmF0ZTsKKyAgICBzdHJlYW0tPmNvZGVjcGFyLT5j aGFubmVscyAgICAgICA9IGlucHV0X2Zvcm1hdC0+bUNoYW5uZWxzUGVyRnJhbWU7CiAgICBzdHJl YW0tPmNvZGVjcGFyLT5jaGFubmVsX2xheW91dCA9IGF2X2dldF9kZWZhdWx0X2NoYW5uZWxfbGF5 b3V0KHN0cmVhbS0+Y29kZWNwYXItPmNoYW5uZWxzKTsKCi0gICAgY3R4LT5hdWRpb19jaGFubmVs cyAgICAgICAgPSBiYXNpY19kZXNjLT5tQ2hhbm5lbHNQZXJGcmFtZTsKLSAgICBjdHgtPmF1ZGlv X2JpdHNfcGVyX3NhbXBsZSA9IGJhc2ljX2Rlc2MtPm1CaXRzUGVyQ2hhbm5lbDsKLSAgICBjdHgt PmF1ZGlvX2Zsb2F0ICAgICAgICAgICA9IGJhc2ljX2Rlc2MtPm1Gb3JtYXRGbGFncyAmIGtBdWRp b0Zvcm1hdEZsYWdJc0Zsb2F0OwotICAgIGN0eC0+YXVkaW9fYmUgICAgICAgICAgICAgID0gYmFz aWNfZGVzYy0+bUZvcm1hdEZsYWdzICYga0F1ZGlvRm9ybWF0RmxhZ0lzQmlnRW5kaWFuOwotICAg IGN0eC0+YXVkaW9fc2lnbmVkX2ludGVnZXIgID0gYmFzaWNfZGVzYy0+bUZvcm1hdEZsYWdzICYg a0F1ZGlvRm9ybWF0RmxhZ0lzU2lnbmVkSW50ZWdlcjsKLSAgICBjdHgtPmF1ZGlvX3BhY2tlZCAg ICAgICAgICA9IGJhc2ljX2Rlc2MtPm1Gb3JtYXRGbGFncyAmIGtBdWRpb0Zvcm1hdEZsYWdJc1Bh Y2tlZDsKLSAgICBjdHgtPmF1ZGlvX25vbl9pbnRlcmxlYXZlZCA9IGJhc2ljX2Rlc2MtPm1Gb3Jt YXRGbGFncyAmIGtBdWRpb0Zvcm1hdEZsYWdJc05vbkludGVybGVhdmVkOwotCi0gICAgaWYgKGJh c2ljX2Rlc2MtPm1Gb3JtYXRJRCA9PSBrQXVkaW9Gb3JtYXRMaW5lYXJQQ00gJiYKLSAgICAgICAg Y3R4LT5hdWRpb19mbG9hdCAmJgotICAgICAgICBjdHgtPmF1ZGlvX2JpdHNfcGVyX3NhbXBsZSA9 PSAzMiAmJgotICAgICAgICBjdHgtPmF1ZGlvX3BhY2tlZCkgewotICAgICAgICBzdHJlYW0tPmNv ZGVjcGFyLT5jb2RlY19pZCA9IGN0eC0+YXVkaW9fYmUgPyBBVl9DT0RFQ19JRF9QQ01fRjMyQkUg OiBBVl9DT0RFQ19JRF9QQ01fRjMyTEU7Ci0gICAgfSBlbHNlIGlmIChiYXNpY19kZXNjLT5tRm9y bWF0SUQgPT0ga0F1ZGlvRm9ybWF0TGluZWFyUENNICYmCi0gICAgICAgIGN0eC0+YXVkaW9fc2ln bmVkX2ludGVnZXIgJiYKLSAgICAgICAgY3R4LT5hdWRpb19iaXRzX3Blcl9zYW1wbGUgPT0gMTYg JiYKLSAgICAgICAgY3R4LT5hdWRpb19wYWNrZWQpIHsKLSAgICAgICAgc3RyZWFtLT5jb2RlY3Bh ci0+Y29kZWNfaWQgPSBjdHgtPmF1ZGlvX2JlID8gQVZfQ09ERUNfSURfUENNX1MxNkJFIDogQVZf Q09ERUNfSURfUENNX1MxNkxFOwotICAgIH0gZWxzZSBpZiAoYmFzaWNfZGVzYy0+bUZvcm1hdElE ID09IGtBdWRpb0Zvcm1hdExpbmVhclBDTSAmJgotICAgICAgICBjdHgtPmF1ZGlvX3NpZ25lZF9p bnRlZ2VyICYmCi0gICAgICAgIGN0eC0+YXVkaW9fYml0c19wZXJfc2FtcGxlID09IDI0ICYmCi0g ICAgICAgIGN0eC0+YXVkaW9fcGFja2VkKSB7Ci0gICAgICAgIHN0cmVhbS0+Y29kZWNwYXItPmNv ZGVjX2lkID0gY3R4LT5hdWRpb19iZSA/IEFWX0NPREVDX0lEX1BDTV9TMjRCRSA6IEFWX0NPREVD X0lEX1BDTV9TMjRMRTsKLSAgICB9IGVsc2UgaWYgKGJhc2ljX2Rlc2MtPm1Gb3JtYXRJRCA9PSBr QXVkaW9Gb3JtYXRMaW5lYXJQQ00gJiYKLSAgICAgICAgY3R4LT5hdWRpb19zaWduZWRfaW50ZWdl ciAmJgotICAgICAgICBjdHgtPmF1ZGlvX2JpdHNfcGVyX3NhbXBsZSA9PSAzMiAmJgotICAgICAg ICBjdHgtPmF1ZGlvX3BhY2tlZCkgewotICAgICAgICBzdHJlYW0tPmNvZGVjcGFyLT5jb2RlY19p ZCA9IGN0eC0+YXVkaW9fYmUgPyBBVl9DT0RFQ19JRF9QQ01fUzMyQkUgOiBBVl9DT0RFQ19JRF9Q Q01fUzMyTEU7CisgICAgYXVkaW9fYml0c19wZXJfc2FtcGxlID0gaW5wdXRfZm9ybWF0LT5tQml0 c1BlckNoYW5uZWw7CisgICAgYXVkaW9fZmxvYXQgICAgICAgICAgID0gaW5wdXRfZm9ybWF0LT5t Rm9ybWF0RmxhZ3MgJiBrQXVkaW9Gb3JtYXRGbGFnSXNGbG9hdDsKKyAgICBhdWRpb19iZSAgICAg ICAgICAgICAgPSBpbnB1dF9mb3JtYXQtPm1Gb3JtYXRGbGFncyAmIGtBdWRpb0Zvcm1hdEZsYWdJ c0JpZ0VuZGlhbjsKKyAgICBhdWRpb19zaWduZWRfaW50ZWdlciAgPSBpbnB1dF9mb3JtYXQtPm1G b3JtYXRGbGFncyAmIGtBdWRpb0Zvcm1hdEZsYWdJc1NpZ25lZEludGVnZXI7CisgICAgYXVkaW9f cGFja2VkICAgICAgICAgID0gaW5wdXRfZm9ybWF0LT5tRm9ybWF0RmxhZ3MgJiBrQXVkaW9Gb3Jt YXRGbGFnSXNQYWNrZWQ7CisgICAgYXVkaW9fbm9uX2ludGVybGVhdmVkID0gaW5wdXRfZm9ybWF0 LT5tRm9ybWF0RmxhZ3MgJiBrQXVkaW9Gb3JtYXRGbGFnSXNOb25JbnRlcmxlYXZlZDsKKworICAg IGN0eC0+Ynl0ZXNfcGVyX3NhbXBsZSA9IGlucHV0X2Zvcm1hdC0+bUJpdHNQZXJDaGFubmVsID4+ IDM7CisgICAgY3R4LT5hdWRpb19jaGFubmVscyAgID0gaW5wdXRfZm9ybWF0LT5tQ2hhbm5lbHNQ ZXJGcmFtZTsKKworICAgIGlmIChhdWRpb19ub25faW50ZXJsZWF2ZWQpIHsKKyAgICAgICAgY3R4 LT5hdWRpb19idWZmZXJzID0gaW5wdXRfZm9ybWF0LT5tQ2hhbm5lbHNQZXJGcmFtZTsKICAgIH0g ZWxzZSB7Ci0gICAgICAgIHVubG9ja19mcmFtZXMoY3R4KTsKLSAgICAgICAgYXZfbG9nKHMsIEFW X0xPR19FUlJPUiwgImF1ZGlvIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKLSAgICAgICAg cmV0dXJuIDE7CisgICAgICAgIGN0eC0+YXVkaW9fYnVmZmVycyA9IDE7CisgICAgfQorCisgICAg aWYgKGF1ZGlvX25vbl9pbnRlcmxlYXZlZCB8fCAhYXVkaW9fcGFja2VkKSB7CisgICAgICBtdXN0 X2NvbnZlcnQgPSAxOworICAgIH0KKworICAgIG91dHB1dF9mb3JtYXQubUJpdHNQZXJDaGFubmVs ICAgPSBpbnB1dF9mb3JtYXQtPm1CaXRzUGVyQ2hhbm5lbDsKKyAgICBvdXRwdXRfZm9ybWF0Lm1D aGFubmVsc1BlckZyYW1lID0gY3R4LT5hdWRpb19jaGFubmVsczsKKyAgICBvdXRwdXRfZm9ybWF0 Lm1GcmFtZXNQZXJQYWNrZXQgID0gMTsKKyAgICBvdXRwdXRfZm9ybWF0Lm1CeXRlc1BlckZyYW1l ICAgID0gb3V0cHV0X2Zvcm1hdC5tQ2hhbm5lbHNQZXJGcmFtZSAqIGN0eC0+Ynl0ZXNfcGVyX3Nh bXBsZTsKKyAgICBvdXRwdXRfZm9ybWF0Lm1CeXRlc1BlclBhY2tldCAgID0gb3V0cHV0X2Zvcm1h dC5tRnJhbWVzUGVyUGFja2V0ICogb3V0cHV0X2Zvcm1hdC5tQnl0ZXNQZXJGcmFtZTsKKyAgICBv dXRwdXRfZm9ybWF0Lm1Gb3JtYXRGbGFncyAgICAgID0ga0F1ZGlvRm9ybWF0RmxhZ0lzUGFja2Vk IHwgYXVkaW9fYmU7CisgICAgb3V0cHV0X2Zvcm1hdC5tRm9ybWF0SUQgICAgICAgICA9IGtBdWRp b0Zvcm1hdExpbmVhclBDTTsKKyAgICBvdXRwdXRfZm9ybWF0Lm1SZXNlcnZlZCAgICAgICAgID0g MDsKKyAgICBvdXRwdXRfZm9ybWF0Lm1TYW1wbGVSYXRlICAgICAgID0gaW5wdXRfZm9ybWF0LT5t U2FtcGxlUmF0ZTsKKworICAgIGlmIChhdWRpb19mbG9hdCAmJgorICAgICAgICBhdWRpb19iaXRz X3Blcl9zYW1wbGUgPT0gMzIpIHsKKyAgICAgICAgc3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfaWQg PSBhdWRpb19iZSA/IEFWX0NPREVDX0lEX1BDTV9GMzJCRSA6IEFWX0NPREVDX0lEX1BDTV9GMzJM RTsKKyAgICAgICAgb3V0cHV0X2Zvcm1hdC5tRm9ybWF0RmxhZ3MgfD0ga0F1ZGlvRm9ybWF0Rmxh Z0lzRmxvYXQ7CisgICAgfSBlbHNlIGlmIChhdWRpb19mbG9hdCAmJgorICAgICAgICBhdWRpb19i aXRzX3Blcl9zYW1wbGUgPT0gNjQpIHsKKyAgICAgICAgc3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNf aWQgPSBhdWRpb19iZSA/IEFWX0NPREVDX0lEX1BDTV9GNjRCRSA6IEFWX0NPREVDX0lEX1BDTV9G NjRMRTsKKyAgICAgICAgb3V0cHV0X2Zvcm1hdC5tRm9ybWF0RmxhZ3MgfD0ga0F1ZGlvRm9ybWF0 RmxhZ0lzRmxvYXQ7CisgICAgfSBlbHNlIGlmIChhdWRpb19zaWduZWRfaW50ZWdlciAmJgorICAg ICAgICBhdWRpb19iaXRzX3Blcl9zYW1wbGUgPT0gOCkgeworICAgICAgICBzdHJlYW0tPmNvZGVj cGFyLT5jb2RlY19pZCA9IEFWX0NPREVDX0lEX1BDTV9TODsKKyAgICAgICAgb3V0cHV0X2Zvcm1h dC5tRm9ybWF0RmxhZ3MgfD0ga0F1ZGlvRm9ybWF0RmxhZ0lzU2lnbmVkSW50ZWdlcjsKKyAgICB9 IGVsc2UgaWYgKGF1ZGlvX3NpZ25lZF9pbnRlZ2VyICYmCisgICAgICAgIGF1ZGlvX2JpdHNfcGVy X3NhbXBsZSA9PSAxNikgeworICAgICAgICBzdHJlYW0tPmNvZGVjcGFyLT5jb2RlY19pZCA9IGF1 ZGlvX2JlID8gQVZfQ09ERUNfSURfUENNX1MxNkJFIDogQVZfQ09ERUNfSURfUENNX1MxNkxFOwor ICAgICAgICBvdXRwdXRfZm9ybWF0Lm1Gb3JtYXRGbGFncyB8PSBrQXVkaW9Gb3JtYXRGbGFnSXNT aWduZWRJbnRlZ2VyOworICAgIH0gZWxzZSBpZiAoYXVkaW9fc2lnbmVkX2ludGVnZXIgJiYKKyAg ICAgICAgYXVkaW9fYml0c19wZXJfc2FtcGxlID09IDI0KSB7CisgICAgICAgIHN0cmVhbS0+Y29k ZWNwYXItPmNvZGVjX2lkID0gYXVkaW9fYmUgPyBBVl9DT0RFQ19JRF9QQ01fUzI0QkUgOiBBVl9D T0RFQ19JRF9QQ01fUzI0TEU7CisgICAgICAgIG91dHB1dF9mb3JtYXQubUZvcm1hdEZsYWdzIHw9 IGtBdWRpb0Zvcm1hdEZsYWdJc1NpZ25lZEludGVnZXI7CisgICAgfSBlbHNlIGlmIChhdWRpb19z aWduZWRfaW50ZWdlciAmJgorICAgICAgICBhdWRpb19iaXRzX3Blcl9zYW1wbGUgPT0gMzIpIHsK KyAgICAgICAgc3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfaWQgPSBhdWRpb19iZSA/IEFWX0NPREVD X0lEX1BDTV9TMzJCRSA6IEFWX0NPREVDX0lEX1BDTV9TMzJMRTsKKyAgICAgICAgb3V0cHV0X2Zv cm1hdC5tRm9ybWF0RmxhZ3MgfD0ga0F1ZGlvRm9ybWF0RmxhZ0lzU2lnbmVkSW50ZWdlcjsKKyAg ICB9IGVsc2UgaWYgKGF1ZGlvX3NpZ25lZF9pbnRlZ2VyICYmCisgICAgICAgIGF1ZGlvX2JpdHNf cGVyX3NhbXBsZSA9PSA2NCkgeworICAgICAgICBzdHJlYW0tPmNvZGVjcGFyLT5jb2RlY19pZCA9 IGF1ZGlvX2JlID8gQVZfQ09ERUNfSURfUENNX1M2NEJFIDogQVZfQ09ERUNfSURfUENNX1M2NExF OworICAgICAgICBvdXRwdXRfZm9ybWF0Lm1Gb3JtYXRGbGFncyB8PSBrQXVkaW9Gb3JtYXRGbGFn SXNTaWduZWRJbnRlZ2VyOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0cmVhbS0+Y29kZWNwYXIt PmNvZGVjX2lkID0gYXVkaW9fYmUgPyBBVl9DT0RFQ19JRF9QQ01fUzMyQkUgOiBBVl9DT0RFQ19J RF9QQ01fUzMyTEU7CisgICAgICAgIG91dHB1dF9mb3JtYXQubUJpdHNQZXJDaGFubmVsID0gMzI7 CisgICAgICAgIG91dHB1dF9mb3JtYXQubUZvcm1hdEZsYWdzIHw9IGtBdWRpb0Zvcm1hdEZsYWdJ c1NpZ25lZEludGVnZXI7CisgICAgICAgIG11c3RfY29udmVydCA9IDE7CiAgICB9CgotICAgIGlm IChjdHgtPmF1ZGlvX25vbl9pbnRlcmxlYXZlZCkgewotICAgICAgICBDTUJsb2NrQnVmZmVyUmVm IGJsb2NrX2J1ZmZlciA9IENNU2FtcGxlQnVmZmVyR2V0RGF0YUJ1ZmZlcihjdHgtPmN1cnJlbnRf YXVkaW9fZnJhbWUpOwotICAgICAgICBjdHgtPmF1ZGlvX2J1ZmZlcl9zaXplICAgICAgICA9IENN QmxvY2tCdWZmZXJHZXREYXRhTGVuZ3RoKGJsb2NrX2J1ZmZlcik7Ci0gICAgICAgIGN0eC0+YXVk aW9fYnVmZmVyICAgICAgICAgICAgID0gYXZfbWFsbG9jKGN0eC0+YXVkaW9fYnVmZmVyX3NpemUp OwotICAgICAgICBpZiAoIWN0eC0+YXVkaW9fYnVmZmVyKSB7CisgICAgaWYgKG11c3RfY29udmVy dCkgeworICAgICAgICBPU1N0YXR1cyByZXQgPSBBdWRpb0NvbnZlcnRlck5ldyhpbnB1dF9mb3Jt YXQsICZvdXRwdXRfZm9ybWF0LCAmY3R4LT5hdWRpb19jb252ZXJ0ZXIpOworICAgICAgICBpZiAo cmV0ICE9IG5vRXJyKSB7CiAgICAgICAgICAgIHVubG9ja19mcmFtZXMoY3R4KTsKLSAgICAgICAg ICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJlcnJvciBhbGxvY2F0aW5nIGF1ZGlvIGJ1ZmZl clxuIik7CisgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiRXJyb3Igd2hpbGUg YWxsb2NhdGluZyBhdWRpbyBjb252ZXJ0ZXJcbiIpOwogICAgICAgICAgICByZXR1cm4gMTsKICAg ICAgICB9CiAgICB9CkBAIC0xMDQ4LDYgKzEwODQsNyBAQCBzdGF0aWMgaW50IGNvcHlfY3ZwaXhl bGJ1ZmZlcihBVkZvcm1hdENvbnRleHQgKnMsCgpzdGF0aWMgaW50IGF2Zl9yZWFkX3BhY2tldChB VkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0ICpwa3QpCnsKKyAgICBPU1N0YXR1cyByZXQ7CiAg ICBBVkZDb250ZXh0KiBjdHggPSAoQVZGQ29udGV4dCopcy0+cHJpdl9kYXRhOwoKICAgIGRvIHsK QEAgLTEwOTEsNyArMTEyOCw3IEBAIHN0YXRpYyBpbnQgYXZmX3JlYWRfcGFja2V0KEFWRm9ybWF0 Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkKICAgICAgICAgICAgICAgIHN0YXR1cyA9IGNvcHlf Y3ZwaXhlbGJ1ZmZlcihzLCBpbWFnZV9idWZmZXIsIHBrdCk7CiAgICAgICAgICAgIH0gZWxzZSB7 CiAgICAgICAgICAgICAgICBzdGF0dXMgPSAwOwotICAgICAgICAgICAgICAgIE9TU3RhdHVzIHJl dCA9IENNQmxvY2tCdWZmZXJDb3B5RGF0YUJ5dGVzKGJsb2NrX2J1ZmZlciwgMCwgcGt0LT5zaXpl LCBwa3QtPmRhdGEpOworICAgICAgICAgICAgICAgIHJldCA9IENNQmxvY2tCdWZmZXJDb3B5RGF0 YUJ5dGVzKGJsb2NrX2J1ZmZlciwgMCwgcGt0LT5zaXplLCBwa3QtPmRhdGEpOwogICAgICAgICAg ICAgICAgaWYgKHJldCAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyKSB7CiAgICAgICAgICAgICAgICAg ICAgc3RhdHVzID0gQVZFUlJPUihFSU8pOwogICAgICAgICAgICAgICAgfQpAQCAtMTEwNSw4MiAr MTE0Miw4MyBAQCBzdGF0aWMgaW50IGF2Zl9yZWFkX3BhY2tldChBVkZvcm1hdENvbnRleHQgKnMs IEFWUGFja2V0ICpwa3QpCiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGN0eC0+Y3Vy cmVudF9hdWRpb19mcmFtZSAhPSBuaWwpIHsKICAgICAgICAgICAgQ01CbG9ja0J1ZmZlclJlZiBi bG9ja19idWZmZXIgPSBDTVNhbXBsZUJ1ZmZlckdldERhdGFCdWZmZXIoY3R4LT5jdXJyZW50X2F1 ZGlvX2ZyYW1lKTsKLSAgICAgICAgICAgIGludCBibG9ja19idWZmZXJfc2l6ZSAgICAgICAgID0g Q01CbG9ja0J1ZmZlckdldERhdGFMZW5ndGgoYmxvY2tfYnVmZmVyKTsKCi0gICAgICAgICAgICBp ZiAoIWJsb2NrX2J1ZmZlciB8fCAhYmxvY2tfYnVmZmVyX3NpemUpIHsKLSAgICAgICAgICAgICAg ICB1bmxvY2tfZnJhbWVzKGN0eCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlP KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNpemVfdCBpbnB1dF9zaXplID0gQ01CbG9j a0J1ZmZlckdldERhdGFMZW5ndGgoYmxvY2tfYnVmZmVyKTsKKyAgICAgICAgICAgIGludCBidWZm ZXJfc2l6ZSA9IGlucHV0X3NpemUgLyBjdHgtPmF1ZGlvX2J1ZmZlcnM7CisgICAgICAgICAgICBp bnQgbmJfc2FtcGxlcyA9IGlucHV0X3NpemUgLyAoY3R4LT5hdWRpb19jaGFubmVscyAqIGN0eC0+ Ynl0ZXNfcGVyX3NhbXBsZSk7CisgICAgICAgICAgICBpbnQgb3V0cHV0X3NpemUgPSBidWZmZXJf c2l6ZTsKCi0gICAgICAgICAgICBpZiAoY3R4LT5hdWRpb19ub25faW50ZXJsZWF2ZWQgJiYgYmxv Y2tfYnVmZmVyX3NpemUgPiBjdHgtPmF1ZGlvX2J1ZmZlcl9zaXplKSB7CisgICAgICAgICAgICBV SW50MzIgc2l6ZSA9IHNpemVvZihvdXRwdXRfc2l6ZSk7CisgICAgICAgICAgICByZXQgPSBBdWRp b0NvbnZlcnRlckdldFByb3BlcnR5KGN0eC0+YXVkaW9fY29udmVydGVyLCBrQXVkaW9Db252ZXJ0 ZXJQcm9wZXJ0eUNhbGN1bGF0ZU91dHB1dEJ1ZmZlclNpemUsICZzaXplLCAmb3V0cHV0X3NpemUp OworICAgICAgICAgICAgaWYgKHJldCAhPSBub0VycikgewogICAgICAgICAgICAgICAgdW5sb2Nr X2ZyYW1lcyhjdHgpOwotICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0JVRkZFUl9UT09f U01BTEw7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlPKTsKICAgICAgICAgICAg fQoKLSAgICAgICAgICAgIGlmIChhdl9uZXdfcGFja2V0KHBrdCwgYmxvY2tfYnVmZmVyX3NpemUp IDwgMCkgeworICAgICAgICAgICAgaWYgKGF2X25ld19wYWNrZXQocGt0LCBvdXRwdXRfc2l6ZSkg PCAwKSB7CiAgICAgICAgICAgICAgICB1bmxvY2tfZnJhbWVzKGN0eCk7CiAgICAgICAgICAgICAg ICByZXR1cm4gQVZFUlJPUihFSU8pOwogICAgICAgICAgICB9CgotICAgICAgICAgICAgQ01JdGVt Q291bnQgY291bnQ7Ci0gICAgICAgICAgICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nX2luZm87 CisgICAgICAgICAgICBpZiAoY3R4LT5hdWRpb19jb252ZXJ0ZXIpIHsKKyAgICAgICAgICAgICAg ICBzaXplX3QgaW5wdXRfYnVmZmVyX3NpemUgPSBvZmZzZXRvZihBdWRpb0J1ZmZlckxpc3QsIG1C dWZmZXJzWzBdKSArIChzaXplb2YoQXVkaW9CdWZmZXIpICogY3R4LT5hdWRpb19idWZmZXJzKTsK KyAgICAgICAgICAgICAgICBBdWRpb0J1ZmZlckxpc3QgKmlucHV0X2J1ZmZlciA9IGF2X21hbGxv YyhpbnB1dF9idWZmZXJfc2l6ZSk7CgotICAgICAgICAgICAgaWYgKENNU2FtcGxlQnVmZmVyR2V0 T3V0cHV0U2FtcGxlVGltaW5nSW5mb0FycmF5KGN0eC0+Y3VycmVudF9hdWRpb19mcmFtZSwgMSwg JnRpbWluZ19pbmZvLCAmY291bnQpID09IG5vRXJyKSB7Ci0gICAgICAgICAgICAgICAgQVZSYXRp b25hbCB0aW1lYmFzZV9xID0gYXZfbWFrZV9xKDEsIHRpbWluZ19pbmZvLnByZXNlbnRhdGlvblRp bWVTdGFtcC50aW1lc2NhbGUpOwotICAgICAgICAgICAgICAgIHBrdC0+cHRzID0gcGt0LT5kdHMg PSBhdl9yZXNjYWxlX3EodGltaW5nX2luZm8ucHJlc2VudGF0aW9uVGltZVN0YW1wLnZhbHVlLCB0 aW1lYmFzZV9xLCBhdmZfdGltZV9iYXNlX3EpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIGlucHV0X2J1ZmZlci0+bU51bWJlckJ1ZmZlcnMgPSBjdHgtPmF1ZGlvX2J1ZmZlcnM7Cgot ICAgICAgICAgICAgcGt0LT5zdHJlYW1faW5kZXggID0gY3R4LT5hdWRpb19zdHJlYW1faW5kZXg7 Ci0gICAgICAgICAgICBwa3QtPmZsYWdzICAgICAgICB8PSBBVl9QS1RfRkxBR19LRVk7CisgICAg ICAgICAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBjdHgtPmF1ZGlvX2J1ZmZlcnM7IGMrKykg eworICAgICAgICAgICAgICAgICAgICBpbnB1dF9idWZmZXItPm1CdWZmZXJzW2NdLm1OdW1iZXJD aGFubmVscyA9IDE7CgotICAgICAgICAgICAgaWYgKGN0eC0+YXVkaW9fbm9uX2ludGVybGVhdmVk KSB7Ci0gICAgICAgICAgICAgICAgaW50IHNhbXBsZSwgYywgc2hpZnQsIG51bV9zYW1wbGVzOwor ICAgICAgICAgICAgICAgICAgICByZXQgPSBDTUJsb2NrQnVmZmVyR2V0RGF0YVBvaW50ZXIoYmxv Y2tfYnVmZmVyLCBjICogYnVmZmVyX3NpemUsIChzaXplX3QgKikmaW5wdXRfYnVmZmVyLT5tQnVm ZmVyc1tjXS5tRGF0YUJ5dGVTaXplLCBOVUxMLCAodm9pZCAqKSZpbnB1dF9idWZmZXItPm1CdWZm ZXJzW2NdLm1EYXRhKTsKCi0gICAgICAgICAgICAgICAgT1NTdGF0dXMgcmV0ID0gQ01CbG9ja0J1 ZmZlckNvcHlEYXRhQnl0ZXMoYmxvY2tfYnVmZmVyLCAwLCBwa3QtPnNpemUsIGN0eC0+YXVkaW9f YnVmZmVyKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0ICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIp IHsKLSAgICAgICAgICAgICAgICAgICAgdW5sb2NrX2ZyYW1lcyhjdHgpOwotICAgICAgICAgICAg ICAgICAgICByZXR1cm4gQVZFUlJPUihFSU8pOworICAgICAgICAgICAgICAgICAgICBpZiAocmV0 ICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2X2Zy ZWUoaW5wdXRfYnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVubG9ja19mcmFtZXMo Y3R4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTyk7CisgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCi0gICAgICAgICAgICAgICAgbnVt X3NhbXBsZXMgPSBwa3QtPnNpemUgLyAoY3R4LT5hdWRpb19jaGFubmVscyAqIChjdHgtPmF1ZGlv X2JpdHNfcGVyX3NhbXBsZSA+PiAzKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyB0cmFuc2Zvcm0g ZGVjb2RlZCBmcmFtZSBpbnRvIG91dHB1dCBmb3JtYXQKLSAgICAgICAgICAgICAgICAjZGVmaW5l IElOVEVSTEVBVkVfT1VUUFVUKGJwcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSAgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAg ICAgICAgaW50IyNicHMjI190ICoqc3JjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgaW50IyNicHMjI190ICpkZXN0 OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg ICAgICAgICAgICAgICAgc3JjID0gYXZfbWFsbG9jKGN0eC0+YXVkaW9fY2hhbm5lbHMgKiBzaXpl b2YoaW50IyNicHMjI190KikpOyAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFzcmMp IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVubG9ja19mcmFtZXMoY3R4KTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SKEVJTyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgZm9yIChjID0gMDsgYyA8 IGN0eC0+YXVkaW9fY2hhbm5lbHM7IGMrKykgeyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg ICAgICAgICAgICAgICAgICAgICAgIHNyY1tjXSA9ICgoaW50IyNicHMjI190KiljdHgtPmF1ZGlv X2J1ZmZlcikgKyBjICogbnVtX3NhbXBsZXM7IFwKLSAgICAgICAgICAgICAgICAgICAgfSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSAgICAgICAgICAgICAgICAgICAgZGVzdCAgPSAoaW50IyNicHMjI190Kilwa3QtPmRh dGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAg ICAgc2hpZnQgPSBicHMgLSBjdHgtPmF1ZGlvX2JpdHNfcGVyX3NhbXBsZTsgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzYW1wbGUgPSAwOyBzYW1w bGUgPCBudW1fc2FtcGxlczsgc2FtcGxlKyspICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg ICAgICAgICAgICAgICAgIGZvciAoYyA9IDA7IGMgPCBjdHgtPmF1ZGlvX2NoYW5uZWxzOyBjKysp ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVz dCsrID0gc3JjW2NdW3NhbXBsZV0gPDwgc2hpZnQ7ICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSAgICAgICAgICAgICAgICAgICAgYXZfZnJlZXAoJnNyYyk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgQXVkaW9CdWZmZXJMaXN0IG91dHB1dF9idWZmZXIgPSB7CisgICAgICAgICAg ICAgICAgICAgLm1OdW1iZXJCdWZmZXJzID0gMSwKKyAgICAgICAgICAgICAgICAgICAubUJ1ZmZl cnNbMF0gICAgPSB7CisgICAgICAgICAgICAgICAgICAgICAgIC5tTnVtYmVyQ2hhbm5lbHMgPSBj dHgtPmF1ZGlvX2NoYW5uZWxzLAorICAgICAgICAgICAgICAgICAgICAgICAubURhdGFCeXRlU2l6 ZSAgID0gcGt0LT5zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAubURhdGEgICAgICAgICAg ID0gcGt0LT5kYXRhCisgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07Cgot ICAgICAgICAgICAgICAgIGlmIChjdHgtPmF1ZGlvX2JpdHNfcGVyX3NhbXBsZSA8PSAxNikgewot ICAgICAgICAgICAgICAgICAgICBJTlRFUkxFQVZFX09VVFBVVCgxNikKLSAgICAgICAgICAgICAg ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBJTlRFUkxFQVZFX09VVFBVVCgzMikKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIE9T U3RhdHVzIHJldCA9IENNQmxvY2tCdWZmZXJDb3B5RGF0YUJ5dGVzKGJsb2NrX2J1ZmZlciwgMCwg cGt0LT5zaXplLCBwa3QtPmRhdGEpOwotICAgICAgICAgICAgICAgIGlmIChyZXQgIT0ga0NNQmxv Y2tCdWZmZXJOb0VycikgeworICAgICAgICAgICAgICAgIHJldCA9IEF1ZGlvQ29udmVydGVyQ29u dmVydENvbXBsZXhCdWZmZXIoY3R4LT5hdWRpb19jb252ZXJ0ZXIsIG5iX3NhbXBsZXMsIGlucHV0 X2J1ZmZlciwgJm91dHB1dF9idWZmZXIpOworICAgICAgICAgICAgICAgIGF2X2ZyZWUoaW5wdXRf YnVmZmVyKTsKKworICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gbm9FcnIpIHsKICAgICAgICAg ICAgICAgICAgICB1bmxvY2tfZnJhbWVzKGN0eCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJu IEFWRVJST1IoRUlPKTsKICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHBrdC0+ c2l6ZSA9IG91dHB1dF9idWZmZXIubUJ1ZmZlcnNbMF0ubURhdGFCeXRlU2l6ZTsKKyAgICAgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgIHJldCA9IENNQmxvY2tCdWZmZXJDb3B5RGF0 YUJ5dGVzKGJsb2NrX2J1ZmZlciwgMCwgcGt0LT5zaXplLCBwa3QtPmRhdGEpOworICAgICAgICAg ICAgICAgICBpZiAocmV0ICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIpIHsKKyAgICAgICAgICAgICAg ICAgICAgIHVubG9ja19mcmFtZXMoY3R4KTsKKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBB VkVSUk9SKEVJTyk7CisgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKKyAgICAgICAg ICAgIENNSXRlbUNvdW50IGNvdW50OworICAgICAgICAgICAgQ01TYW1wbGVUaW1pbmdJbmZvIHRp bWluZ19pbmZvOworCisgICAgICAgICAgICBpZiAoQ01TYW1wbGVCdWZmZXJHZXRPdXRwdXRTYW1w bGVUaW1pbmdJbmZvQXJyYXkoY3R4LT5jdXJyZW50X2F1ZGlvX2ZyYW1lLCAxLCAmdGltaW5nX2lu Zm8sICZjb3VudCkgPT0gbm9FcnIpIHsKKyAgICAgICAgICAgICAgICBBVlJhdGlvbmFsIHRpbWVi YXNlX3EgPSBhdl9tYWtlX3EoMSwgdGltaW5nX2luZm8ucHJlc2VudGF0aW9uVGltZVN0YW1wLnRp bWVzY2FsZSk7CisgICAgICAgICAgICAgICAgcGt0LT5wdHMgPSBwa3QtPmR0cyA9IGF2X3Jlc2Nh bGVfcSh0aW1pbmdfaW5mby5wcmVzZW50YXRpb25UaW1lU3RhbXAudmFsdWUsIHRpbWViYXNlX3Es IGF2Zl90aW1lX2Jhc2VfcSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHBrdC0+c3Ry ZWFtX2luZGV4ICA9IGN0eC0+YXVkaW9fc3RyZWFtX2luZGV4OworICAgICAgICAgICAgcGt0LT5m bGFncyAgICAgICAgfD0gQVZfUEtUX0ZMQUdfS0VZOworCiAgICAgICAgICAgIENGUmVsZWFzZShj dHgtPmN1cnJlbnRfYXVkaW9fZnJhbWUpOwogICAgICAgICAgICBjdHgtPmN1cnJlbnRfYXVkaW9f ZnJhbWUgPSBuaWw7CisKKyAgICAgICAgICAgIHVubG9ja19mcmFtZXMoY3R4KTsKICAgICAgICB9 IGVsc2UgewogICAgICAgICAgICBwa3QtPmRhdGEgPSBOVUxMOwogICAgICAgICAgICB1bmxvY2tf ZnJhbWVzKGN0eCk7Ci0tIAoyLjMyLjAgKEFwcGxlIEdpdC0xMzIpCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0 CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVt YWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNj cmliZSIuCg==