get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/1.1/patches/2223177/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2223177,
    "url": "http://patchwork.ozlabs.org/api/1.1/patches/2223177/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/dec1df5fbbd92283fe4d1a097063ea8771bea88d.1776181297.git.aburgess@redhat.com/",
    "project": {
        "id": 17,
        "url": "http://patchwork.ozlabs.org/api/1.1/projects/17/?format=api",
        "name": "GNU Compiler Collection",
        "link_name": "gcc",
        "list_id": "gcc-patches.gcc.gnu.org",
        "list_email": "gcc-patches@gcc.gnu.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null
    },
    "msgid": "<dec1df5fbbd92283fe4d1a097063ea8771bea88d.1776181297.git.aburgess@redhat.com>",
    "date": "2026-04-14T16:16:47",
    "name": "libiberty: avoid exponential back reference issue in D demangler",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "1706d344970ac2b20b798cc22afc11a89be7c890",
    "submitter": {
        "id": 82819,
        "url": "http://patchwork.ozlabs.org/api/1.1/people/82819/?format=api",
        "name": "Andrew Burgess",
        "email": "aburgess@redhat.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/dec1df5fbbd92283fe4d1a097063ea8771bea88d.1776181297.git.aburgess@redhat.com/mbox/",
    "series": [
        {
            "id": 499866,
            "url": "http://patchwork.ozlabs.org/api/1.1/series/499866/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=499866",
            "date": "2026-04-14T16:16:47",
            "name": "libiberty: avoid exponential back reference issue in D demangler",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/499866/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2223177/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2223177/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "gcc-patches@gcc.gnu.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@legolas.ozlabs.org",
            "gcc-patches@gcc.gnu.org"
        ],
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=OeguhQcr;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=2620:52:6:3111::32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)",
            "sourceware.org;\n\tdkim=pass (1024-bit key,\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=OeguhQcr",
            "sourceware.org; dmarc=pass (p=quarantine dis=none)\n header.from=redhat.com",
            "sourceware.org; spf=pass smtp.mailfrom=redhat.com",
            "server2.sourceware.org;\n arc=none smtp.remote-ip=170.10.129.124"
        ],
        "Received": [
            "from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fw8ZG30BJz1yCv\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 15 Apr 2026 02:17:42 +1000 (AEST)",
            "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 8EF6A4BA2E07\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 14 Apr 2026 16:17:40 +0000 (GMT)",
            "from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.129.124])\n by sourceware.org (Postfix) with ESMTP id 414EE4BA23D3\n for <gcc-patches@gcc.gnu.org>; Tue, 14 Apr 2026 16:17:01 +0000 (GMT)",
            "from mail-wm1-f72.google.com (mail-wm1-f72.google.com\n [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-643-U_xyDbX4Mwuvol0k0LHmtw-1; Tue, 14 Apr 2026 12:16:59 -0400",
            "by mail-wm1-f72.google.com with SMTP id\n 5b1f17b1804b1-488d2cd2674so42409065e9.0\n for <gcc-patches@gcc.gnu.org>; Tue, 14 Apr 2026 09:16:59 -0700 (PDT)",
            "from localhost ([31.111.84.232]) by smtp.gmail.com with ESMTPSA id\n 5b1f17b1804b1-488d68479b2sm122184265e9.25.2026.04.14.09.16.52\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Tue, 14 Apr 2026 09:16:52 -0700 (PDT)"
        ],
        "DKIM-Filter": [
            "OpenDKIM Filter v2.11.0 sourceware.org 8EF6A4BA2E07",
            "OpenDKIM Filter v2.11.0 sourceware.org 414EE4BA23D3"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org 414EE4BA23D3",
        "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org 414EE4BA23D3",
        "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776183421; cv=none;\n b=w6+OVNCESrYJ/LcnH/XbL0bTY39sIgYAXrWg7trSeND2OzdTSM91ShROGS5VT9gY2FZtyAQzuHnbVhFTn+4n5WrJEvQAeKGihFJptXu280Hp/U+AMkCM+2S5+gSilDOannlon+GR5tqX2yR0cpDGjLrrCzwEgWwwhwRg/3XgWCs=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776183421; c=relaxed/simple;\n bh=xATZIJS1bZxJTVYWwId7k3AAzEb7SoEJq8hKOD+yDWQ=;\n h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version;\n b=dDwOrOvl4XjCf5w/NLiBlxs60Gwwqy1avL+zWer6ABCfMHROA7RYfc0G1RcKIxiluVmIp3Oy1S+eLN4G2Xh8XdMsDEt/QeW2zoOcEU7kfGhF5TqpsmKVMi1fXo2Z0UW1OxN2QfZR7V9N2TE1sZ5EwGXiz1QO4qeiuFyDcIPx8DA=",
        "ARC-Authentication-Results": "i=1; server2.sourceware.org",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1776183421;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding;\n bh=l3E0dfwtMxNUT55zMH/W3IlAfBtR4TT1m90LWh9Rrsc=;\n b=OeguhQcr+YvH/5f43Gq963TLuWYVNpj07Re/GDL0eE58Gfhl0ijz1AiIBBx9RzG/YmZFeR\n 39toz+t74oGrn9VnmJGlHaORJjSvtub6025srCzChrUXVvn7uubcgF5+ORIR3riTfl6XC9\n HhBLnTNmj5m+aMfKXmcOVICk7jMunuI=",
        "X-MC-Unique": "U_xyDbX4Mwuvol0k0LHmtw-1",
        "X-Mimecast-MFC-AGG-ID": "U_xyDbX4Mwuvol0k0LHmtw_1776183418",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776183417; x=1776788217;\n h=content-transfer-encoding:mime-version:message-id:date:subject:cc\n :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n :message-id:reply-to;\n bh=jXiH9pL5FzENyb6eMzgD5pntbJZVTKLAy3iONlBFtPE=;\n b=JgnzVuwoDgzGxMNBDIchiiyhAR+/INigXo1QmdWjPW56rJNe3tMr1+Uf0BBGClRuyg\n blObHSGlmpO51X98BPM70z56JPIOE7/kmgNw/I4HcVbBsC0H9pxGj+/qOqe/HhzrosiF\n tazfMr4d2/otrcWtJUQkyRtt0dknor/MbPTa0wqPgFKQTMmJOHYmN6nx1S8PkuaVgu3b\n eoMH9OGlikO1YaAT4y2O8HQa3H423AGUSd3zoggPrfcjYbQ6GTKAxqvpYDDeYoZ18O+V\n jed/XEdIveftScjvfkM/wVtr4UrqWEOBAg50ww/asg2NHF6+V5lXUZ5Ygd8NyrmitD/n\n LBLg==",
        "X-Gm-Message-State": "AOJu0Yx2GdrtIqxxQu/V6STwvvDtqfysCn+j42JoRYT7mpmHTVYfJymb\n DeoHi+qdP5aCHmKEFoQStdxDRE0n5a4bxpKRo4txVZCqIQrcdxXfmkH0UrQXMNK6NyHWq0w20IK\n Vr91/AzeeImE9SVgUBFc2sFPff0qacyRB5FEG71sDB4Op2HjIx6YZhb0NJal/JkFlKG40DeLKjB\n Z5vd1V7NIXHohQAueQpBJG5VRG7TufdmoBeyNDenZTQ9o=",
        "X-Gm-Gg": "AeBDiesmKrU9nXacXKLuODbPET6i2yIZkQvOvzjCozxLvfNgjMNsrgRpzpae6RVqTbS\n KwLJkqbCsBXYLQKfn0BHUhutKgUwW7m47lL0ICSKEd6G4rinqw9iPUr9EMy8Kz6sgH5mKrhdVpX\n 1OFdedKMVErjN6G8D3lzlWLdCSKolgpafxgzDdnTq8MoXWJvaDUoLO8VrgdbThefrStPvGcoOBM\n fQ/IIwbX5MF1qjU3rHuaKKq3/RN6uUu6Eu1xc6XdOf4lMl0dNGdLLi9EyT8e8yznOhboMlVshzF\n U3zRIZGcUJBZ5QjL4dp59C2VQt7RYCIUco3eiqclkjX9Rq3K70SRfiQKsGgxWsyHN/BniKj24eY\n reJWkMdcQuU9UcoVfoOLbzK5Wj/E=",
        "X-Received": [
            "by 2002:a05:600c:4e45:b0:488:8c89:cfaa with SMTP id\n 5b1f17b1804b1-488d67bf6e0mr271512075e9.3.1776183417260;\n Tue, 14 Apr 2026 09:16:57 -0700 (PDT)",
            "by 2002:a05:600c:4e45:b0:488:8c89:cfaa with SMTP id\n 5b1f17b1804b1-488d67bf6e0mr271511535e9.3.1776183416568;\n Tue, 14 Apr 2026 09:16:56 -0700 (PDT)"
        ],
        "From": "Andrew Burgess <aburgess@redhat.com>",
        "To": "gcc-patches@gcc.gnu.org",
        "Cc": "Andrew Burgess <aburgess@redhat.com>",
        "Subject": "[PATCH] libiberty: avoid exponential back reference issue in D\n demangler",
        "Date": "Tue, 14 Apr 2026 17:16:47 +0100",
        "Message-Id": "\n <dec1df5fbbd92283fe4d1a097063ea8771bea88d.1776181297.git.aburgess@redhat.com>",
        "X-Mailer": "git-send-email 2.25.4",
        "MIME-Version": "1.0",
        "X-Mimecast-Spam-Score": "0",
        "X-Mimecast-MFC-PROC-ID": "tNOsxddKivYOwBvDiljJu75YdJXF-DBuCmaxFHmQnWo_1776183418",
        "X-Mimecast-Originator": "redhat.com",
        "Content-Transfer-Encoding": "quoted-printable",
        "content-type": "text/plain; charset=\"US-ASCII\"; x-default=true",
        "X-BeenThere": "gcc-patches@gcc.gnu.org",
        "X-Mailman-Version": "2.1.30",
        "Precedence": "list",
        "List-Id": "Gcc-patches mailing list <gcc-patches.gcc.gnu.org>",
        "List-Unsubscribe": "<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>",
        "List-Archive": "<https://gcc.gnu.org/pipermail/gcc-patches/>",
        "List-Post": "<mailto:gcc-patches@gcc.gnu.org>",
        "List-Help": "<mailto:gcc-patches-request@gcc.gnu.org?subject=help>",
        "List-Subscribe": "<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>",
        "Errors-To": "gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"
    },
    "content": "We had a bug reported against Fedora GDB where a particular D symbol\nwas causing an out of memory error.  I believe that the symbol is\nvalid (see below for details), but I'm not sure if it is possible to\nsuccessfully demangle it, so this patch aims to avoid the out of\nmemory error.\n\nThe symbol in question can be found in the newly added test case.\n\nThe symbol in question makes heavy use of back references to compress\nthe demangled string.  The back references are nested to ~57 levels of\ndepth, but that's not the real problem.  The real issue is that many\nof these nested levels of back reference refer, multiple times, to the\nearlier levels.  If the innermost level of back reference results in a\n1 byte string (it doesn't, the resulting string is longer), and each\nlevel of back reference refers to the next inner level just twice\n(it's usually more), then by 30 levels the resulting string is 1G in\nsize.  This is an absolute lower bound of the required size.  By 40\nlevels we have, at a minimum, a 1024G string.\n\nMy plan for fixing this is to count nested back references, resetting\nthe counter at the \"top level\", i.e. at a nesting depth of 0.  If we\nsee too many (based on some arbitrary limit) nested back references,\nthen we'll abort the demangle, and return NULL.\n\nNow, this isn't purely a recursion problem.  The theoretical maximum\ndepth is just 57, but the problem is the cumulative work that ends up\nbeing done due to the exponential growth of each level referencing the\nearlier levels.\n\nHowever, I wanted to avoid adding a separate flag for this to the\ndemangler, and I figured that this problem is close enough to\nrecursion that we can reuse the existing recursion limit flag here\ntoo.\n\nAnd so, the solution I propose is that each time we encounter a nested\nback reference we increment a counter.  If we see more than\nDEMANGLE_RECURSION_LIMIT nested back references then we abort the\ndemangle, even if these back references are not all nested one inside\nthe other.  A second counter tracks the current depth of nested back\nreferences.  If we are at depth 0 then the first counter, the nested\nback reference counter, is reset back to 0.\n\nWith this fix in place, when passed the problematic mangled symbol,\nthe demangler returns NULL.  The c++filt tool will just re-print the\nmangled symbol.  The D demangler tests are extended to include the\nproblematic symbol.\n\nSide note: I mentioned above that I think this symbol is valid.  To\nreach this conclusion I implemented a hack where I cached the result\nof evaluating a back reference.  The first time a back reference is\nprocessed I actually processed the input to check the string demangled\ncorrectly, but I never added this demangled string to the final\nresult.  The second time the same back reference is requested, I spot\nthe cached entry and return, again adding nothing to the result string.\n\nThus, the final result string contains only the content from the top\nlevel.  None of the back referenced content is included.  The input\nstring (mangled) is 2695 bytes, while the output string was 42kB, but\nthis skips all the nested content.  However, we did get to the end of\nthe input string, and returned a non-NULL value.  The full string\nwould be multiple GB given the exponential growth.\n\nBug: https://bugzilla.redhat.com/show_bug.cgi?id=2368350\n---\n libiberty/d-demangle.c                  | 53 +++++++++++++++++++++++--\n libiberty/testsuite/d-demangle-expected | 12 ++++++\n 2 files changed, 62 insertions(+), 3 deletions(-)\n\n\nbase-commit: edf0ae3b9f1ca23daaa55628683edc9a3360286f",
    "diff": "diff --git a/libiberty/d-demangle.c b/libiberty/d-demangle.c\nindex f059f5690bb..db179244519 100644\n--- a/libiberty/d-demangle.c\n+++ b/libiberty/d-demangle.c\n@@ -175,8 +175,33 @@ struct dlang_info\n {\n   /* The string we are demangling.  */\n   const char *s;\n+\n+  /* The options passed to the demangler.  */\n+  int options;\n+\n   /* The index of the last back reference.  */\n   int last_backref;\n+\n+  /* The total number of back referenced types, including nested back\n+     referenced types.  This is reset to zero each time a back\n+     reference is processed at the \"top level\" (i.e. not a nested back\n+     reference).\n+\n+     Cases have been encountered where a back reference type includes\n+     references to other back reference types, which include further\n+     back references.  This was observed to a depth of 57.  If each\n+     layer only references the layer before twice then the innermost\n+     string will be duplicated 2^57 times!\n+\n+     We count the number of nested back references and compare this to\n+     the recursion limit, even though this isn't strictly recursion.  */\n+  int num_backrefs;\n+\n+  /* Track the depth of back references.  Depth 0 is considered the\n+     top level.  When we encounter a back reference at this depth the\n+     NUM_BACKREFS field is reset to 0.  At greater depths,\n+     NUM_BACKREFS will be incremented.  */\n+  int backref_depth;\n };\n \n /* Pass as the LEN to dlang_parse_template if symbol length is not known.  */\n@@ -411,6 +436,24 @@ dlang_type_backref (string *decl, const char *mangled, struct dlang_info *info,\n   if (mangled - info->s >= info->last_backref)\n     return NULL;\n \n+  /* A back reference might point to a type that itself contains back\n+     references, which might themselves contain back references.\n+     There might not be recursion going on, but we can run into\n+     problems of exponential growth caused by the inner type appearing\n+     to be referenced 10s of millions of times.  */\n+  if (info->backref_depth > 0)\n+    {\n+      if ((info->options & DMGL_NO_RECURSE_LIMIT) == 0\n+\t  && info->num_backrefs > DEMANGLE_RECURSION_LIMIT)\n+\treturn NULL;\n+\n+      info->num_backrefs++;\n+    }\n+  else\n+    info->num_backrefs = 0;\n+\n+  info->backref_depth++;\n+\n   int save_refpos = info->last_backref;\n   info->last_backref = mangled - info->s;\n \n@@ -424,6 +467,7 @@ dlang_type_backref (string *decl, const char *mangled, struct dlang_info *info,\n     backref = dlang_type (decl, backref, info);\n \n   info->last_backref = save_refpos;\n+  info->backref_depth--;\n \n   if (backref == NULL)\n     return NULL;\n@@ -1931,17 +1975,20 @@ dlang_parse_template (string *decl, const char *mangled,\n /* Initialize the information structure we use to pass around information.  */\n static void\n dlang_demangle_init_info (const char *mangled, int last_backref,\n-\t\t\t  struct dlang_info *info)\n+\t\t\t  int options, struct dlang_info *info)\n {\n   info->s = mangled;\n+  info->options = options;\n   info->last_backref = last_backref;\n+  info->num_backrefs = 0;\n+  info->backref_depth = 0;\n }\n \n /* Extract and demangle the symbol in MANGLED.  Returns the demangled\n    signature on success or NULL on failure.  */\n \n char *\n-dlang_demangle (const char *mangled, int option ATTRIBUTE_UNUSED)\n+dlang_demangle (const char *mangled, int options)\n {\n   string decl;\n   char *demangled = NULL;\n@@ -1962,7 +2009,7 @@ dlang_demangle (const char *mangled, int option ATTRIBUTE_UNUSED)\n     {\n       struct dlang_info info;\n \n-      dlang_demangle_init_info (mangled, strlen (mangled), &info);\n+      dlang_demangle_init_info (mangled, strlen (mangled), options, &info);\n       mangled = dlang_parse_mangle (&decl, mangled, &info);\n \n       /* Check that the entire symbol was successfully demangled.  */\ndiff --git a/libiberty/testsuite/d-demangle-expected b/libiberty/testsuite/d-demangle-expected\nindex cfbdf2a52cb..8c671b62316 100644\n--- a/libiberty/testsuite/d-demangle-expected\n+++ b/libiberty/testsuite/d-demangle-expected\n@@ -1475,3 +1475,15 @@ demangle.anonymous.foo\n --format=auto\n _D8demangle9anonymous03fooZ\n demangle.anonymous.foo\n+#\n+# This symbol was seen in the wild.  It has a pattern of back\n+# references that result in exponential growth, with the innermost\n+# type being referenced 10s of millions of times.  We use the\n+# demangler's recursion limit to place a hard cap on back reference\n+# usage, which causes the demangler to safely bail out before\n+# consuming an excessive amount of memory.  Trying to demangle this\n+# without the recursion limit in place will eventually cause the OOM\n+# killer to kick in.\n+--format=dlang\n+_D3std6format5write__T14formattedWriteTDFAxaZvTaTS2ae5utils4text7functor__T13stringifiableTSQBqQBqQBi10primitives__TQCaSQCsQCsQCk11composition__T3seqTSQDxQDxQDpQCh__TQDySQEqQEqQEnQEl__T17formattingFunctorVAyaa2_2573Vii250TQrZ15__lambda_L40_C3TQBmZ7FunctorTSQHzQHzQHrQGj__TQIaSQIsQIsQIpQIn__TQEcVQDma2_2573Vii250TSQKdQKdQKaQJy__TQJtTSQKxQKxQKpQJh__TQKyS4btdu2ui6curses6Curses4Wand__T8withAttrTSQNfQNfQNcQNa__TQMvTSQNzQNzQNrQMj__TQOaSQOsQOsQOkQMa__T6selectTSQPqQPqQPiQOa__TQPrSQQjQQjQQbQOt__T12valueFunctorTbZQrFbZ17__lambda_L143_C57TbZQLbTSQSvQSvQSnQRf__TQSwSQToQToQTlQTj__T5fmtIfVQOlnTbTPFNaNbNiNfZQPdTSQVhQVhQUzQTr__TQViSQKkQKi7browser7Browser6updateMFZ__T17__lambda_L1185_C4TQSeTSQYiQYiQYfQYd__TQXyTSQZcQZcQYuQXm__TQZdSQZvQZvQZnQXd__TQLdTQKzTSQBAtQBAuQBAnQZg__TQBAxSQBBqQBBrQBBpQBBo__TQIgVQWonTbTSQBCvQBCwQBCpQBBi__TQBDaSQBDtQBDuQBDnQBCg__TQNoTSQBErQBEsQBEqQBEp__TQBElTSQBFqQBFrQBFkQBEd__TQBFvSQBGoQBGpQBGiQBDz__TQBDqTSQBHnQBHoQBHhQBGa__TQBHsSQBIlQBImQBIkQBIj__TQBDzVQBDka2_2573Vii250TSQBKcQBKdQBKbQBKa__TQBJwTSQBLbQBLcQBKvQBJo__TQBLgSQBAjQBAiQBAjQBAgQBAd__TQBAcTQBHcTSQBNhQBNiQBNgQBNf__TQBNbTSQBOgQBOhQBOaQBMt__TQBOlSQBDoQBDnQBDoQBDlQBDi__TQBDhTQBKhZQBDrMFEQBFcQBFbQBFcQBEzQBEw9AttributebKQBLzZ19__lambda_L503_C20_1TPSQBHlQBHkQBHlQBHiQBHfTQDfTbTSQBUdQBUeQBUcQBUb__TQBTxTSQBVcQBVdQBUwQBTp__TQBVhSQBWaQBWbQBVuQBTl__TQBTcTQBTcZ3funTQBTmZQBPyZQBWtFQCwZ13StringifiableZQBRcZQBXxFQKwZQBeTQBTkZQBMuMFQJdbQBTzQMwQBUgZ17__lambda_L503_C20TQIfTQKrTbTSQCBpQCBqQCBoQCBn__TQCBjTSQCCoQCCpQCCiQCBb__TQCCtSQCDmQCDnQCDgQCAx__TQCAoTQCAoTSQCEqQCErQCEkQCDd__TQCEvSQCFoQCFpQCFnQCFm__TQCBcVQCAna2_2573Vii250TQTyZ17__lambda_L40_C3_1TQUwZQCArTQCEpZQLnTQCEyTQEkTQCFhZQCBtZQCIoFQHfZQLvZQCClZQCJgFQZkZQMnZ17__lambda_L40_C3_3TQBBlZQCEcTQCIaTQBEpZQPdTQBEyTQCItTQBFiZQCFkZQCMfFQBHuZQPnZQBWuFQBJhZ19__lambda_L143_C57_1TQBKiZQCHoTSQCPjQCPkQCPdQCNw__TQCPoSQCQhQCQiQCQbQCOu__TQCAcTQBHeZQCAmFQBHoZ19__lambda_L143_C57_2TQBIpZQCLgZQBYxFNibQBQoQEeZQWnTQBRaZQCMkTSQCUfQCUgQCTzQCSs__TQCUkSQCVdQCVeQCVcQCVb__TQCBtVQCQcnTbTQBTpTQHgZQCCpFNibQBUgQHwZQBAfTQIfZQCQcZQBAtTQCImTQBXoTQEhZQCRaZQCXvFQBZyZQBBdZQCCaMFQCTqQCBmbSQCOjQCOiQCEbQCDx13ScrollContextPSQCPq5paths11BrowserPathZ20__lambda_L1195_C76_1TQBxZQCVqZQCJhFNibQCJbQCIqZQBGyTQCJpZQCWwTSQDErQDEsQDElQDDe__TQDEwSQDFpQDFqQDFoQDFn__TQCMfVQDAonTbTQCMeTQCLuZQCNcFNibQCMwQCMlZQBKtTQCMvZQDArZQBLiTQCTbTQCQbTQEkZQDBpZQDIkFQCVqZQBLsZQCXeMFQBTnbQCXfZ19__lambda_L503_C20_2TQBSlTQBUyTbTSQDLxQDLyQDLwQDLv__TQDLrTSQDMwQDMxQDMqQDLj__TQDNbSQDNuQDNvQDNoQDLf__TQDKwTSQDOtQDOuQDOnQDNg__TQDOySQDPrQDPsQDPqQDPp__TQDLfVQDKqa2_2573Vii250TQDEdZ17__lambda_L40_C3_7TQDFcZQDKwZQBVnTQEdZQDLkZQDSfFQGoZQBVmZQDMdZQDSyFQDJgZQBWgZ17__lambda_L40_C3_8TQDLeZQDNwZQBYnTQDRzTQDOcZQDOqZQDVlFQDVaZQBYtZQDYbFKQDXqMxAaQDXoZk\n+_D3std6format5write__T14formattedWriteTDFAxaZvTaTS2ae5utils4text7functor__T13stringifiableTSQBqQBqQBi10primitives__TQCaSQCsQCsQCk11composition__T3seqTSQDxQDxQDpQCh__TQDySQEqQEqQEnQEl__T17formattingFunctorVAyaa2_2573Vii250TQrZ15__lambda_L40_C3TQBmZ7FunctorTSQHzQHzQHrQGj__TQIaSQIsQIsQIpQIn__TQEcVQDma2_2573Vii250TSQKdQKdQKaQJy__TQJtTSQKxQKxQKpQJh__TQKyS4btdu2ui6curses6Curses4Wand__T8withAttrTSQNfQNfQNcQNa__TQMvTSQNzQNzQNrQMj__TQOaSQOsQOsQOkQMa__T6selectTSQPqQPqQPiQOa__TQPrSQQjQQjQQbQOt__T12valueFunctorTbZQrFbZ17__lambda_L143_C57TbZQLbTSQSvQSvQSnQRf__TQSwSQToQToQTlQTj__T5fmtIfVQOlnTbTPFNaNbNiNfZQPdTSQVhQVhQUzQTr__TQViSQKkQKi7browser7Browser6updateMFZ__T17__lambda_L1185_C4TQSeTSQYiQYiQYfQYd__TQXyTSQZcQZcQYuQXm__TQZdSQZvQZvQZnQXd__TQLdTQKzTSQBAtQBAuQBAnQZg__TQBAxSQBBqQBBrQBBpQBBo__TQIgVQWonTbTSQBCvQBCwQBCpQBBi__TQBDaSQBDtQBDuQBDnQBCg__TQNoTSQBErQBEsQBEqQBEp__TQBElTSQBFqQBFrQBFkQBEd__TQBFvSQBGoQBGpQBGiQBDz__TQBDqTSQBHnQBHoQBHhQBGa__TQBHsSQBIlQBImQBIkQBIj__TQBDzVQBDka2_2573Vii250TSQBKcQBKdQBKbQBKa__TQBJwTSQBLbQBLcQBKvQBJo__TQBLgSQBAjQBAiQBAjQBAgQBAd__TQBAcTQBHcTSQBNhQBNiQBNgQBNf__TQBNbTSQBOgQBOhQBOaQBMt__TQBOlSQBDoQBDnQBDoQBDlQBDi__TQBDhTQBKhZQBDrMFEQBFcQBFbQBFcQBEzQBEw9AttributebKQBLzZ19__lambda_L503_C20_1TPSQBHlQBHkQBHlQBHiQBHfTQDfTbTSQBUdQBUeQBUcQBUb__TQBTxTSQBVcQBVdQBUwQBTp__TQBVhSQBWaQBWbQBVuQBTl__TQBTcTQBTcZ3funTQBTmZQBPyZQBWtFQCwZ13StringifiableZQBRcZQBXxFQKwZQBeTQBTkZQBMuMFQJdbQBTzQMwQBUgZ17__lambda_L503_C20TQIfTQKrTbTSQCBpQCBqQCBoQCBn__TQCBjTSQCCoQCCpQCCiQCBb__TQCCtSQCDmQCDnQCDgQCAx__TQCAoTQCAoTSQCEqQCErQCEkQCDd__TQCEvSQCFoQCFpQCFnQCFm__TQCBcVQCAna2_2573Vii250TQTyZ17__lambda_L40_C3_1TQUwZQCArTQCEpZQLnTQCEyTQEkTQCFhZQCBtZQCIoFQHfZQLvZQCClZQCJgFQZkZQMnZ17__lambda_L40_C3_3TQBBlZQCEcTQCIaTQBEpZQPdTQBEyTQCItTQBFiZQCFkZQCMfFQBHuZQPnZQBWuFQBJhZ19__lambda_L143_C57_1TQBKiZQCHoTSQCPjQCPkQCPdQCNw__TQCPoSQCQhQCQiQCQbQCOu__TQCAcTQBHeZQCAmFQBHoZ19__lambda_L143_C57_2TQBIpZQCLgZQBYxFNibQBQoQEeZQWnTQBRaZQCMkTSQCUfQCUgQCTzQCSs__TQCUkSQCVdQCVeQCVcQCVb__TQCBtVQCQcnTbTQBTpTQHgZQCCpFNibQBUgQHwZQBAfTQIfZQCQcZQBAtTQCImTQBXoTQEhZQCRaZQCXvFQBZyZQBBdZQCCaMFQCTqQCBmbSQCOjQCOiQCEbQCDx13ScrollContextPSQCPq5paths11BrowserPathZ20__lambda_L1195_C76_1TQBxZQCVqZQCJhFNibQCJbQCIqZQBGyTQCJpZQCWwTSQDErQDEsQDElQDDe__TQDEwSQDFpQDFqQDFoQDFn__TQCMfVQDAonTbTQCMeTQCLuZQCNcFNibQCMwQCMlZQBKtTQCMvZQDArZQBLiTQCTbTQCQbTQEkZQDBpZQDIkFQCVqZQBLsZQCXeMFQBTnbQCXfZ19__lambda_L503_C20_2TQBSlTQBUyTbTSQDLxQDLyQDLwQDLv__TQDLrTSQDMwQDMxQDMqQDLj__TQDNbSQDNuQDNvQDNoQDLf__TQDKwTSQDOtQDOuQDOnQDNg__TQDOySQDPrQDPsQDPqQDPp__TQDLfVQDKqa2_2573Vii250TQDEdZ17__lambda_L40_C3_7TQDFcZQDKwZQBVnTQEdZQDLkZQDSfFQGoZQBVmZQDMdZQDSyFQDJgZQBWgZ17__lambda_L40_C3_8TQDLeZQDNwZQBYnTQDRzTQDOcZQDOqZQDVlFQDVaZQBYtZQDYbFKQDXqMxAaQDXoZk\n",
    "prefixes": []
}