Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sk4Sp-007MYY-Ip for pgsql-hackers@arkaria.postgresql.org; Fri, 30 Aug 2024 16:27:08 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1sk4Sm-0071tL-2C for pgsql-hackers@arkaria.postgresql.org; Fri, 30 Aug 2024 16:27:04 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sk4Sl-0071tD-7K for pgsql-hackers@lists.postgresql.org; Fri, 30 Aug 2024 16:27:04 +0000 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sk4Sh-002CeB-CA for pgsql-hackers@lists.postgresql.org; Fri, 30 Aug 2024 16:27:02 +0000 Received: by mail-pl1-x633.google.com with SMTP id d9443c01a7336-202146e9538so17022945ad.3 for ; Fri, 30 Aug 2024 09:26:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=illuminatedcomputing-com.20230601.gappssmtp.com; s=20230601; t=1725035218; x=1725640018; darn=lists.postgresql.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=4iSKZvetTIgSeQ0RcB1Yvndp7DuFZRiC2964fAxQ8kw=; b=dC30StM+C1sWlt+z04Yh49/NbIcMnaHaWTuD6JR/sadMLjfT/+X3xJIN4ntotn8BAZ nnr+qGB/97QnpgXtnO4bqg+ZuG3IS2JbKRKPti7Eyhj0hUmSrpH7F6QxenL3IYU3nRMn 6htIOB2ejKiChB4M5vqCZI1+2p41X3L46E1w2GkYrbJJwN/jyRFxMKFc7tsxVGgCZkVz YEmo/p/95DtqyoHLZDAXDCDu24Pu8gIwgQPjvgigNJN33On/OXL5BBIh+GoziTGBkj2E abhgZ3COtdcGfPxiG7Iw7ZFZQhGk6R0i905k6W2H5sCgBvM1KVzyz/McNcP58ogz8Kr1 Xc+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725035218; x=1725640018; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=4iSKZvetTIgSeQ0RcB1Yvndp7DuFZRiC2964fAxQ8kw=; b=meaXQN3adhS8+ypZI9bQQmOzk67DLqTjvfQeJ9KEL7tdaKW73zUbfq1kSCzXSxBS91 xhN2rH2MBGwELDedxc3EDIdofeEasMc9OyiJRaPuaNxC3DFvThCFz9KmHpMd1bhlg3jU xhx6zQlLS73K1bwLrdt4KJRD4Cu0FsmZO8jEQjQ6rxn5fSc6m6a5DRr1ZcUvSObndFUE pG0DfOcj0jWmVb9x1JdY8eJUU6g720RWXA4HrUlz/SdLxS3vO1Src9hHOOUaEsLVkjFV e/sw8TaOePM6Cl2T2bLRh/nc+LeN/164o2YmRbSxqxp32Qj7n/zCc3vMWGlIy6enpTC4 czYg== X-Gm-Message-State: AOJu0Yx0R6eHootA/9/+58oRR7uxL/A63UsegmoYIVPEqoQgTeCcOPst yf2eqY/XkAAQq7c1e/dy+D+owlnRDQlf9m1g+9IobGkzDtXFi4Gt2m0du2ru8Q8= X-Google-Smtp-Source: AGHT+IFnDpQvOIfCi04YsbrgCJyjfuA6B/SSwqMYBK0NhyxFcklSmY74L9nD9UFE9SK/EawQrs1x8A== X-Received: by 2002:a17:902:d584:b0:1fd:5fa0:e98f with SMTP id d9443c01a7336-2050c3f9e0dmr65396885ad.44.1725035217820; Fri, 30 Aug 2024 09:26:57 -0700 (PDT) Received: from [192.168.2.139] ([50.39.255.79]) by smtp.googlemail.com with ESMTPSA id d9443c01a7336-20515537a2csm28772305ad.176.2024.08.30.09.26.56 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 30 Aug 2024 09:26:56 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------nPkIaX6HBKcUME0WEW0QI60j" Message-ID: <956f8a6f-32a7-49ab-92a3-dca5c8afe112@illuminatedcomputing.com> Date: Fri, 30 Aug 2024 09:26:56 -0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Inline non-SQL SRFs using SupportRequestSimplify To: Tom Lane , Heikki Linnakangas Cc: PostgreSQL Hackers References: <09de6afa-c33d-4d94-a5cb-afc6cea0d2bb@illuminatedcomputing.com> <1755478.1722020334@sss.pgh.pa.us> Content-Language: en-US From: Paul Jungwirth In-Reply-To: <1755478.1722020334@sss.pgh.pa.us> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------nPkIaX6HBKcUME0WEW0QI60j Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 7/26/24 11:58, Tom Lane wrote: > Heikki Linnakangas writes: >> On 28/06/2024 01:01, Paul Jungwirth wrote: >>> Another approach I considered is using a separate support request, e.g. SupportRequestInlineSRF, and >>> just calling it from inline_set_returning_function. I didn't like having two support requests that >>> did almost exactly the same thing. OTOH my current approach means you'll get an error if you do this: >>> >>> ``` >>> postgres=# select temporal_semijoin('employees', 'id', 'valid_at', 'positions', 'employee_id', >>> 'valid_at'); >>> ERROR: unrecognized node type: 66 >>> ``` >>> >>> I'll look into ways to fix that. > > I like this idea, but I like exactly nothing about this implementation. > The right thing is to have a separate SupportRequestInlineSRF request > that is called directly by inline_set_returning_function. Here are new patches using a new SupportRequestInlineSRF request type. They include patches and documentation. The patches handle this: SELECT * FROM srf(); but not this: SELECT srf(); In the latter case, Postgres always calls the function in "materialized mode" and gets the whole result up front, so inline_set_returning_function is never called, even for SQL functions. For tests I added a `foo_from_bar(colname, tablename, filter)` PL/pgSQL function that does `SELECT $colname FROM $tablename [WHERE $colname = $filter]`, then the support function generates the same SQL and turns it into a Query node. This matches how I want to use the feature for my temporal_semijoin etc functions. If you give a non-NULL filter, you get a Query with a Var node, so we are testing something that isn't purely Const. The SupportRequestSimplify type has some comments about supporting operators, but I don't think you can have a set-returning operator, so I didn't repeat those comments for this new type. I split things up into three patch files because I couldn't get git to gracefully handle shifting a large block of code into an if statement. The first two patches have no changes except that indentation (and initializing one variable to NULL). They aren't meant to be committed separately. Rebased to a83a944e9f. Yours, -- Paul ~{:-) pj@illuminatedcomputing.com --------------nPkIaX6HBKcUME0WEW0QI60j Content-Type: text/x-patch; charset=UTF-8; name="v2-0001-Add-indented-section.patch" Content-Disposition: attachment; filename="v2-0001-Add-indented-section.patch" Content-Transfer-Encoding: base64 RnJvbSA1OTFkZTNhMDZlYzk3Y2YxYmZmMTBkNjAzOTQ2ZjBiYWMxNzZiOWQ5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiUGF1bCBBLiBKdW5nd2lydGgiIDxwakBpbGx1bWlu YXRlZGNvbXB1dGluZy5jb20+CkRhdGU6IFRodSwgMjkgQXVnIDIwMjQgMTg6MTc6NTUgLTA3 MDAKU3ViamVjdDogW1BBVENIIHYyIDEvM10gQWRkIGluZGVudGVkIHNlY3Rpb24KCi0tLQog c3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jIHwgNzQgKysrKysrKysrKysr KysrKysrKysrKysrKysrLQogMSBmaWxlIGNoYW5nZWQsIDczIGluc2VydGlvbnMoKyksIDEg ZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9j bGF1c2VzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMKaW5kZXgg YjRlMDg1ZTlkNGIuLmVmODI4MmRlZDQ5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9jbGF1c2VzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv Y2xhdXNlcy5jCkBAIC01MDY5LDcgKzUwNjksNyBAQCBpbmxpbmVfc2V0X3JldHVybmluZ19m dW5jdGlvbihQbGFubmVySW5mbyAqcm9vdCwgUmFuZ2VUYmxFbnRyeSAqcnRlKQogCVR1cGxl RGVzYwlyZXR0dXBkZXNjOwogCUxpc3QJICAgKnJhd19wYXJzZXRyZWVfbGlzdDsKIAlMaXN0 CSAgICpxdWVyeXRyZWVfbGlzdDsKLQlRdWVyeQkgICAqcXVlcnl0cmVlOworCVF1ZXJ5CSAg ICpxdWVyeXRyZWUgPSBOVUxMOwogCiAJQXNzZXJ0KHJ0ZS0+cnRla2luZCA9PSBSVEVfRlVO Q1RJT04pOwogCkBAIC01MjM1LDYgKzUyMzUsNzggQEAgaW5saW5lX3NldF9yZXR1cm5pbmdf ZnVuY3Rpb24oUGxhbm5lckluZm8gKnJvb3QsIFJhbmdlVGJsRW50cnkgKnJ0ZSkKIAkJCWdv dG8gZmFpbDsKIAkJcXVlcnl0cmVlID0gbGluaXRpYWwocXVlcnl0cmVlX2xpc3QpOwogCX0K KwlpZiAoIXF1ZXJ5dHJlZSkKKwl7CisJCS8qIEZldGNoIHRoZSBmdW5jdGlvbiBib2R5ICov CisJCXRtcCA9IFN5c0NhY2hlR2V0QXR0ck5vdE51bGwoUFJPQ09JRCwgZnVuY190dXBsZSwg QW51bV9wZ19wcm9jX3Byb3NyYyk7CisJCXNyYyA9IFRleHREYXR1bUdldENTdHJpbmcodG1w KTsKKworCQkvKgorCQkgKiBTZXR1cCBlcnJvciB0cmFjZWJhY2sgc3VwcG9ydCBmb3IgZXJl cG9ydCgpLiAgVGhpcyBpcyBzbyB0aGF0IHdlIGNhbgorCQkgKiBmaW5nZXIgdGhlIGZ1bmN0 aW9uIHRoYXQgYmFkIGluZm9ybWF0aW9uIGNhbWUgZnJvbS4KKwkJICovCisJCWNhbGxiYWNr X2FyZy5wcm9uYW1lID0gTmFtZVN0cihmdW5jZm9ybS0+cHJvbmFtZSk7CisJCWNhbGxiYWNr X2FyZy5wcm9zcmMgPSBzcmM7CisKKwkJc3FsZXJyY29udGV4dC5jYWxsYmFjayA9IHNxbF9p bmxpbmVfZXJyb3JfY2FsbGJhY2s7CisJCXNxbGVycmNvbnRleHQuYXJnID0gKHZvaWQgKikg JmNhbGxiYWNrX2FyZzsKKwkJc3FsZXJyY29udGV4dC5wcmV2aW91cyA9IGVycm9yX2NvbnRl eHRfc3RhY2s7CisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmc3FsZXJyY29udGV4dDsKKwor CQkvKiBJZiB3ZSBoYXZlIHByb3NxbGJvZHksIHBheSBhdHRlbnRpb24gdG8gdGhhdCBub3Qg cHJvc3JjICovCisJCXRtcCA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELAorCQkJCQkJCSAg ZnVuY190dXBsZSwKKwkJCQkJCQkgIEFudW1fcGdfcHJvY19wcm9zcWxib2R5LAorCQkJCQkJ CSAgJmlzTnVsbCk7CisJCWlmICghaXNOdWxsKQorCQl7CisJCQlOb2RlCSAgICpuOworCisJ CQluID0gc3RyaW5nVG9Ob2RlKFRleHREYXR1bUdldENTdHJpbmcodG1wKSk7CisJCQlpZiAo SXNBKG4sIExpc3QpKQorCQkJCXF1ZXJ5dHJlZV9saXN0ID0gbGluaXRpYWxfbm9kZShMaXN0 LCBjYXN0Tm9kZShMaXN0LCBuKSk7CisJCQllbHNlCisJCQkJcXVlcnl0cmVlX2xpc3QgPSBs aXN0X21ha2UxKG4pOworCQkJaWYgKGxpc3RfbGVuZ3RoKHF1ZXJ5dHJlZV9saXN0KSAhPSAx KQorCQkJCWdvdG8gZmFpbDsKKwkJCXF1ZXJ5dHJlZSA9IGxpbml0aWFsKHF1ZXJ5dHJlZV9s aXN0KTsKKworCQkJLyogQWNxdWlyZSBuZWNlc3NhcnkgbG9ja3MsIHRoZW4gYXBwbHkgcmV3 cml0ZXIuICovCisJCQlBY3F1aXJlUmV3cml0ZUxvY2tzKHF1ZXJ5dHJlZSwgdHJ1ZSwgZmFs c2UpOworCQkJcXVlcnl0cmVlX2xpc3QgPSBwZ19yZXdyaXRlX3F1ZXJ5KHF1ZXJ5dHJlZSk7 CisJCQlpZiAobGlzdF9sZW5ndGgocXVlcnl0cmVlX2xpc3QpICE9IDEpCisJCQkJZ290byBm YWlsOworCQkJcXVlcnl0cmVlID0gbGluaXRpYWwocXVlcnl0cmVlX2xpc3QpOworCQl9CisJ CWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIFNldCB1cCB0byBoYW5kbGUgcGFyYW1ldGVycyB3 aGlsZSBwYXJzaW5nIHRoZSBmdW5jdGlvbiBib2R5LiAgV2UKKwkJCSAqIGNhbiB1c2UgdGhl IEZ1bmNFeHByIGp1c3QgY3JlYXRlZCBhcyB0aGUgaW5wdXQgZm9yCisJCQkgKiBwcmVwYXJl X3NxbF9mbl9wYXJzZV9pbmZvLgorCQkJICovCisJCQlwaW5mbyA9IHByZXBhcmVfc3FsX2Zu X3BhcnNlX2luZm8oZnVuY190dXBsZSwKKwkJCQkJCQkJCQkJICAoTm9kZSAqKSBmZXhwciwK KwkJCQkJCQkJCQkJICBmZXhwci0+aW5wdXRjb2xsaWQpOworCisJCQkvKgorCQkJICogUGFy c2UsIGFuYWx5emUsIGFuZCByZXdyaXRlICh1bmxpa2UgaW5saW5lX2Z1bmN0aW9uKCksIHdl IGNhbid0CisJCQkgKiBza2lwIHJld3JpdGluZyBoZXJlKS4gIFdlIGNhbiBmYWlsIGFzIHNv b24gYXMgd2UgZmluZCBtb3JlIHRoYW4gb25lCisJCQkgKiBxdWVyeSwgdGhvdWdoLgorCQkJ ICovCisJCQlyYXdfcGFyc2V0cmVlX2xpc3QgPSBwZ19wYXJzZV9xdWVyeShzcmMpOworCQkJ aWYgKGxpc3RfbGVuZ3RoKHJhd19wYXJzZXRyZWVfbGlzdCkgIT0gMSkKKwkJCQlnb3RvIGZh aWw7CisKKwkJCXF1ZXJ5dHJlZV9saXN0ID0gcGdfYW5hbHl6ZV9hbmRfcmV3cml0ZV93aXRo Y2IobGluaXRpYWwocmF3X3BhcnNldHJlZV9saXN0KSwKKwkJCQkJCQkJCQkJCQkJICAgc3Jj LAorCQkJCQkJCQkJCQkJCQkgICAoUGFyc2VyU2V0dXBIb29rKSBzcWxfZm5fcGFyc2VyX3Nl dHVwLAorCQkJCQkJCQkJCQkJCQkgICBwaW5mbywgTlVMTCk7CisJCQlpZiAobGlzdF9sZW5n dGgocXVlcnl0cmVlX2xpc3QpICE9IDEpCisJCQkJZ290byBmYWlsOworCQkJcXVlcnl0cmVl ID0gbGluaXRpYWwocXVlcnl0cmVlX2xpc3QpOworCQl9CisJfQogCiAJLyoKIAkgKiBBbHNv IHJlc29sdmUgdGhlIGFjdHVhbCBmdW5jdGlvbiByZXN1bHQgdHVwZGVzYywgaWYgY29tcG9z aXRlLiAgSWYgd2UKLS0gCjIuNDIuMAoK --------------nPkIaX6HBKcUME0WEW0QI60j Content-Type: text/x-patch; charset=UTF-8; name="v2-0002-Remove-unindented-section.patch" Content-Disposition: attachment; filename="v2-0002-Remove-unindented-section.patch" Content-Transfer-Encoding: base64 RnJvbSA3YTllZTE1ZDE3YmVlNmE2NzQzYmYxOGU3NDI4ZTY1OTRlMTdiZTM1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiUGF1bCBBLiBKdW5nd2lydGgiIDxwakBpbGx1bWlu YXRlZGNvbXB1dGluZy5jb20+CkRhdGU6IFRodSwgMjkgQXVnIDIwMjQgMTg6MTg6MjAgLTA3 MDAKU3ViamVjdDogW1BBVENIIHYyIDIvM10gUmVtb3ZlIHVuaW5kZW50ZWQgc2VjdGlvbgoK LS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMgfCA2OSAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNjkgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jCmluZGV4IGVmODI4MmRlZDQ5 Li5kMmQ4ZjdlYjBjMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv Y2xhdXNlcy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYwpA QCAtNTE2Niw3NSArNTE2Niw2IEBAIGlubGluZV9zZXRfcmV0dXJuaW5nX2Z1bmN0aW9uKFBs YW5uZXJJbmZvICpyb290LCBSYW5nZVRibEVudHJ5ICpydGUpCiAJCQkJCQkJCSAgQUxMT0NT RVRfREVGQVVMVF9TSVpFUyk7CiAJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKG15 Y3h0KTsKIAotCS8qIEZldGNoIHRoZSBmdW5jdGlvbiBib2R5ICovCi0JdG1wID0gU3lzQ2Fj aGVHZXRBdHRyTm90TnVsbChQUk9DT0lELCBmdW5jX3R1cGxlLCBBbnVtX3BnX3Byb2NfcHJv c3JjKTsKLQlzcmMgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHRtcCk7Ci0KLQkvKgotCSAqIFNl dHVwIGVycm9yIHRyYWNlYmFjayBzdXBwb3J0IGZvciBlcmVwb3J0KCkuICBUaGlzIGlzIHNv IHRoYXQgd2UgY2FuCi0JICogZmluZ2VyIHRoZSBmdW5jdGlvbiB0aGF0IGJhZCBpbmZvcm1h dGlvbiBjYW1lIGZyb20uCi0JICovCi0JY2FsbGJhY2tfYXJnLnByb25hbWUgPSBOYW1lU3Ry KGZ1bmNmb3JtLT5wcm9uYW1lKTsKLQljYWxsYmFja19hcmcucHJvc3JjID0gc3JjOwotCi0J c3FsZXJyY29udGV4dC5jYWxsYmFjayA9IHNxbF9pbmxpbmVfZXJyb3JfY2FsbGJhY2s7Ci0J c3FsZXJyY29udGV4dC5hcmcgPSAodm9pZCAqKSAmY2FsbGJhY2tfYXJnOwotCXNxbGVycmNv bnRleHQucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOwotCWVycm9yX2NvbnRleHRf c3RhY2sgPSAmc3FsZXJyY29udGV4dDsKLQotCS8qIElmIHdlIGhhdmUgcHJvc3FsYm9keSwg cGF5IGF0dGVudGlvbiB0byB0aGF0IG5vdCBwcm9zcmMgKi8KLQl0bXAgPSBTeXNDYWNoZUdl dEF0dHIoUFJPQ09JRCwKLQkJCQkJCSAgZnVuY190dXBsZSwKLQkJCQkJCSAgQW51bV9wZ19w cm9jX3Byb3NxbGJvZHksCi0JCQkJCQkgICZpc051bGwpOwotCWlmICghaXNOdWxsKQotCXsK LQkJTm9kZQkgICAqbjsKLQotCQluID0gc3RyaW5nVG9Ob2RlKFRleHREYXR1bUdldENTdHJp bmcodG1wKSk7Ci0JCWlmIChJc0EobiwgTGlzdCkpCi0JCQlxdWVyeXRyZWVfbGlzdCA9IGxp bml0aWFsX25vZGUoTGlzdCwgY2FzdE5vZGUoTGlzdCwgbikpOwotCQllbHNlCi0JCQlxdWVy eXRyZWVfbGlzdCA9IGxpc3RfbWFrZTEobik7Ci0JCWlmIChsaXN0X2xlbmd0aChxdWVyeXRy ZWVfbGlzdCkgIT0gMSkKLQkJCWdvdG8gZmFpbDsKLQkJcXVlcnl0cmVlID0gbGluaXRpYWwo cXVlcnl0cmVlX2xpc3QpOwotCi0JCS8qIEFjcXVpcmUgbmVjZXNzYXJ5IGxvY2tzLCB0aGVu IGFwcGx5IHJld3JpdGVyLiAqLwotCQlBY3F1aXJlUmV3cml0ZUxvY2tzKHF1ZXJ5dHJlZSwg dHJ1ZSwgZmFsc2UpOwotCQlxdWVyeXRyZWVfbGlzdCA9IHBnX3Jld3JpdGVfcXVlcnkocXVl cnl0cmVlKTsKLQkJaWYgKGxpc3RfbGVuZ3RoKHF1ZXJ5dHJlZV9saXN0KSAhPSAxKQotCQkJ Z290byBmYWlsOwotCQlxdWVyeXRyZWUgPSBsaW5pdGlhbChxdWVyeXRyZWVfbGlzdCk7Ci0J fQotCWVsc2UKLQl7Ci0JCS8qCi0JCSAqIFNldCB1cCB0byBoYW5kbGUgcGFyYW1ldGVycyB3 aGlsZSBwYXJzaW5nIHRoZSBmdW5jdGlvbiBib2R5LiAgV2UKLQkJICogY2FuIHVzZSB0aGUg RnVuY0V4cHIganVzdCBjcmVhdGVkIGFzIHRoZSBpbnB1dCBmb3IKLQkJICogcHJlcGFyZV9z cWxfZm5fcGFyc2VfaW5mby4KLQkJICovCi0JCXBpbmZvID0gcHJlcGFyZV9zcWxfZm5fcGFy c2VfaW5mbyhmdW5jX3R1cGxlLAotCQkJCQkJCQkJCSAgKE5vZGUgKikgZmV4cHIsCi0JCQkJ CQkJCQkJICBmZXhwci0+aW5wdXRjb2xsaWQpOwotCi0JCS8qCi0JCSAqIFBhcnNlLCBhbmFs eXplLCBhbmQgcmV3cml0ZSAodW5saWtlIGlubGluZV9mdW5jdGlvbigpLCB3ZSBjYW4ndAot CQkgKiBza2lwIHJld3JpdGluZyBoZXJlKS4gIFdlIGNhbiBmYWlsIGFzIHNvb24gYXMgd2Ug ZmluZCBtb3JlIHRoYW4gb25lCi0JCSAqIHF1ZXJ5LCB0aG91Z2guCi0JCSAqLwotCQlyYXdf cGFyc2V0cmVlX2xpc3QgPSBwZ19wYXJzZV9xdWVyeShzcmMpOwotCQlpZiAobGlzdF9sZW5n dGgocmF3X3BhcnNldHJlZV9saXN0KSAhPSAxKQotCQkJZ290byBmYWlsOwotCi0JCXF1ZXJ5 dHJlZV9saXN0ID0gcGdfYW5hbHl6ZV9hbmRfcmV3cml0ZV93aXRoY2IobGluaXRpYWwocmF3 X3BhcnNldHJlZV9saXN0KSwKLQkJCQkJCQkJCQkJCQkgICBzcmMsCi0JCQkJCQkJCQkJCQkJ ICAgKFBhcnNlclNldHVwSG9vaykgc3FsX2ZuX3BhcnNlcl9zZXR1cCwKLQkJCQkJCQkJCQkJ CQkgICBwaW5mbywgTlVMTCk7Ci0JCWlmIChsaXN0X2xlbmd0aChxdWVyeXRyZWVfbGlzdCkg IT0gMSkKLQkJCWdvdG8gZmFpbDsKLQkJcXVlcnl0cmVlID0gbGluaXRpYWwocXVlcnl0cmVl X2xpc3QpOwotCX0KIAlpZiAoIXF1ZXJ5dHJlZSkKIAl7CiAJCS8qIEZldGNoIHRoZSBmdW5j dGlvbiBib2R5ICovCi0tIAoyLjQyLjAKCg== --------------nPkIaX6HBKcUME0WEW0QI60j Content-Type: text/x-patch; charset=UTF-8; name="v2-0003-Inline-non-SQL-SRFs-using-SupportRequestInlineSRF.patch" Content-Disposition: attachment; filename*0="v2-0003-Inline-non-SQL-SRFs-using-SupportRequestInlineSRF.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA0ZWQ1MGNhZDE2OTAxYzViN2IzNDQ3YmFkNzEwNWRlMTFhODE3NzNhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiUGF1bCBBLiBKdW5nd2lydGgiIDxwakBpbGx1bWlu YXRlZGNvbXB1dGluZy5jb20+CkRhdGU6IFRodSwgMjkgQXVnIDIwMjQgMTg6MjA6NDcgLTA3 MDAKU3ViamVjdDogW1BBVENIIHYyIDMvM10gSW5saW5lIG5vbi1TUUwgU1JGcyB1c2luZyBT dXBwb3J0UmVxdWVzdElubGluZVNSRgoKQnkgaW5saW5pbmcgZnVuY3Rpb25zIHdyaXR0ZW4g aW4gUEwvcGdTUUwgKG9yIG90aGVyIGxhbmd1YWdlcyksIHdlIGxldAp1c2VycyBjb21wb3Nl IGR5bmFtaWMgcXVlcmllcyB3aXRob3V0IHBheWluZyB0aGUgb3ZlcmhlYWQgb2YgZnVuY3Rp b24KaW52b2NhdGlvbnMuIEZvcm1lcmx5IHRoaXMgd2FzIG9ubHkgcG9zc2libGUgZm9yIFNR TCBmdW5jdGlvbnMuCgpJZiB0aGUgc3VwcG9ydCByZXF1ZXN0IHJldHVybnMgYSBRdWVyeSBu b2RlLCB0aGVuCmlubGluZV9zZXRfcmV0dXJuaW5nX2Z1bmN0aW9uIHdpbGwgdXNlIGl0IGlu IHBsYWNlIG9mIHRoZSBGdW5jRXhwci4KVGhlIFF1ZXJ5IG5vZGUgY2FuIHJlZmVyZW5jZSB0 aGUgb3JpZ2luYWwgZnVuY3Rpb24ncyBhcmd1bWVudHMgYXMgVmFyCm5vZGVzLgoKV2Ugb25s eSB0cnkgdG8gaW5saW5lIFNSRnMgKGV2ZW4gU1FMIFNSRnMpIHdoZW4gdGhleSBhcmUgdXNl ZCBhcyBSVEVzLApzbyBpbmxpbmluZyBoYXBwZW5zIGZvciBgU0VMRUNUICogRlJPTSBmb28o KWAgYnV0IG5vdCBmb3IgYFNFTEVDVApmb28oKWAuCi0tLQogZG9jL3NyYy9zZ21sL3hmdW5j LnNnbWwgICAgICAgICAgICAgICAgICAgICAgfCAgMTQgKysKIHNyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL2NsYXVzZXMuYyAgICAgICAgIHwgIDYzICsrKysrLQogc3JjL2luY2x1ZGUv bm9kZXMvc3VwcG9ydG5vZGVzLmggICAgICAgICAgICAgfCAgMjIgKysKIHNyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvbWlzY19mdW5jdGlvbnMub3V0IHwgMjEyICsrKysrKysrKysrKysr KysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvcmVncmVzcy5jICAgICAgICAgICAgICAgICAgIHwg IDkxICsrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9taXNjX2Z1bmN0aW9ucy5zcWwg ICAgICB8ICA4NyArKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCA0ODcgaW5zZXJ0aW9ucygr KSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwveGZ1bmMuc2dt bCBiL2RvYy9zcmMvc2dtbC94ZnVuYy5zZ21sCmluZGV4IDliYzIzYTlhOTM4Li4zMTFhODdi MTRhNSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3hmdW5jLnNnbWwKKysrIGIvZG9jL3Ny Yy9zZ21sL3hmdW5jLnNnbWwKQEAgLTQwNzYsNiArNDA3NiwyMCBAQCBzdXBwb3J0Zm4oaW50 ZXJuYWwpIHJldHVybnMgaW50ZXJuYWwKICAgICBleHByZXNzaW9uIGFuZCBhbiBhY3R1YWwg ZXhlY3V0aW9uIG9mIHRoZSB0YXJnZXQgZnVuY3Rpb24uCiAgICA8L3BhcmE+CiAKKyAgIDxw YXJhPgorICAgIFNpbWlsYXJseSwgYSA8bGluayBsaW5rZW5kPSJxdWVyaWVzLXRhYmxlZnVu Y3Rpb24iPnNldC1yZXR1cm5pbmcgZnVuY3Rpb248L2xpbms+CisgICAgY2FuIGltcGxlbWVu dCA8bGl0ZXJhbD5TdXBwb3J0UmVxdWVzdElubGluZVNSRjwvbGl0ZXJhbD4gdG8gcmV0dXJu IGEKKyAgICA8bGl0ZXJhbD5RdWVyeTwvbGl0ZXJhbD4gbm9kZSwgd2hpY2ggdGhlIHBsYW5u ZXIgd2lsbCB0cnkgdG8gaW5saW5lIGludG8KKyAgICB0aGUgb3V0ZXIgcXVlcnksIGp1c3Qg YXMgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBpbmxpbmVzCisgICAg U1FMIGZ1bmN0aW9ucy4gIE5vcm1hbGxseSBvbmx5IFNRTCBmdW5jdGlvbnMgY2FuIGJlIGlu bGluZWQsIGJ1dCB0aGlzIHN1cHBvcnQKKyAgICByZXF1ZXN0IGFsbG93cyBhIGZ1bmN0aW9u IGluIDxsaW5rIGxpbmtlbmQ9InBscGdzcWwiPlBML3BnU1FMPC9saW5rPgorICAgIG9yIGFu b3RoZXIgbGFuZ3VhZ2UgdG8gYnVpbGQgYSBkeW5hbWljIFNRTCBxdWVyeSBhbmQgaGF2ZSBp dCBpbmxpbmVkIHRvby4KKyAgICBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHN1 cHBvcnQgZnVuY3Rpb24gdG8gcmV0dXJuCisgICAgYSBub2RlIHRoYXQgbWF0Y2hlcyB0aGUg cGFyZW50IGZ1bmN0aW9uJ3MgaW1wbGVtZW50YXRpb24uIE9uZSB3YXkgdG8gZG8gdGhpcyBp cworICAgIHRvIGJ1aWxkIGEgU1FMIHN0cmluZyB0aGVuIHBhcnNlIGl0IHdpdGggPGxpdGVy YWw+cGdfcGFyc2VfcXVlcnk8L2xpdGVyYWw+LgorICAgIFNlZSA8bGl0ZXJhbD5yZWdyZXNz LmM8L2xpdGVyYWw+IGZvciBhbiBleGFtcGxlLgorICAgPC9wYXJhPgorCiAgICA8cGFyYT4K ICAgICBGb3IgdGFyZ2V0IGZ1bmN0aW9ucyB0aGF0IHJldHVybiA8dHlwZT5ib29sZWFuPC90 eXBlPiwgaXQgaXMgb2Z0ZW4gdXNlZnVsIHRvIGVzdGltYXRlCiAgICAgdGhlIGZyYWN0aW9u IG9mIHJvd3MgdGhhdCB3aWxsIGJlIHNlbGVjdGVkIGJ5IGEgPGxpdGVyYWw+V0hFUkU8L2xp dGVyYWw+IGNsYXVzZSB1c2luZyB0aGF0CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9jbGF1c2VzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1 c2VzLmMKaW5kZXggZDJkOGY3ZWIwYzAuLjllZTU4MzFlZDBlIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3V0aWwvY2xhdXNlcy5jCkBAIC01MTM0LDcgKzUxMzQsOCBAQCBpbmxpbmVfc2V0 X3JldHVybmluZ19mdW5jdGlvbihQbGFubmVySW5mbyAqcm9vdCwgUmFuZ2VUYmxFbnRyeSAq cnRlKQogCWZ1bmNmb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKGZ1bmNfdHVwbGUp OwogCiAJLyoKLQkgKiBGb3JnZXQgaXQgaWYgdGhlIGZ1bmN0aW9uIGlzIG5vdCBTUUwtbGFu Z3VhZ2Ugb3IgaGFzIG90aGVyIHNob3dzdG9wcGVyCisJICogRm9yZ2V0IGl0IHVubGVzcyB0 aGUgZnVuY3Rpb24gaXMgU1FMLWxhbmd1YWdlIG9yIHByb3ZpZGVzIGEgc3VwcG9ydCBmdW5j dGlvbi4KKwkgKiBBbHNvIGNoZWNrIGZvciBvdGhlciBzaG93c3RvcHBlcgogCSAqIHByb3Bl cnRpZXMuICBJbiBwYXJ0aWN1bGFyIGl0IG11c3RuJ3QgYmUgZGVjbGFyZWQgU1RSSUNULCBz aW5jZSB3ZQogCSAqIGNvdWxkbid0IGVuZm9yY2UgdGhhdC4gIEl0IGFsc28gbXVzdG4ndCBi ZSBWT0xBVElMRSwgYmVjYXVzZSB0aGF0IGlzCiAJICogc3VwcG9zZWQgdG8gY2F1c2UgaXQg dG8gYmUgZXhlY3V0ZWQgd2l0aCBpdHMgb3duIHNuYXBzaG90LCByYXRoZXIgdGhhbgpAQCAt NTE0Myw3ICs1MTQ0LDcgQEAgaW5saW5lX3NldF9yZXR1cm5pbmdfZnVuY3Rpb24oUGxhbm5l ckluZm8gKnJvb3QsIFJhbmdlVGJsRW50cnkgKnJ0ZSkKIAkgKiBvZiB0aGUgZnVuY3Rpb24n cyBsYXN0IFNFTEVDVCwgd2hpY2ggc2hvdWxkIG5vdCBoYXBwZW4gaW4gdGhhdCBjYXNlLgog CSAqIChSZWNoZWNraW5nIHByb2tpbmQsIHByb3JldHNldCwgYW5kIHByb25hcmdzIGlzIGp1 c3QgcGFyYW5vaWEuKQogCSAqLwotCWlmIChmdW5jZm9ybS0+cHJvbGFuZyAhPSBTUUxsYW5n dWFnZUlkIHx8CisJaWYgKChmdW5jZm9ybS0+cHJvbGFuZyAhPSBTUUxsYW5ndWFnZUlkICYm ICFmdW5jZm9ybS0+cHJvc3VwcG9ydCkgfHwKIAkJZnVuY2Zvcm0tPnByb2tpbmQgIT0gUFJP S0lORF9GVU5DVElPTiB8fAogCQlmdW5jZm9ybS0+cHJvaXNzdHJpY3QgfHwKIAkJZnVuY2Zv cm0tPnByb3ZvbGF0aWxlID09IFBST1ZPTEFUSUxFX1ZPTEFUSUxFIHx8CkBAIC01MTY2LDYg KzUxNjcsNjQgQEAgaW5saW5lX3NldF9yZXR1cm5pbmdfZnVuY3Rpb24oUGxhbm5lckluZm8g KnJvb3QsIFJhbmdlVGJsRW50cnkgKnJ0ZSkKIAkJCQkJCQkJICBBTExPQ1NFVF9ERUZBVUxU X1NJWkVTKTsKIAlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8obXljeHQpOwogCisJ LyoKKwkgKiBJZiB0aGUgZnVuY3Rpb24gaGFzIGEgU3VwcG9ydFJlcXVlc3RJbmxpbmVTUkYg c3VwcG9ydCBmdW5jdGlvbiwKKwkgKiBzZWUgaWYgaXQgY2FuIHByb2R1Y2UgYSBRdWVyeSBu b2RlIHdlIGNhbiBpbmxpbmUuCisJICogVGhpcyBjYW4gYmUgbXV0dWFsbHktZXhjbHVzaXZl IHdpdGggU1FMIGZ1bmN0aW9ucy4KKwkgKiBUaG9zZSBhcmUgaW5saW5lYWJsZSBhbHJlYWR5 LCBzbyBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8KKwkgKiBhdHRhY2ggc3VjaCBhIHN1cHBv cnQgcmVxdWVzdCB0byB0aGVtLgorCSAqLworCWlmIChmdW5jZm9ybS0+cHJvbGFuZyAhPSBT UUxsYW5ndWFnZUlkICYmIGZ1bmNmb3JtLT5wcm9zdXBwb3J0KSB7CisJCVN1cHBvcnRSZXF1 ZXN0SW5saW5lU1JGIHJlcTsKKwkJRnVuY0V4cHIJZHVtbXlfZmV4cHI7CisJCU5vZGUJICAg Km5ld25vZGU7CisKKwkJLyoKKwkJICogV2UgZG9uJ3QgbmVlZCB0aGUgd2hvbGUgc3FsZXJy Y29udGV4dCwKKwkJICogYnV0IG1ha2Ugc3VyZSB3ZSByZXN0b3JlIGl0IGNvcnJlY3RseQor CQkgKiBpZiB3ZSBnb3RvIGZhaWwuCisJCSAqLworCQlzcWxlcnJjb250ZXh0LnByZXZpb3Vz ID0gZXJyb3JfY29udGV4dF9zdGFjazsKKworCQkvKgorCQkgKiBCdWlsZCBhIFN1cHBvcnRS ZXF1ZXN0SW5saW5lU1JGIG5vZGUgdG8gcGFzcyB0byB0aGUgc3VwcG9ydAorCQkgKiBmdW5j dGlvbiwgcG9pbnRpbmcgdG8gYSBkdW1teSBGdW5jRXhwciBub2RlIGNvbnRhaW5pbmcgdGhl CisJCSAqIHNpbXBsaWZpZWQgYXJnIGxpc3QuICBXZSB1c2UgdGhpcyBhcHByb2FjaCB0byBw cmVzZW50IGEgdW5pZm9ybQorCQkgKiBpbnRlcmZhY2UgdG8gdGhlIHN1cHBvcnQgZnVuY3Rp b24gcmVnYXJkbGVzcyBvZiBob3cgdGhlIHRhcmdldAorCQkgKiBmdW5jdGlvbiBpcyBhY3R1 YWxseSBiZWluZyBpbnZva2VkLgorCQkgKi8KKworCQlkdW1teV9mZXhwci54cHIudHlwZSA9 IFRfRnVuY0V4cHI7CisJCWR1bW15X2ZleHByLmZ1bmNpZCA9IGZ1bmNfb2lkOworCQlkdW1t eV9mZXhwci5mdW5jcmVzdWx0dHlwZSA9IGZ1bmNmb3JtLT5wcm9yZXR0eXBlOworCQlkdW1t eV9mZXhwci5mdW5jcmV0c2V0ID0gZnVuY2Zvcm0tPnByb3JldHNldDsKKwkJZHVtbXlfZmV4 cHIuZnVuY3ZhcmlhZGljID0gT2lkSXNWYWxpZChmdW5jZm9ybS0+cHJvdmFyaWFkaWMpOwor CQlkdW1teV9mZXhwci5mdW5jZm9ybWF0ID0gQ09FUkNFX0VYUExJQ0lUX0NBTEw7CisJCWR1 bW15X2ZleHByLmZ1bmNjb2xsaWQgPSBJbnZhbGlkT2lkOworCQlkdW1teV9mZXhwci5pbnB1 dGNvbGxpZCA9IEludmFsaWRPaWQ7CisJCWR1bW15X2ZleHByLmFyZ3MgPSBmZXhwci0+YXJn czsKKwkJZHVtbXlfZmV4cHIubG9jYXRpb24gPSAtMTsKKworCQlyZXEudHlwZSA9IFRfU3Vw cG9ydFJlcXVlc3RJbmxpbmVTUkY7CisJCXJlcS5mY2FsbCA9ICZkdW1teV9mZXhwcjsKKwor CQluZXdub2RlID0gKE5vZGUgKikKKwkJCURhdHVtR2V0UG9pbnRlcihPaWRGdW5jdGlvbkNh bGwxKGZ1bmNmb3JtLT5wcm9zdXBwb3J0LAorCQkJCQkJCQkJCQkgUG9pbnRlckdldERhdHVt KCZyZXEpKSk7CisKKwkJaWYgKCFuZXdub2RlKQorCQkJZ290byBmYWlsOworCisJCWlmICgh SXNBKG5ld25vZGUsIFF1ZXJ5KSkKKwkJCWVsb2coRVJST1IsCisJCQkJICJHb3QgdW5leHBl Y3RlZCBub2RlIHR5cGUgJWQgZnJvbSBTdXBwb3J0UmVxdWVzdElubGluZVNSRiBmb3IgZnVu Y3Rpb24gJXMiLAorCQkJCSBuZXdub2RlLT50eXBlLCBOYW1lU3RyKGZ1bmNmb3JtLT5wcm9u YW1lKSk7CisKKwkJcXVlcnl0cmVlID0gKFF1ZXJ5ICopIG5ld25vZGU7CisJCXF1ZXJ5dHJl ZV9saXN0ID0gbGlzdF9tYWtlMShxdWVyeXRyZWUpOworCX0KKworCiAJaWYgKCFxdWVyeXRy ZWUpCiAJewogCQkvKiBGZXRjaCB0aGUgZnVuY3Rpb24gYm9keSAqLwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvbm9kZXMvc3VwcG9ydG5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9z dXBwb3J0bm9kZXMuaAppbmRleCA1ZjdiY2RlODkxYy4uYmMwYjVjY2NhZjMgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL25vZGVzL3N1cHBvcnRub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRl L25vZGVzL3N1cHBvcnRub2Rlcy5oCkBAIC02OSw2ICs2OSwyOCBAQCB0eXBlZGVmIHN0cnVj dCBTdXBwb3J0UmVxdWVzdFNpbXBsaWZ5CiAJRnVuY0V4cHIgICAqZmNhbGw7CQkJLyogRnVu Y3Rpb24gY2FsbCB0byBiZSBzaW1wbGlmaWVkICovCiB9IFN1cHBvcnRSZXF1ZXN0U2ltcGxp Znk7CiAKKy8qCisgKiBUaGUgSW5saW5lU1JGIHJlcXVlc3QgYWxsb3dzIHRoZSBzdXBwb3J0 IGZ1bmN0aW9uIHRvIHBlcmZvcm0gcGxhbi10aW1lCisgKiBzaW1wbGlmaWNhdGlvbiBvZiBh IGNhbGwgdG8gaXRzIHRhcmdldCBzZXQtcmV0dXJuaW5nIGZ1bmN0aW9uLiBGb3IKKyAqIGV4 YW1wbGUgYSBwbHBnc3FsIGZ1bmN0aW9uIGNvdWxkIGJ1aWxkIGEgZHluYW1pYyBTUUwgcXVl cnkgYW5kIGV4ZWN1dGUgaXQuCisgKiBOb3JtYWxseSBvbmx5IFNRTCBmdW5jdGlvbnMgY2Fu IGJlIGlubGluZWQsIGJ1dCB3aXRoIHRoaXMgc3VwcG9ydCBmdW5jdGlvbgorICogdGhlIGR5 bmFtaWMgcXVlcnkgY2FuIGJlIGlubGluZWQgYXMgd2VsbC4KKyAqCisgKiAiZmNhbGwiIHdp bGwgYmUgYSBGdW5jRXhwciBpbnZva2luZyB0aGUgc3VwcG9ydCBmdW5jdGlvbidzIHRhcmdl dAorICogZnVuY3Rpb24uCisgKgorICogVGhlIHJlc3VsdCBzaG91bGQgYmUgYSBzZW1hbnRp Y2FsbHktZXF1aXZhbGVudCB0cmFuc2Zvcm1lZCBub2RlIHRyZWUsCisgKiBvciBOVUxMIGlm IG5vIHNpbXBsaWZpY2F0aW9uIGNvdWxkIGJlIHBlcmZvcm1lZC4gIERvICpub3QqIHJldHVy biBvcgorICogbW9kaWZ5ICpmY2FsbCwgYXMgaXQgaXNuJ3QgcmVhbGx5IGEgc2VwYXJhdGVs eSBhbGxvY2F0ZWQgTm9kZS4gIEJ1dAorICogaXQncyBva2F5IHRvIHVzZSBmY2FsbC0+YXJn cywgb3IgcGFydHMgb2YgaXQsIGluIHRoZSByZXN1bHQgdHJlZS4KKyAqLwordHlwZWRlZiBz dHJ1Y3QgU3VwcG9ydFJlcXVlc3RJbmxpbmVTUkYKK3sKKwlOb2RlVGFnCQl0eXBlOworCisJ RnVuY0V4cHIgICAqZmNhbGw7CQkJLyogRnVuY3Rpb24gY2FsbCB0byBiZSBzaW1wbGlmaWVk ICovCit9IFN1cHBvcnRSZXF1ZXN0SW5saW5lU1JGOworCiAvKgogICogVGhlIFNlbGVjdGl2 aXR5IHJlcXVlc3QgYWxsb3dzIHRoZSBzdXBwb3J0IGZ1bmN0aW9uIHRvIHByb3ZpZGUgYQog ICogc2VsZWN0aXZpdHkgZXN0aW1hdGUgZm9yIGEgZnVuY3Rpb24gYXBwZWFyaW5nIGF0IHRv cCBsZXZlbCBvZiBhIFdIRVJFCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL21pc2NfZnVuY3Rpb25zLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbWlz Y19mdW5jdGlvbnMub3V0CmluZGV4IDM1ZmI3MmYzMDJiLi5jNWJhYzZkNDNlYSAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9taXNjX2Z1bmN0aW9ucy5vdXQKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9taXNjX2Z1bmN0aW9ucy5vdXQKQEAgLTU5 NSw2ICs1OTUsMTEgQEAgQ1JFQVRFIEZVTkNUSU9OIHRlc3Rfc3VwcG9ydF9mdW5jKGludGVy bmFsKQogICAgIFJFVFVSTlMgaW50ZXJuYWwKICAgICBBUyA6J3JlZ3Jlc3NsaWInLCAndGVz dF9zdXBwb3J0X2Z1bmMnCiAgICAgTEFOR1VBR0UgQyBTVFJJQ1Q7CistLSBXaXRoIGEgc3Vw cG9ydCBmdW5jdGlvbiB0aGF0IGlubGluZXMgU1JGcworQ1JFQVRFIEZVTkNUSU9OIHRlc3Rf aW5saW5lX3NyZl9zdXBwb3J0X2Z1bmMoaW50ZXJuYWwpCisgICAgUkVUVVJOUyBpbnRlcm5h bAorICAgIEFTIDoncmVncmVzc2xpYicsICd0ZXN0X2lubGluZV9zcmZfc3VwcG9ydF9mdW5j JworICAgIExBTkdVQUdFIEMgU1RSSUNUOwogQUxURVIgRlVOQ1RJT04gbXlfaW50X2VxKGlu dCwgaW50KSBTVVBQT1JUIHRlc3Rfc3VwcG9ydF9mdW5jOwogRVhQTEFJTiAoQ09TVFMgT0ZG KQogU0VMRUNUICogRlJPTSB0ZW5rMSBhIEpPSU4gdGVuazEgYiBPTiBhLnVuaXF1ZTEgPSBi LnVuaXF1ZTEKQEAgLTcwNiw2ICs3MTEsMjEzIEBAIGZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1 ZSk7CiAtLSB0aGUgc3VwcG9ydCBmdW5jdGlvbi4KIFNFTEVDVCAqIEZST00gZ2VuZXJhdGVf c2VyaWVzKFRJTUVTVEFNUFRaICcyMDI0LTAyLTAxJywgVElNRVNUQU1QVFogJzIwMjQtMDMt MDEnLCBJTlRFUlZBTCAnMCBkYXknKSBnKHMpOwogRVJST1I6ICBzdGVwIHNpemUgY2Fubm90 IGVxdWFsIHplcm8KKy0tCistLSBUZXN0IGlubGluaW5nIFBML3BnU1FMIGZ1bmN0aW9ucwor LS0KKy0tIFJFVFVSTlMgU0VUT0YgVEVYVDoKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9O IGZvb19mcm9tX2Jhcihjb2xuYW1lIFRFWFQsIHRhYmxlbmFtZSBURVhULCBmaWx0ZXIgVEVY VCkKK1JFVFVSTlMgU0VUT0YgVEVYVAorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJGZ1bmN0aW9u JAorREVDTEFSRQorICBzcWwgVEVYVDsKK0JFR0lOCisgIHNxbCA6PSBmb3JtYXQoJ1NFTEVD VCAlSTo6dGV4dCBGUk9NICVJJywgY29sbmFtZSwgdGFibGVuYW1lKTsKKyAgSUYgZmlsdGVy IElTIE5PVCBOVUxMIFRIRU4KKyAgICBzcWwgOj0gQ09OQ0FUKHNxbCwgZm9ybWF0KCcgV0hF UkUgJUk6OnRleHQgPSAkMScsIGNvbG5hbWUpKTsKKyAgRU5EIElGOworICBSRVRVUk4gUVVF UlkgRVhFQ1VURSBzcWwgVVNJTkcgZmlsdGVyOworRU5EOworJGZ1bmN0aW9uJCBTVEFCTEUg TEVBS1BST09GOworU0VMRUNUICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJs JywgTlVMTCk7CisgICBmb29fZnJvbV9iYXIgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tCisg ZG9oIQorIGhpIGRlIGhvIG5laWdoYm9yCisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGZv b19mcm9tX2JhcignZjEnLCAndGV4dF90YmwnLCAnZG9oIScpOworIGZvb19mcm9tX2JhciAK Ky0tLS0tLS0tLS0tLS0tCisgZG9oIQorKDEgcm93KQorCitFWFBMQUlOIFNFTEVDVCAqIEZS T00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsIE5VTEwpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEZ1bmN0aW9uIFNjYW4gb24gZm9vX2Zyb21fYmFy ICAoY29zdD0wLjI1Li4xMC4yNSByb3dzPTEwMDAgd2lkdGg9MzIpCisoMSByb3cpCisKK0VY UExBSU4gU0VMRUNUICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgJ2Rv aCEnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGdW5jdGlvbiBT Y2FuIG9uIGZvb19mcm9tX2JhciAgKGNvc3Q9MC4yNS4uMTAuMjUgcm93cz0xMDAwIHdpZHRo PTMyKQorKDEgcm93KQorCitBTFRFUiBGVU5DVElPTiBmb29fZnJvbV9iYXIoVEVYVCwgVEVY VCwgVEVYVCkgU1VQUE9SVCB0ZXN0X2lubGluZV9zcmZfc3VwcG9ydF9mdW5jOworU0VMRUNU ICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgTlVMTCk7CisgICBmb29f ZnJvbV9iYXIgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tCisgZG9oIQorIGhpIGRlIGhvIG5l aWdoYm9yCisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAn dGV4dF90YmwnLCAnZG9oIScpOworIGZvb19mcm9tX2JhciAKKy0tLS0tLS0tLS0tLS0tCisg ZG9oIQorKDEgcm93KQorCitFWFBMQUlOIFNFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdm MScsICd0ZXh0X3RibCcsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiB0ZXh0X3Ri bCAgKGNvc3Q9MC4wMC4uMS4wMiByb3dzPTIgd2lkdGg9MzIpCisoMSByb3cpCisKK0VYUExB SU4gU0VMRUNUICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgJ2RvaCEn KTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gdGV4dF90YmwgIChjb3N0PTAuMDAuLjEuMDIg cm93cz0xIHdpZHRoPTMyKQorICAgRmlsdGVyOiAoZjEgPSAnZG9oISc6OnRleHQpCisoMiBy b3dzKQorCitEUk9QIEZVTkNUSU9OIGZvb19mcm9tX2JhcjsKKy0tIFJFVFVSTlMgU0VUT0Yg UkVDT1JEOgorQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gZm9vX2Zyb21fYmFyKGNvbG5h bWUgVEVYVCwgdGFibGVuYW1lIFRFWFQsIGZpbHRlciBURVhUKQorUkVUVVJOUyBTRVRPRiBS RUNPUkQKK0xBTkdVQUdFIHBscGdzcWwKK0FTICRmdW5jdGlvbiQKK0RFQ0xBUkUKKyAgc3Fs IFRFWFQ7CitCRUdJTgorICBzcWwgOj0gZm9ybWF0KCdTRUxFQ1QgJUk6OnRleHQgRlJPTSAl SScsIGNvbG5hbWUsIHRhYmxlbmFtZSk7CisgIElGIGZpbHRlciBJUyBOT1QgTlVMTCBUSEVO CisgICAgc3FsIDo9IENPTkNBVChzcWwsIGZvcm1hdCgnIFdIRVJFICVJOjp0ZXh0ID0gJDEn LCBjb2xuYW1lKSk7CisgIEVORCBJRjsKKyAgUkVUVVJOIFFVRVJZIEVYRUNVVEUgc3FsIFVT SU5HIGZpbHRlcjsKK0VORDsKKyRmdW5jdGlvbiQgU1RBQkxFIExFQUtQUk9PRjsKK1NFTEVD VCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsIE5VTEwpIEFTIGJhcihm b28gVEVYVCk7CisgICAgICAgIGZvbyAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tCisg ZG9oIQorIGhpIGRlIGhvIG5laWdoYm9yCisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGZv b19mcm9tX2JhcignZjEnLCAndGV4dF90YmwnLCAnZG9oIScpIEFTIGJhcihmb28gVEVYVCk7 CisgZm9vICAKKy0tLS0tLQorIGRvaCEKKygxIHJvdykKKworRVhQTEFJTiBTRUxFQ1QgKiBG Uk9NIGZvb19mcm9tX2JhcignZjEnLCAndGV4dF90YmwnLCBOVUxMKSBBUyBiYXIoZm9vIFRF WFQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRnVu Y3Rpb24gU2NhbiBvbiBmb29fZnJvbV9iYXIgYmFyICAoY29zdD0wLjI1Li4xMC4yNSByb3dz PTEwMDAgd2lkdGg9MzIpCisoMSByb3cpCisKK0VYUExBSU4gU0VMRUNUICogRlJPTSBmb29f ZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgJ2RvaCEnKSBBUyBiYXIoZm9vIFRFWFQpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRnVuY3Rpb24g U2NhbiBvbiBmb29fZnJvbV9iYXIgYmFyICAoY29zdD0wLjI1Li4xMC4yNSByb3dzPTEwMDAg d2lkdGg9MzIpCisoMSByb3cpCisKK0FMVEVSIEZVTkNUSU9OIGZvb19mcm9tX2JhcihURVhU LCBURVhULCBURVhUKSBTVVBQT1JUIHRlc3RfaW5saW5lX3NyZl9zdXBwb3J0X2Z1bmM7CitT RUxFQ1QgKiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAndGV4dF90YmwnLCBOVUxMKSBBUyBi YXIoZm9vIFRFWFQpOworICAgICAgICBmb28gICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LQorIGRvaCEKKyBoaSBkZSBobyBuZWlnaGJvcgorKDIgcm93cykKKworU0VMRUNUICogRlJP TSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgJ2RvaCEnKSBBUyBiYXIoZm9vIFRF WFQpOworIGZvbyAgCistLS0tLS0KKyBkb2ghCisoMSByb3cpCisKK0VYUExBSU4gU0VMRUNU ICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgTlVMTCkgQVMgYmFyKGZv byBURVhUKTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gdGV4dF90YmwgIChjb3N0PTAuMDAu LjEuMDIgcm93cz0yIHdpZHRoPTMyKQorKDEgcm93KQorCitFWFBMQUlOIFNFTEVDVCAqIEZS T00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsICdkb2ghJykgQVMgYmFyKGZvbyBU RVhUKTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gdGV4dF90YmwgIChjb3N0PTAuMDAuLjEu MDIgcm93cz0xIHdpZHRoPTMyKQorICAgRmlsdGVyOiAoZjEgPSAnZG9oISc6OnRleHQpCiso MiByb3dzKQorCitEUk9QIEZVTkNUSU9OIGZvb19mcm9tX2JhcjsKKy0tIFJFVFVSTlMgVEFC TEU6CitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBmb29fZnJvbV9iYXIoY29sbmFtZSBU RVhULCB0YWJsZW5hbWUgVEVYVCwgZmlsdGVyIFRFWFQpCitSRVRVUk5TIFRBQkxFKGZvbyBU RVhUKQorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJGZ1bmN0aW9uJAorREVDTEFSRQorICBzcWwg VEVYVDsKK0JFR0lOCisgIHNxbCA6PSBmb3JtYXQoJ1NFTEVDVCAlSTo6dGV4dCBGUk9NICVJ JywgY29sbmFtZSwgdGFibGVuYW1lKTsKKyAgSUYgZmlsdGVyIElTIE5PVCBOVUxMIFRIRU4K KyAgICBzcWwgOj0gQ09OQ0FUKHNxbCwgZm9ybWF0KCcgV0hFUkUgJUk6OnRleHQgPSAkMScs IGNvbG5hbWUpKTsKKyAgRU5EIElGOworICBSRVRVUk4gUVVFUlkgRVhFQ1VURSBzcWwgVVNJ TkcgZmlsdGVyOworRU5EOworJGZ1bmN0aW9uJCBTVEFCTEUgTEVBS1BST09GOworU0VMRUNU ICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgTlVMTCk7CisgICAgICAg IGZvbyAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tCisgZG9oIQorIGhpIGRlIGhvIG5l aWdoYm9yCisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAn dGV4dF90YmwnLCAnZG9oIScpOworIGZvbyAgCistLS0tLS0KKyBkb2ghCisoMSByb3cpCisK K0VYUExBSU4gU0VMRUNUICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywg TlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRnVuY3Rpb24g U2NhbiBvbiBmb29fZnJvbV9iYXIgIChjb3N0PTAuMjUuLjEwLjI1IHJvd3M9MTAwMCB3aWR0 aD0zMikKKygxIHJvdykKKworRVhQTEFJTiBTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2Jhcign ZjEnLCAndGV4dF90YmwnLCAnZG9oIScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEZ1bmN0aW9uIFNjYW4gb24gZm9vX2Zyb21fYmFyICAoY29zdD0wLjI1Li4x MC4yNSByb3dzPTEwMDAgd2lkdGg9MzIpCisoMSByb3cpCisKK0FMVEVSIEZVTkNUSU9OIGZv b19mcm9tX2JhcihURVhULCBURVhULCBURVhUKSBTVVBQT1JUIHRlc3RfaW5saW5lX3NyZl9z dXBwb3J0X2Z1bmM7CitTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAndGV4dF90 YmwnLCBOVUxMKTsKKyAgICAgICAgZm9vICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0K KyBkb2ghCisgaGkgZGUgaG8gbmVpZ2hib3IKKygyIHJvd3MpCisKK1NFTEVDVCAqIEZST00g Zm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsICdkb2ghJyk7CisgZm9vICAKKy0tLS0t LQorIGRvaCEKKygxIHJvdykKKworRVhQTEFJTiBTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2Jh cignZjEnLCAndGV4dF90YmwnLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gdGV4 dF90YmwgIChjb3N0PTAuMDAuLjEuMDIgcm93cz0yIHdpZHRoPTMyKQorKDEgcm93KQorCitF WFBMQUlOIFNFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsICdk b2ghJyk7CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHRleHRfdGJsICAoY29zdD0wLjAwLi4x LjAyIHJvd3M9MSB3aWR0aD0zMikKKyAgIEZpbHRlcjogKGYxID0gJ2RvaCEnOjp0ZXh0KQor KDIgcm93cykKKworRFJPUCBGVU5DVElPTiBmb29fZnJvbV9iYXI7CiAtLSBUZXN0IGZ1bmN0 aW9ucyBmb3IgY29udHJvbCBkYXRhCiBTRUxFQ1QgY291bnQoKikgPiAwIEFTIG9rIEZST00g cGdfY29udHJvbF9jaGVja3BvaW50KCk7CiAgb2sgCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL3JlZ3Jlc3MuYyBiL3NyYy90ZXN0L3JlZ3Jlc3MvcmVncmVzcy5jCmluZGV4IDE0 YWFkNWEwYzZlLi45Zjk3YWQ2YWQ0NSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9y ZWdyZXNzLmMKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9yZWdyZXNzLmMKQEAgLTI5LDYgKzI5 LDcgQEAKICNpbmNsdWRlICJjb21tYW5kcy9zZXF1ZW5jZS5oIgogI2luY2x1ZGUgImNvbW1h bmRzL3RyaWdnZXIuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgorI2luY2x1 ZGUgImV4ZWN1dG9yL2Z1bmN0aW9ucy5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL3NwaS5oIgog I2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgpAQCAtMzks MTEgKzQwLDEzIEBACiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NvZXJjZS5oIgogI2luY2x1 ZGUgInBvcnQvYXRvbWljcy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3Bpbi5oIgorI2luY2x1 ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgogI2luY2x1 ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZ2VvX2RlY2xzLmgiCiAj aW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKyNp bmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3R5cGNhY2hlLmgi CiAKICNkZWZpbmUgRVhQRUNUX1RSVUUoZXhwcikJXApAQCAtOTg5LDYgKzk5Miw5NCBAQCB0 ZXN0X3N1cHBvcnRfZnVuYyhQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9QT0lOVEVS KHJldCk7CiB9CiAKK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9pbmxpbmVfc3JmX3N1cHBv cnRfZnVuYyk7CitEYXR1bQordGVzdF9pbmxpbmVfc3JmX3N1cHBvcnRfZnVuYyhQR19GVU5D VElPTl9BUkdTKQoreworCU5vZGUJICAgKnJhd3JlcSA9IChOb2RlICopIFBHX0dFVEFSR19Q T0lOVEVSKDApOworCisJaWYgKElzQShyYXdyZXEsIFN1cHBvcnRSZXF1ZXN0SW5saW5lU1JG KSkKKwl7CisJCS8qCisJCSAqIEFzc3VtZSB0aGF0IHRoZSB0YXJnZXQgaXMgZm9vX2Zyb21f YmFyOyB0aGF0J3Mgc2FmZSBhcyBsb25nCisJCSAqIGFzIHdlIGRvbid0IGF0dGFjaCB0aGlz IHRvIGFueSBvdGhlciBzZXQtcmV0dXJuaW5nIGZ1bmN0aW9uLgorCQkgKi8KKwkJU3VwcG9y dFJlcXVlc3RJbmxpbmVTUkYgKnJlcSA9IChTdXBwb3J0UmVxdWVzdElubGluZVNSRiAqKSBy YXdyZXE7CisJCVN0cmluZ0luZm9EYXRhIHNxbDsKKwkJRnVuY0V4cHIgKmV4cHIgPSByZXEt PmZjYWxsOworCQlOb2RlICpub2RlOworCQlDb25zdCAqYzsKKwkJY2hhciAqY29sbmFtZTsK KwkJY2hhciAqdGFibGVuYW1lOworCQlIZWFwVHVwbGUgZnVuY190dXBsZTsKKwkJU1FMRnVu Y3Rpb25QYXJzZUluZm9QdHIgcGluZm87CisJCUxpc3QgKnJhd19wYXJzZXRyZWVfbGlzdDsK KwkJTGlzdCAqcXVlcnl0cmVlX2xpc3Q7CisJCVF1ZXJ5ICpxdWVyeXRyZWU7CisKKwkJaWYg KGxpc3RfbGVuZ3RoKGV4cHItPmFyZ3MpICE9IDMpCisJCQllcmVwb3J0KEVSUk9SLCAoZXJy bXNnKCJ0ZXN0X2lubGluZV9zcmZfc3VwcG9ydF9mdW5jIGNhbGxlZCB3aXRoICVkIGFyZ3Mg YnV0IGV4cGVjdGVkIDMiLCBsaXN0X2xlbmd0aChleHByLT5hcmdzKSkpKTsKKworCQkvKiBH ZXQgY29sbmFtZSAqLworCQlub2RlID0gbGluaXRpYWwoZXhwci0+YXJncyk7CisJCWlmICgh SXNBKG5vZGUsIENvbnN0KSkKKwkJCWVyZXBvcnQoRVJST1IsIChlcnJtc2coInRlc3RfaW5s aW5lX3NyZl9zdXBwb3J0X2Z1bmMgY2FsbGVkIHdpdGggbm9uLUNvbnN0IHBhcmFtZXRlcnMi KSkpOworCQljID0gKENvbnN0ICopIG5vZGU7CisJCWlmIChjLT5jb25zdHR5cGUgIT0gVEVY VE9JRCkKKwkJCWVyZXBvcnQoRVJST1IsIChlcnJtc2coInRlc3RfaW5saW5lX3NyZl9zdXBw b3J0X2Z1bmMgY2FsbGVkIHdpdGggbm9uLVRFWFQgcGFyYW1ldGVycyIpKSk7CisJCWNvbG5h bWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGMtPmNvbnN0dmFsdWUpOworCisJCS8qIEdldCB0 YWJsZW5hbWUgKi8KKwkJbm9kZSA9IGxzZWNvbmQoZXhwci0+YXJncyk7CisJCWlmICghSXNB KG5vZGUsIENvbnN0KSkKKwkJCWVyZXBvcnQoRVJST1IsIChlcnJtc2coInRlc3RfaW5saW5l X3NyZl9zdXBwb3J0X2Z1bmMgY2FsbGVkIHdpdGggbm9uLUNvbnN0IHBhcmFtZXRlcnMiKSkp OworCQljID0gKENvbnN0ICopIG5vZGU7CisJCWlmIChjLT5jb25zdHR5cGUgIT0gVEVYVE9J RCkKKwkJCWVyZXBvcnQoRVJST1IsIChlcnJtc2coInRlc3RfaW5saW5lX3NyZl9zdXBwb3J0 X2Z1bmMgY2FsbGVkIHdpdGggbm9uLVRFWFQgcGFyYW1ldGVycyIpKSk7CisJCXRhYmxlbmFt ZSA9IFRleHREYXR1bUdldENTdHJpbmcoYy0+Y29uc3R2YWx1ZSk7CisKKwkJaW5pdFN0cmlu Z0luZm8oJnNxbCk7CisJCWFwcGVuZFN0cmluZ0luZm8oJnNxbCwgIlNFTEVDVCAlczo6dGV4 dCBGUk9NICVzIiwgcXVvdGVfaWRlbnRpZmllcihjb2xuYW1lKSwgcXVvdGVfaWRlbnRpZmll cih0YWJsZW5hbWUpKTsKKworCQkvKiBHZXQgZmlsdGVyIGlmIHByZXNlbnQgKi8KKwkJbm9k ZSA9IGx0aGlyZChleHByLT5hcmdzKTsKKwkJaWYgKCEoSXNBKG5vZGUsIENvbnN0KSAmJiAo KENvbnN0ICopIG5vZGUpLT5jb25zdGlzbnVsbCkpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0lu Zm8oJnNxbCwgIiBXSEVSRSAlczo6dGV4dCA9ICQzIiwgcXVvdGVfaWRlbnRpZmllcihjb2xu YW1lKSk7CisJCX0KKworCQlmdW5jX3R1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQs IE9iamVjdElkR2V0RGF0dW0oZXhwci0+ZnVuY2lkKSk7CisJCWlmICghSGVhcFR1cGxlSXNW YWxpZChmdW5jX3R1cGxlKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciBmdW5jdGlvbiAldSIsIGV4cHItPmZ1bmNpZCk7CisKKwkJcGluZm8gPSBwcmVwYXJl X3NxbF9mbl9wYXJzZV9pbmZvKGZ1bmNfdHVwbGUsCisJCQkJCQkJCQkJICAoTm9kZSAqKSBl eHByLAorCQkJCQkJCQkJCSAgZXhwci0+aW5wdXRjb2xsaWQpOworCisJCVJlbGVhc2VTeXND YWNoZShmdW5jX3R1cGxlKTsKKworCQlyYXdfcGFyc2V0cmVlX2xpc3QgPSBwZ19wYXJzZV9x dWVyeShzcWwuZGF0YSk7CisJCWlmIChsaXN0X2xlbmd0aChyYXdfcGFyc2V0cmVlX2xpc3Qp ICE9IDEpCisJCQllbG9nKEVSUk9SLCAidGVzdF9pbmxpbmVfc3JmX3N1cHBvcnRfZnVuYyBw YXJzZWQgdG8gbW9yZSB0aGFuIG9uZSBub2RlIik7CisKKwkJcXVlcnl0cmVlX2xpc3QgPSBw Z19hbmFseXplX2FuZF9yZXdyaXRlX3dpdGhjYigKKwkJCQlsaW5pdGlhbChyYXdfcGFyc2V0 cmVlX2xpc3QpLAorCQkJCXNxbC5kYXRhLAorCQkJCShQYXJzZXJTZXR1cEhvb2spIHNxbF9m bl9wYXJzZXJfc2V0dXAsCisJCQkJcGluZm8sIE5VTEwpOworCQlpZiAobGlzdF9sZW5ndGgo cXVlcnl0cmVlX2xpc3QpICE9IDEpCisJCQllbG9nKEVSUk9SLCAidGVzdF9pbmxpbmVfc3Jm X3N1cHBvcnRfZnVuYyByZXdyb3RlIHRvIG1vcmUgdGhhbiBvbmUgbm9kZSIpOworCisJCXF1 ZXJ5dHJlZSA9IGxpbml0aWFsKHF1ZXJ5dHJlZV9saXN0KTsKKwkJaWYgKCFJc0EocXVlcnl0 cmVlLCBRdWVyeSkpCisJCQllcmVwb3J0KEVSUk9SLCAoZXJybXNnKCJ0ZXN0X2lubGluZV9z cmZfc3VwcG9ydF9mdW5jIGRpZG4ndCBwYXJzZSB0byBhIFF1ZXJ5IiksCisJCQkJCQkJZXJy ZGV0YWlsKCJHb3QgdGhpcyBpbnN0ZWFkOiAlcyIsIG5vZGVUb1N0cmluZyhxdWVyeXRyZWUp KSkpOworCQlQR19SRVRVUk5fUE9JTlRFUihxdWVyeXRyZWUpOworCX0KKworCVBHX1JFVFVS Tl9QT0lOVEVSKE5VTEwpOworfQorCiBQR19GVU5DVElPTl9JTkZPX1YxKHRlc3Rfb3BjbGFz c19vcHRpb25zX2Z1bmMpOwogRGF0dW0KIHRlc3Rfb3BjbGFzc19vcHRpb25zX2Z1bmMoUEdf RlVOQ1RJT05fQVJHUykKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2Nf ZnVuY3Rpb25zLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVuY3Rpb25zLnNx bAppbmRleCBlNTcwNzgzNDUzYy4uYmY2OTJlZGQwYjcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL21pc2NfZnVuY3Rpb25zLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9taXNjX2Z1bmN0aW9ucy5zcWwKQEAgLTI0Nyw2ICsyNDcsMTIgQEAgQ1JFQVRFIEZV TkNUSU9OIHRlc3Rfc3VwcG9ydF9mdW5jKGludGVybmFsKQogICAgIEFTIDoncmVncmVzc2xp YicsICd0ZXN0X3N1cHBvcnRfZnVuYycKICAgICBMQU5HVUFHRSBDIFNUUklDVDsKIAorLS0g V2l0aCBhIHN1cHBvcnQgZnVuY3Rpb24gdGhhdCBpbmxpbmVzIFNSRnMKK0NSRUFURSBGVU5D VElPTiB0ZXN0X2lubGluZV9zcmZfc3VwcG9ydF9mdW5jKGludGVybmFsKQorICAgIFJFVFVS TlMgaW50ZXJuYWwKKyAgICBBUyA6J3JlZ3Jlc3NsaWInLCAndGVzdF9pbmxpbmVfc3JmX3N1 cHBvcnRfZnVuYycKKyAgICBMQU5HVUFHRSBDIFNUUklDVDsKKwogQUxURVIgRlVOQ1RJT04g bXlfaW50X2VxKGludCwgaW50KSBTVVBQT1JUIHRlc3Rfc3VwcG9ydF9mdW5jOwogCiBFWFBM QUlOIChDT1NUUyBPRkYpCkBAIC0yNjUsNiArMjcxLDggQEAgU0VMRUNUICogRlJPTSB0ZW5r MSBhIEpPSU4gbXlfZ2VuX3NlcmllcygxLDEwMDApIGcgT04gYS51bmlxdWUxID0gZzsKIEVY UExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCAqIEZST00gdGVuazEgYSBKT0lOIG15X2dlbl9z ZXJpZXMoMSwxMCkgZyBPTiBhLnVuaXF1ZTEgPSBnOwogCisKKwogLS0KIC0tIFRlc3QgdGhl IFN1cHBvcnRSZXF1ZXN0Um93cyBzdXBwb3J0IGZ1bmN0aW9uIGZvciBnZW5lcmF0ZV9zZXJp ZXNfdGltZXN0YW1wKCkKIC0tCkBAIC0zMTAsNiArMzE4LDg1IEBAIGZhbHNlLCB0cnVlLCBm YWxzZSwgdHJ1ZSk7CiAtLSB0aGUgc3VwcG9ydCBmdW5jdGlvbi4KIFNFTEVDVCAqIEZST00g Z2VuZXJhdGVfc2VyaWVzKFRJTUVTVEFNUFRaICcyMDI0LTAyLTAxJywgVElNRVNUQU1QVFog JzIwMjQtMDMtMDEnLCBJTlRFUlZBTCAnMCBkYXknKSBnKHMpOwogCistLQorLS0gVGVzdCBp bmxpbmluZyBQTC9wZ1NRTCBmdW5jdGlvbnMKKy0tCistLSBSRVRVUk5TIFNFVE9GIFRFWFQ6 CitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBmb29fZnJvbV9iYXIoY29sbmFtZSBURVhU LCB0YWJsZW5hbWUgVEVYVCwgZmlsdGVyIFRFWFQpCitSRVRVUk5TIFNFVE9GIFRFWFQKK0xB TkdVQUdFIHBscGdzcWwKK0FTICRmdW5jdGlvbiQKK0RFQ0xBUkUKKyAgc3FsIFRFWFQ7CitC RUdJTgorICBzcWwgOj0gZm9ybWF0KCdTRUxFQ1QgJUk6OnRleHQgRlJPTSAlSScsIGNvbG5h bWUsIHRhYmxlbmFtZSk7CisgIElGIGZpbHRlciBJUyBOT1QgTlVMTCBUSEVOCisgICAgc3Fs IDo9IENPTkNBVChzcWwsIGZvcm1hdCgnIFdIRVJFICVJOjp0ZXh0ID0gJDEnLCBjb2xuYW1l KSk7CisgIEVORCBJRjsKKyAgUkVUVVJOIFFVRVJZIEVYRUNVVEUgc3FsIFVTSU5HIGZpbHRl cjsKK0VORDsKKyRmdW5jdGlvbiQgU1RBQkxFIExFQUtQUk9PRjsKK1NFTEVDVCAqIEZST00g Zm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsIE5VTEwpOworU0VMRUNUICogRlJPTSBm b29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgJ2RvaCEnKTsKK0VYUExBSU4gU0VMRUNU ICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgTlVMTCk7CitFWFBMQUlO IFNFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsICdkb2ghJyk7 CitBTFRFUiBGVU5DVElPTiBmb29fZnJvbV9iYXIoVEVYVCwgVEVYVCwgVEVYVCkgU1VQUE9S VCB0ZXN0X2lubGluZV9zcmZfc3VwcG9ydF9mdW5jOworU0VMRUNUICogRlJPTSBmb29fZnJv bV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgTlVMTCk7CitTRUxFQ1QgKiBGUk9NIGZvb19mcm9t X2JhcignZjEnLCAndGV4dF90YmwnLCAnZG9oIScpOworRVhQTEFJTiBTRUxFQ1QgKiBGUk9N IGZvb19mcm9tX2JhcignZjEnLCAndGV4dF90YmwnLCBOVUxMKTsKK0VYUExBSU4gU0VMRUNU ICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgJ2RvaCEnKTsKK0RST1Ag RlVOQ1RJT04gZm9vX2Zyb21fYmFyOworLS0gUkVUVVJOUyBTRVRPRiBSRUNPUkQ6CitDUkVB VEUgT1IgUkVQTEFDRSBGVU5DVElPTiBmb29fZnJvbV9iYXIoY29sbmFtZSBURVhULCB0YWJs ZW5hbWUgVEVYVCwgZmlsdGVyIFRFWFQpCitSRVRVUk5TIFNFVE9GIFJFQ09SRAorTEFOR1VB R0UgcGxwZ3NxbAorQVMgJGZ1bmN0aW9uJAorREVDTEFSRQorICBzcWwgVEVYVDsKK0JFR0lO CisgIHNxbCA6PSBmb3JtYXQoJ1NFTEVDVCAlSTo6dGV4dCBGUk9NICVJJywgY29sbmFtZSwg dGFibGVuYW1lKTsKKyAgSUYgZmlsdGVyIElTIE5PVCBOVUxMIFRIRU4KKyAgICBzcWwgOj0g Q09OQ0FUKHNxbCwgZm9ybWF0KCcgV0hFUkUgJUk6OnRleHQgPSAkMScsIGNvbG5hbWUpKTsK KyAgRU5EIElGOworICBSRVRVUk4gUVVFUlkgRVhFQ1VURSBzcWwgVVNJTkcgZmlsdGVyOwor RU5EOworJGZ1bmN0aW9uJCBTVEFCTEUgTEVBS1BST09GOworU0VMRUNUICogRlJPTSBmb29f ZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgTlVMTCkgQVMgYmFyKGZvbyBURVhUKTsKK1NF TEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsICdkb2ghJykgQVMg YmFyKGZvbyBURVhUKTsKK0VYUExBSU4gU0VMRUNUICogRlJPTSBmb29fZnJvbV9iYXIoJ2Yx JywgJ3RleHRfdGJsJywgTlVMTCkgQVMgYmFyKGZvbyBURVhUKTsKK0VYUExBSU4gU0VMRUNU ICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgJ2RvaCEnKSBBUyBiYXIo Zm9vIFRFWFQpOworQUxURVIgRlVOQ1RJT04gZm9vX2Zyb21fYmFyKFRFWFQsIFRFWFQsIFRF WFQpIFNVUFBPUlQgdGVzdF9pbmxpbmVfc3JmX3N1cHBvcnRfZnVuYzsKK1NFTEVDVCAqIEZS T00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsIE5VTEwpIEFTIGJhcihmb28gVEVY VCk7CitTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAndGV4dF90YmwnLCAnZG9o IScpIEFTIGJhcihmb28gVEVYVCk7CitFWFBMQUlOIFNFTEVDVCAqIEZST00gZm9vX2Zyb21f YmFyKCdmMScsICd0ZXh0X3RibCcsIE5VTEwpIEFTIGJhcihmb28gVEVYVCk7CitFWFBMQUlO IFNFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsICdkb2ghJykg QVMgYmFyKGZvbyBURVhUKTsKK0RST1AgRlVOQ1RJT04gZm9vX2Zyb21fYmFyOworLS0gUkVU VVJOUyBUQUJMRToKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGZvb19mcm9tX2Jhcihj b2xuYW1lIFRFWFQsIHRhYmxlbmFtZSBURVhULCBmaWx0ZXIgVEVYVCkKK1JFVFVSTlMgVEFC TEUoZm9vIFRFWFQpCitMQU5HVUFHRSBwbHBnc3FsCitBUyAkZnVuY3Rpb24kCitERUNMQVJF CisgIHNxbCBURVhUOworQkVHSU4KKyAgc3FsIDo9IGZvcm1hdCgnU0VMRUNUICVJOjp0ZXh0 IEZST00gJUknLCBjb2xuYW1lLCB0YWJsZW5hbWUpOworICBJRiBmaWx0ZXIgSVMgTk9UIE5V TEwgVEhFTgorICAgIHNxbCA6PSBDT05DQVQoc3FsLCBmb3JtYXQoJyBXSEVSRSAlSTo6dGV4 dCA9ICQxJywgY29sbmFtZSkpOworICBFTkQgSUY7CisgIFJFVFVSTiBRVUVSWSBFWEVDVVRF IHNxbCBVU0lORyBmaWx0ZXI7CitFTkQ7CiskZnVuY3Rpb24kIFNUQUJMRSBMRUFLUFJPT0Y7 CitTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAndGV4dF90YmwnLCBOVUxMKTsK K1NFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsICdkb2ghJyk7 CitFWFBMQUlOIFNFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcs IE5VTEwpOworRVhQTEFJTiBTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAndGV4 dF90YmwnLCAnZG9oIScpOworQUxURVIgRlVOQ1RJT04gZm9vX2Zyb21fYmFyKFRFWFQsIFRF WFQsIFRFWFQpIFNVUFBPUlQgdGVzdF9pbmxpbmVfc3JmX3N1cHBvcnRfZnVuYzsKK1NFTEVD VCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsIE5VTEwpOworU0VMRUNU ICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgJ2RvaCEnKTsKK0VYUExB SU4gU0VMRUNUICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgTlVMTCk7 CitFWFBMQUlOIFNFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcs ICdkb2ghJyk7CitEUk9QIEZVTkNUSU9OIGZvb19mcm9tX2JhcjsKKwogLS0gVGVzdCBmdW5j dGlvbnMgZm9yIGNvbnRyb2wgZGF0YQogU0VMRUNUIGNvdW50KCopID4gMCBBUyBvayBGUk9N IHBnX2NvbnRyb2xfY2hlY2twb2ludCgpOwogU0VMRUNUIGNvdW50KCopID4gMCBBUyBvayBG Uk9NIHBnX2NvbnRyb2xfaW5pdCgpOwotLSAKMi40Mi4wCgo= --------------nPkIaX6HBKcUME0WEW0QI60j--