From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 54921 invoked by alias); 15 May 2018 15:44:58 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 54862 invoked by uid 89); 15 May 2018 15:44:57 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.2 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=cheng, regional, viewing, H*i:sk:CAFiYyc X-HELO: mail-it0-f66.google.com Received: from mail-it0-f66.google.com (HELO mail-it0-f66.google.com) (209.85.214.66) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 15 May 2018 15:44:53 +0000 Received: by mail-it0-f66.google.com with SMTP id n64-v6so2615980itb.3 for ; Tue, 15 May 2018 08:44:52 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=YYTlYM1U5PmcFR4bGG2cy8F0Cw/DZN2uqjcuqglOQy4=; b=ZeLoa47gUPhavL1ypX39nvFzybU5KhdlPwRQ/kd3OaGVUQH9XRiheIWh71kiLS62D/ 77/yD8gOBFRD1DeI0O5lToJtOZD+Huexei+7IggqMd7nYUon0ROZHEtmAT2NItCOFqoC n4q4hwLoZ665e3jBzvf1X4VUH8+fPQj8yCkg0R3lmdNU4Q3a/kMfdOdvGralNFM7lpoF AxIId4BzwYWrLmovq/vQClV2CCr7px/l7zKj3yL+6Bp3Yr44QuAnCtZwTv9yEyrPgRgp YeONfgDibAUg81u4pJV8Bm9588LB+dTgzsJfUBiLEjeMSLP1iH9gBSn/Kr0Nb0XehCjd Z8SA== X-Gm-Message-State: ALKqPwcJoiiIytl+299fZrRi0T3LSMNXhpxT/d2VfC6bWJX8L8xLBaEv rzwt9eIvohQraUBUiawLypqil1VX7m0mjB2zJ1M= X-Google-Smtp-Source: AB8JxZqwrxWfsPW3JHg9G2XMw0WlIS8uFK/6x1xoi6zzBR0KPm/uiTzBk4hzZBh8iJFaZvjp3r8YPMatRk0GUtAhh0o= X-Received: by 2002:a6b:8d55:: with SMTP id p82-v6mr15785486iod.57.1526399091163; Tue, 15 May 2018 08:44:51 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a02:b40e:0:0:0:0:0 with HTTP; Tue, 15 May 2018 08:44:50 -0700 (PDT) In-Reply-To: References: From: "Bin.Cheng" Date: Tue, 15 May 2018 15:56:00 -0000 Message-ID: Subject: Re: [PATCH GCC][4/6]Support regional coalesce and live range computation To: Richard Biener Cc: "gcc-patches@gcc.gnu.org" Content-Type: multipart/mixed; boundary="0000000000009d7449056c407b41" X-IsSubscribed: yes X-SW-Source: 2018-05/txt/msg00687.txt.bz2 --0000000000009d7449056c407b41 Content-Type: text/plain; charset="UTF-8" Content-length: 4560 On Fri, May 11, 2018 at 1:53 PM, Richard Biener wrote: > On Fri, May 4, 2018 at 6:23 PM, Bin Cheng wrote: >> Hi, >> Following Jeff's suggestion, I am now using existing tree-ssa-live.c and >> tree-ssa-coalesce.c to compute register pressure, rather than inventing >> another live range solver. >> >> The major change is to record region's basic blocks in var_map and use that >> information in computation, rather than FOR_EACH_BB_FN. For now only loop >> and function type regions are supported. The default one is function type >> region which is used in out-of-ssa. Loop type region will be used in next >> patch to compute information for a loop. >> >> Bootstrap and test on x86_64 and AArch64 ongoing. Any comments? > > I believe your changes to create_outofssa_var_map should be done differently > by simply only calling it from the coalescing context and passing in the > var_map rather than initializing it therein and returning it. > > This also means the coalesce_vars_p flag in the var_map structure looks > somewhat out-of-place. That is, it looks you could do with many less > changes if you refactored what calls what slightly? For example > the extra arg to gimple_can_coalesce_p looks unneeded. > > Just as a note I do have a CFG helper pending that computes RPO order > for SEME regions (attached). loops are SEME regions, so your RTYPE_SESE > is somewhat odd - I guess RTYPE_LOOP exists only because of the > convenience of passing in a loop * to the "constructor". I'd rather > drop this region_type thing and always assume a SEME region - at least > I didn't see anything in the patch that depends on any of the forms > apart from the initial BB gathering. Hi Richard, Thanks for reviewing. I refactored tree-ssa-live.c and tree-ssa-coalesce.c following your comments. Basically I did following changes: 1) Remove region_type and only support loop region live range computation. Also I added one boolean field in var_map indicating whether we are computing loop region live range or out-of-ssa. 2) Refactored create_outofssa_var_map into create_coalesce_list_for_region and populate_coalesce_list_for_outofssa. Actually the original function name doesn't quite make sense because it has nothing to do with var_map. 3) Hoist init_var_map up in call stack. Now it's called by caller (out-of-ssa or live range) and the returned var_map is passed to coalesce_* stuff. 4) Move global functions to tree-outof-ssa.c and make them static. 5) Save/restore flag_tree_coalesce_vars in order to avoid updating checks on the flag. So how is this one? Patch attached. Thanks, bin 2018-05-15 Bin Cheng * tree-outof-ssa.c (tree-ssa.h, tree-dfa.h): Include header files. (create_default_def, for_all_parms): Moved from tree-ssa-coalesce.c. (parm_default_def_partition_arg): Ditto. (set_parm_default_def_partition): Ditto. (get_parm_default_def_partitions): Ditto and make it static. (get_undefined_value_partitions): Ditto and make it static. (remove_ssa_form): Refactor call to init_var_map here. * tree-ssa-coalesce.c (build_ssa_conflict_graph): Support live range computation for loop region. (coalesce_partitions, compute_optimized_partition_bases): Ditto. (register_default_def): Delete. (for_all_parms, create_default_def): Move to tree-outof-ssa.c. (parm_default_def_partition_arg): Ditto. (set_parm_default_def_partition): Ditto. (get_parm_default_def_partitions): Ditto and make it static. (get_undefined_value_partitions): Ditto and make it static. (coalesce_with_default, coalesce_with_default): Update comment. (create_coalesce_list_for_region): New func factored out from create_outofssa_var_map. (populate_coalesce_list_for_outofssa): New func factored out from create_outofssa_var_map and coalesce_ssa_name. (create_outofssa_var_map): Delete. (coalesce_ssa_name): Refactor to support live range computation. * tree-ssa-coalesce.h (coalesce_ssa_name): Change decl. (get_parm_default_def_partitions): Delete. (get_undefined_value_partitions): Ditto. * tree-ssa-live.c (init_var_map, delete_var_map): Support live range computation for loop region. (new_tree_live_info, loe_visit_block): Ditto. (live_worklist, set_var_live_on_entry): Ditto. (calculate_live_on_exit, verify_live_on_entry): Ditto. * tree-ssa-live.h (struct _var_map): New fields. (init_var_map): Change decl. (region_contains_p): New. --0000000000009d7449056c407b41 Content-Type: text/x-patch; charset="US-ASCII"; name="0004-liverange-support-region-20180504.patch" Content-Disposition: attachment; filename="0004-liverange-support-region-20180504.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_jh7uldgy1 Content-length: 36901 RnJvbSAxMDQzNTQwY2Q1MzI1YzY1ZTYwZGYyNWNhZDIyYzM0M2U0MzEyZmQ0 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCaW4gQ2hlbmcgPGJp bmNoZTAxQGUxMDg0NTEtbGluLmNhbWJyaWRnZS5hcm0uY29tPgpEYXRlOiBG cmksIDQgTWF5IDIwMTggMDk6Mzk6MTcgKzAxMDAKU3ViamVjdDogW1BBVENI IDQvNl0gbGl2ZXJhbmdlLXN1cHBvcnQtcmVnaW9uLTIwMTgwNTA0CgotLS0K IGdjYy90cmVlLW91dG9mLXNzYS5jICAgIHwgMTAyICsrKysrKysrKysrKysr Ky0KIGdjYy90cmVlLXNzYS1jb2FsZXNjZS5jIHwgMzE3ICsrKysrKysrKysr KysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZ2NjL3Ry ZWUtc3NhLWNvYWxlc2NlLmggfCAgIDQgKy0KIGdjYy90cmVlLXNzYS1saXZl LmMgICAgIHwgIDc4ICsrKysrKysrLS0tLQogZ2NjL3RyZWUtc3NhLWxpdmUu aCAgICAgfCAgMzAgKysrKy0KIDUgZmlsZXMgY2hhbmdlZCwgMjk4IGluc2Vy dGlvbnMoKyksIDIzMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9nY2Mv dHJlZS1vdXRvZi1zc2EuYyBiL2djYy90cmVlLW91dG9mLXNzYS5jCmluZGV4 IDU5YmRjZDYuLjNmODgwZWYgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLW91dG9m LXNzYS5jCisrKyBiL2djYy90cmVlLW91dG9mLXNzYS5jCkBAIC0yNywxMCAr MjcsMTIgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5H My4gIElmIG5vdCBzZWUKICNpbmNsdWRlICJnaW1wbGUuaCIKICNpbmNsdWRl ICJjZmdob29rcy5oIgogI2luY2x1ZGUgInNzYS5oIgorI2luY2x1ZGUgInRy ZWUtc3NhLmgiCiAjaW5jbHVkZSAibWVtbW9kZWwuaCIKICNpbmNsdWRlICJl bWl0LXJ0bC5oIgogI2luY2x1ZGUgImdpbXBsZS1wcmV0dHktcHJpbnQuaCIK ICNpbmNsdWRlICJkaWFnbm9zdGljLWNvcmUuaCIKKyNpbmNsdWRlICJ0cmVl LWRmYS5oIgogI2luY2x1ZGUgInN0b3ItbGF5b3V0LmgiCiAjaW5jbHVkZSAi Y2ZncnRsLmgiCiAjaW5jbHVkZSAiY2ZnYW5hbC5oIgpAQCAtODg4LDYgKzg5 MCwxMDIgQEAgcmV3cml0ZV90cmVlcyAodmFyX21hcCBtYXApCiAgICAgfQog fQogCisvKiBDcmVhdGUgYSBkZWZhdWx0IGRlZiBmb3IgVkFSLiAgKi8KKwor c3RhdGljIHZvaWQKK2NyZWF0ZV9kZWZhdWx0X2RlZiAodHJlZSB2YXIsIHZv aWQgKmFyZyBBVFRSSUJVVEVfVU5VU0VEKQoreworICBpZiAoIWlzX2dpbXBs ZV9yZWcgKHZhcikpCisgICAgcmV0dXJuOworCisgIHRyZWUgc3NhID0gZ2V0 X29yX2NyZWF0ZV9zc2FfZGVmYXVsdF9kZWYgKGNmdW4sIHZhcik7CisgIGdj Y19hc3NlcnQgKHNzYSk7Cit9CisKKy8qIENhbGwgQ0FMTEJBQ0sgZm9yIGFs bCBQQVJNX0RFQ0xzIGFuZCBSRVNVTFRfREVDTHMgZm9yIHdoaWNoCisgICBh c3NpZ25fcGFybXMgbWF5IGFzayBmb3IgYSBkZWZhdWx0IHBhcnRpdGlvbi4g ICovCisKK3N0YXRpYyB2b2lkCitmb3JfYWxsX3Bhcm1zICh2b2lkICgqY2Fs bGJhY2spKHRyZWUgdmFyLCB2b2lkICphcmcpLCB2b2lkICphcmcpCit7Cisg IGZvciAodHJlZSB2YXIgPSBERUNMX0FSR1VNRU5UUyAoY3VycmVudF9mdW5j dGlvbl9kZWNsKTsgdmFyOworICAgICAgIHZhciA9IERFQ0xfQ0hBSU4gKHZh cikpCisgICAgY2FsbGJhY2sgKHZhciwgYXJnKTsKKyAgaWYgKCFWT0lEX1RZ UEVfUCAoVFJFRV9UWVBFIChERUNMX1JFU1VMVCAoY3VycmVudF9mdW5jdGlv bl9kZWNsKSkpKQorICAgIGNhbGxiYWNrIChERUNMX1JFU1VMVCAoY3VycmVu dF9mdW5jdGlvbl9kZWNsKSwgYXJnKTsKKyAgaWYgKGNmdW4tPnN0YXRpY19j aGFpbl9kZWNsKQorICAgIGNhbGxiYWNrIChjZnVuLT5zdGF0aWNfY2hhaW5f ZGVjbCwgYXJnKTsKK30KKworLyogV2UgbmVlZCB0byBwYXNzIHR3byBhcmd1 bWVudHMgdG8gc2V0X3Bhcm1fZGVmYXVsdF9kZWZfcGFydGl0aW9uLAorICAg YnV0IGZvcl9hbGxfcGFybXMgb25seSBzdXBwb3J0cyBvbmUuICBVc2UgYSBw YWlyLiAgKi8KKwordHlwZWRlZiBzdGQ6OnBhaXI8dmFyX21hcCwgYml0bWFw PiBwYXJtX2RlZmF1bHRfZGVmX3BhcnRpdGlvbl9hcmc7CisKKy8qIFNldCBp biBBUkcncyBQQVJUUyBiaXRtYXAgdGhlIGJpdCBjb3JyZXNwb25kaW5nIHRv IHRoZSBwYXJ0aXRpb24gaW4KKyAgIEFSRydzIE1BUCBjb250YWluaW5nIFZB UidzIGRlZmF1bHQgZGVmLiAgKi8KKworc3RhdGljIHZvaWQKK3NldF9wYXJt X2RlZmF1bHRfZGVmX3BhcnRpdGlvbiAodHJlZSB2YXIsIHZvaWQgKmFyZ18p Cit7CisgIHBhcm1fZGVmYXVsdF9kZWZfcGFydGl0aW9uX2FyZyAqYXJnID0g KHBhcm1fZGVmYXVsdF9kZWZfcGFydGl0aW9uX2FyZyAqKWFyZ187CisgIHZh cl9tYXAgbWFwID0gYXJnLT5maXJzdDsKKyAgYml0bWFwIHBhcnRzID0gYXJn LT5zZWNvbmQ7CisKKyAgaWYgKCFpc19naW1wbGVfcmVnICh2YXIpKQorICAg IHJldHVybjsKKworICB0cmVlIHNzYSA9IHNzYV9kZWZhdWx0X2RlZiAoY2Z1 biwgdmFyKTsKKyAgZ2NjX2Fzc2VydCAoc3NhKTsKKworICBpbnQgdmVyc2lv biA9IHZhcl90b19wYXJ0aXRpb24gKG1hcCwgc3NhKTsKKyAgZ2NjX2Fzc2Vy dCAodmVyc2lvbiAhPSBOT19QQVJUSVRJT04pOworCisgIGJvb2wgY2hhbmdl ZCA9IGJpdG1hcF9zZXRfYml0IChwYXJ0cywgdmVyc2lvbik7CisgIGdjY19h c3NlcnQgKGNoYW5nZWQpOworfQorCisvKiBBbGxvY2F0ZSBhbmQgcmV0dXJu IGEgYml0bWFwIHRoYXQgaGFzIGEgYml0IHNldCBmb3IgZWFjaCBwYXJ0aXRp b24KKyAgIHRoYXQgY29udGFpbnMgYSBkZWZhdWx0IGRlZiBmb3IgYSBwYXJh bWV0ZXIuICAqLworCitzdGF0aWMgYml0bWFwCitnZXRfcGFybV9kZWZhdWx0 X2RlZl9wYXJ0aXRpb25zICh2YXJfbWFwIG1hcCkKK3sKKyAgYml0bWFwIHBh cm1fZGVmYXVsdF9kZWZfcGFydHMgPSBCSVRNQVBfQUxMT0MgKE5VTEwpOwor CisgIHBhcm1fZGVmYXVsdF9kZWZfcGFydGl0aW9uX2FyZworICAgIGFyZyA9 IHN0ZDo6bWFrZV9wYWlyIChtYXAsIHBhcm1fZGVmYXVsdF9kZWZfcGFydHMp OworCisgIGZvcl9hbGxfcGFybXMgKHNldF9wYXJtX2RlZmF1bHRfZGVmX3Bh cnRpdGlvbiwgJmFyZyk7CisKKyAgcmV0dXJuIHBhcm1fZGVmYXVsdF9kZWZf cGFydHM7Cit9CisKKy8qIEFsbG9jYXRlIGFuZCByZXR1cm4gYSBiaXRtYXAg dGhhdCBoYXMgYSBiaXQgc2V0IGZvciBlYWNoIHBhcnRpdGlvbgorICAgdGhh dCBjb250YWlucyBhbiB1bmRlZmluZWQgdmFsdWUuICAqLworCitzdGF0aWMg Yml0bWFwCitnZXRfdW5kZWZpbmVkX3ZhbHVlX3BhcnRpdGlvbnMgKHZhcl9t YXAgbWFwKQoreworICBiaXRtYXAgdW5kZWZpbmVkX3ZhbHVlX3BhcnRzID0g QklUTUFQX0FMTE9DIChOVUxMKTsKKworICBmb3IgKHVuc2lnbmVkIGludCBp ID0gMTsgaSA8IG51bV9zc2FfbmFtZXM7IGkrKykKKyAgICB7CisgICAgICB0 cmVlIHZhciA9IHNzYV9uYW1lIChpKTsKKyAgICAgIGlmICh2YXIKKwkgICYm ICF2aXJ0dWFsX29wZXJhbmRfcCAodmFyKQorCSAgJiYgIWhhc196ZXJvX3Vz ZXMgKHZhcikKKwkgICYmIHNzYV91bmRlZmluZWRfdmFsdWVfcCAodmFyKSkK Kwl7CisJICBjb25zdCBpbnQgcCA9IHZhcl90b19wYXJ0aXRpb24gKG1hcCwg dmFyKTsKKwkgIGlmIChwICE9IE5PX1BBUlRJVElPTikKKwkgICAgYml0bWFw X3NldF9iaXQgKHVuZGVmaW5lZF92YWx1ZV9wYXJ0cywgcCk7CisJfQorICAg IH0KKworICByZXR1cm4gdW5kZWZpbmVkX3ZhbHVlX3BhcnRzOworfQorCiAv KiBHaXZlbiB0aGUgb3V0LW9mLXNzYSBpbmZvIG9iamVjdCBTQSAod2l0aCBw cmVwYXJlZCBwYXJ0aXRpb25zKQogICAgZWxpbWluYXRlIGFsbCBwaGkgbm9k ZXMgaW4gYWxsIGJhc2ljIGJsb2Nrcy4gIEFmdGVyd2FyZHMgbm8KICAgIGJh c2ljIGJsb2NrIHdpbGwgaGF2ZSBwaGkgbm9kZXMgYW55bW9yZSBhbmQgdGhl cmUgYXJlIHBvc3NpYmx5CkBAIC05NDUsNyArMTA0Myw5IEBAIHJlbW92ZV9z c2FfZm9ybSAoYm9vbCBwZXJmb3JtX3Rlciwgc3RydWN0IHNzYWV4cGFuZCAq c2EpCiAgIGJpdG1hcCB2YWx1ZXMgPSBOVUxMOwogICB2YXJfbWFwIG1hcDsK IAotICBtYXAgPSBjb2FsZXNjZV9zc2FfbmFtZSAoKTsKKyAgZm9yX2FsbF9w YXJtcyAoY3JlYXRlX2RlZmF1bHRfZGVmLCBOVUxMKTsKKyAgbWFwID0gaW5p dF92YXJfbWFwIChudW1fc3NhX25hbWVzKTsKKyAgY29hbGVzY2Vfc3NhX25h bWUgKG1hcCk7CiAKICAgLyogUmV0dXJuIHRvIHZpZXdpbmcgdGhlIHZhcmlh YmxlIGxpc3QgYXMganVzdCBhbGwgcmVmZXJlbmNlIHZhcmlhYmxlcyBhZnRl cgogICAgICBjb2FsZXNjaW5nIGhhcyBiZWVuIHBlcmZvcm1lZC4gICovCmRp ZmYgLS1naXQgYS9nY2MvdHJlZS1zc2EtY29hbGVzY2UuYyBiL2djYy90cmVl LXNzYS1jb2FsZXNjZS5jCmluZGV4IDVjYzBhY2EuLmQwNzczZmQgMTAwNjQ0 Ci0tLSBhL2djYy90cmVlLXNzYS1jb2FsZXNjZS5jCisrKyBiL2djYy90cmVl LXNzYS1jb2FsZXNjZS5jCkBAIC04NzksNyArODc5LDcgQEAgYnVpbGRfc3Nh X2NvbmZsaWN0X2dyYXBoICh0cmVlX2xpdmVfaW5mb19wIGxpdmVpbmZvKQog CiAgIGxpdmUgPSBuZXdfbGl2ZV90cmFjayAobWFwKTsKIAotICBGT1JfRUFD SF9CQl9GTiAoYmIsIGNmdW4pCisgIGZvciAodW5zaWduZWQgaSA9IDA7IGxp dmVpbmZvLT5tYXAtPnZlY19iYnMtPml0ZXJhdGUgKGksICZiYik7ICsraSkK ICAgICB7CiAgICAgICAvKiBTdGFydCB3aXRoIGxpdmUgb24gZXhpdCB0ZW1w b3Jhcmllcy4gICovCiAgICAgICBsaXZlX3RyYWNrX2luaXQgKGxpdmUsIGxp dmVfb25fZXhpdCAobGl2ZWluZm8sIGJiKSk7CkBAIC05NDQsNiArOTQ0LDgg QEAgYnVpbGRfc3NhX2NvbmZsaWN0X2dyYXBoICh0cmVlX2xpdmVfaW5mb19w IGxpdmVpbmZvKQogCXsKIAkgIGdwaGkgKnBoaSA9IGdzaS5waGkgKCk7CiAJ ICB0cmVlIHJlc3VsdCA9IFBISV9SRVNVTFQgKHBoaSk7CisJICBpZiAodmly dHVhbF9vcGVyYW5kX3AgKHJlc3VsdCkpCisJICAgIGNvbnRpbnVlOwogCSAg aWYgKGxpdmVfdHJhY2tfbGl2ZV9wIChsaXZlLCByZXN1bHQpKQogCSAgICBs aXZlX3RyYWNrX3Byb2Nlc3NfZGVmIChsaXZlLCByZXN1bHQsIGdyYXBoKTsK IAl9CkBAIC0xMDEyLDQ4ICsxMDE0LDkgQEAgZmFpbF9hYm5vcm1hbF9lZGdl X2NvYWxlc2NlIChpbnQgeCwgaW50IHkpCiAgIGludGVybmFsX2Vycm9yICgi U1NBIGNvcnJ1cHRpb24iKTsKIH0KIAotLyogQ2FsbCBDQUxMQkFDSyBmb3Ig YWxsIFBBUk1fREVDTHMgYW5kIFJFU1VMVF9ERUNMcyBmb3Igd2hpY2gKLSAg IGFzc2lnbl9wYXJtcyBtYXkgYXNrIGZvciBhIGRlZmF1bHQgcGFydGl0aW9u LiAgKi8KLQotc3RhdGljIHZvaWQKLWZvcl9hbGxfcGFybXMgKHZvaWQgKCpj YWxsYmFjaykodHJlZSB2YXIsIHZvaWQgKmFyZyksIHZvaWQgKmFyZykKLXsK LSAgZm9yICh0cmVlIHZhciA9IERFQ0xfQVJHVU1FTlRTIChjdXJyZW50X2Z1 bmN0aW9uX2RlY2wpOyB2YXI7Ci0gICAgICAgdmFyID0gREVDTF9DSEFJTiAo dmFyKSkKLSAgICBjYWxsYmFjayAodmFyLCBhcmcpOwotICBpZiAoIVZPSURf VFlQRV9QIChUUkVFX1RZUEUgKERFQ0xfUkVTVUxUIChjdXJyZW50X2Z1bmN0 aW9uX2RlY2wpKSkpCi0gICAgY2FsbGJhY2sgKERFQ0xfUkVTVUxUIChjdXJy ZW50X2Z1bmN0aW9uX2RlY2wpLCBhcmcpOwotICBpZiAoY2Z1bi0+c3RhdGlj X2NoYWluX2RlY2wpCi0gICAgY2FsbGJhY2sgKGNmdW4tPnN0YXRpY19jaGFp bl9kZWNsLCBhcmcpOwotfQotCi0vKiBDcmVhdGUgYSBkZWZhdWx0IGRlZiBm b3IgVkFSLiAgKi8KLQotc3RhdGljIHZvaWQKLWNyZWF0ZV9kZWZhdWx0X2Rl ZiAodHJlZSB2YXIsIHZvaWQgKmFyZyBBVFRSSUJVVEVfVU5VU0VEKQotewot ICBpZiAoIWlzX2dpbXBsZV9yZWcgKHZhcikpCi0gICAgcmV0dXJuOwotCi0g IHRyZWUgc3NhID0gZ2V0X29yX2NyZWF0ZV9zc2FfZGVmYXVsdF9kZWYgKGNm dW4sIHZhcik7Ci0gIGdjY19hc3NlcnQgKHNzYSk7Ci19Ci0KLS8qIFJlZ2lz dGVyIFZBUidzIGRlZmF1bHQgZGVmIGluIE1BUC4gICovCi0KLXN0YXRpYyB2 b2lkCi1yZWdpc3Rlcl9kZWZhdWx0X2RlZiAodHJlZSB2YXIsIHZvaWQgKmFy ZyBBVFRSSUJVVEVfVU5VU0VEKQotewotICBpZiAoIWlzX2dpbXBsZV9yZWcg KHZhcikpCi0gICAgcmV0dXJuOwotCi0gIHRyZWUgc3NhID0gc3NhX2RlZmF1 bHRfZGVmIChjZnVuLCB2YXIpOwotICBnY2NfYXNzZXJ0IChzc2EpOwotfQot CiAvKiBJZiBWQVIgaXMgYW4gU1NBX05BTUUgYXNzb2NpYXRlZCB3aXRoIGEg UEFSTV9ERUNMIG9yIGEgUkVTVUxUX0RFQ0wsCiAgICBhbmQgdGhlIERFQ0wn cyBkZWZhdWx0IGRlZiBpcyB1bnVzZWQgKGkuZS4sIGl0IHdhcyBpbnRyb2R1 Y2VkIGJ5Ci0gICBjcmVhdGVfZGVmYXVsdF9kZWYpLCBtYXJrIFZBUiBhbmQg dGhlIGRlZmF1bHQgZGVmIGZvcgorICAgY3JlYXRlX2RlZmF1bHRfZGVmIGZv ciBvdXQtb2Ytc3NhKSwgbWFyayBWQVIgYW5kIHRoZSBkZWZhdWx0IGRlZiBm b3IKICAgIGNvYWxlc2NpbmcuICAqLwogCiBzdGF0aWMgdm9pZApAQCAtMTA3 MCwzMiArMTAzMywyNSBAQCBjb2FsZXNjZV93aXRoX2RlZmF1bHQgKHRyZWUg dmFyLCBjb2FsZXNjZV9saXN0ICpjbCwgYml0bWFwIHVzZWRfaW5fY29weSkK IAogICBhZGRfY29zdF9vbmVfY29hbGVzY2UgKGNsLCBTU0FfTkFNRV9WRVJT SU9OIChzc2EpLCBTU0FfTkFNRV9WRVJTSU9OICh2YXIpKTsKICAgYml0bWFw X3NldF9iaXQgKHVzZWRfaW5fY29weSwgU1NBX05BTUVfVkVSU0lPTiAodmFy KSk7Ci0gIC8qIERlZmF1bHQgZGVmcyB3aWxsIGhhdmUgdGhlaXIgdXNlZF9p bl9jb3B5IGJpdHMgc2V0IGF0IHRoZSBlbmQgb2YKLSAgICAgY3JlYXRlX291 dG9mc3NhX3Zhcl9tYXAuICAqLworICAvKiBEZWZhdWx0IGRlZnMgd2lsbCBo YXZlIHRoZWlyIHVzZWRfaW5fY29weSBiaXRzIHNldCBhdCB0aGUgYmVnaW5u aW5nIG9mCisgICAgIHBvcHVsYXRlX2NvYWxlc2NlX2xpc3RfZm9yX291dG9m c3NhLiAgKi8KIH0KIAotLyogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgdmFy X21hcCBmb3IgdGhlIGN1cnJlbnQgZnVuY3Rpb24gYXMgd2VsbCBhcyBjcmVh dGluZwotICAgYSBjb2FsZXNjZSBsaXN0IGZvciB1c2UgbGF0ZXIgaW4gdGhl IG91dCBvZiBzc2EgcHJvY2Vzcy4gICovCiAKLXN0YXRpYyB2YXJfbWFwCi1j cmVhdGVfb3V0b2Zzc2FfdmFyX21hcCAoY29hbGVzY2VfbGlzdCAqY2wsIGJp dG1hcCB1c2VkX2luX2NvcHkpCisvKiBHaXZlbiB2YXJfbWFwIE1BUCBmb3Ig YSByZWdpb24sIHRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbmQgcmV0dXJucyBh IGNvYWxlc2NlCisgICBsaXN0IGFzIHdlbGwgYXMgcmVjb3JkaW5nIHJlbGF0 ZWQgc3NhIG5hbWVzIGluIFVTRURfSU5fQ09QSUVTIGZvciB1c2UgbGF0ZXIK KyAgIGluIHRoZSBvdXQtb2Ytc3NhIG9yIGxpdmUgcmFuZ2UgY29tcHV0YXRp b24gcHJvY2Vzcy4gICovCisKK3N0YXRpYyBjb2FsZXNjZV9saXN0ICoKK2Ny ZWF0ZV9jb2FsZXNjZV9saXN0X2Zvcl9yZWdpb24gKHZhcl9tYXAgbWFwLCBi aXRtYXAgdXNlZF9pbl9jb3B5KQogewogICBnaW1wbGVfc3RtdF9pdGVyYXRv ciBnc2k7CiAgIGJhc2ljX2Jsb2NrIGJiOwotICB0cmVlIHZhcjsKKyAgY29h bGVzY2VfbGlzdCAqY2wgPSBjcmVhdGVfY29hbGVzY2VfbGlzdCAoKTsKICAg Z2ltcGxlICpzdG10OwotICB0cmVlIGZpcnN0OwotICB2YXJfbWFwIG1hcDsK ICAgaW50IHYxLCB2MiwgY29zdDsKLSAgdW5zaWduZWQgaTsKLQotICBmb3Jf YWxsX3Bhcm1zIChjcmVhdGVfZGVmYXVsdF9kZWYsIE5VTEwpOwotCi0gIG1h cCA9IGluaXRfdmFyX21hcCAobnVtX3NzYV9uYW1lcyk7Ci0KLSAgZm9yX2Fs bF9wYXJtcyAocmVnaXN0ZXJfZGVmYXVsdF9kZWYsIE5VTEwpOwogCi0gIEZP Ul9FQUNIX0JCX0ZOIChiYiwgY2Z1bikKKyAgZm9yICh1bnNpZ25lZCBqID0g MDsgbWFwLT52ZWNfYmJzLT5pdGVyYXRlIChqLCAmYmIpOyArK2opCiAgICAg ewogICAgICAgdHJlZSBhcmc7CiAKQEAgLTExMTAsNiArMTA2Niw4IEBAIGNy ZWF0ZV9vdXRvZnNzYV92YXJfbWFwIChjb2FsZXNjZV9saXN0ICpjbCwgYml0 bWFwIHVzZWRfaW5fY29weSkKIAkgIGJvb2wgc2F3X2NvcHkgPSBmYWxzZTsK IAogCSAgcmVzID0gZ2ltcGxlX3BoaV9yZXN1bHQgKHBoaSk7CisJICBpZiAo dmlydHVhbF9vcGVyYW5kX3AgKHJlcykpCisJICAgIGNvbnRpbnVlOwogCSAg dmVyID0gU1NBX05BTUVfVkVSU0lPTiAocmVzKTsKIAogCSAgLyogUmVnaXN0 ZXIgc3NhX25hbWVzIGFuZCBjb2FsZXNjZXMgYmV0d2VlbiB0aGUgYXJncyBh bmQgdGhlIHJlc3VsdApAQCAtMTI0OSw4ICsxMjA3LDQ0IEBAIGNyZWF0ZV9v dXRvZnNzYV92YXJfbWFwIChjb2FsZXNjZV9saXN0ICpjbCwgYml0bWFwIHVz ZWRfaW5fY29weSkKIAl9CiAgICAgfQogCi0gIC8qIE5vdyBwcm9jZXNzIHJl c3VsdCBkZWNscyBhbmQgbGl2ZSBvbiBlbnRyeSB2YXJpYWJsZXMgZm9yIGVu dHJ5IGludG8KLSAgICAgdGhlIGNvYWxlc2NlIGxpc3QuICAqLworICByZXR1 cm4gY2w7Cit9CisKKworLyogSGFzaHRhYmxlIHN1cHBvcnQgZm9yIHN0b3Jp bmcgU1NBIG5hbWVzIGhhc2hlZCBieSB0aGVpciBTU0FfTkFNRV9WQVIuICAq LworCitzdHJ1Y3Qgc3NhX25hbWVfdmFyX2hhc2ggOiBub2ZyZWVfcHRyX2hh c2ggPHRyZWVfbm9kZT4KK3sKKyAgc3RhdGljIGlubGluZSBoYXNodmFsX3Qg aGFzaCAoY29uc3QgdHJlZV9ub2RlICopOworICBzdGF0aWMgaW5saW5lIGlu dCBlcXVhbCAoY29uc3QgdHJlZV9ub2RlICosIGNvbnN0IHRyZWVfbm9kZSAq KTsKK307CisKK2lubGluZSBoYXNodmFsX3QKK3NzYV9uYW1lX3Zhcl9oYXNo OjpoYXNoIChjb25zdF90cmVlIG4pCit7CisgIHJldHVybiBERUNMX1VJRCAo U1NBX05BTUVfVkFSIChuKSk7Cit9CisKK2lubGluZSBpbnQKK3NzYV9uYW1l X3Zhcl9oYXNoOjplcXVhbCAoY29uc3QgdHJlZV9ub2RlICpuMSwgY29uc3Qg dHJlZV9ub2RlICpuMikKK3sKKyAgcmV0dXJuIFNTQV9OQU1FX1ZBUiAobjEp ID09IFNTQV9OQU1FX1ZBUiAobjIpOworfQorCisKKy8qIFRoaXMgZnVuY3Rp b24gcG9wdWxhdGVzIGNvYWxlc2NlIGxpc3QgQ0wgYXMgd2VsbCBhcyByZWNv cmRpbmcgcmVsYXRlZCBzc2EKKyAgIG5hbWVzIGluIFVTRURfSU5fQ09QSUVT IGZvciB1c2UgbGF0ZXIgaW4gdGhlIG91dC1vZi1zc2EgcHJvY2Vzcy4gICov CisKK3N0YXRpYyB2b2lkCitwb3B1bGF0ZV9jb2FsZXNjZV9saXN0X2Zvcl9v dXRvZnNzYSAoY29hbGVzY2VfbGlzdCAqY2wsIGJpdG1hcCB1c2VkX2luX2Nv cHkpCit7CisgIHRyZWUgdmFyOworICB0cmVlIGZpcnN0OworICBpbnQgdjEs IHYyLCBjb3N0OworICB1bnNpZ25lZCBpOworCisgIC8qIFByb2Nlc3MgcmVz dWx0IGRlY2xzIGFuZCBsaXZlIG9uIGVudHJ5IHZhcmlhYmxlcyBmb3IgZW50 cnkgaW50byB0aGUKKyAgICAgY29hbGVzY2UgbGlzdC4gICovCiAgIGZpcnN0 ID0gTlVMTF9UUkVFOwogICBGT1JfRUFDSF9TU0FfTkFNRSAoaSwgdmFyLCBj ZnVuKQogICAgIHsKQEAgLTEyODUsNyArMTI3OSw0NiBAQCBjcmVhdGVfb3V0 b2Zzc2FfdmFyX21hcCAoY29hbGVzY2VfbGlzdCAqY2wsIGJpdG1hcCB1c2Vk X2luX2NvcHkpCiAJfQogICAgIH0KIAotICByZXR1cm4gbWFwOworICAvKiBJ ZiB0aGlzIG9wdGltaXphdGlvbiBpcyBkaXNhYmxlZCwgd2UgbmVlZCB0byBj b2FsZXNjZSBhbGwgdGhlCisgICAgIG5hbWVzIG9yaWdpbmF0aW5nIGZyb20g dGhlIHNhbWUgU1NBX05BTUVfVkFSIHNvIGRlYnVnIGluZm8KKyAgICAgcmVt YWlucyB1bmRpc3R1cmJlZC4gICovCisgIGlmICghZmxhZ190cmVlX2NvYWxl c2NlX3ZhcnMpCisgICAgeworICAgICAgdHJlZSBhOworICAgICAgaGFzaF90 YWJsZTxzc2FfbmFtZV92YXJfaGFzaD4gc3NhX25hbWVfaGFzaCAoMTApOwor CisgICAgICBGT1JfRUFDSF9TU0FfTkFNRSAoaSwgYSwgY2Z1bikKKwl7CisJ ICBpZiAoU1NBX05BTUVfVkFSIChhKQorCSAgICAgICYmICFERUNMX0lHTk9S RURfUCAoU1NBX05BTUVfVkFSIChhKSkKKwkgICAgICAmJiAoIWhhc196ZXJv X3VzZXMgKGEpIHx8ICFTU0FfTkFNRV9JU19ERUZBVUxUX0RFRiAoYSkKKwkJ ICB8fCAhVkFSX1AgKFNTQV9OQU1FX1ZBUiAoYSkpKSkKKwkgICAgeworCSAg ICAgIHRyZWUgKnNsb3QgPSBzc2FfbmFtZV9oYXNoLmZpbmRfc2xvdCAoYSwg SU5TRVJUKTsKKworCSAgICAgIGlmICghKnNsb3QpCisJCSpzbG90ID0gYTsK KwkgICAgICBlbHNlCisJCXsKKwkJICAvKiBJZiB0aGUgdmFyaWFibGUgaXMg YSBQQVJNX0RFQ0wgb3IgYSBSRVNVTFRfREVDTCwgd2UKKwkJICAgICBfcmVx dWlyZV8gdGhhdCBhbGwgdGhlIG5hbWVzIG9yaWdpbmF0aW5nIGZyb20gaXQg YmUKKwkJICAgICBjb2FsZXNjZWQsIGJlY2F1c2UgdGhlcmUgbXVzdCBiZSBh IHNpbmdsZSBwYXJ0aXRpb24KKwkJICAgICBjb250YWluaW5nIGFsbCB0aGUg bmFtZXMgc28gdGhhdCBpdCBjYW4gYmUgYXNzaWduZWQKKwkJICAgICB0aGUg Y2Fub25pY2FsIFJUTCBsb2NhdGlvbiBvZiB0aGUgREVDTCBzYWZlbHkuCisJ CSAgICAgSWYgaW5fbHRvX3AsIGEgZnVuY3Rpb24gY291bGQgaGF2ZSBiZWVu IGNvbXBpbGVkCisJCSAgICAgb3JpZ2luYWxseSB3aXRoIG9wdGltaXphdGlv bnMgYW5kIG9ubHkgdGhlIGxpbmsKKwkJICAgICBwZXJmb3JtZWQgYXQgLU8w LCBzbyB3ZSBjYW4ndCBhY3R1YWxseSByZXF1aXJlIGl0LiAgKi8KKwkJICBj b25zdCBpbnQgY29zdAorCQkgICAgPSAoVFJFRV9DT0RFIChTU0FfTkFNRV9W QVIgKGEpKSA9PSBWQVJfREVDTCB8fCBpbl9sdG9fcCkKKwkJICAgICAgPyBN VVNUX0NPQUxFU0NFX0NPU1QgLSAxIDogTVVTVF9DT0FMRVNDRV9DT1NUOwor CQkgIGFkZF9jb2FsZXNjZSAoY2wsIFNTQV9OQU1FX1ZFUlNJT04gKGEpLAor CQkJCVNTQV9OQU1FX1ZFUlNJT04gKCpzbG90KSwgY29zdCk7CisJCSAgYml0 bWFwX3NldF9iaXQgKHVzZWRfaW5fY29weSwgU1NBX05BTUVfVkVSU0lPTiAo YSkpOworCQkgIGJpdG1hcF9zZXRfYml0ICh1c2VkX2luX2NvcHksIFNTQV9O QU1FX1ZFUlNJT04gKCpzbG90KSk7CisJCX0KKwkgICAgfQorCX0KKyAgICB9 CiB9CiAKIApAQCAtMTM4NCwxMyArMTQxNywxNSBAQCBjb2FsZXNjZV9wYXJ0 aXRpb25zICh2YXJfbWFwIG1hcCwgc3NhX2NvbmZsaWN0cyAqZ3JhcGgsIGNv YWxlc2NlX2xpc3QgKmNsLAogCQkgZ3NpX25leHQgKCZnc2kpKQogCSAgICAg IHsKIAkJZ3BoaSAqcGhpID0gZ3NpLnBoaSAoKTsKKwkJdHJlZSByZXMgPSBQ SElfUkVTVUxUIChwaGkpOworCQlpZiAodmlydHVhbF9vcGVyYW5kX3AgKHJl cykpCisJCSAgY29udGludWU7CiAJCXRyZWUgYXJnID0gUEhJX0FSR19ERUYg KHBoaSwgZS0+ZGVzdF9pZHgpOwogCQlpZiAoU1NBX05BTUVfSVNfREVGQVVM VF9ERUYgKGFyZykKIAkJICAgICYmICghU1NBX05BTUVfVkFSIChhcmcpCiAJ CQl8fCBUUkVFX0NPREUgKFNTQV9OQU1FX1ZBUiAoYXJnKSkgIT0gUEFSTV9E RUNMKSkKIAkJICBjb250aW51ZTsKIAotCQl0cmVlIHJlcyA9IFBISV9SRVNV TFQgKHBoaSk7CiAJCWludCB2MSA9IFNTQV9OQU1FX1ZFUlNJT04gKHJlcyk7 CiAJCWludCB2MiA9IFNTQV9OQU1FX1ZFUlNJT04gKGFyZyk7CiAKQEAgLTE0 MjAsMjcgKzE0NTUsNiBAQCBjb2FsZXNjZV9wYXJ0aXRpb25zICh2YXJfbWFw IG1hcCwgc3NhX2NvbmZsaWN0cyAqZ3JhcGgsIGNvYWxlc2NlX2xpc3QgKmNs LAogfQogCiAKLS8qIEhhc2h0YWJsZSBzdXBwb3J0IGZvciBzdG9yaW5nIFNT QSBuYW1lcyBoYXNoZWQgYnkgdGhlaXIgU1NBX05BTUVfVkFSLiAgKi8KLQot c3RydWN0IHNzYV9uYW1lX3Zhcl9oYXNoIDogbm9mcmVlX3B0cl9oYXNoIDx0 cmVlX25vZGU+Ci17Ci0gIHN0YXRpYyBpbmxpbmUgaGFzaHZhbF90IGhhc2gg KGNvbnN0IHRyZWVfbm9kZSAqKTsKLSAgc3RhdGljIGlubGluZSBpbnQgZXF1 YWwgKGNvbnN0IHRyZWVfbm9kZSAqLCBjb25zdCB0cmVlX25vZGUgKik7Ci19 OwotCi1pbmxpbmUgaGFzaHZhbF90Ci1zc2FfbmFtZV92YXJfaGFzaDo6aGFz aCAoY29uc3RfdHJlZSBuKQotewotICByZXR1cm4gREVDTF9VSUQgKFNTQV9O QU1FX1ZBUiAobikpOwotfQotCi1pbmxpbmUgaW50Ci1zc2FfbmFtZV92YXJf aGFzaDo6ZXF1YWwgKGNvbnN0IHRyZWVfbm9kZSAqbjEsIGNvbnN0IHRyZWVf bm9kZSAqbjIpCi17Ci0gIHJldHVybiBTU0FfTkFNRV9WQVIgKG4xKSA9PSBT U0FfTkFNRV9WQVIgKG4yKTsKLX0KLQotCiAvKiBPdXRwdXQgcGFydGl0aW9u IG1hcCBNQVAgd2l0aCBjb2FsZXNjaW5nIHBsYW4gUEFSVCB0byBmaWxlIEYu ICAqLwogCiB2b2lkCkBAIC0xNjI5LDggKzE2NDMsOSBAQCBjb21wdXRlX29w dGltaXplZF9wYXJ0aXRpb25fYmFzZXMgKHZhcl9tYXAgbWFwLCBiaXRtYXAg dXNlZF9pbl9jb3BpZXMsCiAgIC8qIEFuZCBhbHNvIHdpdGggYWJub3JtYWwg ZWRnZXMuICAqLwogICBiYXNpY19ibG9jayBiYjsKICAgZWRnZSBlOworICB1 bnNpZ25lZCBpOwogICBlZGdlX2l0ZXJhdG9yIGVpOwotICBGT1JfRUFDSF9C Ql9GTiAoYmIsIGNmdW4pCisgIGZvciAoaSA9IDA7IG1hcC0+dmVjX2Jicy0+ aXRlcmF0ZSAoaSwgJmJiKTsgKytpKQogICAgIHsKICAgICAgIEZPUl9FQUNI X0VER0UgKGUsIGVpLCBiYi0+cHJlZHMpCiAJaWYgKGUtPmZsYWdzICYgRURH RV9BQk5PUk1BTCkKQEAgLTE2NDAsMTQgKzE2NTUsMTUgQEAgY29tcHV0ZV9v cHRpbWl6ZWRfcGFydGl0aW9uX2Jhc2VzICh2YXJfbWFwIG1hcCwgYml0bWFw IHVzZWRfaW5fY29waWVzLAogCQkgZ3NpX25leHQgKCZnc2kpKQogCSAgICAg IHsKIAkJZ3BoaSAqcGhpID0gZ3NpLnBoaSAoKTsKKwkJdHJlZSByZXMgPSBQ SElfUkVTVUxUIChwaGkpOworCQlpZiAodmlydHVhbF9vcGVyYW5kX3AgKHJl cykpCisJCSAgY29udGludWU7CiAJCXRyZWUgYXJnID0gUEhJX0FSR19ERUYg KHBoaSwgZS0+ZGVzdF9pZHgpOwogCQlpZiAoU1NBX05BTUVfSVNfREVGQVVM VF9ERUYgKGFyZykKIAkJICAgICYmICghU1NBX05BTUVfVkFSIChhcmcpCiAJ CQl8fCBUUkVFX0NPREUgKFNTQV9OQU1FX1ZBUiAoYXJnKSkgIT0gUEFSTV9E RUNMKSkKIAkJICBjb250aW51ZTsKIAotCQl0cmVlIHJlcyA9IFBISV9SRVNV TFQgKHBoaSk7Ci0KIAkJaW50IHAxID0gcGFydGl0aW9uX2ZpbmQgKHRlbnRh dGl2ZSwgdmFyX3RvX3BhcnRpdGlvbiAobWFwLCByZXMpKTsKIAkJaW50IHAy ID0gcGFydGl0aW9uX2ZpbmQgKHRlbnRhdGl2ZSwgdmFyX3RvX3BhcnRpdGlv biAobWFwLCBhcmcpKTsKIApAQCAtMTY3NSw3ICsxNjkxLDYgQEAgY29tcHV0 ZV9vcHRpbWl6ZWRfcGFydGl0aW9uX2Jhc2VzICh2YXJfbWFwIG1hcCwgYml0 bWFwIHVzZWRfaW5fY29waWVzLAogICAgICBiZXR3ZWVuIGFsbCBTU0EgdmVy c2lvbnMgdGhhdCBlbmRlZCB1cCBpbiB0aGUgc2FtZSBwb3RlbnRpYWwKICAg ICAgY29hbGVzY2UgcGFydGl0aW9uLiAgKi8KICAgYml0bWFwX2l0ZXJhdG9y IGJpOwotICB1bnNpZ25lZCBpOwogICBFWEVDVVRFX0lGX1NFVF9JTl9CSVRN QVAgKHVzZWRfaW5fY29waWVzLCAwLCBpLCBiaSkKICAgICB7CiAgICAgICBp bnQgcGlkeCA9IHZhcl90b19wYXJ0aXRpb24gKG1hcCwgc3NhX25hbWUgKGkp KTsKQEAgLTE3ODQsNjIgKzE3OTksMjIgQEAgY29tcHV0ZV9zYW1lYmFzZV9w YXJ0aXRpb25fYmFzZXMgKHZhcl9tYXAgbWFwKQogICBmcmVlIChtYXBzdG9y YWdlKTsKIH0KIAotLyogUmVkdWNlIHRoZSBudW1iZXIgb2YgY29waWVzIGJ5 IGNvYWxlc2NpbmcgdmFyaWFibGVzIGluIHRoZSBmdW5jdGlvbi4gIFJldHVy bgotICAgYSBwYXJ0aXRpb24gbWFwIHdpdGggdGhlIHJlc3VsdGluZyBjb2Fs ZXNjZXMuICAqLworLyogR2l2ZW4gYW4gaW5pdGlhbCB2YXJfbWFwIE1BUCwg Y29hbGVzY2UgdmFyaWFibGVzIGFuZCByZXR1cm4gYSBwYXJ0aXRpb24gbWFw CisgICB3aXRoIHRoZSByZXN1bHRpbmcgY29hbGVzY2UuICBOb3RlIHRoYXQg dGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gZWl0aGVyCisgICBsaXZlIHJh bmdlIGNvbXB1dGF0aW9uIGNvbnRleHQgb3Igb3V0LW9mLXNzYSBjb250ZXh0 LCBpbmRpY2F0ZWQgYnkgTUFQLiAgKi8KIAotZXh0ZXJuIHZhcl9tYXAKLWNv YWxlc2NlX3NzYV9uYW1lICh2b2lkKQorZXh0ZXJuIHZvaWQKK2NvYWxlc2Nl X3NzYV9uYW1lICh2YXJfbWFwIG1hcCkKIHsKICAgdHJlZV9saXZlX2luZm9f cCBsaXZlaW5mbzsKICAgc3NhX2NvbmZsaWN0cyAqZ3JhcGg7CiAgIGNvYWxl c2NlX2xpc3QgKmNsOwogICBhdXRvX2JpdG1hcCB1c2VkX2luX2NvcGllczsK LSAgdmFyX21hcCBtYXA7Ci0gIHVuc2lnbmVkIGludCBpOwotICB0cmVlIGE7 CiAKLSAgY2wgPSBjcmVhdGVfY29hbGVzY2VfbGlzdCAoKTsKLSAgbWFwID0g Y3JlYXRlX291dG9mc3NhX3Zhcl9tYXAgKGNsLCB1c2VkX2luX2NvcGllcyk7 CisgIGNsID0gY3JlYXRlX2NvYWxlc2NlX2xpc3RfZm9yX3JlZ2lvbiAobWFw LCB1c2VkX2luX2NvcGllcyk7CisgIGlmIChtYXAtPm91dG9mc3NhX3ApCisg ICAgcG9wdWxhdGVfY29hbGVzY2VfbGlzdF9mb3Jfb3V0b2Zzc2EgKGNsLCB1 c2VkX2luX2NvcGllcyk7CiAKLSAgLyogSWYgdGhpcyBvcHRpbWl6YXRpb24g aXMgZGlzYWJsZWQsIHdlIG5lZWQgdG8gY29hbGVzY2UgYWxsIHRoZQotICAg ICBuYW1lcyBvcmlnaW5hdGluZyBmcm9tIHRoZSBzYW1lIFNTQV9OQU1FX1ZB UiBzbyBkZWJ1ZyBpbmZvCi0gICAgIHJlbWFpbnMgdW5kaXN0dXJiZWQuICAq LwotICBpZiAoIWZsYWdfdHJlZV9jb2FsZXNjZV92YXJzKQotICAgIHsKLSAg ICAgIGhhc2hfdGFibGU8c3NhX25hbWVfdmFyX2hhc2g+IHNzYV9uYW1lX2hh c2ggKDEwKTsKLQotICAgICAgRk9SX0VBQ0hfU1NBX05BTUUgKGksIGEsIGNm dW4pCi0JewotCSAgaWYgKFNTQV9OQU1FX1ZBUiAoYSkKLQkgICAgICAmJiAh REVDTF9JR05PUkVEX1AgKFNTQV9OQU1FX1ZBUiAoYSkpCi0JICAgICAgJiYg KCFoYXNfemVyb191c2VzIChhKSB8fCAhU1NBX05BTUVfSVNfREVGQVVMVF9E RUYgKGEpCi0JCSAgfHwgIVZBUl9QIChTU0FfTkFNRV9WQVIgKGEpKSkpCi0J ICAgIHsKLQkgICAgICB0cmVlICpzbG90ID0gc3NhX25hbWVfaGFzaC5maW5k X3Nsb3QgKGEsIElOU0VSVCk7Ci0KLQkgICAgICBpZiAoISpzbG90KQotCQkq c2xvdCA9IGE7Ci0JICAgICAgZWxzZQotCQl7Ci0JCSAgLyogSWYgdGhlIHZh cmlhYmxlIGlzIGEgUEFSTV9ERUNMIG9yIGEgUkVTVUxUX0RFQ0wsIHdlCi0J CSAgICAgX3JlcXVpcmVfIHRoYXQgYWxsIHRoZSBuYW1lcyBvcmlnaW5hdGlu ZyBmcm9tIGl0IGJlCi0JCSAgICAgY29hbGVzY2VkLCBiZWNhdXNlIHRoZXJl IG11c3QgYmUgYSBzaW5nbGUgcGFydGl0aW9uCi0JCSAgICAgY29udGFpbmlu ZyBhbGwgdGhlIG5hbWVzIHNvIHRoYXQgaXQgY2FuIGJlIGFzc2lnbmVkCi0J CSAgICAgdGhlIGNhbm9uaWNhbCBSVEwgbG9jYXRpb24gb2YgdGhlIERFQ0wg c2FmZWx5LgotCQkgICAgIElmIGluX2x0b19wLCBhIGZ1bmN0aW9uIGNvdWxk IGhhdmUgYmVlbiBjb21waWxlZAotCQkgICAgIG9yaWdpbmFsbHkgd2l0aCBv cHRpbWl6YXRpb25zIGFuZCBvbmx5IHRoZSBsaW5rCi0JCSAgICAgcGVyZm9y bWVkIGF0IC1PMCwgc28gd2UgY2FuJ3QgYWN0dWFsbHkgcmVxdWlyZSBpdC4g ICovCi0JCSAgY29uc3QgaW50IGNvc3QKLQkJICAgID0gKFRSRUVfQ09ERSAo U1NBX05BTUVfVkFSIChhKSkgPT0gVkFSX0RFQ0wgfHwgaW5fbHRvX3ApCi0J CSAgICAgID8gTVVTVF9DT0FMRVNDRV9DT1NUIC0gMSA6IE1VU1RfQ09BTEVT Q0VfQ09TVDsKLQkJICBhZGRfY29hbGVzY2UgKGNsLCBTU0FfTkFNRV9WRVJT SU9OIChhKSwKLQkJCQlTU0FfTkFNRV9WRVJTSU9OICgqc2xvdCksIGNvc3Qp OwotCQkgIGJpdG1hcF9zZXRfYml0ICh1c2VkX2luX2NvcGllcywgU1NBX05B TUVfVkVSU0lPTiAoYSkpOwotCQkgIGJpdG1hcF9zZXRfYml0ICh1c2VkX2lu X2NvcGllcywgU1NBX05BTUVfVkVSU0lPTiAoKnNsb3QpKTsKLQkJfQotCSAg ICB9Ci0JfQotICAgIH0KICAgaWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFn cyAmIFRERl9ERVRBSUxTKSkKICAgICBkdW1wX3Zhcl9tYXAgKGR1bXBfZmls ZSwgbWFwKTsKIApAQCAtMTg1Myw3ICsxODI4LDcgQEAgY29hbGVzY2Vfc3Nh X25hbWUgKHZvaWQpCiAgIGlmIChudW1fdmFyX3BhcnRpdGlvbnMgKG1hcCkg PCAxKQogICAgIHsKICAgICAgIGRlbGV0ZV9jb2FsZXNjZV9saXN0IChjbCk7 Ci0gICAgICByZXR1cm4gbWFwOworICAgICAgcmV0dXJuOwogICAgIH0KIAog ICBpZiAoZHVtcF9maWxlICYmIChkdW1wX2ZsYWdzICYgVERGX0RFVEFJTFMp KQpAQCAtMTg5MCw3NSArMTg2NSw1IEBAIGNvYWxlc2NlX3NzYV9uYW1lICh2 b2lkKQogCiAgIGRlbGV0ZV9jb2FsZXNjZV9saXN0IChjbCk7CiAgIHNzYV9j b25mbGljdHNfZGVsZXRlIChncmFwaCk7Ci0KLSAgcmV0dXJuIG1hcDsKIH0K IAotLyogV2UgbmVlZCB0byBwYXNzIHR3byBhcmd1bWVudHMgdG8gc2V0X3Bh cm1fZGVmYXVsdF9kZWZfcGFydGl0aW9uLAotICAgYnV0IGZvcl9hbGxfcGFy bXMgb25seSBzdXBwb3J0cyBvbmUuICBVc2UgYSBwYWlyLiAgKi8KLQotdHlw ZWRlZiBzdGQ6OnBhaXI8dmFyX21hcCwgYml0bWFwPiBwYXJtX2RlZmF1bHRf ZGVmX3BhcnRpdGlvbl9hcmc7Ci0KLS8qIFNldCBpbiBBUkcncyBQQVJUUyBi aXRtYXAgdGhlIGJpdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXJ0aXRpb24g aW4KLSAgIEFSRydzIE1BUCBjb250YWluaW5nIFZBUidzIGRlZmF1bHQgZGVm LiAgKi8KLQotc3RhdGljIHZvaWQKLXNldF9wYXJtX2RlZmF1bHRfZGVmX3Bh cnRpdGlvbiAodHJlZSB2YXIsIHZvaWQgKmFyZ18pCi17Ci0gIHBhcm1fZGVm YXVsdF9kZWZfcGFydGl0aW9uX2FyZyAqYXJnID0gKHBhcm1fZGVmYXVsdF9k ZWZfcGFydGl0aW9uX2FyZyAqKWFyZ187Ci0gIHZhcl9tYXAgbWFwID0gYXJn LT5maXJzdDsKLSAgYml0bWFwIHBhcnRzID0gYXJnLT5zZWNvbmQ7Ci0KLSAg aWYgKCFpc19naW1wbGVfcmVnICh2YXIpKQotICAgIHJldHVybjsKLQotICB0 cmVlIHNzYSA9IHNzYV9kZWZhdWx0X2RlZiAoY2Z1biwgdmFyKTsKLSAgZ2Nj X2Fzc2VydCAoc3NhKTsKLQotICBpbnQgdmVyc2lvbiA9IHZhcl90b19wYXJ0 aXRpb24gKG1hcCwgc3NhKTsKLSAgZ2NjX2Fzc2VydCAodmVyc2lvbiAhPSBO T19QQVJUSVRJT04pOwotCi0gIGJvb2wgY2hhbmdlZCA9IGJpdG1hcF9zZXRf Yml0IChwYXJ0cywgdmVyc2lvbik7Ci0gIGdjY19hc3NlcnQgKGNoYW5nZWQp OwotfQotCi0vKiBBbGxvY2F0ZSBhbmQgcmV0dXJuIGEgYml0bWFwIHRoYXQg aGFzIGEgYml0IHNldCBmb3IgZWFjaCBwYXJ0aXRpb24KLSAgIHRoYXQgY29u dGFpbnMgYSBkZWZhdWx0IGRlZiBmb3IgYSBwYXJhbWV0ZXIuICAqLwotCi1i aXRtYXAKLWdldF9wYXJtX2RlZmF1bHRfZGVmX3BhcnRpdGlvbnMgKHZhcl9t YXAgbWFwKQotewotICBiaXRtYXAgcGFybV9kZWZhdWx0X2RlZl9wYXJ0cyA9 IEJJVE1BUF9BTExPQyAoTlVMTCk7Ci0KLSAgcGFybV9kZWZhdWx0X2RlZl9w YXJ0aXRpb25fYXJnCi0gICAgYXJnID0gc3RkOjptYWtlX3BhaXIgKG1hcCwg cGFybV9kZWZhdWx0X2RlZl9wYXJ0cyk7Ci0KLSAgZm9yX2FsbF9wYXJtcyAo c2V0X3Bhcm1fZGVmYXVsdF9kZWZfcGFydGl0aW9uLCAmYXJnKTsKLQotICBy ZXR1cm4gcGFybV9kZWZhdWx0X2RlZl9wYXJ0czsKLX0KLQotLyogQWxsb2Nh dGUgYW5kIHJldHVybiBhIGJpdG1hcCB0aGF0IGhhcyBhIGJpdCBzZXQgZm9y IGVhY2ggcGFydGl0aW9uCi0gICB0aGF0IGNvbnRhaW5zIGFuIHVuZGVmaW5l ZCB2YWx1ZS4gICovCi0KLWJpdG1hcAotZ2V0X3VuZGVmaW5lZF92YWx1ZV9w YXJ0aXRpb25zICh2YXJfbWFwIG1hcCkKLXsKLSAgYml0bWFwIHVuZGVmaW5l ZF92YWx1ZV9wYXJ0cyA9IEJJVE1BUF9BTExPQyAoTlVMTCk7Ci0KLSAgZm9y ICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPCBudW1fc3NhX25hbWVzOyBpKysp Ci0gICAgewotICAgICAgdHJlZSB2YXIgPSBzc2FfbmFtZSAoaSk7Ci0gICAg ICBpZiAodmFyCi0JICAmJiAhdmlydHVhbF9vcGVyYW5kX3AgKHZhcikKLQkg ICYmICFoYXNfemVyb191c2VzICh2YXIpCi0JICAmJiBzc2FfdW5kZWZpbmVk X3ZhbHVlX3AgKHZhcikpCi0JewotCSAgY29uc3QgaW50IHAgPSB2YXJfdG9f cGFydGl0aW9uIChtYXAsIHZhcik7Ci0JICBpZiAocCAhPSBOT19QQVJUSVRJ T04pCi0JICAgIGJpdG1hcF9zZXRfYml0ICh1bmRlZmluZWRfdmFsdWVfcGFy dHMsIHApOwotCX0KLSAgICB9Ci0KLSAgcmV0dXJuIHVuZGVmaW5lZF92YWx1 ZV9wYXJ0czsKLX0KZGlmZiAtLWdpdCBhL2djYy90cmVlLXNzYS1jb2FsZXNj ZS5oIGIvZ2NjL3RyZWUtc3NhLWNvYWxlc2NlLmgKaW5kZXggODlkODQ3NC4u Zjc4NzYzNyAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtc3NhLWNvYWxlc2NlLmgK KysrIGIvZ2NjL3RyZWUtc3NhLWNvYWxlc2NlLmgKQEAgLTIwLDkgKzIwLDcg QEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElm IG5vdCBzZWUKICNpZm5kZWYgR0NDX1RSRUVfU1NBX0NPQUxFU0NFX0gKICNk ZWZpbmUgR0NDX1RSRUVfU1NBX0NPQUxFU0NFX0gKIAotZXh0ZXJuIHZhcl9t YXAgY29hbGVzY2Vfc3NhX25hbWUgKHZvaWQpOworZXh0ZXJuIHZvaWQgY29h bGVzY2Vfc3NhX25hbWUgKHZhcl9tYXApOwogZXh0ZXJuIGJvb2wgZ2ltcGxl X2Nhbl9jb2FsZXNjZV9wICh0cmVlLCB0cmVlKTsKLWV4dGVybiBiaXRtYXAg Z2V0X3Bhcm1fZGVmYXVsdF9kZWZfcGFydGl0aW9ucyAodmFyX21hcCk7Ci1l eHRlcm4gYml0bWFwIGdldF91bmRlZmluZWRfdmFsdWVfcGFydGl0aW9ucyAo dmFyX21hcCk7CiAKICNlbmRpZiAvKiBHQ0NfVFJFRV9TU0FfQ09BTEVTQ0Vf SCAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtc3NhLWxpdmUuYyBiL2djYy90 cmVlLXNzYS1saXZlLmMKaW5kZXggNjIzMTZiYS4uYzc5ZTYzNSAxMDA2NDQK LS0tIGEvZ2NjL3RyZWUtc3NhLWxpdmUuYworKysgYi9nY2MvdHJlZS1zc2Et bGl2ZS5jCkBAIC03MSwxMCArNzEsMTIgQEAgdmFyX21hcF9iYXNlX2Zpbmkg KHZhcl9tYXAgbWFwKQogICAgICAgbWFwLT5udW1fYmFzZXZhcnMgPSAwOwog ICAgIH0KIH0KLS8qIENyZWF0ZSBhIHZhcmlhYmxlIHBhcnRpdGlvbiBtYXAg b2YgU0laRSwgaW5pdGlhbGl6ZSBhbmQgcmV0dXJuIGl0LiAgKi8KKy8qIENy ZWF0ZSBhIHZhcmlhYmxlIHBhcnRpdGlvbiBtYXAgb2YgU0laRSBmb3IgcmVn aW9uLCBpbml0aWFsaXplIGFuZCByZXR1cm4KKyAgIGl0LiAgUmVnaW9uIGlz IGEgbG9vcCBpZiBMT09QIGlzIG5vbi1OVUxMLCBvdGhlcndpc2UgaXMgdGhl IGN1cnJlbnQKKyAgIGZ1bmN0aW9uLiAgKi8KIAogdmFyX21hcAotaW5pdF92 YXJfbWFwIChpbnQgc2l6ZSkKK2luaXRfdmFyX21hcCAoaW50IHNpemUsIHN0 cnVjdCBsb29wICpsb29wKQogewogICB2YXJfbWFwIG1hcDsKIApAQCAtODcs NiArODksMjkgQEAgaW5pdF92YXJfbWFwIChpbnQgc2l6ZSkKICAgbWFwLT5w YXJ0aXRpb25fc2l6ZSA9IHNpemU7CiAgIG1hcC0+bnVtX2Jhc2V2YXJzID0g MDsKICAgbWFwLT5wYXJ0aXRpb25fdG9fYmFzZV9pbmRleCA9IE5VTEw7Cisg IG1hcC0+Ym1wX2JicyA9IEJJVE1BUF9BTExPQyAoTlVMTCk7CisgIG1hcC0+ dmVjX2JicyA9IG5ldyB2ZWM8YmFzaWNfYmxvY2s+ICgpOworICBpZiAobG9v cCkKKyAgICB7CisgICAgICBtYXAtPm91dG9mc3NhX3AgPSBmYWxzZTsKKyAg ICAgIGJhc2ljX2Jsb2NrICpiYnMgPSBnZXRfbG9vcF9ib2R5X2luX2RvbV9v cmRlciAobG9vcCk7CisgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg bG9vcC0+bnVtX25vZGVzOyArK2kpCisJeworCSAgYml0bWFwX3NldF9iaXQg KG1hcC0+Ym1wX2JicywgYmJzW2ldLT5pbmRleCk7CisJICBtYXAtPnZlY19i YnMtPnNhZmVfcHVzaCAoYmJzW2ldKTsKKwl9CisgICAgICBmcmVlIChiYnMp OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIG1hcC0+b3V0b2Zzc2Ff cCA9IHRydWU7CisgICAgICBiYXNpY19ibG9jayBiYjsKKyAgICAgIEZPUl9F QUNIX0JCX0ZOIChiYiwgY2Z1bikKKwl7CisJICBiaXRtYXBfc2V0X2JpdCAo bWFwLT5ibXBfYmJzLCBiYi0+aW5kZXgpOworCSAgbWFwLT52ZWNfYmJzLT5z YWZlX3B1c2ggKGJiKTsKKwl9CisgICAgfQogICByZXR1cm4gbWFwOwogfQog CkBAIC0xMDAsNiArMTI1LDkgQEAgZGVsZXRlX3Zhcl9tYXAgKHZhcl9tYXAg bWFwKQogICBwYXJ0aXRpb25fZGVsZXRlIChtYXAtPnZhcl9wYXJ0aXRpb24p OwogICBmcmVlIChtYXAtPnBhcnRpdGlvbl90b192aWV3KTsKICAgZnJlZSAo bWFwLT52aWV3X3RvX3BhcnRpdGlvbik7CisgIEJJVE1BUF9GUkVFIChtYXAt PmJtcF9iYnMpOworICBtYXAtPnZlY19iYnMtPnJlbGVhc2UgKCk7CisgIGRl bGV0ZSBtYXAtPnZlY19iYnM7CiAgIGZyZWUgKG1hcCk7CiB9CiAKQEAgLTkw MSwxMyArOTI5LDE0IEBAIG5ld190cmVlX2xpdmVfaW5mbyAodmFyX21hcCBt YXApCiAKICAgYml0bWFwX29ic3RhY2tfaW5pdGlhbGl6ZSAoJmxpdmUtPmxp dmVpbl9vYnN0YWNrKTsKICAgYml0bWFwX29ic3RhY2tfaW5pdGlhbGl6ZSAo JmxpdmUtPmxpdmVvdXRfb2JzdGFjayk7Ci0gIGxpdmUtPmxpdmVpbiA9IFhO RVdWRUMgKGJpdG1hcF9oZWFkLCBsYXN0X2Jhc2ljX2Jsb2NrX2Zvcl9mbiAo Y2Z1bikpOwotICBGT1JfRUFDSF9CQl9GTiAoYmIsIGNmdW4pCi0gICAgYml0 bWFwX2luaXRpYWxpemUgKCZsaXZlLT5saXZlaW5bYmItPmluZGV4XSwgJmxp dmUtPmxpdmVpbl9vYnN0YWNrKTsKIAotICBsaXZlLT5saXZlb3V0ID0gWE5F V1ZFQyAoYml0bWFwX2hlYWQsIGxhc3RfYmFzaWNfYmxvY2tfZm9yX2ZuIChj ZnVuKSk7Ci0gIEZPUl9FQUNIX0JCX0ZOIChiYiwgY2Z1bikKLSAgICBiaXRt YXBfaW5pdGlhbGl6ZSAoJmxpdmUtPmxpdmVvdXRbYmItPmluZGV4XSwgJmxp dmUtPmxpdmVvdXRfb2JzdGFjayk7CisgIGxpdmUtPmxpdmVpbiA9IFhDTkVX VkVDIChiaXRtYXBfaGVhZCwgbGFzdF9iYXNpY19ibG9ja19mb3JfZm4gKGNm dW4pKTsKKyAgbGl2ZS0+bGl2ZW91dCA9IFhDTkVXVkVDIChiaXRtYXBfaGVh ZCwgbGFzdF9iYXNpY19ibG9ja19mb3JfZm4gKGNmdW4pKTsKKyAgZm9yICh1 bnNpZ25lZCBpID0gMDsgbWFwLT52ZWNfYmJzLT5pdGVyYXRlIChpLCAmYmIp OyArK2kpCisgICAgeworICAgICAgYml0bWFwX2luaXRpYWxpemUgKCZsaXZl LT5saXZlaW5bYmItPmluZGV4XSwgJmxpdmUtPmxpdmVpbl9vYnN0YWNrKTsK KyAgICAgIGJpdG1hcF9pbml0aWFsaXplICgmbGl2ZS0+bGl2ZW91dFtiYi0+ aW5kZXhdLCAmbGl2ZS0+bGl2ZW91dF9vYnN0YWNrKTsKKyAgICB9CiAKICAg bGl2ZS0+d29ya19zdGFjayA9IFhORVdWRUMgKGludCwgbGFzdF9iYXNpY19i bG9ja19mb3JfZm4gKGNmdW4pKTsKICAgbGl2ZS0+c3RhY2tfdG9wID0gbGl2 ZS0+d29ya19zdGFjazsKQEAgLTk2MCw3ICs5ODksNyBAQCBsb2VfdmlzaXRf YmxvY2sgKHRyZWVfbGl2ZV9pbmZvX3AgbGl2ZSwgYmFzaWNfYmxvY2sgYmIs IHNiaXRtYXAgdmlzaXRlZCkKICAgRk9SX0VBQ0hfRURHRSAoZSwgZWksIGJi LT5wcmVkcykKICAgICB7CiAgICAgICBwcmVkX2JiID0gZS0+c3JjOwotICAg ICAgaWYgKHByZWRfYmIgPT0gRU5UUllfQkxPQ0tfUFRSX0ZPUl9GTiAoY2Z1 bikpCisgICAgICBpZiAoIXJlZ2lvbl9jb250YWluc19wIChsaXZlLT5tYXAs IHByZWRfYmIpKQogCWNvbnRpbnVlOwogICAgICAgLyogVmFyaWFibGVzIGxp dmUtb24tZW50cnkgZnJvbSBCQiB0aGF0IGFyZW4ndCBkZWZpbmVkIGluIHRo ZQogCSBwcmVkZWNlc3NvciBibG9jay4gIFRoaXMgc2hvdWxkIGJlIHRoZSBs aXZlIG9uIGVudHJ5IHZhcnMgdG8gcHJlZC4KQEAgLTk5Myw5ICsxMDIyLDEw IEBAIGxpdmVfd29ya2xpc3QgKHRyZWVfbGl2ZV9pbmZvX3AgbGl2ZSkKIAog ICBiaXRtYXBfY2xlYXIgKHZpc2l0ZWQpOwogCi0gIC8qIFZpc2l0IGFsbCB0 aGUgYmxvY2tzIGluIHJldmVyc2Ugb3JkZXIgYW5kIHByb3BhZ2F0ZSBsaXZl IG9uIGVudHJ5IHZhbHVlcworICAvKiBWaXNpdCByZWdpb24ncyBibG9ja3Mg aW4gcmV2ZXJzZSBvcmRlciBhbmQgcHJvcGFnYXRlIGxpdmUgb24gZW50cnkg dmFsdWVzCiAgICAgIGludG8gdGhlIHByZWRlY2Vzc29ycyBibG9ja3MuICAq LwotICBGT1JfRUFDSF9CQl9SRVZFUlNFX0ZOIChiYiwgY2Z1bikKKyAgZm9y ICh1bnNpZ25lZCBpID0gbGl2ZS0+bWFwLT52ZWNfYmJzLT5sZW5ndGggKCkg LSAxOworICAgICAgIGxpdmUtPm1hcC0+dmVjX2Jicy0+aXRlcmF0ZSAoaSwg JmJiKTsgLS1pKQogICAgIGxvZV92aXNpdF9ibG9jayAobGl2ZSwgYmIsIHZp c2l0ZWQpOwogCiAgIC8qIFByb2Nlc3MgYW55IGJsb2NrcyB3aGljaCByZXF1 aXJlIGZ1cnRoZXIgaXRlcmF0aW9uLiAgKi8KQEAgLTEwMzAsNyArMTA2MCw3 IEBAIHNldF92YXJfbGl2ZV9vbl9lbnRyeSAodHJlZSBzc2FfbmFtZSwgdHJl ZV9saXZlX2luZm9fcCBsaXZlKQogICAgIHsKICAgICAgIGRlZl9iYiA9IGdp bXBsZV9iYiAoc3RtdCk7CiAgICAgICAvKiBNYXJrIGRlZnMgaW4gbGl2ZW91 dCBiaXRtYXAgdGVtcG9yYXJpbHkuICAqLwotICAgICAgaWYgKGRlZl9iYikK KyAgICAgIGlmIChkZWZfYmIgJiYgcmVnaW9uX2NvbnRhaW5zX3AgKGxpdmUt Pm1hcCwgZGVmX2JiKSkKIAliaXRtYXBfc2V0X2JpdCAoJmxpdmUtPmxpdmVv dXRbZGVmX2JiLT5pbmRleF0sIHApOwogICAgIH0KICAgZWxzZQpAQCAtMTA1 NCwxMSArMTA4NCw4IEBAIHNldF92YXJfbGl2ZV9vbl9lbnRyeSAodHJlZSBz c2FfbmFtZSwgdHJlZV9saXZlX2luZm9fcCBsaXZlKQogCSAgICAgZGVmaW5l ZCBpbiB0aGF0IGJsb2NrLCBvciB3aGV0aGVyIGl0cyBsaXZlIG9uIGVudHJ5 LiAgKi8KIAkgIGludCBpbmRleCA9IFBISV9BUkdfSU5ERVhfRlJPTV9VU0Ug KHVzZSk7CiAJICBlZGdlIGUgPSBnaW1wbGVfcGhpX2FyZ19lZGdlIChhc19h IDxncGhpICo+ICh1c2Vfc3RtdCksIGluZGV4KTsKLQkgIGlmIChlLT5zcmMg IT0gRU5UUllfQkxPQ0tfUFRSX0ZPUl9GTiAoY2Z1bikpCi0JICAgIHsKLQkg ICAgICBpZiAoZS0+c3JjICE9IGRlZl9iYikKLQkJYWRkX2Jsb2NrID0gZS0+ c3JjOwotCSAgICB9CisJICBpZiAoZS0+c3JjICE9IGRlZl9iYiAmJiByZWdp b25fY29udGFpbnNfcCAobGl2ZS0+bWFwLCBlLT5zcmMpKQorCSAgICBhZGRf YmxvY2sgPSBlLT5zcmM7CiAJfQogICAgICAgZWxzZSBpZiAoaXNfZ2ltcGxl X2RlYnVnICh1c2Vfc3RtdCkpCiAJY29udGludWU7CkBAIC0xMDY2LDcgKzEw OTMsNyBAQCBzZXRfdmFyX2xpdmVfb25fZW50cnkgKHRyZWUgc3NhX25hbWUs IHRyZWVfbGl2ZV9pbmZvX3AgbGl2ZSkKICAgICAgICAgewogCSAgLyogSWYg aXRzIG5vdCBkZWZpbmVkIGluIHRoaXMgYmxvY2ssIGl0cyBsaXZlIG9uIGVu dHJ5LiAgKi8KIAkgIGJhc2ljX2Jsb2NrIHVzZV9iYiA9IGdpbXBsZV9iYiAo dXNlX3N0bXQpOwotCSAgaWYgKHVzZV9iYiAhPSBkZWZfYmIpCisJICBpZiAo dXNlX2JiICE9IGRlZl9iYiAmJiByZWdpb25fY29udGFpbnNfcCAobGl2ZS0+ bWFwLCB1c2VfYmIpKQogCSAgICBhZGRfYmxvY2sgPSB1c2VfYmI7CiAJfQog CkBAIC0xMDk1LDcgKzExMjIsNyBAQCBjYWxjdWxhdGVfbGl2ZV9vbl9leGl0 ICh0cmVlX2xpdmVfaW5mb19wIGxpdmVpbmZvKQogICBlZGdlX2l0ZXJhdG9y IGVpOwogCiAgIC8qIGxpdmUgb24gZW50cnkgY2FsY3VsYXRpb25zIHVzZWQg bGl2ZW91dCB2ZWN0b3JzIGZvciBkZWZzLCBjbGVhciB0aGVtLiAgKi8KLSAg Rk9SX0VBQ0hfQkJfRk4gKGJiLCBjZnVuKQorICBmb3IgKHVuc2lnbmVkIGkg PSAwOyBsaXZlaW5mby0+bWFwLT52ZWNfYmJzLT5pdGVyYXRlIChpLCAmYmIp OyArK2kpCiAgICAgYml0bWFwX2NsZWFyICgmbGl2ZWluZm8tPmxpdmVvdXRb YmItPmluZGV4XSk7CiAKICAgLyogU2V0IGFsbCB0aGUgbGl2ZS1vbi1leGl0 IGJpdHMgZm9yIHVzZXMgaW4gUEhJcy4gICovCkBAIC0xMTA4LDYgKzExMzUs OCBAQCBjYWxjdWxhdGVfbGl2ZV9vbl9leGl0ICh0cmVlX2xpdmVfaW5mb19w IGxpdmVpbmZvKQogICAgICAgZm9yIChnc2kgPSBnc2lfc3RhcnRfcGhpcyAo YmIpOyAhZ3NpX2VuZF9wIChnc2kpOyBnc2lfbmV4dCAoJmdzaSkpCiAJewog CSAgZ3BoaSAqcGhpID0gZ3NpLnBoaSAoKTsKKwkgIGlmICh2aXJ0dWFsX29w ZXJhbmRfcCAoZ2ltcGxlX3BoaV9yZXN1bHQgKHBoaSkpKQorCSAgICBjb250 aW51ZTsKIAkgIGZvciAoaSA9IDA7IGkgPCBnaW1wbGVfcGhpX251bV9hcmdz IChwaGkpOyBpKyspCiAJICAgIHsKIAkgICAgICB0cmVlIHQgPSBQSElfQVJH X0RFRiAocGhpLCBpKTsKQEAgLTExMjAsMTQgKzExNDksMTcgQEAgY2FsY3Vs YXRlX2xpdmVfb25fZXhpdCAodHJlZV9saXZlX2luZm9fcCBsaXZlaW5mbykK IAkgICAgICBpZiAocCA9PSBOT19QQVJUSVRJT04pCiAJCWNvbnRpbnVlOwog CSAgICAgIGUgPSBnaW1wbGVfcGhpX2FyZ19lZGdlIChwaGksIGkpOwotCSAg ICAgIGlmIChlLT5zcmMgIT0gRU5UUllfQkxPQ0tfUFRSX0ZPUl9GTiAoY2Z1 bikpCisJICAgICAgaWYgKHJlZ2lvbl9jb250YWluc19wIChsaXZlaW5mby0+ bWFwLCBlLT5zcmMpKQogCQliaXRtYXBfc2V0X2JpdCAoJmxpdmVpbmZvLT5s aXZlb3V0W2UtPnNyYy0+aW5kZXhdLCBwKTsKIAkgICAgfQogCX0KIAorICAg ICAgaWYgKCFyZWdpb25fY29udGFpbnNfcCAobGl2ZWluZm8tPm1hcCwgYmIp KQorCWNvbnRpbnVlOworCiAgICAgICAvKiBBZGQgZWFjaCBzdWNjZXNzb3Jz IGxpdmUgb24gZW50cnkgdG8gdGhpcyBib2NrIGxpdmUgb24gZXhpdC4gICov CiAgICAgICBGT1JfRUFDSF9FREdFIChlLCBlaSwgYmItPnN1Y2NzKQotCWlm IChlLT5kZXN0ICE9IEVYSVRfQkxPQ0tfUFRSX0ZPUl9GTiAoY2Z1bikpCisJ aWYgKHJlZ2lvbl9jb250YWluc19wIChsaXZlaW5mby0+bWFwLCBlLT5kZXN0 KSkKIAkgIGJpdG1hcF9pb3JfaW50byAoJmxpdmVpbmZvLT5saXZlb3V0W2Ji LT5pbmRleF0sCiAJCQkgICBsaXZlX29uX2VudHJ5IChsaXZlaW5mbywgZS0+ ZGVzdCkpOwogICAgIH0KQEAgLTEzMTQsNyArMTM0Niw3IEBAIHZlcmlmeV9s aXZlX29uX2VudHJ5ICh0cmVlX2xpdmVfaW5mb19wIGxpdmUpCiAgIEZPUl9F QUNIX0VER0UgKGUsIGVpLCBiYi0+c3VjY3MpCiAgICAgewogICAgICAgaW50 IGVudHJ5X2Jsb2NrID0gZS0+ZGVzdC0+aW5kZXg7Ci0gICAgICBpZiAoZS0+ ZGVzdCA9PSBFWElUX0JMT0NLX1BUUl9GT1JfRk4gKGNmdW4pKQorICAgICAg aWYgKCFyZWdpb25fY29udGFpbnNfcCAobGl2ZS0+bWFwLCBlLT5kZXN0KSkK ICAgICAgICAgY29udGludWU7CiAgICAgICBmb3IgKGkgPSAwOyBpIDwgKHVu c2lnbmVkKW51bV92YXJfcGFydGl0aW9ucyAobWFwKTsgaSsrKQogCXsKQEAg LTEzODAsNiArMTQxMiw4IEBAIHZlcmlmeV9saXZlX29uX2VudHJ5ICh0cmVl X2xpdmVfaW5mb19wIGxpdmUpCiAJCSAgICAgZ3NpX25leHQgKCZnc2kpKQog CQkgIHsKIAkJICAgIGdwaGkgKnBoaSA9IGdzaS5waGkgKCk7CisJCSAgICBp ZiAodmlydHVhbF9vcGVyYW5kX3AgKGdpbXBsZV9waGlfcmVzdWx0IChwaGkp KSkKKwkJICAgICAgY29udGludWU7CiAJCSAgICBmb3IgKHogPSAwOyB6IDwg Z2ltcGxlX3BoaV9udW1fYXJncyAocGhpKTsgeisrKQogCQkgICAgICBpZiAo dmFyID09IGdpbXBsZV9waGlfYXJnX2RlZiAocGhpLCB6KSkKIAkJCXsKZGlm ZiAtLWdpdCBhL2djYy90cmVlLXNzYS1saXZlLmggYi9nY2MvdHJlZS1zc2Et bGl2ZS5oCmluZGV4IDQ0OGFhZjkuLjEzYWVhOTAgMTAwNjQ0Ci0tLSBhL2dj Yy90cmVlLXNzYS1saXZlLmgKKysrIGIvZ2NjL3RyZWUtc3NhLWxpdmUuaApA QCAtNjIsMTMgKzYyLDI1IEBAIHR5cGVkZWYgc3RydWN0IF92YXJfbWFwCiAK ICAgLyogTWFwIG9mIHBhcnRpdGlvbnMgbnVtYmVycyB0byBiYXNlIHZhcmlh YmxlIHRhYmxlIGluZGV4ZXMuICAqLwogICBpbnQgKnBhcnRpdGlvbl90b19i YXNlX2luZGV4OworCisgIC8qIEJpdG1hcCBvZiBiYXNpYyBibG9jay4gIEl0 IGRlc2NyaWJlcyB0aGUgcmVnaW9uIHdpdGhpbiB3aGljaCB0aGUgYW5hbHlz aXMKKyAgICAgaXMgZG9uZS4gICovCisgIGJpdG1hcCBibXBfYmJzOworCisg IC8qIFZlY3RvciBvZiBiYXNpYyBibG9jayBpbiB0aGUgcmVnaW9uLiAgKi8K KyAgdmVjPGJhc2ljX2Jsb2NrPiAqdmVjX2JiczsKKworICAvKiBUcnVlIGlm IHRoaXMgbWFwIGlzIGZvciBvdXQtb2Ytc3NhLCBvdGhlcndpc2UgZm9yIGxp dmUgcmFuZ2UKKyAgICAgY29tcHV0YXRpb24uICBXaGVuIGZvciBvdXQtb2Yt c3NhLCBpdCBhbHNvIG1lYW5zIHRoZSB2YXIgbWFwIGlzIGNvbXB1dGVkCisg ICAgIGZvciB3aG9sZSBjdXJyZW50IGZ1bmN0aW9uLiAgKi8KKyAgYm9vbCBv dXRvZnNzYV9wOwogfSAqdmFyX21hcDsKIAogCiAvKiBWYWx1ZSB1c2VkIHRv IHJlcHJlc2VudCBubyBwYXJ0aXRpb24gbnVtYmVyLiAgKi8KICNkZWZpbmUg Tk9fUEFSVElUSU9OCQktMQogCi1leHRlcm4gdmFyX21hcCBpbml0X3Zhcl9t YXAgKGludCk7CitleHRlcm4gdmFyX21hcCBpbml0X3Zhcl9tYXAgKGludCwg c3RydWN0IGxvb3AqID0gTlVMTCk7CiBleHRlcm4gdm9pZCBkZWxldGVfdmFy X21hcCAodmFyX21hcCk7CiBleHRlcm4gaW50IHZhcl91bmlvbiAodmFyX21h cCwgdHJlZSwgdHJlZSk7CiBleHRlcm4gdm9pZCBwYXJ0aXRpb25fdmlld19u b3JtYWwgKHZhcl9tYXApOwpAQCAtODIsNiArOTQsMjIgQEAgZXh0ZXJuIHZv aWQgZGVidWcgKF92YXJfbWFwICZyZWYpOwogZXh0ZXJuIHZvaWQgZGVidWcg KF92YXJfbWFwICpwdHIpOwogCiAKKy8qIFJldHVybiBUUlVFIGlmIHJlZ2lv biBvZiB0aGUgTUFQIGNvbnRhaW5zIGJhc2ljIGJsb2NrIEJCLiAgKi8KKwor aW5saW5lIGJvb2wKK3JlZ2lvbl9jb250YWluc19wICh2YXJfbWFwIG1hcCwg YmFzaWNfYmxvY2sgYmIpCit7CisgIGlmIChiYiA9PSBFTlRSWV9CTE9DS19Q VFJfRk9SX0ZOIChjZnVuKQorICAgICAgfHwgYmIgPT0gRVhJVF9CTE9DS19Q VFJfRk9SX0ZOIChjZnVuKSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgaWYg KG1hcC0+b3V0b2Zzc2FfcCkKKyAgICByZXR1cm4gdHJ1ZTsKKworICByZXR1 cm4gYml0bWFwX2JpdF9wIChtYXAtPmJtcF9iYnMsIGJiLT5pbmRleCk7Cit9 CisKKwogLyogUmV0dXJuIG51bWJlciBvZiBwYXJ0aXRpb25zIGluIE1BUC4g ICovCiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQKLS0gCjEuOS4xCgo= --0000000000009d7449056c407b41--