From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 108843858C50 for ; Fri, 26 Apr 2024 09:43:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 108843858C50 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 108843858C50 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1714124596; cv=none; b=AwWvn4z+3d2u3NitgKD0EXnApqvORpDlVV452OzW5O5V0fg862CrgUfQo4hzSGGNU4kmABCBC6OdadpUSPEkLI5jJaKokjd2VxlfFBNiYmeYrrCclzmk7K6LFeDlWOuViC8Q0bSdGWf79nGeK4W2V7ubCQF1+Kw/ZC8zPGz82Hc= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1714124596; c=relaxed/simple; bh=RBGPpbALSd/vf6Wog8nioCQ+WJYAMz4y5sCBhAa5Q/w=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=E7uGKqtWFmV6HkFaex8j65y/kmxmGjIA+aFBY5ZeuTNwQh7CHEgeIo14hZo+n8T48tB2w5gkXF4Pj+CW2eOe0cXIOVlk23wCpSC1grju8HkZ3xZKxwLfTH25vE88lsJDdP/zTD1E7ZaplOLjTg3QagJKJsA4G83ALrvnsMf5mYM= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1714124593; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type; bh=17BBi6hyMmFZVAERZZSiznKXspAZHAu1kYv9NQYc9VI=; b=MIx9DrM5d95dLfODreVJ6K3vqC88S5hfb5s3mrEsUrqhKklICehAP6P45wcJUxJZW0ccw/ xUJJ90Pn/TPJg9RJ/GwOLcwBivtGlpmRdiWxZgYqpNrXlIjZdc/7nkANYF49RO8c6qhMl1 O75yz5Xo9qFx2jjw0p1GU84El6qvXk8= Received: from mail-ed1-f72.google.com (mail-ed1-f72.google.com [209.85.208.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-536-J-J2UPhGOPKMW9WQiXIuEA-1; Fri, 26 Apr 2024 05:43:10 -0400 X-MC-Unique: J-J2UPhGOPKMW9WQiXIuEA-1 Received: by mail-ed1-f72.google.com with SMTP id 4fb4d7f45d1cf-56bf2d59fceso1442365a12.3 for ; Fri, 26 Apr 2024 02:43:09 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714124588; x=1714729388; h=cc:to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=17BBi6hyMmFZVAERZZSiznKXspAZHAu1kYv9NQYc9VI=; b=HmFaB0ue5db37db4FORToGCCL/+MLv0YzVS+nuPJh0MmlDUmoS/rTTLT2xkJ+Z7nUH oP5wT4Puzz4o2OTS3CSTWXm3H/zDusvvfnvrmeiuor3I8x6gkKegYto0/tUUxq+sypMH MO2MxxBgqe7/vQDmFnRMGN276/y0y8HYFzNikOJz/3weUz2v66gBVCn3bLOePs7w4E4t Fn6BQ5/h6go7IZXMJ5zwiOTd83SU/S/8PihCISg8gR2EBDvtNeHzmypp4JQLYkswQyfD 4gLPOCaoNSbnugg8wFoZDw2nVv1TlXAEYuBmyCxWZhvnN31vuJZNatqww90H7B8Saj2E KddQ== X-Gm-Message-State: AOJu0YxxsGYQe1DjhjmJmGBd7JjuYMvqNrKdRv+Dx+J6U8vjEfELOE5A zPBnQxDkjtR4HmNTK28Po8L6d01qZ9goswwpF6h6nPkO28aKhuNUzO4EWknp4mALUJvUD/ihDHj XZRjhZkrhUoqjECvVHor4N+GM/soR+kRyXR1bnTlXPCY5PpqwiEt6AoxUNYPBAKsRtVEvWrZUVT bOF5YFamkDlIb0bQMq4pAYWXU7TuO+ug== X-Received: by 2002:a50:9552:0:b0:565:bb25:bb7a with SMTP id v18-20020a509552000000b00565bb25bb7amr1484650eda.24.1714124588687; Fri, 26 Apr 2024 02:43:08 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEpuXEAwp4CpiHW3MrNXpfZ8DIn09cVVBcQjuA1VUNk5qWKuy0iIdvAM55ky0luaXU11Lj5Cnud1QOxIGcTRXs= X-Received: by 2002:a50:9552:0:b0:565:bb25:bb7a with SMTP id v18-20020a509552000000b00565bb25bb7amr1484639eda.24.1714124588349; Fri, 26 Apr 2024 02:43:08 -0700 (PDT) MIME-Version: 1.0 From: Aldy Hernandez Date: Fri, 26 Apr 2024 11:42:56 +0200 Message-ID: Subject: 1.76% performance loss in VRP due to inlining To: GCC Mailing List Cc: "MacLeod, Andrew" X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="00000000000030b21f0616fcbb1c" X-Spam-Status: No, score=-11.7 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --00000000000030b21f0616fcbb1c Content-Type: text/plain; charset="UTF-8" Hi folks! In implementing prange (pointer ranges), I have found a 1.74% slowdown in VRP, even without any code path actually using the code. I have tracked this down to irange::get_bitmask() being compiled differently with and without the bare bones patch. With the patch, irange::get_bitmask() has a lot of code inlined into it, particularly get_bitmask_from_range() and consequently the wide_int_storage code. I don't know whether this is expected behavior, and if it is, how to mitigate it. I have tried declaring get_bitmask_from_range() inline, but that didn't help. OTOH, using __attribute__((always_inline)) helps a bit, but not entirely. What does help is inlining irange::get_bitmask() entirely, but that seems like a big hammer. The overall slowdown in compilation is 0.26%, because VRP is a relatively fast pass, but a measurable pass slowdown is something we'd like to avoid. What's the recommended approach here? For the curious, I am attaching before and after copies of value-range.s. I am also attaching the two patches needed to reproduce the problem on mainline. The first patch is merely setup. It is the second patch that exhibits the problem. Notice there are no uses of prange yet. Thanks. Aldy --00000000000030b21f0616fcbb1c Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Move-get_bitmask_from_range-out-of-irange-class.patch" Content-Disposition: attachment; filename="0001-Move-get_bitmask_from_range-out-of-irange-class.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lvghhyv60 RnJvbSBlZTYzODMzYzVmNTYwNjRlZjQ3YzJiYjlkZWJkNDg1Zjc3ZDAwMTcxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGR5IEhlcm5hbmRleiA8YWxkeWhAcmVkaGF0LmNvbT4KRGF0 ZTogVHVlLCAxOSBNYXIgMjAyNCAxODowNDo1NSArMDEwMApTdWJqZWN0OiBbUEFUQ0hdIE1vdmUg Z2V0X2JpdG1hc2tfZnJvbV9yYW5nZSBvdXQgb2YgaXJhbmdlIGNsYXNzLgoKLS0tCiBnY2MvdmFs dWUtcmFuZ2UuY2MgfCA1MiArKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiBnY2MvdmFsdWUtcmFuZ2UuaCAgfCAgMSAtCiAyIGZpbGVzIGNoYW5nZWQsIDI2IGlu c2VydGlvbnMoKyksIDI3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2djYy92YWx1ZS1yYW5n ZS5jYyBiL2djYy92YWx1ZS1yYW5nZS5jYwppbmRleCA3MDM3NWY3YWJmOS4uMGY4MWNlMzI2MTUg MTAwNjQ0Ci0tLSBhL2djYy92YWx1ZS1yYW5nZS5jYworKysgYi9nY2MvdmFsdWUtcmFuZ2UuY2MK QEAgLTMxLDYgKzMxLDMwIEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMu ICBJZiBub3Qgc2VlCiAjaW5jbHVkZSAiZm9sZC1jb25zdC5oIgogI2luY2x1ZGUgImdpbXBsZS1y YW5nZS5oIgogCisvLyBSZXR1cm4gdGhlIGJpdG1hc2sgaW5oZXJlbnQgaW4gYSByYW5nZS4KKwor c3RhdGljIGlyYW5nZV9iaXRtYXNrCitnZXRfYml0bWFza19mcm9tX3JhbmdlICh0cmVlIHR5cGUs CisJCQljb25zdCB3aWRlX2ludCAmbWluLCBjb25zdCB3aWRlX2ludCAmbWF4KQoreworICB1bnNp Z25lZCBwcmVjID0gVFlQRV9QUkVDSVNJT04gKHR5cGUpOworCisgIC8vIEFsbCB0aGUgYml0cyBv ZiBhIHNpbmdsZXRvbiBhcmUga25vd24uCisgIGlmIChtaW4gPT0gbWF4KQorICAgIHsKKyAgICAg IHdpZGVfaW50IG1hc2sgPSB3aTo6emVybyAocHJlYyk7CisgICAgICB3aWRlX2ludCB2YWx1ZSA9 IG1pbjsKKyAgICAgIHJldHVybiBpcmFuZ2VfYml0bWFzayAodmFsdWUsIG1hc2spOworICAgIH0K KworICB3aWRlX2ludCB4b3J2ID0gbWluIF4gbWF4OworCisgIGlmICh4b3J2ICE9IDApCisgICAg eG9ydiA9IHdpOjptYXNrIChwcmVjIC0gd2k6OmNseiAoeG9ydiksIGZhbHNlLCBwcmVjKTsKKwor ICByZXR1cm4gaXJhbmdlX2JpdG1hc2sgKHdpOjp6ZXJvIChwcmVjKSwgbWluIHwgeG9ydik7Cit9 CisKIHZvaWQKIGlyYW5nZTo6YWNjZXB0IChjb25zdCB2cmFuZ2VfdmlzaXRvciAmdikgY29uc3QK IHsKQEAgLTE4MzIsMzEgKzE4NTYsNiBAQCBpcmFuZ2U6OmludmVydCAoKQogICAgIHZlcmlmeV9y YW5nZSAoKTsKIH0KIAotLy8gUmV0dXJuIHRoZSBiaXRtYXNrIGluaGVyZW50IGluIHRoZSByYW5n ZS4KLQotaXJhbmdlX2JpdG1hc2sKLWlyYW5nZTo6Z2V0X2JpdG1hc2tfZnJvbV9yYW5nZSAoKSBj b25zdAotewotICB1bnNpZ25lZCBwcmVjID0gVFlQRV9QUkVDSVNJT04gKHR5cGUgKCkpOwotICB3 aWRlX2ludCBtaW4gPSBsb3dlcl9ib3VuZCAoKTsKLSAgd2lkZV9pbnQgbWF4ID0gdXBwZXJfYm91 bmQgKCk7Ci0KLSAgLy8gQWxsIHRoZSBiaXRzIG9mIGEgc2luZ2xldG9uIGFyZSBrbm93bi4KLSAg aWYgKG1pbiA9PSBtYXgpCi0gICAgewotICAgICAgd2lkZV9pbnQgbWFzayA9IHdpOjp6ZXJvIChw cmVjKTsKLSAgICAgIHdpZGVfaW50IHZhbHVlID0gbG93ZXJfYm91bmQgKCk7Ci0gICAgICByZXR1 cm4gaXJhbmdlX2JpdG1hc2sgKHZhbHVlLCBtYXNrKTsKLSAgICB9Ci0KLSAgd2lkZV9pbnQgeG9y diA9IG1pbiBeIG1heDsKLQotICBpZiAoeG9ydiAhPSAwKQotICAgIHhvcnYgPSB3aTo6bWFzayAo cHJlYyAtIHdpOjpjbHogKHhvcnYpLCBmYWxzZSwgcHJlYyk7Ci0KLSAgcmV0dXJuIGlyYW5nZV9i aXRtYXNrICh3aTo6emVybyAocHJlYyksIG1pbiB8IHhvcnYpOwotfQotCiAvLyBSZW1vdmUgdHJh aWxpbmcgcmFuZ2VzIHRoYXQgdGhpcyBiaXRtYXNrIGluZGljYXRlcyBjYW4ndCBleGlzdC4KIAog dm9pZApAQCAtMTk3OCw3ICsxOTc3LDggQEAgaXJhbmdlOjpnZXRfYml0bWFzayAoKSBjb25zdAog ICAvLyBpbiB0aGUgbWFzay4KICAgLy8KICAgLy8gU2VlIGFsc28gdGhlIG5vdGUgaW4gaXJhbmdl X2JpdG1hc2s6OmludGVyc2VjdC4KLSAgaXJhbmdlX2JpdG1hc2sgYm0gPSBnZXRfYml0bWFza19m cm9tX3JhbmdlICgpOworICBpcmFuZ2VfYml0bWFzayBibQorICAgID0gZ2V0X2JpdG1hc2tfZnJv bV9yYW5nZSAodHlwZSAoKSwgbG93ZXJfYm91bmQgKCksIHVwcGVyX2JvdW5kICgpKTsKICAgaWYg KCFtX2JpdG1hc2sudW5rbm93bl9wICgpKQogICAgIGJtLmludGVyc2VjdCAobV9iaXRtYXNrKTsK ICAgcmV0dXJuIGJtOwpkaWZmIC0tZ2l0IGEvZ2NjL3ZhbHVlLXJhbmdlLmggYi9nY2MvdmFsdWUt cmFuZ2UuaAppbmRleCA5NTMxZGY1Njk4OC4uZGM1YjE1M2E4M2UgMTAwNjQ0Ci0tLSBhL2djYy92 YWx1ZS1yYW5nZS5oCisrKyBiL2djYy92YWx1ZS1yYW5nZS5oCkBAIC0zNTEsNyArMzUxLDYgQEAg cHJpdmF0ZToKICAgYm9vbCB2YXJ5aW5nX2NvbXBhdGlibGVfcCAoKSBjb25zdDsKICAgYm9vbCBp bnRlcnNlY3RfYml0bWFzayAoY29uc3QgaXJhbmdlICZyKTsKICAgYm9vbCB1bmlvbl9iaXRtYXNr IChjb25zdCBpcmFuZ2UgJnIpOwotICBpcmFuZ2VfYml0bWFzayBnZXRfYml0bWFza19mcm9tX3Jh bmdlICgpIGNvbnN0OwogICBib29sIHNldF9yYW5nZV9mcm9tX2JpdG1hc2sgKCk7CiAKICAgYm9v bCBpbnRlcnNlY3QgKGNvbnN0IHdpZGVfaW50JiBsYiwgY29uc3Qgd2lkZV9pbnQmIHViKTsKLS0g CjIuNDQuMAoK --00000000000030b21f0616fcbb1c Content-Type: text/x-patch; charset="US-ASCII"; name="0002-Implement-minimum-prange-class-exhibiting-VRP-slowdo.patch" Content-Disposition: attachment; filename="0002-Implement-minimum-prange-class-exhibiting-VRP-slowdo.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lvghhyvf1 RnJvbSAwM2M3MGRlNDMxNzdhOTdlYzVlOWMyNDNhYWZjNzk4YzFmMzdlNmQ4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGR5IEhlcm5hbmRleiA8YWxkeWhAcmVkaGF0LmNvbT4KRGF0 ZTogV2VkLCAyMCBNYXIgMjAyNCAwNjoyNTo1MiArMDEwMApTdWJqZWN0OiBbUEFUQ0hdIEltcGxl bWVudCBtaW5pbXVtIHByYW5nZSBjbGFzcyBleGhpYml0aW5nIFZSUCBzbG93ZG93bi4KCi0tLQog Z2NjL3ZhbHVlLXJhbmdlLXByZXR0eS1wcmludC5jYyB8ICAyNSArKysKIGdjYy92YWx1ZS1yYW5n ZS1wcmV0dHktcHJpbnQuaCAgfCAgIDEgKwogZ2NjL3ZhbHVlLXJhbmdlLmNjICAgICAgICAgICAg ICB8IDI3NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZ2NjL3ZhbHVlLXJhbmdl LmggICAgICAgICAgICAgICB8IDE5NiArKysrKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBj aGFuZ2VkLCA0OTYgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2djYy92YWx1ZS1yYW5nZS1w cmV0dHktcHJpbnQuY2MgYi9nY2MvdmFsdWUtcmFuZ2UtcHJldHR5LXByaW50LmNjCmluZGV4IGM3 NWNiZWEzOTU1Li4xNTQyNTNlMDQ3ZiAxMDA2NDQKLS0tIGEvZ2NjL3ZhbHVlLXJhbmdlLXByZXR0 eS1wcmludC5jYworKysgYi9nY2MvdmFsdWUtcmFuZ2UtcHJldHR5LXByaW50LmNjCkBAIC0xMTMs NiArMTEzLDMxIEBAIHZyYW5nZV9wcmludGVyOjpwcmludF9pcmFuZ2VfYml0bWFza3MgKGNvbnN0 IGlyYW5nZSAmcikgY29uc3QKICAgcHBfc3RyaW5nIChwcCwgcCk7CiB9CiAKK3ZvaWQKK3ZyYW5n ZV9wcmludGVyOjp2aXNpdCAoY29uc3QgcHJhbmdlICZyKSBjb25zdAoreworICBwcF9zdHJpbmcg KHBwLCAiW3ByYW5nZV0gIik7CisgIGlmIChyLnVuZGVmaW5lZF9wICgpKQorICAgIHsKKyAgICAg IHBwX3N0cmluZyAocHAsICJVTkRFRklORUQiKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIGR1 bXBfZ2VuZXJpY19ub2RlIChwcCwgci50eXBlICgpLCAwLCBUREZfTk9ORSB8IFRERl9OT1VJRCwg ZmFsc2UpOworICBwcF9jaGFyYWN0ZXIgKHBwLCAnICcpOworICBpZiAoci52YXJ5aW5nX3AgKCkp CisgICAgeworICAgICAgcHBfc3RyaW5nIChwcCwgIlZBUllJTkciKTsKKyAgICAgIHJldHVybjsK KyAgICB9CisKKyAgcHBfY2hhcmFjdGVyIChwcCwgJ1snKTsKKyAgLy9wcmludF9pbnRfYm91bmQg KHBwLCByLmxvd2VyX2JvdW5kICgpLCByLnR5cGUgKCkpOworICBwcF9zdHJpbmcgKHBwLCAiLCAi KTsKKyAgLy9wcmludF9pbnRfYm91bmQgKHBwLCByLnVwcGVyX2JvdW5kICgpLCByLnR5cGUgKCkp OworICBwcF9jaGFyYWN0ZXIgKHBwLCAnXScpOworICAvL3ByaW50X2lyYW5nZV9iaXRtYXNrcyAo cHAsIHIubV9iaXRtYXNrKTsKK30KKwogdm9pZAogdnJhbmdlX3ByaW50ZXI6OnByaW50X3JlYWxf dmFsdWUgKHRyZWUgdHlwZSwgY29uc3QgUkVBTF9WQUxVRV9UWVBFICZyKSBjb25zdAogewpkaWZm IC0tZ2l0IGEvZ2NjL3ZhbHVlLXJhbmdlLXByZXR0eS1wcmludC5oIGIvZ2NjL3ZhbHVlLXJhbmdl LXByZXR0eS1wcmludC5oCmluZGV4IGNhODVmZDYxNTdjLi41NGVlMGNmOGMyNiAxMDA2NDQKLS0t IGEvZ2NjL3ZhbHVlLXJhbmdlLXByZXR0eS1wcmludC5oCisrKyBiL2djYy92YWx1ZS1yYW5nZS1w cmV0dHktcHJpbnQuaApAQCAtMjcsNiArMjcsNyBAQCBwdWJsaWM6CiAgIHZyYW5nZV9wcmludGVy IChwcmV0dHlfcHJpbnRlciAqcHBfKSA6IHBwIChwcF8pIHsgfQogICB2b2lkIHZpc2l0IChjb25z dCB1bnN1cHBvcnRlZF9yYW5nZSAmKSBjb25zdCBvdmVycmlkZTsKICAgdm9pZCB2aXNpdCAoY29u c3QgaXJhbmdlICYpIGNvbnN0IG92ZXJyaWRlOworICB2b2lkIHZpc2l0IChjb25zdCBwcmFuZ2Ug JikgY29uc3Qgb3ZlcnJpZGU7CiAgIHZvaWQgdmlzaXQgKGNvbnN0IGZyYW5nZSAmKSBjb25zdCBv dmVycmlkZTsKIHByaXZhdGU6CiAgIHZvaWQgcHJpbnRfaXJhbmdlX2JvdW5kIChjb25zdCB3aWRl X2ludCAmdywgdHJlZSB0eXBlKSBjb25zdDsKZGlmZiAtLWdpdCBhL2djYy92YWx1ZS1yYW5nZS5j YyBiL2djYy92YWx1ZS1yYW5nZS5jYwppbmRleCAwZjgxY2UzMjYxNS4uMDZhYjFhNjE2YmYgMTAw NjQ0Ci0tLSBhL2djYy92YWx1ZS1yYW5nZS5jYworKysgYi9nY2MvdmFsdWUtcmFuZ2UuY2MKQEAg LTM3Nyw2ICszNzcsMjgwIEBAIGlyYW5nZTo6c2V0X25vbm5lZ2F0aXZlICh0cmVlIHR5cGUpCiAg ICAgICAgd2k6OnRvX3dpZGUgKFRZUEVfTUFYX1ZBTFVFICh0eXBlKSkpOwogfQogCisvLyBQcmFu Z2UgaW1wbGVtZW50YXRpb24uCisKK3ZvaWQKK3ByYW5nZTo6YWNjZXB0IChjb25zdCB2cmFuZ2Vf dmlzaXRvciAmdikgY29uc3QKK3sKKyAgdi52aXNpdCAoKnRoaXMpOworfQorCit2b2lkCitwcmFu Z2U6OnNldF9ub25uZWdhdGl2ZSAodHJlZSB0eXBlKQoreworICBzZXQgKHR5cGUsCisgICAgICAg d2k6Onplcm8gKFRZUEVfUFJFQ0lTSU9OICh0eXBlKSksCisgICAgICAgd2k6Om1heF92YWx1ZSAo VFlQRV9QUkVDSVNJT04gKHR5cGUpLCBVTlNJR05FRCkpOworfQorCit2b2lkCitwcmFuZ2U6OnNl dCAodHJlZSBtaW4sIHRyZWUgbWF4LCB2YWx1ZV9yYW5nZV9raW5kIGtpbmQpCit7CisgIHJldHVy biBzZXQgKFRSRUVfVFlQRSAobWluKSwgd2k6OnRvX3dpZGUgKG1pbiksIHdpOjp0b193aWRlICht YXgpLCBraW5kKTsKK30KKwordm9pZAorcHJhbmdlOjpzZXQgKHRyZWUgdHlwZSwgY29uc3Qgd2lk ZV9pbnQgJm1pbiwgY29uc3Qgd2lkZV9pbnQgJm1heCwKKwkgICAgIHZhbHVlX3JhbmdlX2tpbmQg a2luZCkKK3sKKyAgaWYgKGtpbmQgPT0gVlJfVU5ERUZJTkVEKQorICAgIHsKKyAgICAgIHNldF91 bmRlZmluZWQgKCk7CisgICAgICByZXR1cm47CisgICAgfQorICBpZiAoa2luZCA9PSBWUl9WQVJZ SU5HKQorICAgIHsKKyAgICAgIHNldF92YXJ5aW5nICh0eXBlKTsKKyAgICAgIHJldHVybjsKKyAg ICB9CisgIGlmIChraW5kID09IFZSX0FOVElfUkFOR0UpCisgICAgeworICAgICAgZ2NjX2NoZWNr aW5nX2Fzc2VydCAobWluID09IDAgJiYgbWF4ID09IDApOworICAgICAgc2V0X25vbnplcm8gKHR5 cGUpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgbV90eXBlID0gdHlwZTsKKyAgbV9taW4gPSBt aW47CisgIG1fbWF4ID0gbWF4OworICBpZiAobV9taW4gPT0gMCAmJiBtX21heCA9PSAtMSkKKyAg ICB7CisgICAgICBtX2tpbmQgPSBWUl9WQVJZSU5HOworICAgICAgbV9iaXRtYXNrLnNldF91bmtu b3duIChUWVBFX1BSRUNJU0lPTiAodHlwZSkpOworICAgICAgaWYgKGZsYWdfY2hlY2tpbmcpCisJ dmVyaWZ5X3JhbmdlICgpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBtX2tpbmQgPSBWUl9S QU5HRTsKKyAgbV9iaXRtYXNrID0gZ2V0X2JpdG1hc2tfZnJvbV9yYW5nZSAodHlwZSwgbWluLCBt YXgpOworICBpZiAoZmxhZ19jaGVja2luZykKKyAgICB2ZXJpZnlfcmFuZ2UgKCk7Cit9CisKK2Jv b2wKK3ByYW5nZTo6Y29udGFpbnNfcCAoY29uc3Qgd2lkZV9pbnQgJncpIGNvbnN0Cit7CisgIGlm ICh1bmRlZmluZWRfcCAoKSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgaWYgKHZhcnlpbmdfcCAo KSkKKyAgICByZXR1cm4gdHJ1ZTsKKworICByZXR1cm4gKHdpOjpsZV9wIChsb3dlcl9ib3VuZCAo KSwgdywgVU5TSUdORUQpCisJICAmJiB3aTo6Z2VfcCAodXBwZXJfYm91bmQgKCksIHcsIFVOU0lH TkVEKSk7Cit9CisKK2Jvb2wKK3ByYW5nZTo6c2luZ2xldG9uX3AgKHRyZWUgKnJlc3VsdCkgY29u c3QKK3sKKyAgaWYgKG1fa2luZCA9PSBWUl9SQU5HRSAmJiBsb3dlcl9ib3VuZCAoKSA9PSB1cHBl cl9ib3VuZCAoKSkKKyAgICB7CisgICAgICBpZiAocmVzdWx0KQorCSpyZXN1bHQgPSB3aWRlX2lu dF90b190cmVlICh0eXBlICgpLCBtX21pbik7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg IHJldHVybiBmYWxzZTsKK30KKworYm9vbAorcHJhbmdlOjp1bmlvbl8gKGNvbnN0IHZyYW5nZSAm dikKK3sKKyAgY29uc3QgcHJhbmdlICZyID0gYXNfYSA8cHJhbmdlPiAodik7CisKKyAgaWYgKHIu dW5kZWZpbmVkX3AgKCkpCisgICAgcmV0dXJuIGZhbHNlOworICBpZiAodW5kZWZpbmVkX3AgKCkp CisgICAgeworICAgICAgKnRoaXMgPSByOworICAgICAgaWYgKGZsYWdfY2hlY2tpbmcpCisJdmVy aWZ5X3JhbmdlICgpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICBpZiAodmFyeWluZ19w ICgpKQorICAgIHJldHVybiBmYWxzZTsKKyAgaWYgKHIudmFyeWluZ19wICgpKQorICAgIHsKKyAg ICAgIHNldF92YXJ5aW5nICh0eXBlICgpKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor ICB3aWRlX2ludCBuZXdfbGIgPSB3aTo6bWluIChyLmxvd2VyX2JvdW5kICgpLCBsb3dlcl9ib3Vu ZCAoKSwgVU5TSUdORUQpOworICB3aWRlX2ludCBuZXdfdWIgPSB3aTo6bWF4IChyLnVwcGVyX2Jv dW5kICgpLCB1cHBlcl9ib3VuZCAoKSwgVU5TSUdORUQpOworICBwcmFuZ2UgbmV3X3JhbmdlICh0 eXBlICgpLCBuZXdfbGIsIG5ld191Yik7CisgIG5ld19yYW5nZS5tX2JpdG1hc2sudW5pb25fICht X2JpdG1hc2spOworICBuZXdfcmFuZ2UubV9iaXRtYXNrLnVuaW9uXyAoci5tX2JpdG1hc2spOwor ICBpZiAobmV3X3JhbmdlLnZhcnlpbmdfY29tcGF0aWJsZV9wICgpKQorICAgIHsKKyAgICAgIHNl dF92YXJ5aW5nICh0eXBlICgpKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgaWYgKGZs YWdfY2hlY2tpbmcpCisgICAgbmV3X3JhbmdlLnZlcmlmeV9yYW5nZSAoKTsKKyAgaWYgKG5ld19y YW5nZSA9PSAqdGhpcykKKyAgICByZXR1cm4gZmFsc2U7CisgICp0aGlzID0gbmV3X3JhbmdlOwor ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbAorcHJhbmdlOjppbnRlcnNlY3QgKGNvbnN0IHZyYW5n ZSAmdikKK3sKKyAgY29uc3QgcHJhbmdlICZyID0gYXNfYSA8cHJhbmdlPiAodik7CisgIGdjY19j aGVja2luZ19hc3NlcnQgKHVuZGVmaW5lZF9wICgpIHx8IHIudW5kZWZpbmVkX3AgKCkKKwkJICAg ICAgIHx8IHJhbmdlX2NvbXBhdGlibGVfcCAodHlwZSAoKSwgci50eXBlICgpKSk7CisKKyAgaWYg KHVuZGVmaW5lZF9wICgpKQorICAgIHJldHVybiBmYWxzZTsKKyAgaWYgKHIudW5kZWZpbmVkX3Ag KCkpCisgICAgeworICAgICAgc2V0X3VuZGVmaW5lZCAoKTsKKyAgICAgIHJldHVybiB0cnVlOwor ICAgIH0KKyAgaWYgKHIudmFyeWluZ19wICgpKQorICAgIHJldHVybiBmYWxzZTsKKyAgaWYgKHZh cnlpbmdfcCAoKSkKKyAgICB7CisgICAgICAqdGhpcyA9IHI7CisgICAgICByZXR1cm4gdHJ1ZTsK KyAgICB9CisKKyAgcHJhbmdlIHNhdmUgPSAqdGhpczsKKyAgbV9taW4gPSB3aTo6bWF4IChyLmxv d2VyX2JvdW5kICgpLCBsb3dlcl9ib3VuZCAoKSwgVU5TSUdORUQpOworICBtX21heCA9IHdpOjpt aW4gKHIudXBwZXJfYm91bmQgKCksIHVwcGVyX2JvdW5kICgpLCBVTlNJR05FRCk7CisgIGlmICh3 aTo6Z3RfcCAobV9taW4sIG1fbWF4LCBVTlNJR05FRCkpCisgICAgeworICAgICAgc2V0X3VuZGVm aW5lZCAoKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAvLyBJbnRlcnNlY3QgYWxs IGJpdG1hc2tzOiB0aGUgb2xkIG9uZSwgdGhlIG5ldyBvbmUsIGFuZCB0aGUgb3RoZXIgb3BlcmFu ZCdzLgorICBpcmFuZ2VfYml0bWFzayBuZXdfYml0bWFzayA9IGdldF9iaXRtYXNrX2Zyb21fcmFu Z2UgKG1fdHlwZSwgbV9taW4sIG1fbWF4KTsKKyAgbV9iaXRtYXNrLmludGVyc2VjdCAobmV3X2Jp dG1hc2spOworICBtX2JpdG1hc2suaW50ZXJzZWN0IChyLm1fYml0bWFzayk7CisKKyAgaWYgKGZs YWdfY2hlY2tpbmcpCisgICAgdmVyaWZ5X3JhbmdlICgpOworICBpZiAoKnRoaXMgPT0gc2F2ZSkK KyAgICByZXR1cm4gZmFsc2U7CisgIHJldHVybiB0cnVlOworfQorCitwcmFuZ2UgJgorcHJhbmdl OjpvcGVyYXRvcj0gKGNvbnN0IHByYW5nZSAmc3JjKQoreworICBtX3R5cGUgPSBzcmMubV90eXBl OworICBtX2tpbmQgPSBzcmMubV9raW5kOworICBtX21pbiA9IHNyYy5tX21pbjsKKyAgbV9tYXgg PSBzcmMubV9tYXg7CisgIG1fYml0bWFzayA9IHNyYy5tX2JpdG1hc2s7CisgIGlmIChmbGFnX2No ZWNraW5nKQorICAgIHZlcmlmeV9yYW5nZSAoKTsKKyAgcmV0dXJuICp0aGlzOworfQorCitib29s CitwcmFuZ2U6Om9wZXJhdG9yPT0gKGNvbnN0IHByYW5nZSAmc3JjKSBjb25zdAoreworICBpZiAo bV9raW5kID09IHNyYy5tX2tpbmQpCisgICAgeworICAgICAgaWYgKHVuZGVmaW5lZF9wICgpKQor CXJldHVybiB0cnVlOworCisgICAgICBpZiAodmFyeWluZ19wICgpKQorCXJldHVybiB0eXBlc19j b21wYXRpYmxlX3AgKHR5cGUgKCksIHNyYy50eXBlICgpKTsKKworICAgICAgcmV0dXJuIChtX21p biA9PSBzcmMubV9taW4gJiYgbV9tYXggPT0gc3JjLm1fbWF4CisJICAgICAgJiYgbV9iaXRtYXNr ID09IHNyYy5tX2JpdG1hc2spOworICAgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkCitw cmFuZ2U6OmludmVydCAoKQoreworICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghdW5kZWZpbmVkX3Ag KCkgJiYgIXZhcnlpbmdfcCAoKSk7CisKKyAgd2lkZV9pbnQgbmV3X2xiLCBuZXdfdWI7CisgIHVu c2lnbmVkIHByZWMgPSBUWVBFX1BSRUNJU0lPTiAodHlwZSAoKSk7CisgIHdpZGVfaW50IHR5cGVf bWluID0gd2k6Onplcm8gKHByZWMpOworICB3aWRlX2ludCB0eXBlX21heCA9IHdpOjptYXhfdmFs dWUgKHByZWMsIFVOU0lHTkVEKTsKKyAgd2k6Om92ZXJmbG93X3R5cGUgb3ZmOworCisgIGlmIChs b3dlcl9ib3VuZCAoKSA9PSB0eXBlX21pbikKKyAgICB7CisgICAgICBuZXdfbGIgPSB3aTo6YWRk ICh1cHBlcl9ib3VuZCAoKSwgMSwgVU5TSUdORUQsICZvdmYpOworICAgICAgaWYgKG92ZikKKwlu ZXdfbGIgPSB0eXBlX21pbjsKKyAgICAgIG5ld191YiA9IHR5cGVfbWF4OworICAgICAgc2V0ICh0 eXBlICgpLCBuZXdfbGIsIG5ld191Yik7CisgICAgfQorICBlbHNlIGlmICh1cHBlcl9ib3VuZCAo KSA9PSB0eXBlX21heCkKKyAgICB7CisgICAgICB3aTo6b3ZlcmZsb3dfdHlwZSBvdmY7CisgICAg ICBuZXdfbGIgPSB0eXBlX21pbjsKKyAgICAgIG5ld191YiA9IHdpOjpzdWIgKGxvd2VyX2JvdW5k ICgpLCAxLCBVTlNJR05FRCwgJm92Zik7CisgICAgICBpZiAob3ZmKQorCW5ld191YiA9IHR5cGVf bWF4OworICAgICAgc2V0ICh0eXBlICgpLCBuZXdfbGIsIG5ld191Yik7CisgICAgfQorICBlbHNl CisgICAgc2V0X3ZhcnlpbmcgKHR5cGUgKCkpOworfQorCit2b2lkCitwcmFuZ2U6OnZlcmlmeV9y YW5nZSAoKSBjb25zdAoreworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChtX2Rpc2NyaW1pbmF0b3Ig PT0gVlJfUFJBTkdFKTsKKworICBpZiAobV9raW5kID09IFZSX1VOREVGSU5FRCkKKyAgICByZXR1 cm47CisKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoc3VwcG9ydHNfcCAodHlwZSAoKSkpOworCisg IGlmIChtX2tpbmQgPT0gVlJfVkFSWUlORykKKyAgICB7CisgICAgICBnY2NfY2hlY2tpbmdfYXNz ZXJ0ICh2YXJ5aW5nX2NvbXBhdGlibGVfcCAoKSk7CisgICAgICByZXR1cm47CisgICAgfQorICBn Y2NfY2hlY2tpbmdfYXNzZXJ0ICghdmFyeWluZ19jb21wYXRpYmxlX3AgKCkpOworICBnY2NfY2hl Y2tpbmdfYXNzZXJ0IChtX2tpbmQgPT0gVlJfUkFOR0UpOworfQorCit2b2lkCitwcmFuZ2U6OnVw ZGF0ZV9iaXRtYXNrIChjb25zdCBpcmFuZ2VfYml0bWFzayAmYm0pCit7CisgIGdjY19jaGVja2lu Z19hc3NlcnQgKCF1bmRlZmluZWRfcCAoKSk7CisKKyAgLy8gSWYgYWxsIHRoZSBiaXRzIGFyZSBr bm93biwgdGhpcyBpcyBhIHNpbmdsZXRvbi4KKyAgaWYgKGJtLm1hc2sgKCkgPT0gMCkKKyAgICB7 CisgICAgICBzZXQgKHR5cGUgKCksIG1fYml0bWFzay52YWx1ZSAoKSwgbV9iaXRtYXNrLnZhbHVl ICgpKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgLy8gRHJvcCBWQVJZSU5HcyB3aXRoIGtu b3duIGJpdHMgdG8gYSBwbGFpbiByYW5nZS4KKyAgaWYgKG1fa2luZCA9PSBWUl9WQVJZSU5HICYm ICFibS51bmtub3duX3AgKCkpCisgICAgbV9raW5kID0gVlJfUkFOR0U7CisKKyAgbV9iaXRtYXNr ID0gYm07CisgIGlmICh2YXJ5aW5nX2NvbXBhdGlibGVfcCAoKSkKKyAgICBtX2tpbmQgPSBWUl9W QVJZSU5HOworCisgIGlmIChmbGFnX2NoZWNraW5nKQorICAgIHZlcmlmeV9yYW5nZSAoKTsKK30K KworCiB2b2lkCiBmcmFuZ2U6OmFjY2VwdCAoY29uc3QgdnJhbmdlX3Zpc2l0b3IgJnYpIGNvbnN0 CiB7CmRpZmYgLS1naXQgYS9nY2MvdmFsdWUtcmFuZ2UuaCBiL2djYy92YWx1ZS1yYW5nZS5oCmlu ZGV4IGRjNWIxNTNhODNlLi45ZmFjODlhMmY5OCAxMDA2NDQKLS0tIGEvZ2NjL3ZhbHVlLXJhbmdl LmgKKysrIGIvZ2NjL3ZhbHVlLXJhbmdlLmgKQEAgLTQ3LDYgKzQ3LDggQEAgZW51bSB2YWx1ZV9y YW5nZV9kaXNjcmltaW5hdG9yCiB7CiAgIC8vIFJhbmdlIGhvbGRzIGFuIGludGVnZXIgb3IgcG9p bnRlci4KICAgVlJfSVJBTkdFLAorICAvLyBQb2ludGVyIHJhbmdlLgorICBWUl9QUkFOR0UsCiAg IC8vIEZsb2F0aW5nIHBvaW50IHJhbmdlLgogICBWUl9GUkFOR0UsCiAgIC8vIFJhbmdlIGhvbGRz IGFuIHVuc3VwcG9ydGVkIHR5cGUuCkBAIC0zODksNiArMzkxLDU0IEBAIHByaXZhdGU6CiAgIHdp ZGVfaW50IG1fcmFuZ2VzW04qMl07CiB9OwogCitjbGFzcyBwcmFuZ2UgOiBwdWJsaWMgdnJhbmdl Cit7CisgIGZyaWVuZCBjbGFzcyBwcmFuZ2Vfc3RvcmFnZTsKKyAgZnJpZW5kIGNsYXNzIHZyYW5n ZV9wcmludGVyOworcHVibGljOgorICBwcmFuZ2UgKCk7CisgIHByYW5nZSAoY29uc3QgcHJhbmdl ICYpOworICBwcmFuZ2UgKHRyZWUgdHlwZSk7CisgIHByYW5nZSAodHJlZSB0eXBlLCBjb25zdCB3 aWRlX2ludCAmLCBjb25zdCB3aWRlX2ludCAmLAorCSAgdmFsdWVfcmFuZ2Vfa2luZCA9IFZSX1JB TkdFKTsKKyAgc3RhdGljIGJvb2wgc3VwcG9ydHNfcCAoY29uc3RfdHJlZSB0eXBlKTsKKyAgdmly dHVhbCBib29sIHN1cHBvcnRzX3R5cGVfcCAoY29uc3RfdHJlZSB0eXBlKSBjb25zdCBmaW5hbCBv dmVycmlkZTsKKyAgdmlydHVhbCB2b2lkIGFjY2VwdCAoY29uc3QgdnJhbmdlX3Zpc2l0b3IgJnYp IGNvbnN0IGZpbmFsIG92ZXJyaWRlOworICB2aXJ0dWFsIHZvaWQgc2V0X3VuZGVmaW5lZCAoKSBm aW5hbCBvdmVycmlkZTsKKyAgdmlydHVhbCB2b2lkIHNldF92YXJ5aW5nICh0cmVlIHR5cGUpIGZp bmFsIG92ZXJyaWRlOworICB2aXJ0dWFsIHZvaWQgc2V0X25vbnplcm8gKHRyZWUgdHlwZSkgZmlu YWwgb3ZlcnJpZGU7CisgIHZpcnR1YWwgdm9pZCBzZXRfemVybyAodHJlZSB0eXBlKSBmaW5hbCBv dmVycmlkZTsKKyAgdmlydHVhbCB2b2lkIHNldF9ub25uZWdhdGl2ZSAodHJlZSB0eXBlKSBmaW5h bCBvdmVycmlkZTsKKyAgdmlydHVhbCBib29sIGNvbnRhaW5zX3AgKHRyZWUgY3N0KSBjb25zdCBm aW5hbCBvdmVycmlkZTsKKyAgdmlydHVhbCBib29sIGZpdHNfcCAoY29uc3QgdnJhbmdlICZ2KSBj b25zdCBmaW5hbCBvdmVycmlkZTsKKyAgdmlydHVhbCBib29sIHNpbmdsZXRvbl9wICh0cmVlICpy ZXN1bHQgPSBOVUxMKSBjb25zdCBmaW5hbCBvdmVycmlkZTsKKyAgdmlydHVhbCBib29sIHplcm9f cCAoKSBjb25zdCBmaW5hbCBvdmVycmlkZTsKKyAgdmlydHVhbCBib29sIG5vbnplcm9fcCAoKSBj b25zdCBmaW5hbCBvdmVycmlkZTsKKyAgdmlydHVhbCB2b2lkIHNldCAodHJlZSwgdHJlZSwgdmFs dWVfcmFuZ2Vfa2luZCA9IFZSX1JBTkdFKSBmaW5hbCBvdmVycmlkZTsKKyAgdmlydHVhbCB0cmVl IHR5cGUgKCkgY29uc3QgZmluYWwgb3ZlcnJpZGU7CisgIHZpcnR1YWwgYm9vbCB1bmlvbl8gKGNv bnN0IHZyYW5nZSAmdikgZmluYWwgb3ZlcnJpZGU7CisgIHZpcnR1YWwgYm9vbCBpbnRlcnNlY3Qg KGNvbnN0IHZyYW5nZSAmdikgZmluYWwgb3ZlcnJpZGU7CisKKyAgcHJhbmdlJiBvcGVyYXRvcj0g KGNvbnN0IHByYW5nZSAmKTsKKyAgYm9vbCBvcGVyYXRvcj09IChjb25zdCBwcmFuZ2UgJikgY29u c3Q7CisgIHZvaWQgc2V0ICh0cmVlIHR5cGUsIGNvbnN0IHdpZGVfaW50ICYsIGNvbnN0IHdpZGVf aW50ICYsCisJICAgIHZhbHVlX3JhbmdlX2tpbmQgPSBWUl9SQU5HRSk7CisgIHZvaWQgaW52ZXJ0 ICgpOworICBib29sIGNvbnRhaW5zX3AgKGNvbnN0IHdpZGVfaW50ICYpIGNvbnN0OworICB3aWRl X2ludCBsb3dlcl9ib3VuZCAoKSBjb25zdDsKKyAgd2lkZV9pbnQgdXBwZXJfYm91bmQgKCkgY29u c3Q7CisgIHZvaWQgdmVyaWZ5X3JhbmdlICgpIGNvbnN0OworICBpcmFuZ2VfYml0bWFzayBnZXRf Yml0bWFzayAoKSBjb25zdDsKKyAgdm9pZCB1cGRhdGVfYml0bWFzayAoY29uc3QgaXJhbmdlX2Jp dG1hc2sgJik7Citwcm90ZWN0ZWQ6CisgIGJvb2wgdmFyeWluZ19jb21wYXRpYmxlX3AgKCkgY29u c3Q7CisKKyAgdHJlZSBtX3R5cGU7CisgIHdpZGVfaW50IG1fbWluOworICB3aWRlX2ludCBtX21h eDsKKyAgaXJhbmdlX2JpdG1hc2sgbV9iaXRtYXNrOworfTsKKwogLy8gVW5zdXBwb3J0ZWQgdGVt cG9yYXJpZXMgbWF5IGJlIGNyZWF0ZWQgYnkgcmFuZ2VyIGJlZm9yZSBpdCdzIGtub3duCiAvLyB0 aGV5J3JlIHVuc3VwcG9ydGVkLCBvciBieSB2cl92YWx1ZXM6OmdldF92YWx1ZV9yYW5nZS4KIApA QCAtNjY3LDYgKzcxNyw3IEBAIGNsYXNzIHZyYW5nZV92aXNpdG9yCiB7CiBwdWJsaWM6CiAgIHZp cnR1YWwgdm9pZCB2aXNpdCAoY29uc3QgaXJhbmdlICYpIGNvbnN0IHsgfQorICB2aXJ0dWFsIHZv aWQgdmlzaXQgKGNvbnN0IHByYW5nZSAmKSBjb25zdCB7IH0KICAgdmlydHVhbCB2b2lkIHZpc2l0 IChjb25zdCBmcmFuZ2UgJikgY29uc3QgeyB9CiAgIHZpcnR1YWwgdm9pZCB2aXNpdCAoY29uc3Qg dW5zdXBwb3J0ZWRfcmFuZ2UgJikgY29uc3QgeyB9CiB9OwpAQCAtMTE5Niw2ICsxMjQ3LDE1MSBA QCBpcmFuZ2VfdmFsX21heCAoY29uc3RfdHJlZSB0eXBlKQogICByZXR1cm4gd2k6Om1heF92YWx1 ZSAoVFlQRV9QUkVDSVNJT04gKHR5cGUpLCBUWVBFX1NJR04gKHR5cGUpKTsKIH0KIAoraW5saW5l CitwcmFuZ2U6OnByYW5nZSAoKQorICA6IHZyYW5nZSAoVlJfUFJBTkdFKQoreworICBzZXRfdW5k ZWZpbmVkICgpOworfQorCitpbmxpbmUKK3ByYW5nZTo6cHJhbmdlIChjb25zdCBwcmFuZ2UgJnIp CisgIDogdnJhbmdlIChWUl9QUkFOR0UpCit7CisgICp0aGlzID0gcjsKK30KKworaW5saW5lCitw cmFuZ2U6OnByYW5nZSAodHJlZSB0eXBlKQorICA6IHZyYW5nZSAoVlJfUFJBTkdFKQoreworICBz ZXRfdmFyeWluZyAodHlwZSk7Cit9CisKK2lubGluZQorcHJhbmdlOjpwcmFuZ2UgKHRyZWUgdHlw ZSwgY29uc3Qgd2lkZV9pbnQgJmxiLCBjb25zdCB3aWRlX2ludCAmdWIsCisJCXZhbHVlX3Jhbmdl X2tpbmQga2luZCkKKyAgOiB2cmFuZ2UgKFZSX1BSQU5HRSkKK3sKKyAgc2V0ICh0eXBlLCBsYiwg dWIsIGtpbmQpOworfQorCitpbmxpbmUgYm9vbAorcHJhbmdlOjpzdXBwb3J0c19wIChjb25zdF90 cmVlIHR5cGUpCit7CisgIHJldHVybiBQT0lOVEVSX1RZUEVfUCAodHlwZSk7Cit9CisKK2lubGlu ZSBib29sCitwcmFuZ2U6OnN1cHBvcnRzX3R5cGVfcCAoY29uc3RfdHJlZSB0eXBlKSBjb25zdAor eworICByZXR1cm4gUE9JTlRFUl9UWVBFX1AgKHR5cGUpOworfQorCitpbmxpbmUgdm9pZAorcHJh bmdlOjpzZXRfdW5kZWZpbmVkICgpCit7CisgIG1fa2luZCA9IFZSX1VOREVGSU5FRDsKK30KKwor aW5saW5lIHZvaWQKK3ByYW5nZTo6c2V0X3ZhcnlpbmcgKHRyZWUgdHlwZSkKK3sKKyAgbV9raW5k ID0gVlJfVkFSWUlORzsKKyAgbV90eXBlID0gdHlwZTsKKyAgbV9taW4gPSB3aTo6emVybyAoVFlQ RV9QUkVDSVNJT04gKHR5cGUpKTsKKyAgbV9tYXggPSB3aTo6bWF4X3ZhbHVlIChUWVBFX1BSRUNJ U0lPTiAodHlwZSksIFVOU0lHTkVEKTsKKyAgbV9iaXRtYXNrLnNldF91bmtub3duIChUWVBFX1BS RUNJU0lPTiAodHlwZSkpOworCisgIGlmIChmbGFnX2NoZWNraW5nKQorICAgIHZlcmlmeV9yYW5n ZSAoKTsKK30KKworaW5saW5lIHZvaWQKK3ByYW5nZTo6c2V0X25vbnplcm8gKHRyZWUgdHlwZSkK K3sKKyAgbV9raW5kID0gVlJfUkFOR0U7CisgIG1fdHlwZSA9IHR5cGU7CisgIG1fbWluID0gd2k6 Om9uZSAoVFlQRV9QUkVDSVNJT04gKHR5cGUpKTsKKyAgbV9tYXggPSB3aTo6bWF4X3ZhbHVlIChU WVBFX1BSRUNJU0lPTiAodHlwZSksIFVOU0lHTkVEKTsKKyAgbV9iaXRtYXNrLnNldF91bmtub3du IChUWVBFX1BSRUNJU0lPTiAodHlwZSkpOworCisgIGlmIChmbGFnX2NoZWNraW5nKQorICAgIHZl cmlmeV9yYW5nZSAoKTsKK30KKworaW5saW5lIHZvaWQKK3ByYW5nZTo6c2V0X3plcm8gKHRyZWUg dHlwZSkKK3sKKyAgbV9raW5kID0gVlJfUkFOR0U7CisgIG1fdHlwZSA9IHR5cGU7CisgIHdpZGVf aW50IHplcm8gPSB3aTo6emVybyAoVFlQRV9QUkVDSVNJT04gKHR5cGUpKTsKKyAgbV9taW4gPSBt X21heCA9IHplcm87CisgIG1fYml0bWFzayA9IGlyYW5nZV9iaXRtYXNrICh6ZXJvLCB6ZXJvKTsK KworICBpZiAoZmxhZ19jaGVja2luZykKKyAgICB2ZXJpZnlfcmFuZ2UgKCk7Cit9CisKK2lubGlu ZSBib29sCitwcmFuZ2U6OmNvbnRhaW5zX3AgKHRyZWUgY3N0KSBjb25zdAoreworICByZXR1cm4g Y29udGFpbnNfcCAod2k6OnRvX3dpZGUgKGNzdCkpOworfQorCitpbmxpbmUgYm9vbAorcHJhbmdl Ojp6ZXJvX3AgKCkgY29uc3QKK3sKKyAgcmV0dXJuIG1fa2luZCA9PSBWUl9SQU5HRSAmJiBtX21p biA9PSAwICYmIG1fbWF4ID09IDA7Cit9CisKK2lubGluZSBib29sCitwcmFuZ2U6Om5vbnplcm9f cCAoKSBjb25zdAoreworICByZXR1cm4gbV9raW5kID09IFZSX1JBTkdFICYmIG1fbWluID09IDEg JiYgbV9tYXggPT0gLTE7Cit9CisKK2lubGluZSB0cmVlCitwcmFuZ2U6OnR5cGUgKCkgY29uc3QK K3sKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIXVuZGVmaW5lZF9wICgpKTsKKyAgcmV0dXJuIG1f dHlwZTsKK30KKworaW5saW5lIHdpZGVfaW50CitwcmFuZ2U6Omxvd2VyX2JvdW5kICgpIGNvbnN0 Cit7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKCF1bmRlZmluZWRfcCAoKSk7CisgIHJldHVybiBt X21pbjsKK30KKworaW5saW5lIHdpZGVfaW50CitwcmFuZ2U6OnVwcGVyX2JvdW5kICgpIGNvbnN0 Cit7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKCF1bmRlZmluZWRfcCAoKSk7CisgIHJldHVybiBt X21heDsKK30KKworaW5saW5lIGJvb2wKK3ByYW5nZTo6dmFyeWluZ19jb21wYXRpYmxlX3AgKCkg Y29uc3QKK3sKKyAgcmV0dXJuICghdW5kZWZpbmVkX3AgKCkKKwkgICYmIG1fbWluID09IDAgJiYg bV9tYXggPT0gLTEgJiYgZ2V0X2JpdG1hc2sgKCkudW5rbm93bl9wICgpKTsKK30KKworaW5saW5l IGlyYW5nZV9iaXRtYXNrCitwcmFuZ2U6OmdldF9iaXRtYXNrICgpIGNvbnN0Cit7CisgIHJldHVy biBtX2JpdG1hc2s7Cit9CisKK2lubGluZSBib29sCitwcmFuZ2U6OmZpdHNfcCAoY29uc3QgdnJh bmdlICYpIGNvbnN0Cit7CisgIHJldHVybiB0cnVlOworfQorCisKIGlubGluZQogZnJhbmdlOjpm cmFuZ2UgKCkKICAgOiB2cmFuZ2UgKFZSX0ZSQU5HRSkKLS0gCjIuNDQuMAoK --00000000000030b21f0616fcbb1c Content-Type: application/octet-stream; name="irange_get_bitmask_with_patch.s" Content-Disposition: attachment; filename="irange_get_bitmask_with_patch.s" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lvghhyvj3 CS5nbG9ibAlfWk5LNmlyYW5nZTExZ2V0X2JpdG1hc2tFdgoJLnR5cGUJX1pOSzZpcmFuZ2UxMWdl dF9iaXRtYXNrRXYsIEBmdW5jdGlvbgpfWk5LNmlyYW5nZTExZ2V0X2JpdG1hc2tFdjoKLkxGQjMy NDI6CgkuY2ZpX3N0YXJ0cHJvYwoJcHVzaHEJJXIxMwoJLmNmaV9kZWZfY2ZhX29mZnNldCAxNgoJ LmNmaV9vZmZzZXQgMTMsIC0xNgoJbW92cQklcmRpLCAlcjEzCglwdXNocQklcjEyCgkuY2ZpX2Rl Zl9jZmFfb2Zmc2V0IDI0CgkuY2ZpX29mZnNldCAxMiwgLTI0CglwdXNocQklcmJwCgkuY2ZpX2Rl Zl9jZmFfb2Zmc2V0IDMyCgkuY2ZpX29mZnNldCA2LCAtMzIKCXB1c2hxCSVyYngKCS5jZmlfZGVm X2NmYV9vZmZzZXQgNDAKCS5jZmlfb2Zmc2V0IDMsIC00MAoJbW92cQklcnNpLCAlcmJ4CglzdWJx CSQxNjgsICVyc3AKCS5jZmlfZGVmX2NmYV9vZmZzZXQgMjA4Cgltb3Z6YmwJMTAoJXJzaSksICVl YXgKCW1vdnEJMTg0KCVyc2kpLCAlcjEyCglsZWFsCS0xKCVyYXgsJXJheCksICVlYXgKCWxlYXEJ KCVyYXgsJXJheCw0KSwgJXJicAoJc2FscQkkNCwgJXJicAoJYWRkcQklcjEyLCAlcmJwCgltb3Zk cXUJMCglcmJwKSwgJXhtbTAKCW1vdmFwcwkleG1tMCwgODAoJXJzcCkKCW1vdmRxdQkxNiglcmJw KSwgJXhtbTAKCW1vdmFwcwkleG1tMCwgOTYoJXJzcCkKCW1vdmRxdQkzMiglcmJwKSwgJXhtbTAK CW1vdmFwcwkleG1tMCwgMTEyKCVyc3ApCgltb3ZkcXUJNDgoJXJicCksICV4bW0wCgltb3ZhcHMJ JXhtbTAsIDEyOCglcnNwKQoJbW92ZHF1CTY0KCVyYnApLCAleG1tMAoJbW92YXBzCSV4bW0wLCAx NDQoJXJzcCkKCW1vdmwJMTU2KCVyc3ApLCAlZWF4CgljbXBsCSQ1NzYsICVlYXgKCWphCS5MMjQ2 MAouTDI0NDg6Cgltb3ZkcXUJKCVyMTIpLCAleG1tMAoJbW92YXBzCSV4bW0wLCAoJXJzcCkKCW1v dmRxdQkxNiglcjEyKSwgJXhtbTAKCW1vdmFwcwkleG1tMCwgMTYoJXJzcCkKCW1vdmRxdQkzMigl cjEyKSwgJXhtbTAKCW1vdmFwcwkleG1tMCwgMzIoJXJzcCkKCW1vdmRxdQk0OCglcjEyKSwgJXht bTAKCW1vdmFwcwkleG1tMCwgNDgoJXJzcCkKCW1vdmRxdQk2NCglcjEyKSwgJXhtbTAKCW1vdmFw cwkleG1tMCwgNjQoJXJzcCkKCW1vdmwJNzYoJXJzcCksICVlYXgKCWNtcGwJJDU3NiwgJWVheAoJ amEJLkwyNDYxCi5MMjQ0OToKCW1vdnEJKCVyYngpLCAlcmF4Cgltb3ZxCTE2KCVyYXgpLCAlcmF4 CgljbXBxCSRfWk5LNmlyYW5nZTR0eXBlRXYsICVyYXgKCWpuZQkuTDI0NTAKCW1vdnEJMTYoJXJi eCksICVyYXgKLkwyNDUxOgoJbW92endsCTU0KCVyYXgpLCAlZXNpCglsZWFxCTgwKCVyc3ApLCAl cmN4Cgltb3ZxCSVyc3AsICVyZHgKCW1vdnEJJXIxMywgJXJkaQoJY2FsbAlfWkwyMmdldF9iaXRt YXNrX2Zyb21fcmFuZ2VQOXRyZWVfbm9kZVJLMTZnZW5lcmljX3dpZGVfaW50STE2d2lkZV9pbnRf c3RvcmFnZUVTNV8uaXNyYS4wCgljbXBsCSQ1NzYsIDc2KCVyc3ApCglqYQkuTDI0NjIKCWNtcGwJ JDU3NiwgMTU2KCVyc3ApCglqYQkuTDI0NjMKLkwyNDUzOgoJY21wbAkkNTc2LCAxODAoJXJieCkK CW1vdmwJMTc2KCVyYngpLCAlZWF4CglsZWFxCTEwNCglcmJ4KSwgJXJkeAoJamEJLkwyNDY0Ci5M MjQ1NToKCWNtcGwJJDEsICVlYXgKCWpuZQkuTDI0NTgKCWNtcHEJJC0xLCAoJXJkeCkKCWplCS5M MjQ0NwouTDI0NTg6CglsZWFxCTI0KCVyYngpLCAlcnNpCgltb3ZxCSVyMTMsICVyZGkKCWNhbGwJ X1pOMTRpcmFuZ2VfYml0bWFzazlpbnRlcnNlY3RFUktTXwouTDI0NDc6CglhZGRxCSQxNjgsICVy c3AKCS5jZmlfcmVtZW1iZXJfc3RhdGUKCS5jZmlfZGVmX2NmYV9vZmZzZXQgNDAKCW1vdnEJJXIx MywgJXJheAoJcG9wcQklcmJ4CgkuY2ZpX2RlZl9jZmFfb2Zmc2V0IDMyCglwb3BxCSVyYnAKCS5j ZmlfZGVmX2NmYV9vZmZzZXQgMjQKCXBvcHEJJXIxMgoJLmNmaV9kZWZfY2ZhX29mZnNldCAxNgoJ cG9wcQklcjEzCgkuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKCXJldAoJLnAyYWxpZ24gNCwsMTAKCS5w MmFsaWduIDMKLkwyNDUwOgoJLmNmaV9yZXN0b3JlX3N0YXRlCgltb3ZxCSVyYngsICVyZGkKCWNh bGwJKiVyYXgKCWptcAkuTDI0NTEKCS5wMmFsaWduIDQsLDEwCgkucDJhbGlnbiAzCi5MMjQ2MToK CWxlYWwJNjMoJXJheCksICVlZGkKCXNocmwJJDYsICVlZGkKCXNhbHEJJDMsICVyZGkKCWNhbGwJ eG1hbGxvYwoJbW92bAk3MiglcnNwKSwgJWVkeAoJbW92cQkoJXIxMiksICVyc2kKCW1vdnEJJXJh eCwgJXJkaQoJbW92cQklcmF4LCAoJXJzcCkKCXNhbHEJJDMsICVyZHgKCWNhbGwJbWVtY3B5Cglq bXAJLkwyNDQ5CgkucDJhbGlnbiA0LCwxMAoJLnAyYWxpZ24gMwouTDI0NjI6Cgltb3ZxCSglcnNw KSwgJXJkaQoJY2FsbAlmcmVlCgljbXBsCSQ1NzYsIDE1NiglcnNwKQoJamJlCS5MMjQ1MwoJLnAy YWxpZ24gNCwsMTAKCS5wMmFsaWduIDMKLkwyNDYzOgoJbW92cQk4MCglcnNwKSwgJXJkaQoJY2Fs bAlmcmVlCglqbXAJLkwyNDUzCgkucDJhbGlnbiA0LCwxMAoJLnAyYWxpZ24gMwouTDI0NjQ6Cglt b3ZxCTEwNCglcmJ4KSwgJXJkeAoJam1wCS5MMjQ1NQoJLnAyYWxpZ24gNCwsMTAKCS5wMmFsaWdu IDMKLkwyNDYwOgoJbGVhbAk2MyglcmF4KSwgJWVkaQoJc2hybAkkNiwgJWVkaQoJc2FscQkkMywg JXJkaQoJY2FsbAl4bWFsbG9jCgltb3ZsCTE1MiglcnNwKSwgJWVkeAoJbW92cQkwKCVyYnApLCAl cnNpCgltb3ZxCSVyYXgsICVyZGkKCW1vdnEJJXJheCwgODAoJXJzcCkKCXNhbHEJJDMsICVyZHgK CWNhbGwJbWVtY3B5Cgltb3ZxCTE4NCglcmJ4KSwgJXIxMgoJam1wCS5MMjQ0OAoJLmNmaV9lbmRw cm9jCi5MRkUzMjQyOgoJLnNpemUJX1pOSzZpcmFuZ2UxMWdldF9iaXRtYXNrRXYsIC4tX1pOSzZp cmFuZ2UxMWdldF9iaXRtYXNrRXYKCS5zZWN0aW9uCS5yb2RhdGEuc3RyMS4xCi5MQzM4OgoJLnN0 cmluZwkiYWRkX3ZyYW5nZSIK --00000000000030b21f0616fcbb1c Content-Type: application/octet-stream; name="irange_get_bitmask_without_patch.s" Content-Disposition: attachment; filename="irange_get_bitmask_without_patch.s" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lvghhyvh2 CS5nbG9ibAlfWk5LNmlyYW5nZTExZ2V0X2JpdG1hc2tFdgoJLnR5cGUJX1pOSzZpcmFuZ2UxMWdl dF9iaXRtYXNrRXYsIEBmdW5jdGlvbgpfWk5LNmlyYW5nZTExZ2V0X2JpdG1hc2tFdjoKLkxGQjMx OTc6CgkuY2ZpX3N0YXJ0cHJvYwoJcHVzaHEJJXIxNQoJLmNmaV9kZWZfY2ZhX29mZnNldCAxNgoJ LmNmaV9vZmZzZXQgMTUsIC0xNgoJcHVzaHEJJXIxNAoJLmNmaV9kZWZfY2ZhX29mZnNldCAyNAoJ LmNmaV9vZmZzZXQgMTQsIC0yNAoJcHVzaHEJJXIxMwoJLmNmaV9kZWZfY2ZhX29mZnNldCAzMgoJ LmNmaV9vZmZzZXQgMTMsIC0zMgoJcHVzaHEJJXIxMgoJLmNmaV9kZWZfY2ZhX29mZnNldCA0MAoJ LmNmaV9vZmZzZXQgMTIsIC00MAoJcHVzaHEJJXJicAoJLmNmaV9kZWZfY2ZhX29mZnNldCA0OAoJ LmNmaV9vZmZzZXQgNiwgLTQ4Cgltb3ZxCSVyZGksICVyYnAKCXB1c2hxCSVyYngKCS5jZmlfZGVm X2NmYV9vZmZzZXQgNTYKCS5jZmlfb2Zmc2V0IDMsIC01NgoJbW92cQklcnNpLCAlcmJ4CglzdWJx CSQ1ODQsICVyc3AKCS5jZmlfZGVmX2NmYV9vZmZzZXQgNjQwCgltb3Z6YmwJMTAoJXJzaSksICVl YXgKCW1vdnEJMTg0KCVyc2kpLCAlcjEzCglsZWFsCS0xKCVyYXgsJXJheCksICVlYXgKCWxlYXEJ KCVyYXgsJXJheCw0KSwgJXIxMgoJc2FscQkkNCwgJXIxMgoJYWRkcQklcjEzLCAlcjEyCgltb3Zk cXUJKCVyMTIpLCAleG1tMAoJbW92YXBzCSV4bW0wLCA5NiglcnNwKQoJbW92ZHF1CTE2KCVyMTIp LCAleG1tMAoJbW92YXBzCSV4bW0wLCAxMTIoJXJzcCkKCW1vdmRxdQkzMiglcjEyKSwgJXhtbTAK CW1vdmFwcwkleG1tMCwgMTI4KCVyc3ApCgltb3ZkcXUJNDgoJXIxMiksICV4bW0wCgltb3ZhcHMJ JXhtbTAsIDE0NCglcnNwKQoJbW92ZHF1CTY0KCVyMTIpLCAleG1tMAoJbW92YXBzCSV4bW0wLCAx NjAoJXJzcCkKCW1vdmwJMTcyKCVyc3ApLCAlZWF4CgljbXBsCSQ1NzYsICVlYXgKCWphCS5MMTYx MAouTDE1MzI6Cgltb3ZkcXUJMCglcjEzKSwgJXhtbTAKCW1vdmFwcwkleG1tMCwgMTYoJXJzcCkK CW1vdmRxdQkxNiglcjEzKSwgJXhtbTAKCW1vdmFwcwkleG1tMCwgMzIoJXJzcCkKCW1vdmRxdQkz MiglcjEzKSwgJXhtbTAKCW1vdmFwcwkleG1tMCwgNDgoJXJzcCkKCW1vdmRxdQk0OCglcjEzKSwg JXhtbTAKCW1vdmFwcwkleG1tMCwgNjQoJXJzcCkKCW1vdmRxdQk2NCglcjEzKSwgJXhtbTAKCW1v dmFwcwkleG1tMCwgODAoJXJzcCkKCW1vdmwJOTIoJXJzcCksICVlYXgKCWNtcGwJJDU3NiwgJWVh eAoJamEJLkwxNjExCi5MMTUzMzoKCW1vdnEJKCVyYngpLCAlcmF4Cgltb3ZxCTE2KCVyYXgpLCAl cmF4CgljbXBxCSRfWk5LNmlyYW5nZTR0eXBlRXYsICVyYXgKCWpuZQkuTDE1MzQKCW1vdnEJMTYo JXJieCksICVyYXgKLkwxNTM1OgoJbW92bAk5MiglcnNwKSwgJXI5ZAoJbW92endsCTU0KCVyYXgp LCAlcjE0ZAoJbW92bAk4OCglcnNwKSwgJWVzaQoJbW92bAkxNzIoJXJzcCksICVyMTFkCgltb3Zs CTE2OCglcnNwKSwgJXI4ZAoJY21wbAkkNTc2LCAlcjlkCglqYQkuTDE1MzYKCWNtcGwJJDU3Niwg JXIxMWQKCWphCS5MMTYxMgoJY21wbAklcjhkLCAlZXNpCglqZQkuTDE1ODcKCW1vdmwJJXI5ZCwg MjUyKCVyc3ApCglsZWFxCTE2KCVyc3ApLCAlcjEyCglsZWFxCTk2KCVyc3ApLCAlcmN4CglsZWFx CTE3NiglcnNwKSwgJXIxNQoJbW92cQklcjEyLCAlcmF4Cgltb3ZxCSVyMTUsICVyZGkKLkwxNTQx OgoJbGVhbAkoJXJzaSwlcjgpLCAlZWR4CgljbXBsCSQyLCAlZWR4CglqbmUJLkwxNTU1Cgltb3Zs CTI1MiglcnNwKSwgJWVkeAoJbW92cQkoJXJheCksICVyYXgKCXhvcnEJKCVyY3gpLCAlcmF4Cglt b3ZxCSVyMTUsICVyY3gKCW1vdnEJJXJheCwgKCVyZGkpCgltb3ZsCSQxLCAyNDgoJXJzcCkKCWNt cGwJJDU3NiwgJWVkeAoJamEJLkwxNjEzCi5MMTU1NjoKCWNtcHEJJDAsICglcmN4KQoJam5lCS5M MTU5MwoJbGVhcQk0MTYoJXJzcCksICVyYXgKCWxlYXEJNDk2KCVyc3ApLCAlcjEzCgltb3ZxCSVy YXgsICglcnNwKQouTDE1NjU6Cgltb3ZxCSglcnNwKSwgJXJkaQoJbW92cQklcjE1LCAlcmR4Cglt b3ZxCSVyMTIsICVyc2kKCWNhbGwJX1pOMndpNmJpdF9vckkxNmdlbmVyaWNfd2lkZV9pbnRJMTZ3 aWRlX2ludF9zdG9yYWdlRVMzX0VFTlNfMTNiaW5hcnlfdHJhaXRzSVRfVDBfWHNyTlNfMTBpbnRf dHJhaXRzSVM1X0VFMTRwcmVjaXNpb25fdHlwZUVYc3JOUzdfSVM2X0VFMTRwcmVjaXNpb25fdHlw ZUVFMTFyZXN1bHRfdHlwZUVSS1M1X1JLUzZfCglsZWFxCTM1MiglcnNwKSwgJXJheAoJbW92cQkk MCwgMzUyKCVyc3ApCgltb3ZxCSVyYXgsIDMzNiglcnNwKQoJbW92bAkkMSwgMzQ0KCVyc3ApCglt b3ZsCSVyMTRkLCAzNDgoJXJzcCkKCW1vdmwJJXIxNGQsIDU3MiglcnNwKQoJY21wbAkkNTc2LCAl cjE0ZAoJamEJLkwxNjE0Cgltb3ZxCSQwLCA0OTYoJXJzcCkKCW1vdmwJJDEsICVlc2kKLkwxNTgy OgoJbW92bAkkMCwgNzYoJXJicCkKCW1vdnEJJXJicCwgJXJkaQoJbW92bAkkMCwgMTU2KCVyYnAp Cgltb3ZsCSVlc2ksIDU2OCglcnNwKQoJbW92cQklcjEzLCAlcnNpCgljYWxsCV9aTjE2d2lkZV9p bnRfc3RvcmFnZWFTRVJLU18uaXNyYS4wCgltb3ZxCSglcnNwKSwgJXJzaQoJbGVhcQk4MCglcmJw KSwgJXJkaQoJY2FsbAlfWk4xNndpZGVfaW50X3N0b3JhZ2VhU0VSS1NfLmlzcmEuMAoJbW92bAln bG9iYWxfb3B0aW9ucyszNTM2KCVyaXApLCAlZWF4Cgl0ZXN0bAklZWF4LCAlZWF4CglqZQkuTDE1 NjkKCW1vdmwJMTU2KCVyYnApLCAlZWF4CgljbXBsCSVlYXgsIDc2KCVyYnApCglqbmUJLkwxNTcw Ci5MMTU2OToKCWNtcGwJJDU3NiwgNTcyKCVyc3ApCglqYQkuTDE2MTUKLkwxNTcxOgoJY21wbAkk NTc2LCA0OTIoJXJzcCkKCWphCS5MMTYxNgouTDE1NzI6CgljbXBsCSQ1NzYsIDI1MiglcnNwKQoJ amJlCS5MMTU1MgoJbW92cQkxNzYoJXJzcCksICVyZGkKCWNhbGwJZnJlZQoJam1wCS5MMTU1MgoJ LnAyYWxpZ24gNCwsMTAKCS5wMmFsaWduIDMKLkwxNTg3OgoJbGVhcQkxNiglcnNwKSwgJXIxMgoJ bGVhcQk5NiglcnNwKSwgJXJkaQoJbW92cQklcjEyLCAlcmN4Ci5MMTU0MDoKCXhvcmwJJWVheCwg JWVheAoJam1wCS5MMTU0NQoJLnAyYWxpZ24gNCwsMTAKCS5wMmFsaWduIDMKLkwxNjE4OgoJYWRk bAkkMSwgJWVheAoJY21wbAklZWF4LCAlZXNpCglqZQkuTDE2MTcKLkwxNTQ1OgoJbW92bAklZWF4 LCAlZWR4Cgltb3ZxCSglcmRpLCVyZHgsOCksICVyMTAKCWNtcHEJJXIxMCwgKCVyY3gsJXJkeCw4 KQoJamUJLkwxNjE4Cgltb3ZsCSVyOWQsIDI1MiglcnNwKQoJY21wbAkkNTc2LCAlcjlkCglqYQku TDE1NDMKCWxlYXEJMTc2KCVyc3ApLCAlcjE1Cgltb3ZxCSVyMTIsICVyYXgKCW1vdnEJJXIxNSwg JXJkaQoJLnAyYWxpZ24gNCwsMTAKCS5wMmFsaWduIDMKLkwxNTU0OgoJbGVhcQk5NiglcnNwKSwg JXJjeAoJY21wbAkkNTc2LCAlcjExZAoJamJlCS5MMTU0MQoJLnAyYWxpZ24gNCwsMTAKCS5wMmFs aWduIDMKLkwxNTM5OgoJbW92cQk5NiglcnNwKSwgJXJjeAoJam1wCS5MMTU0MQoJLnAyYWxpZ24g NCwsMTAKCS5wMmFsaWduIDMKLkwxNjE3OgoJbGVhcQk1MTIoJXJzcCksICVyYXgKCW1vdmwJJXIx NGQsIDUwOCglcnNwKQoJbW92cQkkMCwgNTEyKCVyc3ApCgltb3ZxCSVyYXgsIDQ5NiglcnNwKQoJ bW92bAkkMSwgNTA0KCVyc3ApCgltb3ZsCSVyMTRkLCAzMzIoJXJzcCkKCWNtcGwJJDU3NiwgJXIx NGQKCWphCS5MMTYxOQoJbW92bAkkMSwgJWVzaQoJbGVhcQkyNTYoJXJzcCksICVyMTMKCW1vdnEJ JDAsIDI1NiglcnNwKQouTDE1ODM6CglsZWFxCTMzNiglcnNwKSwgJXIxNAoJbW92bAklZXNpLCAz MjgoJXJzcCkKCW1vdnEJJXIxMiwgJXJzaQoJbW92cQklcjE0LCAlcmRpCgljYWxsCV9aTjE2d2lk ZV9pbnRfc3RvcmFnZUMyRVJLU18KCW1vdmwJJDAsIDc2KCVyYnApCgltb3ZxCSVyMTQsICVyc2kK CW1vdnEJJXJicCwgJXJkaQoJbW92bAkkMCwgMTU2KCVyYnApCgljYWxsCV9aTjE2d2lkZV9pbnRf c3RvcmFnZWFTRVJLU18uaXNyYS4wCglsZWFxCTgwKCVyYnApLCAlcmRpCgltb3ZxCSVyMTMsICVy c2kKCWNhbGwJX1pOMTZ3aWRlX2ludF9zdG9yYWdlYVNFUktTXy5pc3JhLjAKCW1vdmwJZ2xvYmFs X29wdGlvbnMrMzUzNiglcmlwKSwgJWVkeAoJdGVzdGwJJWVkeCwgJWVkeAoJamUJLkwxNTQ5Cglt b3ZsCTE1NiglcmJwKSwgJWVheAoJY21wbAklZWF4LCA3NiglcmJwKQoJam5lCS5MMTU3MAouTDE1 NDk6CgljbXBsCSQ1NzYsIDQxMiglcnNwKQoJamEJLkwxNjIwCi5MMTU1MDoKCWNtcGwJJDU3Niwg MzMyKCVyc3ApCglqYQkuTDE2MjEKLkwxNTUyOgoJY21wbAkkNTc2LCA5MiglcnNwKQoJamEJLkwx NjIyCi5MMTU3NDoKCWNtcGwJJDU3NiwgMTcyKCVyc3ApCglqYQkuTDE2MjMKLkwxNTc1OgoJY21w bAkkNTc2LCAxODAoJXJieCkKCW1vdmwJMTc2KCVyYngpLCAlZWF4CglsZWFxCTEwNCglcmJ4KSwg JXJkeAoJamEJLkwxNjI0Ci5MMTU3NzoKCWNtcGwJJDEsICVlYXgKCWpuZQkuTDE1ODAKCWNtcHEJ JC0xLCAoJXJkeCkKCWplCS5MMTUzMQouTDE1ODA6CglsZWFxCTI0KCVyYngpLCAlcnNpCgltb3Zx CSVyYnAsICVyZGkKCWNhbGwJX1pOMTRpcmFuZ2VfYml0bWFzazlpbnRlcnNlY3RFUktTXwouTDE1 MzE6CglhZGRxCSQ1ODQsICVyc3AKCS5jZmlfcmVtZW1iZXJfc3RhdGUKCS5jZmlfZGVmX2NmYV9v ZmZzZXQgNTYKCW1vdnEJJXJicCwgJXJheAoJcG9wcQklcmJ4CgkuY2ZpX2RlZl9jZmFfb2Zmc2V0 IDQ4Cglwb3BxCSVyYnAKCS5jZmlfZGVmX2NmYV9vZmZzZXQgNDAKCXBvcHEJJXIxMgoJLmNmaV9k ZWZfY2ZhX29mZnNldCAzMgoJcG9wcQklcjEzCgkuY2ZpX2RlZl9jZmFfb2Zmc2V0IDI0Cglwb3Bx CSVyMTQKCS5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKCXBvcHEJJXIxNQoJLmNmaV9kZWZfY2ZhX29m ZnNldCA4CglyZXQKCS5wMmFsaWduIDQsLDEwCgkucDJhbGlnbiAzCi5MMTUzNDoKCS5jZmlfcmVz dG9yZV9zdGF0ZQoJbW92cQklcmJ4LCAlcmRpCgljYWxsCSolcmF4CglqbXAJLkwxNTM1CgkucDJh bGlnbiA0LCwxMAoJLnAyYWxpZ24gMwouTDE1OTM6Cgltb3ZsCSQxLCAlZWF4Ci5MMTU2NDoKCW1v dmwJJWVheCwgNDI0KCVyc3ApCglsZWFxCTQxNiglcnNwKSwgJXJheAoJbGVhcQk0OTYoJXJzcCks ICVyMTMKCW1vdnEJJXJheCwgJXJkaQoJbW92cQklcmN4LCA0MTYoJXJzcCkKCW1vdmwJJWVkeCwg NDI4KCVyc3ApCgltb3ZxCSVyYXgsICglcnNwKQoJY2FsbAlfWk4yd2kzY2x6RVJLMTZnZW5lcmlj X3dpZGVfaW50STIwd2lkZV9pbnRfcmVmX3N0b3JhZ2VJTGIwRUxiMUVFRQoJbW92bAklcjE0ZCwg JWVzaQoJbW92bAklcjE0ZCwgNTcyKCVyc3ApCglzdWJsCSVlYXgsICVlc2kKCWNtcGwJJDU3Niwg JXIxNGQKCWphCS5MMTYyNQouTDE1NTg6Cgltb3ZxCSVyMTMsICVyZGkKLkwxNTU5OgoJbW92bAkl cjE0ZCwgJWVjeAoJeG9ybAklZWR4LCAlZWR4CgljYWxsCV9aTjJ3aTRtYXNrRVBsamJqCgltb3Zs CTU3MiglcnNwKSwgJWVkeAoJbW92bAklZWF4LCAlZWN4Cgltb3ZsCSVlYXgsIDU2OCglcnNwKQoJ c2FsbAkkNiwgJWVjeAoJY21wbAklZWN4LCAlZWR4CglqbmIJLkwxNTYwCgltb3ZxCSVyMTMsICVy Y3gKCWNtcGwJJDU3NiwgJWVkeAoJamEJLkwxNjI2Ci5MMTU2MToKCXN1YmwJJDEsICVlYXgKCWFu ZGwJJDYzLCAlZWR4CglsZWFxCSglcmN4LCVyYXgsOCksICVyc2kKCW1vdmwJJDY0LCAlZWN4Cglt b3ZxCSglcnNpKSwgJXJheAoJc3VibAklZWR4LCAlZWN4CglzYWxxCSVjbCwgJXJheAoJc2FycQkl Y2wsICVyYXgKCW1vdnEJJXJheCwgKCVyc2kpCi5MMTU2MDoKCW1vdnEJJXIxMywgJXJzaQoJbW92 cQklcjE1LCAlcmRpCgljYWxsCV9aTjE2d2lkZV9pbnRfc3RvcmFnZWFTRVJLU18uaXNyYS4wCglj bXBsCSQ1NzYsIDU3MiglcnNwKQoJamJlCS5MMTU2NQoJbW92cQk0OTYoJXJzcCksICVyZGkKCWNh bGwJZnJlZQoJam1wCS5MMTU2NQoJLnAyYWxpZ24gNCwsMTAKCS5wMmFsaWduIDMKLkwxNTM2OgoJ bW92cQkxNiglcnNwKSwgJXJjeAoJY21wbAkkNTc2LCAlcjExZAoJamEJLkwxNjI3CgljbXBsCSVy OGQsICVlc2kKCWpuZQkuTDE1ODEKCWxlYXEJOTYoJXJzcCksICVyZGkKCWxlYXEJMTYoJXJzcCks ICVyMTIKCWptcAkuTDE1NDAKLkwxNjI3OgoJbGVhcQkxNiglcnNwKSwgJXIxMgoJY21wbAklcjhk LCAlZXNpCglqZQkuTDE1MzgKCS5wMmFsaWduIDQsLDEwCgkucDJhbGlnbiAzCi5MMTU4MToKCW1v dmwJJXI5ZCwgMjUyKCVyc3ApCglsZWFxCTE2KCVyc3ApLCAlcjEyCi5MMTU0MzoKCWxlYWwJNjMo JXI5KSwgJWVkaQoJbGVhcQkxNzYoJXJzcCksICVyMTUKCXNocmwJJDYsICVlZGkKCXNhbHEJJDMs ICVyZGkKCWNhbGwJeG1hbGxvYwoJbW92bAk4OCglcnNwKSwgJWVzaQoJbW92bAkyNTIoJXJzcCks ICVyOWQKCW1vdnEJJXJheCwgMTc2KCVyc3ApCgltb3ZsCTkyKCVyc3ApLCAlZWR4Cgltb3ZxCSVy YXgsICVyZGkKCW1vdmwJMTY4KCVyc3ApLCAlcjhkCgltb3ZsCTE3MiglcnNwKSwgJXIxMWQKCWNt cGwJJDU3NiwgJXI5ZAoJamJlCS5MMTYwNwouTDE1NTM6Cgltb3ZxCSVyMTIsICVyYXgKCWNtcGwJ JDU3NiwgJWVkeAoJamJlCS5MMTU1NAoJbW92cQkxNiglcnNwKSwgJXJheAoJam1wCS5MMTU1NAoJ LnAyYWxpZ24gNCwsMTAKCS5wMmFsaWduIDMKLkwxNjI0OgoJbW92cQkxMDQoJXJieCksICVyZHgK CWptcAkuTDE1NzcKCS5wMmFsaWduIDQsLDEwCgkucDJhbGlnbiAzCi5MMTYyMzoKCW1vdnEJOTYo JXJzcCksICVyZGkKCWNhbGwJZnJlZQoJam1wCS5MMTU3NQoJLnAyYWxpZ24gNCwsMTAKCS5wMmFs aWduIDMKLkwxNjIyOgoJbW92cQkxNiglcnNwKSwgJXJkaQoJY2FsbAlmcmVlCglqbXAJLkwxNTc0 CgkucDJhbGlnbiA0LCwxMAoJLnAyYWxpZ24gMwouTDE2MTA6CglsZWFsCTYzKCVyYXgpLCAlZWRp CglzaHJsCSQ2LCAlZWRpCglzYWxxCSQzLCAlcmRpCgljYWxsCXhtYWxsb2MKCW1vdmwJMTY4KCVy c3ApLCAlZWR4Cgltb3ZxCSglcjEyKSwgJXJzaQoJbW92cQklcmF4LCAlcmRpCgltb3ZxCSVyYXgs IDk2KCVyc3ApCglzYWxxCSQzLCAlcmR4CgljYWxsCW1lbWNweQoJbW92cQkxODQoJXJieCksICVy MTMKCWptcAkuTDE1MzIKCS5wMmFsaWduIDQsLDEwCgkucDJhbGlnbiAzCi5MMTYxMToKCWxlYWwJ NjMoJXJheCksICVlZGkKCXNocmwJJDYsICVlZGkKCXNhbHEJJDMsICVyZGkKCWNhbGwJeG1hbGxv YwoJbW92bAk4OCglcnNwKSwgJWVkeAoJbW92cQkwKCVyMTMpLCAlcnNpCgltb3ZxCSVyYXgsICVy ZGkKCW1vdnEJJXJheCwgMTYoJXJzcCkKCXNhbHEJJDMsICVyZHgKCWNhbGwJbWVtY3B5CglqbXAJ LkwxNTMzCgkucDJhbGlnbiA0LCwxMAoJLnAyYWxpZ24gMwouTDE2MTI6CgljbXBsCSVyOGQsICVl c2kKCWplCS5MMTU4NgoJbGVhcQkxNzYoJXJzcCksICVyMTUKCWxlYXEJMTYoJXJzcCksICVyMTIK CW1vdmwJJXI5ZCwgMjUyKCVyc3ApCgltb3ZxCSVyMTUsICVyZGkKCW1vdnEJJXIxMiwgJXJheAoJ am1wCS5MMTUzOQoJLnAyYWxpZ24gNCwsMTAKCS5wMmFsaWduIDMKLkwxNjE0OgoJbGVhbAk2Mygl cjE0KSwgJWVkaQoJc2hybAkkNiwgJWVkaQoJc2FscQkkMywgJXJkaQoJY2FsbAl4bWFsbG9jCglt b3ZsCTM0NCglcnNwKSwgJWVzaQoJY21wbAkkNTc2LCA1NzIoJXJzcCkKCW1vdnEJJXJheCwgNDk2 KCVyc3ApCgltb3ZxCTMzNiglcnNwKSwgJXJkaQoJamJlCS5MMTYyOAouTDE1Njc6Cgl4b3JsCSVl ZHgsICVlZHgKCS5wMmFsaWduIDQsLDEwCgkucDJhbGlnbiAzCi5MMTU2ODoKCW1vdnEJKCVyZGks JXJkeCw4KSwgJXJjeAoJbW92cQklcmN4LCAoJXJheCwlcmR4LDgpCglhZGRxCSQxLCAlcmR4Cglj bXBsCSVlc2ksICVlZHgKCWpiCS5MMTU2OAoJam1wCS5MMTU4MgoJLnAyYWxpZ24gNCwsMTAKCS5w MmFsaWduIDMKLkwxNjIxOgoJbW92cQkyNTYoJXJzcCksICVyZGkKCWNhbGwJZnJlZQoJam1wCS5M MTU1MgoJLnAyYWxpZ24gNCwsMTAKCS5wMmFsaWduIDMKLkwxNjIwOgoJbW92cQkzMzYoJXJzcCks ICVyZGkKCWNhbGwJZnJlZQoJam1wCS5MMTU1MAoJLnAyYWxpZ24gNCwsMTAKCS5wMmFsaWduIDMK LkwxNjE5OgoJbGVhbAk2MyglcjE0KSwgJWVkaQoJbGVhcQkyNTYoJXJzcCksICVyMTMKCXNocmwJ JDYsICVlZGkKCXNhbHEJJDMsICVyZGkKCWNhbGwJeG1hbGxvYwoJbW92bAk1MDQoJXJzcCksICVl c2kKCWNtcGwJJDU3NiwgMzMyKCVyc3ApCgltb3ZxCSVyYXgsIDI1NiglcnNwKQoJbW92cQk0OTYo JXJzcCksICVyZGkKCWpiZQkuTDE2MDYKLkwxNTQ3OgoJeG9ybAklZWR4LCAlZWR4CgkucDJhbGln biA0LCwxMAoJLnAyYWxpZ24gMwouTDE1NDg6Cgltb3ZxCSglcmRpLCVyZHgsOCksICVyY3gKCW1v dnEJJXJjeCwgKCVyYXgsJXJkeCw4KQoJYWRkcQkkMSwgJXJkeAoJY21wbAklZXNpLCAlZWR4Cglq YgkuTDE1NDgKCWptcAkuTDE1ODMKCS5wMmFsaWduIDQsLDEwCgkucDJhbGlnbiAzCi5MMTYxMzoK CW1vdnEJMTc2KCVyc3ApLCAlcmN4CglqbXAJLkwxNTU2CgkucDJhbGlnbiA0LCwxMAoJLnAyYWxp Z24gMwouTDE1NTU6Cgltb3ZsCSVlc2ksICVlZHgKCW1vdnEJJXJheCwgJXJzaQoJY2FsbAlfWk4y d2k5eG9yX2xhcmdlRVBsUEtsalMyX2pqCgltb3ZsCTI1MiglcnNwKSwgJWVkeAoJbW92bAklZWF4 LCAyNDgoJXJzcCkKCWNtcGwJJDU3NiwgJWVkeAoJamEJLkwxNjI5Cgltb3ZxCSVyMTUsICVyY3gK LkwxNTU3OgoJY21wbAkkMSwgJWVheAoJam5lCS5MMTU2NAoJam1wCS5MMTU1NgoJLnAyYWxpZ24g NCwsMTAKCS5wMmFsaWduIDMKLkwxNjE2OgoJbW92cQk0MTYoJXJzcCksICVyZGkKCWNhbGwJZnJl ZQoJam1wCS5MMTU3MgoJLnAyYWxpZ24gNCwsMTAKCS5wMmFsaWduIDMKLkwxNjE1OgoJbW92cQk0 OTYoJXJzcCksICVyZGkKCWNhbGwJZnJlZQoJam1wCS5MMTU3MQouTDE1ODY6CglsZWFxCTE2KCVy c3ApLCAlcjEyCgltb3ZxCSVyMTIsICVyY3gKLkwxNTM4OgoJbW92cQk5NiglcnNwKSwgJXJkaQoJ am1wCS5MMTU0MAouTDE2MjU6CglsZWFsCTYzKCVyMTQpLCAlZWRpCgltb3ZsCSVlc2ksIDEyKCVy c3ApCglzaHJsCSQ2LCAlZWRpCglzYWxxCSQzLCAlcmRpCgljYWxsCXhtYWxsb2MKCW1vdmwJMTIo JXJzcCksICVlc2kKCWNtcGwJJDU3NiwgNTcyKCVyc3ApCgltb3ZxCSVyYXgsIDQ5NiglcnNwKQoJ bW92cQklcmF4LCAlcmRpCglqYQkuTDE1NTkKCWptcAkuTDE1NTgKCS5wMmFsaWduIDQsLDEwCgku cDJhbGlnbiAzCi5MMTYyNjoKCW1vdnEJNDk2KCVyc3ApLCAlcmN4CglqbXAJLkwxNTYxCi5MMTYw NzoKCW1vdnEJJXIxNSwgJXJkaQoJam1wCS5MMTU1MwouTDE2Mjg6Cgltb3ZxCSVyMTMsICVyYXgK CWptcAkuTDE1NjcKLkwxNjI5OgoJbW92cQkxNzYoJXJzcCksICVyY3gKCWptcAkuTDE1NTcKLkwx NjA2OgoJbW92cQklcjEzLCAlcmF4CglqbXAJLkwxNTQ3CgkuY2ZpX2VuZHByb2MKCS5zZWN0aW9u CS50ZXh0LnVubGlrZWx5CgkuY2ZpX3N0YXJ0cHJvYwoJLnR5cGUJX1pOSzZpcmFuZ2UxMWdldF9i aXRtYXNrRXYuY29sZCwgQGZ1bmN0aW9uCl9aTks2aXJhbmdlMTFnZXRfYml0bWFza0V2LmNvbGQ6 Ci5MRlNCMzE5NzoKLkwxNTcwOgoJLmNmaV9kZWZfY2ZhX29mZnNldCA2NDAKCS5jZmlfb2Zmc2V0 IDMsIC01NgoJLmNmaV9vZmZzZXQgNiwgLTQ4CgkuY2ZpX29mZnNldCAxMiwgLTQwCgkuY2ZpX29m ZnNldCAxMywgLTMyCgkuY2ZpX29mZnNldCAxNCwgLTI0CgkuY2ZpX29mZnNldCAxNSwgLTE2Cglj YWxsCV9aTksxNGlyYW5nZV9iaXRtYXNrMTF2ZXJpZnlfbWFza0V2LnBhcnQuMAoJLmNmaV9lbmRw cm9jCi5MRkUzMTk3OgoJLnRleHQKCS5zaXplCV9aTks2aXJhbmdlMTFnZXRfYml0bWFza0V2LCAu LV9aTks2aXJhbmdlMTFnZXRfYml0bWFza0V2Cgkuc2VjdGlvbgkudGV4dC51bmxpa2VseQoJLnNp emUJX1pOSzZpcmFuZ2UxMWdldF9iaXRtYXNrRXYuY29sZCwgLi1fWk5LNmlyYW5nZTExZ2V0X2Jp dG1hc2tFdi5jb2xkCi5MQ09MREUzMzoKCS50ZXh0Ci5MSE9URTMzOgoJLnNlY3Rpb24JLnJvZGF0 YS5zdHIxLjEKLkxDMzQ6Cgkuc3RyaW5nCSJhZGRfdnJhbmdlIgo= --00000000000030b21f0616fcbb1c--