<!-- 
RSS generated by JIRA (9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b) at Sun Feb 11 23:30:26 CET 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>Magnolia - Issue tracker</title>
    <link>https://jira.magnolia-cms.com</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-uk</language>    <build-info>
        <version>9.4.2</version>
        <build-number>940002</build-number>
        <build-date>19-01-2023</build-date>
    </build-info>


<item>
            <title>[BLOSSOM-130] Nesting the same JSP + Performance impact</title>
                <link>https://jira.magnolia-cms.com/browse/BLOSSOM-130</link>
                <project id="10430" key="BLOSSOM">Blossom</project>
                    <description>&lt;p&gt;The problem I&apos;m going to describe is a little complex and seems to have enough potential to cause you some headache just to understand what&apos;s going on, not to mention any attempts to fix it safely.&lt;br/&gt;
It&apos;s unlikely you&apos;ll understand it in just a few minutes, but please try to dig in it, it seems to point to a notable performance implication at the very least, and a functional bug in any case.&lt;/p&gt;


&lt;p&gt;The original reason why I investigated on this problem was that I usually want to use the same JSP for most of my areas (a 3-liner that simply iterates over all components in the area and displays them one by one).&lt;br/&gt;
However each time I try this kind of thing, embedding the file named &lt;tt&gt;componentIterator.jsp&lt;/tt&gt; twice in the hierarchy of components and areas, I get an exception saying something like this:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;javax.servlet.ServletException: File &lt;span class=&quot;code-quote&quot;&gt;&quot;/startPageSlider&quot;&lt;/span&gt; not found.&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;This is the functional bug I mentioned above.&lt;br/&gt;
I spent hours trying to figure out how Blossom is even getting the idea to look for a file named &quot;/startPageSlider&quot; which is the &lt;b&gt;request mapping&lt;/b&gt; of the component &lt;b&gt;containing&lt;/b&gt; the area and shouldn&apos;t have much to do with the path of the &lt;b&gt;JSP&lt;/b&gt; &lt;b&gt;rendering&lt;/b&gt; the area. And even if it did have anything to do with it, ... why is Blossom trying to look for an actual file there, and why only under these conditions (two nested areas using the same JSP)?&lt;/p&gt;

&lt;p&gt;While investigating on this I soon came across the class &lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;info.magnolia.module.blossom.support.SpecialAttributeRequestWrapper&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt; which seems to be the culprit in at least two ways.&lt;/p&gt;

&lt;p&gt;The main problem that became apparent and which I&apos;m going to mention first is that the two methods &lt;tt&gt;getAttribute()&lt;/tt&gt; and &lt;tt&gt;shouldMasquerade()&lt;/tt&gt; create huge recursion stacks in real life because they call each other back and forth all the time. Granted, &lt;tt&gt;shouldMasquerade()&lt;/tt&gt; calls the super version, so it seems harmless at first glance, but since that one in turn calls the &lt;tt&gt;getAttribute()&lt;/tt&gt; of the parent request object, which is usually another instance of &lt;tt&gt;SpecialAttributeRequestWrapper&lt;/tt&gt;, the result is a huge &quot;explosion&quot; of requests from &lt;tt&gt;getAttribute()&lt;/tt&gt; to &lt;tt&gt;shouldMasquerade()&lt;/tt&gt; and from &lt;tt&gt;shouldMasquerade()&lt;/tt&gt; back to &lt;tt&gt;getAttribute()&lt;/tt&gt; and so on. This effect is even aggravated by two factors:&lt;br/&gt;
1. Even when &lt;tt&gt;shouldMasquarade()&lt;/tt&gt; has already determined the result of a &lt;tt&gt;super.getAttribute(xxx)&lt;/tt&gt;, the calling &lt;tt&gt;getAttribute(xxx)&lt;/tt&gt; calls &lt;tt&gt;super.getAttribute(xxx)&lt;/tt&gt; again, causing another cycle through a dozen to a couple of hundreds of calls of &lt;tt&gt;getAttribute()&lt;/tt&gt; and &lt;tt&gt;shouldMasquarade()&lt;/tt&gt; back and forth.&lt;br/&gt;
2. &lt;tt&gt;shouldMasquarade()&lt;/tt&gt; doesn&apos;t just check the attribute at hand for modifications but ALL attributes, causing up to 15 calls to &lt;tt&gt;getAttribute()&lt;/tt&gt; from each single call to &lt;tt&gt;shouldMasquarade()&lt;/tt&gt;. (I&apos;m not sure this in itself is intended because &lt;tt&gt;shouldMasquarade()&lt;/tt&gt; isn&apos;t using its method argument, which it probably should do.)&lt;/p&gt;

&lt;p&gt;To verify what I&apos;m saying, please do the following:&lt;br/&gt;
1. Create some simple hierarchy of areas and components, something like this:&lt;br/&gt;
page (p.jsp) -&amp;gt; area (a1.jsp) -&amp;gt; component (c1.jsp) -&amp;gt; area (a2.jsp) -&amp;gt; component (c2.jsp) -&amp;gt; area (a3.jsp) -&amp;gt; component (c3.jsp)&lt;br/&gt;
and create a page where this structure is populated with actual instances.&lt;br/&gt;
(Two or three component levels are sufficient to demonstrate the problem, but it&apos;ll really explode if you have more than three levels since the problem has exponential complexity.)&lt;br/&gt;
2. Now just create some simple log statements in the source code to log how many times you&apos;re iterating over the &lt;tt&gt;specialNames&lt;/tt&gt; in class SpecialAttributeRequestWrapper within just one page request, i.e. insert a log statement in &lt;tt&gt;getAttribute()&lt;/tt&gt; and one in &lt;tt&gt;shouldMasquarade()&lt;/tt&gt;.&lt;br/&gt;
3. Then run the page and watch the log.&lt;br/&gt;
4. You will be surprised by the hundreds of iterations/recursive calls there, given this simple page configuration. And you might note you&apos;re just computing the same values again and again, visiting the same recursion branches again and again.&lt;/p&gt;

&lt;p&gt;The performance implications should be obvious, it&apos;s a huge waste of CPU like this. And it makes it really hard to understand, to debug, and to maintain, too.&lt;/p&gt;

&lt;p&gt;I tried to find out WHY the class was coded the way it is, and to be frank, I still have no idea. It just doesn&apos;t seem to make any sense to me, and the behaviour at hand suggests that some error in reasoning was involved when coding it like it is, because I just can&apos;t believe it was wanted to behave like this.&lt;br/&gt;
Since I don&apos;t understand the class (and didn&apos;t manage to extract the intended behaviour in the first place), I&apos;m sorry I don&apos;t have a fix or suggestion.&lt;/p&gt;

&lt;p&gt;At least I checked the sources in tag &quot;magnolia-module-blossom-3.0-alpha1&quot; before filing this bug. Class &lt;tt&gt;info.magnolia.module.blossom.support.SpecialAttributeRequestWrapper&lt;/tt&gt; doesn&apos;t seem to be modified at all from the version I am using, so the problem should still be there.&lt;/p&gt;

&lt;p&gt;Now, back to the beginning. The bug with the nested areas referring the same JSPs where the page request suddenly fails with a weird exception originates from line 104 in &lt;tt&gt;SpecialAttributeRequestWrapper.java&lt;/tt&gt; where it says:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (localValues[i] != &lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt; &amp;amp;&amp;amp; !ObjectUtils.equals(&lt;span class=&quot;code-keyword&quot;&gt;super&lt;/span&gt;.getAttribute(specialNames[i]), originalValues[i])) {
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This line of code is executed dozens or hundreds of times per request and compares many things from the different processing stages in all conceivable combinations, so at one point it also compares the name of the JSP file name attached to one area with the JSP file name attached to the other area.&lt;br/&gt;
If there is a difference, &lt;tt&gt;shouldMasquarade()&lt;/tt&gt; returns false, so there is no masquarading and the correct JSP path is ultimately used and the page is rendered correctly.&lt;br/&gt;
If however there is no difference, &lt;tt&gt;shouldMasquarade()&lt;/tt&gt; returns true, so the correct JSP path which would make the page to be rendered correctly is masked by a value that doesn&apos;t work (&quot;/startPageSlider&quot; in my case, as said in the exception mentioned earlier).&lt;br/&gt;
I&apos;m 99% sure that this behaviour is a side effect of the problems mentioned earlier with this class and is not based on any logical or functional requirement as such.&lt;/p&gt;

&lt;p&gt;I hope my effort is helping you to develop Blossom further. Thank you.&lt;/p&gt;</description>
                <environment></environment>
        <key id="33101">BLOSSOM-130</key>
            <summary>Nesting the same JSP + Performance impact</summary>
                <type id="1" iconUrl="https://jira.magnolia-cms.com/secure/viewavatar?size=xsmall&amp;avatarId=10883&amp;avatarType=issuetype">Bug</type>
                                            <priority id="6" iconUrl="https://jira.magnolia-cms.com/images/icons/priorities/neutral.gif">Neutral</priority>
                        <status id="6" iconUrl="https://jira.magnolia-cms.com/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are not closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="success"/>
                                    <resolution id="1">Fixed</resolution>
                                        <assignee username="tmattsson">Tobias Mattsson</assignee>
                                    <reporter username="tln">TLN</reporter>
                        <labels>
                    </labels>
                <created>Fri, 13 Sep 2013 12:50:15 +0200</created>
                <updated>Mon, 25 Jul 2016 07:18:44 +0200</updated>
                            <resolved>Fri, 23 Jan 2015 12:18:00 +0100</resolved>
                                    <version>2.0.1</version>
                    <version>3.0</version>
                                    <fixVersion>2.0.2</fixVersion>
                    <fixVersion>3.0</fixVersion>
                                        <due></due>
                            <votes>0</votes>
                                    <watches>3</watches>
                                                                                                                <comments>
                            <comment id="70358" author="tln" created="Fri, 20 Sep 2013 17:06:06 +0200"  >&lt;p&gt;Others seem to have the same problem:&lt;br/&gt;
&lt;a href=&quot;http://forum.magnolia-cms.com/forum/thread.html?threadId=c7819b82-fb26-4a60-86a6-f46c8cd58d1d&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://forum.magnolia-cms.com/forum/thread.html?threadId=c7819b82-fb26-4a60-86a6-f46c8cd58d1d&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="70359" author="tmattsson" created="Fri, 20 Sep 2013 17:57:24 +0200"  >&lt;p&gt;Thanks, I&apos;m troubleshooting this one, will get back to you.&lt;/p&gt;</comment>
                            <comment id="70902" author="tmattsson" created="Tue, 1 Oct 2013 14:09:12 +0200"  >&lt;p&gt;Let me explain what this class does. SpecialAttributeRequestWrapper serves as a base class for IncludeRequestWrapper and ForwardRequestWrapper. These are used to simulate include and forward dispatches. They modify getRequestURI(), getContextPath(), getServletPath(), getPathInfo() and a number of attributes to achieve this. They need to do fulfil the requirements in the servlet specification and do this in a way that doesn&apos;t interfere with the servlet container, be it Tomcat, Jetty or something else.&lt;/p&gt;

&lt;p&gt;They&apos;re used in BlossomDispatcherServlet when its invoked from the rendering engine, via BlossomTemplateRenderer.&lt;/p&gt;

&lt;p&gt;To understand the complexity you need to understand how a servlet container implements forwards and includes. As already stated the request object changes when these happens. The request object is actually a chain of wrappers, the first object in the chain is provided by the servlet container and the application is free to add as many as it needs in front of it as the filter chain progresses. When the application does a forward or an include, the servlet container does NOT add a wrapper to the front of the request chain. Instead it adds it near the start. Usually after any other request objects from the container and before any added by the application.&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;[servlet container request objects][application request objects]
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Tomcat adds a request object for each forward and include, Jetty however has a single request object that it reconfigures each time.&lt;/p&gt;

&lt;p&gt;Therefore SpecialAttributeRequestWrapper has to check what happens &lt;em&gt;behind&lt;/em&gt; it to know if it should masquerade or not. It has to check every time it&apos;s called because it can&apos;t know or observe when something changes behind it. It also has to check if &lt;em&gt;any&lt;/em&gt; of the attributes changed behind it. It is not enough to check only if the request attribute its being queried for has changed (in the case of getAttribute()).&lt;/p&gt;

&lt;p&gt;I don&apos;t think that the complexity is a substantial performance problem.&lt;/p&gt;

&lt;p&gt;There is indeed a problem with nesting the same area jsp multiple times. I haven&apos;t come up with a solution that solves it adequately yet.&lt;/p&gt;

&lt;p&gt;The workaround of using dedicated JSPs for areas solves the issue for the time being.&lt;/p&gt;

&lt;p&gt;I will continue to look for a solution. A solution that can handle the case of an area having an area where both use the same JSPs.&lt;/p&gt;
</comment>
                            <comment id="70914" author="tln" created="Tue, 1 Oct 2013 15:15:11 +0200"  >&lt;p&gt;Thanks for getting back on this with this detailed explanation. I must admit I still haven&apos;t completely understood why the masquerading has to be conditional, but I&apos;m getting an idea that it has to be because JSPs may perform includes outside of the Blossom framework with conventional tags (&lt;tt&gt;&amp;lt;%@include&lt;/tt&gt; and &lt;tt&gt;&amp;lt;jsp:include&lt;/tt&gt;), and Blossom should continue to work correctly also in the included file, even if the servlet container didn&apos;t chain the sub-request at the end of the request chain. That&apos;s why you have to notice changes in the request context as they happen at the beginning of the request chain when the servlet container adds new requests there.&lt;br/&gt;
Okay, this is very tricky.&lt;br/&gt;
I will contemplate on this, too, because after many hours of stepping through this with the debugger I also have an idea how awfully complex it is, but I also have gotten a feeling about how things work under the hood (only on Tomcat though), and perhaps I can give some useful input. I wouldn&apos;t bet on it though.&lt;/p&gt;

&lt;p&gt;In the meantime the original problem has extended beyond area JSPs to component JSPs as well. My current project has to use a toolbox of very simple but very versatile components that can be nested in many conceivable ways, so you might have a column component that has a frame component nested with several smaller frame components in it, each with other components (images, texts, etc.). Now, the problem is also present with nesting a frame in a frame (just to give one example), and here it&apos;s not easily possible to work with several JSP files containing the same code. Neither do I know how components will be nested later, nor the number of levels I need to be safe. And even if, ... I can&apos;t have each of my JSP files in ten or twenty copies in my project without messing it up forever.&lt;/p&gt;

&lt;p&gt;This really got me rather desparate at some point because it was so horribly difficult to find a workaround. I tried tricking Blossom into thinking the same JSP was several different files by returning different view names, one time &quot;components/frame&quot;, another time &quot;components/./frame&quot;, just as an example. But, ... unfortunately Tomcat canonicalizes JSP paths before they actually get in effect causing the bug. To cut it short, I spent many hours on this, testing many, many ideas (some of them actually really crazy), and none of them worked, and I was just about to give up.&lt;/p&gt;

&lt;p&gt;Yet, finally I found a solution that seems to be working on Tomcat on Windows at least (has yet to be tested on Linux for possible problems due to user rights). It&apos;s not a perfectly clean approach, that&apos;s why I hesitated to think in this direction for quite some time. But I want to share it with you and others, perhaps it will help someone:&lt;/p&gt;

&lt;p&gt;The basic idea is to have Spring inject a subclass of &lt;tt&gt;info.magnolia.module.blossom.view.TemplateViewResolver&lt;/tt&gt; in the project instead of the default one you&apos;re providing. The special implementation returns instances of a special subclass of &lt;tt&gt;info.magnolia.module.blossom.view.TemplateView&lt;/tt&gt;. The instances of this subclass keep track of the JSP files already in use in the request chain (using &lt;tt&gt;ThreadLocal&lt;/tt&gt; to get it done without having to bother about traversing the request chain each time). If a duplicate JSP include is about to happen, the view creates a copy of the JSP file in the same directory on the disc (i.e. it copies &lt;tt&gt;request.getServletContext().getRealPath(sourceJSPPath)&lt;/tt&gt; to &lt;tt&gt;request.getServletContext().getRealPath(targetJSPPath)&lt;/tt&gt; if the copy isn&apos;t existing yet) and redirects the include to the copy, so no collision will occur.&lt;br/&gt;
This works well in a development environment, but by the approach just described the views have become mutable, so occasional problems are up in production due to the caching:&lt;br/&gt;
The Blossom view resolver extends &lt;tt&gt;org.springframework.web.servlet.view.AbstractCachingViewResolver&lt;/tt&gt;, and it caches views across threads, so if one of my special views directs the request to a particular JSP file due to the needs of one thread, another thread using the same view instance from the same cache at the same time may experience problems (JSP collision). I could synchronize this in my view class as a quick&apos;n dirty solution, but it would kill performance especially under high load. So I guess I have to override &lt;tt&gt;org.springframework.web.servlet.view.AbstractCachingViewResolver#resolveViewName(String, Locale)&lt;/tt&gt; to get an implementation that uses separate caches for each thread.&lt;/p&gt;

&lt;p&gt;If solving the problem is too complicated with a clean and proper solution and once my workaround is tested better, I will share the code here.&lt;/p&gt;

&lt;p&gt;Thanks again for your concern and your continuous efforts on Blossom in general and in this instance. It&apos;s a great framework, and I&apos;m praying for a solution here that will make it even more useful in many scenarios.&lt;/p&gt;</comment>
                            <comment id="70948" author="tmattsson" created="Wed, 2 Oct 2013 10:08:54 +0200"  >&lt;p&gt;A simpler option would be to use freemarker for areas and components that can be nested.&lt;/p&gt;</comment>
                            <comment id="70955" author="tln" created="Wed, 2 Oct 2013 10:45:01 +0200"  >&lt;p&gt;That&apos;s probably true, but I don&apos;t know Freemarker, and from what I&apos;ve seen I&apos;d prefer Blossom/JSP as the templating engine of choice in the project. Magnolia + Blossom is such an awesome combo (really, congratulations, I don&apos;t defend frameworks easily, but with this one I do!). I&apos;d rather invest my time into finding a good a solution here than to learn Freemarker.&lt;/p&gt;

&lt;p&gt;Right now I&apos;m quite sure there is a clean workaround when you modify the Blossom source code just a little bit. For instance, if you&apos;re really just interested in what&apos;s happening in the requests of the servlet container, &lt;tt&gt;info.magnolia.module.blossom.support.SpecialAttributeRequestWrapper#shouldMasquerade()&lt;/tt&gt; could stop relying on super.getAttribute() and rather traverse back the chain first to find the first request in the chain that&apos;s not an instance of &lt;tt&gt;info.magnolia.module.blossom.support.SpecialAttributeRequestWrapper&lt;/tt&gt; and call getAttribute() on that one instead. Not only would this solve the performance issue I brought up (I still think it&apos;s there) but it should also fix the nesting bug or at least change the scenario considerably so that a solution to the nesting bug is easier to find.&lt;/p&gt;

&lt;p&gt;Also, if this shouldn&apos;t be an option, you could add additional markers to your requests (&lt;tt&gt;setAttribute(&quot;marker&quot;, markerSpecificToThatOneTimeAParticularJSPIsGettingIncluded)&lt;/tt&gt;), so that shouldMasquerade() could test these markers to prevent it from getting confused by the same JSP several times in the chain. If you know what I mean. It&apos;s a little hard to explain. &lt;img class=&quot;emoticon&quot; src=&quot;https://jira.magnolia-cms.com/images/icons/emoticons/wink.png&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                            <comment id="70963" author="tmattsson" created="Wed, 2 Oct 2013 11:44:49 +0200"  >&lt;p&gt;I have attached two files, could you test them in your project and see it they solve your problem?&lt;/p&gt;</comment>
                            <comment id="70979" author="tln" created="Wed, 2 Oct 2013 15:03:09 +0200"  >&lt;p&gt;Indeed, they do! Thank you so much, Tobias. I checked both areas and components, they all work well with your classes, even when nesting them wildly.&lt;br/&gt;
If I disable the new code (just to make sure), the exceptions are back once a particular JSP is on the rendering stack twice.&lt;/p&gt;

&lt;p&gt;Do you recommend using the changed classes already, or were they just a first test, and I should wait for an improved/tidier version?&lt;/p&gt;</comment>
                            <comment id="71006" author="tmattsson" created="Thu, 3 Oct 2013 10:30:17 +0200"  >&lt;p&gt;These classes are going into the next release, and will be backported to 2.0.x. Until they&apos;re releases you can keep using them.&lt;/p&gt;

&lt;p&gt;Thanks for reporting this issue, and for your thorough analysis, i appreciate how much time you&apos;ve committed to this.&lt;/p&gt;

&lt;p&gt;Cheers, Tobias &lt;/p&gt;</comment>
                            <comment id="71134" author="tln" created="Fri, 4 Oct 2013 12:42:49 +0200"  >&lt;p&gt;Now that you said it was complete I looked into your solution, and I must admit I like its elegance, and logically it should have solved the problem thoroughly.&lt;br/&gt;
Thank you very much again. I&apos;m very happy you found something simple.&lt;/p&gt;

&lt;p&gt;Let me point you to the performance problem once again with some numbers to stress the significance better and to make sure you don&apos;t miss my point completely:&lt;/p&gt;

&lt;p&gt;This is how I temporarily modified your fixed &lt;tt&gt;SpecialAttributeRequestWrapper&lt;/tt&gt;:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
    ...

    @Override
    &lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt; getAttribute(&lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt; name) {
        &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (enabled) {
            &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt; i = 0; i &amp;lt; SPECIAL_ATTRIBUTE_NAMES.length; i++) {
                count();
                &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (localValues[i] != &lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt; &amp;amp;&amp;amp; SPECIAL_ATTRIBUTE_NAMES[i].equals(name)) {
                    &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (shouldMasquerade(name)) {
                        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; localValues[i];
                    } &lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; {
                        &lt;span class=&quot;code-keyword&quot;&gt;break&lt;/span&gt;;
                    }
                }
            }
        }
        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;super&lt;/span&gt;.getAttribute(name);
    }

    &lt;span class=&quot;code-keyword&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt; shouldMasquerade(&lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt; name) {
        &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt; i = 0; i &amp;lt; SPECIAL_ATTRIBUTE_NAMES.length; i++) {
            count();
            &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (localValues[i] != &lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt; &amp;amp;&amp;amp; !ObjectUtils.equals(&lt;span class=&quot;code-keyword&quot;&gt;super&lt;/span&gt;.getAttribute(SPECIAL_ATTRIBUTE_NAMES[i]), originalValues[i])) {
                &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;;
            }
        }
        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;;
    }
	
    &lt;span class=&quot;code-keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt; counter=0;
    &lt;span class=&quot;code-keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;static&lt;/span&gt; void count()
    {
        counter++;
        &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (counter%100==0)
        {
            &lt;span class=&quot;code-object&quot;&gt;System&lt;/span&gt;.out.println(&lt;span class=&quot;code-quote&quot;&gt;&quot;############# counter: &quot;&lt;/span&gt;+counter);
        }
    }

    ...
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I.e. I added the new method &lt;tt&gt;count()&lt;/tt&gt; and two calls to this method.&lt;/p&gt;

&lt;p&gt;Now I start the app server (counter==0 then) and open one typical magnolia+blossom page from my project (just one page opened just once). It&apos;s neither artificially simple nor artificially complex, it&apos;s really just an average page with about 15 components on it.&lt;/p&gt;

&lt;p&gt;Without your latest bugfix the counter ended at an incredible 1031600 (more than a million!)&lt;br/&gt;
With the bugfix this value has improved indeed, but it&apos;s still 178000.&lt;/p&gt;

&lt;p&gt;Given the simple setup I think this number is too high. I agree, modern processors and architectures perform very well with such loops compared to former times, but given your skill and feeling for complex computer science challenges seeing this thing probably hurts you as much as me and it&apos;ll naturally make you think for a better approach.&lt;br/&gt;
(I also repeat: The complexity of the current implementation is exponential in a very nasty form, so with each additional nesting level the number I quoted above multiplies, and it might reach a million and more very easily again if I change my page a little bit.)&lt;/p&gt;

&lt;p&gt;I already noticed a great performance shift through your bugfix, and I&apos;m sure this can be improved even more by finding a more efficient algorithm (or a more friendly complexity type like quadratic or logarithmic for that matter) for getting the challenges done which you&apos;re successfully tackling with the current implementation already.&lt;/p&gt;</comment>
                            <comment id="71152" author="tmattsson" created="Fri, 4 Oct 2013 19:25:24 +0200"  >&lt;p&gt;The way it works now is you&apos;ll have one ForwardRequestWrapper and then a number of IncludeRequestWrapper depending on how deep in the hierarchy you are. Only the last one is enabled. The ForwardRequestWrapper adds a certain cost, the last one also adds a cost, the ones in between have very little cost since all they do is check a flag and then delegate backwards. The deeper you get you will see this cost being added each time, linearly. When a second, third and so on IncludeRequestWrapper is added you will NOT see more calls to your counter.&lt;/p&gt;

&lt;p&gt;The complexity is linear since time spent is increased by a constant amount as more disabled IncludeRequestWrappers are added.&lt;/p&gt;

&lt;p&gt;I&apos;ve done measurements on my MacBook Pro and see these timings:&lt;/p&gt;

&lt;p&gt;With the fix in place and 4 wrappers applied (2 disabled) I&apos;m measuring a call to getAttribute at 181 nanoseconds (time spent in container wrappers subtracted).&lt;/p&gt;

&lt;p&gt;The ForwardRequestWrapper adds 51 nanoseconds.&lt;br/&gt;
The first IncludeRequestWrapper adds 76 nanoseconds.&lt;br/&gt;
Adding a disabled IncludeRequestWrapper adds 27 nano seconds to each getAttribute call.&lt;/p&gt;

&lt;p&gt;The formula is hence:&lt;/p&gt;

&lt;p&gt;Level 1 : 51 ns.&lt;br/&gt;
Level 2 : 51 + 76 ns.&lt;br/&gt;
Level 2+N : 51 + 76 + N * 27 ns.&lt;/p&gt;

&lt;p&gt;Linear.&lt;/p&gt;

&lt;p&gt;Having said that I am still looking for a simpler solution. I don&apos;t see the current implementation as a performance problem.&lt;/p&gt;</comment>
                            <comment id="71153" author="tln" created="Fri, 4 Oct 2013 20:14:20 +0200"  >&lt;p&gt;My guess was that these high numbers (even with the enabled/disabled fix still 178000 in my example) are mostly fueled by a request chain &lt;b&gt;after&lt;/b&gt; all requests have been enabled again. I wouldn&apos;t presume that calls to getAttribute() happen only while RequestDispatcher.include() is handling things or that all references to the end of the chain are lost forever right after RequestDispatcher.include() finishes (there may be surrounding methods calling getAttribute(), too), but obviously I&apos;m not as familiar with these things as you are.&lt;/p&gt;

&lt;p&gt;Or let&apos;s put the times you measured aside for a second and let me ask you: How do you explain my counter in the hundreds of thousands after just one request? I may have been wrong assuming it was still exponential as it used to be, but if it&apos;s not exponential anymore the counter I got is very surprising to me. And even if it&apos;s linear, ... isn&apos;t 178000 iterations through these loops still a noteworthy waste of CPU cycles, irrespectively of the time that is spent in this?&lt;/p&gt;

&lt;p&gt;If you are right and it&apos;s really just a few nanoseconds, I understand it&apos;s not highest priority to you, and I don&apos;t want to be nagging.&lt;br/&gt;
But as a developer I can&apos;t help but raise my eyebrows if a simple CMS website iterates through some kind of loop many thousand times. You probably understand that I brought it up. If you&apos;re sure it&apos;s not a problem, ... okay, I trust you. You still have much more insight into all of this.&lt;/p&gt;

&lt;p&gt;Thanks for your professional approach to this. I was really excited to see this. &lt;img class=&quot;emoticon&quot; src=&quot;https://jira.magnolia-cms.com/images/icons/emoticons/smile.png&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                            <comment id="71460" author="tmattsson" created="Thu, 10 Oct 2013 16:34:21 +0200"  >&lt;p&gt;I have attached the simpler solution I&apos;ve been working on, it needs to be thoroughly tested in all the major containers before it could go in. Just in case you want to test it out.&lt;/p&gt;

&lt;p&gt;I&apos;ve measured it to 8 nanoseconds per call when faking only a forward, and 16 nanoseconds when faking a forward and any number of includes. After the first include there&apos;s no extra time spent, so its constant after the first include.&lt;/p&gt;</comment>
                            <comment id="71466" author="tln" created="Thu, 10 Oct 2013 16:51:22 +0200"  >&lt;p&gt;I will certainly help you test it by developing with the new classes until I encounter any problems (using Tomcat 7 here).&lt;br/&gt;
One question though: Do I have to keep your previous solution intact when adding the new classes to the project, or do the new classes replace it?&lt;/p&gt;</comment>
                            <comment id="71469" author="tmattsson" created="Thu, 10 Oct 2013 17:21:44 +0200"  >&lt;p&gt;Thanks! The new classes replaces the old ones.&lt;/p&gt;</comment>
                            <comment id="71483" author="tln" created="Thu, 10 Oct 2013 21:37:01 +0200"  >&lt;p&gt;I can&apos;t start testing yet, getting 2 compiler errors:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;info\magnolia\module\blossom\render\BlossomDispatcherServlet.java:77: error: getHandlerAdapter(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;) in DispatcherServlet cannot implement getHandlerAdapter(&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;) in BlossomDispatcher
&lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;class &lt;/span&gt;BlossomDispatcherServlet &lt;span class=&quot;code-keyword&quot;&gt;extends&lt;/span&gt; DispatcherServlet &lt;span class=&quot;code-keyword&quot;&gt;implements&lt;/span&gt; BlossomDispatcher, BeanFactoryPostProcessor {
  attempting to assign weaker access privileges; was &lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt;
info\magnolia\module\blossom\render\BlossomDispatcherServlet.java:146: error: method does not override or implement a method from a supertype
    @Override&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The second error refers to method &lt;tt&gt;executeChain()&lt;/tt&gt;&lt;/p&gt;</comment>
                            <comment id="71495" author="tmattsson" created="Fri, 11 Oct 2013 09:58:04 +0200"  >&lt;p&gt;Should work with latest sources from master (3.0.1-SNAPSHOT) and 2.0.x branch (2.0.2-SNAPSHOT).&lt;/p&gt;</comment>
                            <comment id="72148" author="tln" created="Tue, 22 Oct 2013 12:17:31 +0200"  >&lt;p&gt;We may be going a little bit off-topic, but I really want to help you test your solution, and I&apos;m sorry I&apos;m still not getting it compiled.&lt;br/&gt;
I downloaded the branch, at least I think the sources you just mentioned, from &lt;a href=&quot;http://git.magnolia-cms.com/gitweb/?p=modules/blossom/blossom.git;a=commit;h=b303a993e0ea533b8cc354598e2f83fb43d65a1e&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://git.magnolia-cms.com/gitweb/?p=modules/blossom/blossom.git;a=commit;h=b303a993e0ea533b8cc354598e2f83fb43d65a1e&lt;/a&gt;&lt;br/&gt;
Trying to compile it it throws the following error:&lt;/p&gt;

&lt;p&gt;The project info.magnolia:magnolia-module-blossom:2.0.2-SNAPSHOT (C:[...]\blossom-b303a99-Bug130\pom.xml) has 1 error&lt;br/&gt;
    Non-resolvable parent POM: Failure to find info.magnolia:magnolia-parent-pom-community-module:pom:24 in &lt;a href=&quot;http://repo.maven.apache.org/maven2&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://repo.maven.apache.org/maven2&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;I have to admit I&apos;m not so much a Maven expert. I just opened the snapshot in Netbeans, it obviously used the pom.xml that was there, I didn&apos;t configure anything on top. But I can&apos;t resolve/download the dependencies, and it doesn&apos;t compile.&lt;br/&gt;
Speaking of it, ... I&apos;m using Blossom 2 with Magnolia 4.5.11, and Magnolia 4.5.11 ships with Spring 3 in the &apos;lib&apos; directory. Your Blossom module, however, seems to be using Spring 2, which might explain the second compiler error I got earlier.&lt;/p&gt;

&lt;p&gt;Edit: Thinking about it: I&apos;m using the &apos;lib&apos; directory as a colleague has prepared it for our current project. Spring 3 may not be included in the Magnolia 4.5.11 distribution at all, but he added it himself. In either case it would be great if Blossom could keep working with Spring 3.&lt;/p&gt;

&lt;p&gt;To summarize this I must say I&apos;m a little bit lost here. I&apos;m not getting the pieces connected so that I can compile and integrate your snapshot into my current project. Am I missing anything obvious?&lt;/p&gt;</comment>
                            <comment id="72181" author="tmattsson" created="Tue, 22 Oct 2013 15:50:55 +0200"  >&lt;p&gt;Blossom 2.x is &lt;em&gt;compiled&lt;/em&gt; against Spring 2.5 because that&apos;s the lowest supported version. It will work fine with Spring 3.&lt;/p&gt;

&lt;p&gt;Spring is not included in Magnolia. Blossom declares the Spring dependencies as &lt;em&gt;provided&lt;/em&gt;, which means that they&apos;re not included in your project automatically, they need to be specified explicitly. Your colleague have decided for Spring 3 when he did this.&lt;/p&gt;

&lt;p&gt;To compile it you need to follow the instructions on &lt;a href=&quot;http://documentation.magnolia-cms.com/display/DOCS/Maven+init&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://documentation.magnolia-cms.com/display/DOCS/Maven+init&lt;/a&gt;.&lt;/p&gt;</comment>
                            <comment id="96043" author="had" created="Mon, 8 Dec 2014 14:07:01 +0100"  >&lt;p&gt;Any reason for reverting copyright in affected files back to 2012?&lt;/p&gt;</comment>
                            <comment id="96080" author="tmattsson" created="Mon, 8 Dec 2014 22:44:31 +0100"  >&lt;p&gt;Not seeing it, which commit is this?&lt;/p&gt;</comment>
                            <comment id="96091" author="had" created="Tue, 9 Dec 2014 08:03:29 +0100"  >&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;/**
- 	 * This file Copyright (c) 2010-2013 Magnolia International
+	 * This file Copyright (c) 2010-2012 Magnolia International
	 * Ltd.  (http:&lt;span class=&quot;code-comment&quot;&gt;//www.magnolia-cms.com). All rights reserved.&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;... in &lt;tt&gt;IncludeRequestWrapper&lt;/tt&gt; ... first file in cumulative change view (the git-code-review tab on top of the issue).&lt;/p&gt;</comment>
                            <comment id="96158" author="tmattsson" created="Tue, 9 Dec 2014 21:54:19 +0100"  >&lt;p&gt;How weird, not seeing it in GitX, with git show or on gitweb. Suspect the cumulative change view includes one commit too many.&lt;/p&gt;</comment>
                            <comment id="129351" author="had" created="Mon, 25 Jul 2016 07:18:44 +0200"  >&lt;p&gt;Bulk close of all old resolved tickets.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10010">
                    <name>relation</name>
                                                                <inwardlinks description="is related to">
                                        <issuelink>
            <issuekey id="41334">BLOSSOM-194</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="39744">BLOSSOM-187</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="41646">BLOSSOM-195</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                            <attachment id="20742" name="BlossomDispatcherServlet.java" size="9168" author="tmattsson" created="Thu, 10 Oct 2013 15:53:40 +0200"/>
                            <attachment id="20661" name="IncludeRequestWrapper.java" size="3333" author="tmattsson" created="Wed, 2 Oct 2013 11:44:04 +0200"/>
                            <attachment id="20743" name="SimulatedDispatchRequestWrapper.java" size="16541" author="tmattsson" created="Thu, 10 Oct 2013 15:53:40 +0200"/>
                            <attachment id="20662" name="SpecialAttributeRequestWrapper.java" size="6972" author="tmattsson" created="Wed, 2 Oct 2013 11:44:04 +0200"/>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                            <customfield id="customfield_14166" key="com.okapya.jira.checklist:checklist">
                        <customfieldname>Acceptance criteria</customfieldname>
                        <customfieldvalues>
                            
        <checklist>
        <![CDATA[
                            




                
                                    <div class="o-completion" style="display: flex; flex-shrink: 0;"><span  class="aui-lozenge aui-lozenge-complete" style="font-size: 12px; font-weight: normal; display: flex; flex-direction: row; align-items: center;" ><span style="padding-right: 4px; vertical-align: middle;"><svg width="15" height="15" viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg" fill="white"><path clip-rule="evenodd" d="m10.41037,3.42544l-7.86501,0c-0.72395,0 -1.31084,0.58688 -1.31084,1.31084l0,7.86508c0,0.7239 0.58689,1.3108 1.31084,1.3108l7.86501,0c0.724,0 1.3109,-0.5869 1.3109,-1.3108l0,-7.86508c0,-0.72396 -0.5869,-1.31084 -1.3109,-1.31084zm-7.86501,-0.65542c-1.08593,0 -1.96626,0.88032 -1.96626,1.96626l0,7.86508c0,1.0859 0.88033,1.9662 1.96626,1.9662l7.86501,0c1.086,0 1.9663,-0.8803 1.9663,-1.9662l0,-7.86508c0,-1.08594 -0.8803,-1.96626 -1.9663,-1.96626l-7.86501,0z" fill-rule="evenodd"/><path d="m5.09049,10.18526l-1.82767,-1.82766l-0.78479,0.78479l2.61246,2.61246l5.38758,-5.38754l-0.78483,-0.78479l-4.60275,4.60274z"/></svg></span><span>Empty</span></span></div>
                        ]]>
    </checklist>


                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_14169" key="com.okapya.jira.checklist:checklist">
                        <customfieldname>Bug DoR</customfieldname>
                        <customfieldvalues>
                            
        <checklist>
        <![CDATA[
                            




                
                        
        <div style="margin-bottom: 8px;">
                            <div class="o-completion" style="display: flex; flex-shrink: 0;"><span  class="aui-lozenge" style="font-size: 12px; font-weight: normal; display: flex; flex-direction: row; align-items: center;" ><span style="padding-right: 4px; vertical-align: middle;"><svg width="15" height="15" viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg" fill="white"><path clip-rule="evenodd" d="m10.41037,3.42544l-7.86501,0c-0.72395,0 -1.31084,0.58688 -1.31084,1.31084l0,7.86508c0,0.7239 0.58689,1.3108 1.31084,1.3108l7.86501,0c0.724,0 1.3109,-0.5869 1.3109,-1.3108l0,-7.86508c0,-0.72396 -0.5869,-1.31084 -1.3109,-1.31084zm-7.86501,-0.65542c-1.08593,0 -1.96626,0.88032 -1.96626,1.96626l0,7.86508c0,1.0859 0.88033,1.9662 1.96626,1.9662l7.86501,0c1.086,0 1.9663,-0.8803 1.9663,-1.9662l0,-7.86508c0,-1.08594 -0.8803,-1.96626 -1.9663,-1.96626l-7.86501,0z" fill-rule="evenodd"/><path d="m5.09049,10.18526l-1.82767,-1.82766l-0.78479,0.78479l2.61246,2.61246l5.38758,-5.38754l-0.78483,-0.78479l-4.60275,4.60274z"/></svg></span><span>0/2</span></span></div>
                    
            <div class="checklist-progress-bar-wrapper" style="">
        <div class="checklist-progress-bar" style="position: relative; width: 100%; background-color: #cccccc; margin-bottom: 2px; margin-top: 5px;">
                        <div class="checklist-progress" style="display: block; float: none; width: 0%; height: 2px; background: #14892c;">
                            </div>
        </div>
    </div>
        </div>
    
                                    <div style="display: flex; align-items: flex-start; padding: 0; margin-left: 12px; float: none; font-size: 14px;">
                                                                <span style="padding-right: 5px; align-self: flex-start;">
                                <svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg" class="unchecked"><path d="M0.441406 6.94141C0.441406 5.28455 1.78455 3.94141 3.44141 3.94141H15.4414C17.0983 3.94141 18.4414 5.28455 18.4414 6.94141V18.9414C18.4414 20.5983 17.0983 21.9414 15.4414 21.9414H3.44141C1.78455 21.9414 0.441406 20.5983 0.441406 18.9414V6.94141Z" fill="#EFF4FB" /><path fill-rule="evenodd" clip-rule="evenodd" d="M12.4414 3.94141H3.44141C1.78455 3.94141 0.441406 5.28455 0.441406 6.94141V18.9414C0.441406 20.5983 1.78455 21.9414 3.44141 21.9414H15.4414C17.0983 21.9414 18.4414 20.5983 18.4414 18.9414V9.94141H17.4414V18.9414C17.4414 20.046 16.546 20.9414 15.4414 20.9414H3.44141C2.33684 20.9414 1.44141 20.046 1.44141 18.9414V6.94141C1.44141 5.83684 2.33684 4.94141 3.44141 4.94141H12.4414V3.94141Z" fill="#ADBBD0" /><path d="M21.5306 5.91574L19.3486 4.58101L21.5306 3.24628C21.5681 3.22328 21.595 3.18633 21.6053 3.14348C21.6156 3.10063 21.6084 3.05545 21.5855 3.01792L20.9444 1.96985C20.8966 1.89162 20.7942 1.86696 20.716 1.91479L18.6331 3.18898V0.747138C18.6331 0.65546 18.5587 0.581055 18.4671 0.581055H17.2386C17.1469 0.581055 17.0725 0.65546 17.0725 0.747138V3.18898L14.9896 1.91487C14.9112 1.86704 14.8091 1.89162 14.7612 1.96993L14.1201 3.018C14.0972 3.05554 14.09 3.10071 14.1003 3.14356C14.1106 3.18641 14.1375 3.22336 14.175 3.24637L16.3571 4.58101L14.175 5.91574C14.1375 5.93866 14.1106 5.9757 14.1003 6.01847C14.09 6.0614 14.0972 6.10657 14.1201 6.14411L14.7612 7.1921C14.8091 7.27032 14.9112 7.29507 14.9896 7.24724L17.0725 5.97304V8.41489C17.0725 8.50657 17.1469 8.58097 17.2386 8.58097H18.4671C18.5587 8.58097 18.6331 8.50657 18.6331 8.41489V5.97313L20.7161 7.24715C20.7943 7.29499 20.8967 7.27032 20.9444 7.19218L21.5856 6.14411C21.6085 6.10657 21.6157 6.0614 21.6054 6.01855C21.5952 5.97562 21.5682 5.93875 21.5306 5.91574Z" fill="#de350b" /></svg>
                        </span>
                                        <div style="cursor: default; text-align: left; flex-grow: 1; padding-right: 3px; margin-top: 2px;">
                                                
                                                
                                                <span >
                                                        <span>Steps to reproduce, expected, and actual results filled</span>

                        </span>
                    </div>
                                                                    <span style="padding-right: 1px; white-space: nowrap;">
                                                        
                                                        
                                                                                </span>
                                    </div>
                                                <div style="display: flex; align-items: flex-start; padding: 0; margin-left: 12px; float: none; font-size: 14px;">
                                                                <span style="padding-right: 5px; align-self: flex-start;">
                                <svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg" class="unchecked"><path d="M0.441406 6.94141C0.441406 5.28455 1.78455 3.94141 3.44141 3.94141H15.4414C17.0983 3.94141 18.4414 5.28455 18.4414 6.94141V18.9414C18.4414 20.5983 17.0983 21.9414 15.4414 21.9414H3.44141C1.78455 21.9414 0.441406 20.5983 0.441406 18.9414V6.94141Z" fill="#EFF4FB" /><path fill-rule="evenodd" clip-rule="evenodd" d="M12.4414 3.94141H3.44141C1.78455 3.94141 0.441406 5.28455 0.441406 6.94141V18.9414C0.441406 20.5983 1.78455 21.9414 3.44141 21.9414H15.4414C17.0983 21.9414 18.4414 20.5983 18.4414 18.9414V9.94141H17.4414V18.9414C17.4414 20.046 16.546 20.9414 15.4414 20.9414H3.44141C2.33684 20.9414 1.44141 20.046 1.44141 18.9414V6.94141C1.44141 5.83684 2.33684 4.94141 3.44141 4.94141H12.4414V3.94141Z" fill="#ADBBD0" /><path d="M21.5306 5.91574L19.3486 4.58101L21.5306 3.24628C21.5681 3.22328 21.595 3.18633 21.6053 3.14348C21.6156 3.10063 21.6084 3.05545 21.5855 3.01792L20.9444 1.96985C20.8966 1.89162 20.7942 1.86696 20.716 1.91479L18.6331 3.18898V0.747138C18.6331 0.65546 18.5587 0.581055 18.4671 0.581055H17.2386C17.1469 0.581055 17.0725 0.65546 17.0725 0.747138V3.18898L14.9896 1.91487C14.9112 1.86704 14.8091 1.89162 14.7612 1.96993L14.1201 3.018C14.0972 3.05554 14.09 3.10071 14.1003 3.14356C14.1106 3.18641 14.1375 3.22336 14.175 3.24637L16.3571 4.58101L14.175 5.91574C14.1375 5.93866 14.1106 5.9757 14.1003 6.01847C14.09 6.0614 14.0972 6.10657 14.1201 6.14411L14.7612 7.1921C14.8091 7.27032 14.9112 7.29507 14.9896 7.24724L17.0725 5.97304V8.41489C17.0725 8.50657 17.1469 8.58097 17.2386 8.58097H18.4671C18.5587 8.58097 18.6331 8.50657 18.6331 8.41489V5.97313L20.7161 7.24715C20.7943 7.29499 20.8967 7.27032 20.9444 7.19218L21.5856 6.14411C21.6085 6.10657 21.6157 6.0614 21.6054 6.01855C21.5952 5.97562 21.5682 5.93875 21.5306 5.91574Z" fill="#de350b" /></svg>
                        </span>
                                        <div style="cursor: default; text-align: left; flex-grow: 1; padding-right: 3px; margin-top: 2px;">
                                                
                                                
                                                <span >
                                                        <span>Affected version filled</span>

                        </span>
                    </div>
                                                                    <span style="padding-right: 1px; white-space: nowrap;">
                                                        
                                                        
                                                                                </span>
                                    </div>
                                            ]]>
    </checklist>


                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10111" key="com.atlassian.jira.toolkit:reporterdomain">
                        <customfieldname>Company</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>tlandmann.de</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_10031" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>Date of First Response</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Fri, 20 Sep 2013 17:57:24 +0200</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_12730" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_14151" key="com.atlassian.jira.toolkit:message">
                        <customfieldname>Docu info</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_10061" key="com.atlassian.jira.toolkit:lastusercommented">
                        <customfieldname>Last comm is not jira-dev</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>false</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10071" key="com.atlassian.jira.toolkit:lastupdaterorcommenter">
                        <customfieldname>Last participant</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>had</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_13136" key="com.atlassian.jira.toolkit:LastCommentDate">
                        <customfieldname>Last public comment date</customfieldname>
                        <customfieldvalues>
                            7 years, 29 weeks, 6 days ago
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                            <customfield id="customfield_10020" key="com.atlassian.jira.toolkit:attachments">
                        <customfieldname>Number of attachments</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>4.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10150" key="com.atlassian.jira.toolkit:comments">
                        <customfieldname>Number of comments</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>24.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10011" key="com.atlassian.jira.toolkit:participants">
                        <customfieldname>Participants</customfieldname>
                        <customfieldvalues>
                                        <customfieldvalue>had</customfieldvalue>
            <customfieldvalue>tln</customfieldvalue>
            <customfieldvalue>tmattsson</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                    <customfield id="customfield_10833" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|i023j3:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10244" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>12298</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_14168" key="com.okapya.jira.checklist:checklist">
                        <customfieldname>Task DoD</customfieldname>
                        <customfieldvalues>
                            
        <checklist>
        <![CDATA[
                            




                
                        
        <div style="margin-bottom: 8px;">
                            <div class="o-completion" style="display: flex; flex-shrink: 0;"><span  class="aui-lozenge" style="font-size: 12px; font-weight: normal; display: flex; flex-direction: row; align-items: center;" ><span style="padding-right: 4px; vertical-align: middle;"><svg width="15" height="15" viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg" fill="white"><path clip-rule="evenodd" d="m10.41037,3.42544l-7.86501,0c-0.72395,0 -1.31084,0.58688 -1.31084,1.31084l0,7.86508c0,0.7239 0.58689,1.3108 1.31084,1.3108l7.86501,0c0.724,0 1.3109,-0.5869 1.3109,-1.3108l0,-7.86508c0,-0.72396 -0.5869,-1.31084 -1.3109,-1.31084zm-7.86501,-0.65542c-1.08593,0 -1.96626,0.88032 -1.96626,1.96626l0,7.86508c0,1.0859 0.88033,1.9662 1.96626,1.9662l7.86501,0c1.086,0 1.9663,-0.8803 1.9663,-1.9662l0,-7.86508c0,-1.08594 -0.8803,-1.96626 -1.9663,-1.96626l-7.86501,0z" fill-rule="evenodd"/><path d="m5.09049,10.18526l-1.82767,-1.82766l-0.78479,0.78479l2.61246,2.61246l5.38758,-5.38754l-0.78483,-0.78479l-4.60275,4.60274z"/></svg></span><span>0/6</span></span></div>
                    
            <div class="checklist-progress-bar-wrapper" style="">
        <div class="checklist-progress-bar" style="position: relative; width: 100%; background-color: #cccccc; margin-bottom: 2px; margin-top: 5px;">
                        <div class="checklist-progress" style="display: block; float: none; width: 0%; height: 2px; background: #14892c;">
                            </div>
        </div>
    </div>
        </div>
    
                                    <div style="display: flex; align-items: flex-start; padding: 0; margin-left: 12px; float: none; font-size: 14px;">
                                                                <span style="padding-right: 5px; align-self: flex-start;">
                                <svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg" class="unchecked"><path d="M0.441406 6.94141C0.441406 5.28455 1.78455 3.94141 3.44141 3.94141H15.4414C17.0983 3.94141 18.4414 5.28455 18.4414 6.94141V18.9414C18.4414 20.5983 17.0983 21.9414 15.4414 21.9414H3.44141C1.78455 21.9414 0.441406 20.5983 0.441406 18.9414V6.94141Z" fill="#EFF4FB" /><path fill-rule="evenodd" clip-rule="evenodd" d="M12.4414 3.94141H3.44141C1.78455 3.94141 0.441406 5.28455 0.441406 6.94141V18.9414C0.441406 20.5983 1.78455 21.9414 3.44141 21.9414H15.4414C17.0983 21.9414 18.4414 20.5983 18.4414 18.9414V9.94141H17.4414V18.9414C17.4414 20.046 16.546 20.9414 15.4414 20.9414H3.44141C2.33684 20.9414 1.44141 20.046 1.44141 18.9414V6.94141C1.44141 5.83684 2.33684 4.94141 3.44141 4.94141H12.4414V3.94141Z" fill="#ADBBD0" /><path d="M21.5306 5.91574L19.3486 4.58101L21.5306 3.24628C21.5681 3.22328 21.595 3.18633 21.6053 3.14348C21.6156 3.10063 21.6084 3.05545 21.5855 3.01792L20.9444 1.96985C20.8966 1.89162 20.7942 1.86696 20.716 1.91479L18.6331 3.18898V0.747138C18.6331 0.65546 18.5587 0.581055 18.4671 0.581055H17.2386C17.1469 0.581055 17.0725 0.65546 17.0725 0.747138V3.18898L14.9896 1.91487C14.9112 1.86704 14.8091 1.89162 14.7612 1.96993L14.1201 3.018C14.0972 3.05554 14.09 3.10071 14.1003 3.14356C14.1106 3.18641 14.1375 3.22336 14.175 3.24637L16.3571 4.58101L14.175 5.91574C14.1375 5.93866 14.1106 5.9757 14.1003 6.01847C14.09 6.0614 14.0972 6.10657 14.1201 6.14411L14.7612 7.1921C14.8091 7.27032 14.9112 7.29507 14.9896 7.24724L17.0725 5.97304V8.41489C17.0725 8.50657 17.1469 8.58097 17.2386 8.58097H18.4671C18.5587 8.58097 18.6331 8.50657 18.6331 8.41489V5.97313L20.7161 7.24715C20.7943 7.29499 20.8967 7.27032 20.9444 7.19218L21.5856 6.14411C21.6085 6.10657 21.6157 6.0614 21.6054 6.01855C21.5952 5.97562 21.5682 5.93875 21.5306 5.91574Z" fill="#de350b" /></svg>
                        </span>
                                        <div style="cursor: default; text-align: left; flex-grow: 1; padding-right: 3px; margin-top: 2px;">
                                                
                                                
                                                <span >
                                                        <span>Doc/release notes changes? Comment present?</span>

                        </span>
                    </div>
                                                                    <span style="padding-right: 1px; white-space: nowrap;">
                                                        
                                                        
                                                                                </span>
                                    </div>
                                                <div style="display: flex; align-items: flex-start; padding: 0; margin-left: 12px; float: none; font-size: 14px;">
                                                                <span style="padding-right: 5px; align-self: flex-start;">
                                <svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg" class="unchecked"><path d="M0.441406 6.94141C0.441406 5.28455 1.78455 3.94141 3.44141 3.94141H15.4414C17.0983 3.94141 18.4414 5.28455 18.4414 6.94141V18.9414C18.4414 20.5983 17.0983 21.9414 15.4414 21.9414H3.44141C1.78455 21.9414 0.441406 20.5983 0.441406 18.9414V6.94141Z" fill="#EFF4FB" /><path fill-rule="evenodd" clip-rule="evenodd" d="M12.4414 3.94141H3.44141C1.78455 3.94141 0.441406 5.28455 0.441406 6.94141V18.9414C0.441406 20.5983 1.78455 21.9414 3.44141 21.9414H15.4414C17.0983 21.9414 18.4414 20.5983 18.4414 18.9414V9.94141H17.4414V18.9414C17.4414 20.046 16.546 20.9414 15.4414 20.9414H3.44141C2.33684 20.9414 1.44141 20.046 1.44141 18.9414V6.94141C1.44141 5.83684 2.33684 4.94141 3.44141 4.94141H12.4414V3.94141Z" fill="#ADBBD0" /><path d="M21.5306 5.91574L19.3486 4.58101L21.5306 3.24628C21.5681 3.22328 21.595 3.18633 21.6053 3.14348C21.6156 3.10063 21.6084 3.05545 21.5855 3.01792L20.9444 1.96985C20.8966 1.89162 20.7942 1.86696 20.716 1.91479L18.6331 3.18898V0.747138C18.6331 0.65546 18.5587 0.581055 18.4671 0.581055H17.2386C17.1469 0.581055 17.0725 0.65546 17.0725 0.747138V3.18898L14.9896 1.91487C14.9112 1.86704 14.8091 1.89162 14.7612 1.96993L14.1201 3.018C14.0972 3.05554 14.09 3.10071 14.1003 3.14356C14.1106 3.18641 14.1375 3.22336 14.175 3.24637L16.3571 4.58101L14.175 5.91574C14.1375 5.93866 14.1106 5.9757 14.1003 6.01847C14.09 6.0614 14.0972 6.10657 14.1201 6.14411L14.7612 7.1921C14.8091 7.27032 14.9112 7.29507 14.9896 7.24724L17.0725 5.97304V8.41489C17.0725 8.50657 17.1469 8.58097 17.2386 8.58097H18.4671C18.5587 8.58097 18.6331 8.50657 18.6331 8.41489V5.97313L20.7161 7.24715C20.7943 7.29499 20.8967 7.27032 20.9444 7.19218L21.5856 6.14411C21.6085 6.10657 21.6157 6.0614 21.6054 6.01855C21.5952 5.97562 21.5682 5.93875 21.5306 5.91574Z" fill="#de350b" /></svg>
                        </span>
                                        <div style="cursor: default; text-align: left; flex-grow: 1; padding-right: 3px; margin-top: 2px;">
                                                
                                                
                                                <span >
                                                        <span>Downstream builds green?</span>

                        </span>
                    </div>
                                                                    <span style="padding-right: 1px; white-space: nowrap;">
                                                        
                                                        
                                                                                </span>
                                    </div>
                                                <div style="display: flex; align-items: flex-start; padding: 0; margin-left: 12px; float: none; font-size: 14px;">
                                                                <span style="padding-right: 5px; align-self: flex-start;">
                                <svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg" class="unchecked"><path d="M0.441406 6.94141C0.441406 5.28455 1.78455 3.94141 3.44141 3.94141H15.4414C17.0983 3.94141 18.4414 5.28455 18.4414 6.94141V18.9414C18.4414 20.5983 17.0983 21.9414 15.4414 21.9414H3.44141C1.78455 21.9414 0.441406 20.5983 0.441406 18.9414V6.94141Z" fill="#EFF4FB" /><path fill-rule="evenodd" clip-rule="evenodd" d="M12.4414 3.94141H3.44141C1.78455 3.94141 0.441406 5.28455 0.441406 6.94141V18.9414C0.441406 20.5983 1.78455 21.9414 3.44141 21.9414H15.4414C17.0983 21.9414 18.4414 20.5983 18.4414 18.9414V9.94141H17.4414V18.9414C17.4414 20.046 16.546 20.9414 15.4414 20.9414H3.44141C2.33684 20.9414 1.44141 20.046 1.44141 18.9414V6.94141C1.44141 5.83684 2.33684 4.94141 3.44141 4.94141H12.4414V3.94141Z" fill="#ADBBD0" /><path d="M21.5306 5.91574L19.3486 4.58101L21.5306 3.24628C21.5681 3.22328 21.595 3.18633 21.6053 3.14348C21.6156 3.10063 21.6084 3.05545 21.5855 3.01792L20.9444 1.96985C20.8966 1.89162 20.7942 1.86696 20.716 1.91479L18.6331 3.18898V0.747138C18.6331 0.65546 18.5587 0.581055 18.4671 0.581055H17.2386C17.1469 0.581055 17.0725 0.65546 17.0725 0.747138V3.18898L14.9896 1.91487C14.9112 1.86704 14.8091 1.89162 14.7612 1.96993L14.1201 3.018C14.0972 3.05554 14.09 3.10071 14.1003 3.14356C14.1106 3.18641 14.1375 3.22336 14.175 3.24637L16.3571 4.58101L14.175 5.91574C14.1375 5.93866 14.1106 5.9757 14.1003 6.01847C14.09 6.0614 14.0972 6.10657 14.1201 6.14411L14.7612 7.1921C14.8091 7.27032 14.9112 7.29507 14.9896 7.24724L17.0725 5.97304V8.41489C17.0725 8.50657 17.1469 8.58097 17.2386 8.58097H18.4671C18.5587 8.58097 18.6331 8.50657 18.6331 8.41489V5.97313L20.7161 7.24715C20.7943 7.29499 20.8967 7.27032 20.9444 7.19218L21.5856 6.14411C21.6085 6.10657 21.6157 6.0614 21.6054 6.01855C21.5952 5.97562 21.5682 5.93875 21.5306 5.91574Z" fill="#de350b" /></svg>
                        </span>
                                        <div style="cursor: default; text-align: left; flex-grow: 1; padding-right: 3px; margin-top: 2px;">
                                                
                                                
                                                <span >
                                                        <span>Solution information and context easily available?</span>

                        </span>
                    </div>
                                                                    <span style="padding-right: 1px; white-space: nowrap;">
                                                        
                                                        
                                                                                </span>
                                    </div>
                                                <div style="display: flex; align-items: flex-start; padding: 0; margin-left: 12px; float: none; font-size: 14px;">
                                                                <span style="padding-right: 5px; align-self: flex-start;">
                                <svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg" class="unchecked"><path d="M0.441406 6.94141C0.441406 5.28455 1.78455 3.94141 3.44141 3.94141H15.4414C17.0983 3.94141 18.4414 5.28455 18.4414 6.94141V18.9414C18.4414 20.5983 17.0983 21.9414 15.4414 21.9414H3.44141C1.78455 21.9414 0.441406 20.5983 0.441406 18.9414V6.94141Z" fill="#EFF4FB" /><path fill-rule="evenodd" clip-rule="evenodd" d="M12.4414 3.94141H3.44141C1.78455 3.94141 0.441406 5.28455 0.441406 6.94141V18.9414C0.441406 20.5983 1.78455 21.9414 3.44141 21.9414H15.4414C17.0983 21.9414 18.4414 20.5983 18.4414 18.9414V9.94141H17.4414V18.9414C17.4414 20.046 16.546 20.9414 15.4414 20.9414H3.44141C2.33684 20.9414 1.44141 20.046 1.44141 18.9414V6.94141C1.44141 5.83684 2.33684 4.94141 3.44141 4.94141H12.4414V3.94141Z" fill="#ADBBD0" /><path d="M21.5306 5.91574L19.3486 4.58101L21.5306 3.24628C21.5681 3.22328 21.595 3.18633 21.6053 3.14348C21.6156 3.10063 21.6084 3.05545 21.5855 3.01792L20.9444 1.96985C20.8966 1.89162 20.7942 1.86696 20.716 1.91479L18.6331 3.18898V0.747138C18.6331 0.65546 18.5587 0.581055 18.4671 0.581055H17.2386C17.1469 0.581055 17.0725 0.65546 17.0725 0.747138V3.18898L14.9896 1.91487C14.9112 1.86704 14.8091 1.89162 14.7612 1.96993L14.1201 3.018C14.0972 3.05554 14.09 3.10071 14.1003 3.14356C14.1106 3.18641 14.1375 3.22336 14.175 3.24637L16.3571 4.58101L14.175 5.91574C14.1375 5.93866 14.1106 5.9757 14.1003 6.01847C14.09 6.0614 14.0972 6.10657 14.1201 6.14411L14.7612 7.1921C14.8091 7.27032 14.9112 7.29507 14.9896 7.24724L17.0725 5.97304V8.41489C17.0725 8.50657 17.1469 8.58097 17.2386 8.58097H18.4671C18.5587 8.58097 18.6331 8.50657 18.6331 8.41489V5.97313L20.7161 7.24715C20.7943 7.29499 20.8967 7.27032 20.9444 7.19218L21.5856 6.14411C21.6085 6.10657 21.6157 6.0614 21.6054 6.01855C21.5952 5.97562 21.5682 5.93875 21.5306 5.91574Z" fill="#de350b" /></svg>
                        </span>
                                        <div style="cursor: default; text-align: left; flex-grow: 1; padding-right: 3px; margin-top: 2px;">
                                                
                                                
                                                <span >
                                                        <span><strong>Tests</strong></span>

                        </span>
                    </div>
                                                                    <span style="padding-right: 1px; white-space: nowrap;">
                                                        
                                                        
                                                                                </span>
                                    </div>
                                                <div style="display: flex; align-items: flex-start; padding: 0; margin-left: 12px; float: none; font-size: 14px;">
                                                                <span style="padding-right: 5px; align-self: flex-start;">
                                <svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg" class="unchecked"><path d="M0.441406 6.94141C0.441406 5.28455 1.78455 3.94141 3.44141 3.94141H15.4414C17.0983 3.94141 18.4414 5.28455 18.4414 6.94141V18.9414C18.4414 20.5983 17.0983 21.9414 15.4414 21.9414H3.44141C1.78455 21.9414 0.441406 20.5983 0.441406 18.9414V6.94141Z" fill="#EFF4FB" /><path fill-rule="evenodd" clip-rule="evenodd" d="M12.4414 3.94141H3.44141C1.78455 3.94141 0.441406 5.28455 0.441406 6.94141V18.9414C0.441406 20.5983 1.78455 21.9414 3.44141 21.9414H15.4414C17.0983 21.9414 18.4414 20.5983 18.4414 18.9414V9.94141H17.4414V18.9414C17.4414 20.046 16.546 20.9414 15.4414 20.9414H3.44141C2.33684 20.9414 1.44141 20.046 1.44141 18.9414V6.94141C1.44141 5.83684 2.33684 4.94141 3.44141 4.94141H12.4414V3.94141Z" fill="#ADBBD0" /><path d="M21.5306 5.91574L19.3486 4.58101L21.5306 3.24628C21.5681 3.22328 21.595 3.18633 21.6053 3.14348C21.6156 3.10063 21.6084 3.05545 21.5855 3.01792L20.9444 1.96985C20.8966 1.89162 20.7942 1.86696 20.716 1.91479L18.6331 3.18898V0.747138C18.6331 0.65546 18.5587 0.581055 18.4671 0.581055H17.2386C17.1469 0.581055 17.0725 0.65546 17.0725 0.747138V3.18898L14.9896 1.91487C14.9112 1.86704 14.8091 1.89162 14.7612 1.96993L14.1201 3.018C14.0972 3.05554 14.09 3.10071 14.1003 3.14356C14.1106 3.18641 14.1375 3.22336 14.175 3.24637L16.3571 4.58101L14.175 5.91574C14.1375 5.93866 14.1106 5.9757 14.1003 6.01847C14.09 6.0614 14.0972 6.10657 14.1201 6.14411L14.7612 7.1921C14.8091 7.27032 14.9112 7.29507 14.9896 7.24724L17.0725 5.97304V8.41489C17.0725 8.50657 17.1469 8.58097 17.2386 8.58097H18.4671C18.5587 8.58097 18.6331 8.50657 18.6331 8.41489V5.97313L20.7161 7.24715C20.7943 7.29499 20.8967 7.27032 20.9444 7.19218L21.5856 6.14411C21.6085 6.10657 21.6157 6.0614 21.6054 6.01855C21.5952 5.97562 21.5682 5.93875 21.5306 5.91574Z" fill="#de350b" /></svg>
                        </span>
                                        <div style="cursor: default; text-align: left; flex-grow: 1; padding-right: 3px; margin-top: 2px;">
                                                
                                                
                                                <span >
                                                        <span><strong>FixVersion</strong> filled and not yet released</span>

                        </span>
                    </div>
                                                                    <span style="padding-right: 1px; white-space: nowrap;">
                                                        
                                                        
                                                                                </span>
                                    </div>
                                                <div style="display: flex; align-items: flex-start; padding: 0; margin-left: 12px; float: none; font-size: 14px;">
                                                                <span style="padding-right: 5px; align-self: flex-start;">
                                <svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg" class="unchecked"><rect fill="#EFF4FB" height="17.5" rx="2.5" stroke="#ADBBD0" width="18" x="0.44141" y="3.94141"/></svg>
                        </span>
                                        <div style="cursor: default; text-align: left; flex-grow: 1; padding-right: 3px; margin-top: 2px;">
                                                
                                                
                                                <span >
                                                        <span>Architecture Decision Record (<strong>ADR</strong>)</span>

                        </span>
                    </div>
                                                                    <span style="padding-right: 1px; white-space: nowrap;">
                                                        
                                                        
                                                                                </span>
                                    </div>
                                            ]]>
    </checklist>


                        </customfieldvalues>
                    </customfield>
                                                                                                                                                    <customfield id="customfield_14145" key="com.intenso.jira.issue-templates:issue-templates-customfield">
                        <customfieldname>Template</customfieldname>
                        <customfieldvalues>
                            


                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_15131" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Time in Discovery</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10032" key="com.atlassian.jira.ext.charting:timeinstatus">
                        <customfieldname>Time in Status</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        </customfields>
    </item>
</channel>
</rss>