<p dir="auto">i need to show gif in recyle view android, i am currently using glide and sending gif request to download gif in the onbindviewholder callback<br>
the scroll is smooth but the gif download is very slow with glide,can anybody suggest better mechanism.<br>
current code is</p>
<div class="highlight highlight-source-java notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="package com.example.akash.videogramassignment.adapters;

import android.app.Activity;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.example.akash.videogramassignment.R;
import com.example.akash.videogramassignment.apputils.AppUtils;
import com.example.akash.videogramassignment.models.videoassignment.GridBaseData;
import com.example.akash.videogramassignment.viewholders.GIFItemViewHolder;

import java.util.ArrayList;
import java.util.List;


/**
 * Created by akash on 12/3/16.
 */
public class VideoGramDataAdapter extends RecyclerView.Adapter&lt;GIFItemViewHolder&gt; /*implements OnItemClickListener*/ {
    private List&lt;GridBaseData&gt; mHomePageItemList = new ArrayList&lt;&gt;();
    private final int deviceWidth = AppUtils.getDeviceWidth();
    /*Map&lt;Integer, GifDrawable&gt; params = new HashMap(mHomePageItemList.size()) {
        @Override
        public GifDrawable get(Object key) {
            if (!containsKey(key))
                return null;
            return (GifDrawable) super.get(key);
        }
    };
    Map&lt;Integer, Boolean&gt; isGifRequest = new HashMap(mHomePageItemList.size()) {
        @Override
        public Boolean get(Object key) {
            if (!containsKey(key))
                return false;
            return (Boolean) super.get(key);
        }
    };*/

    private Activity mContext;
    private GIFItemViewHolder GIFItemViewHolder;

    public VideoGramDataAdapter(List&lt;GridBaseData&gt; homePageListItemList, Activity context) {
        mHomePageItemList = homePageListItemList;
        mContext = context;

    }

    @Override
    public GIFItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_gif_item_tuple, parent, false);
        return new GIFItemViewHolder(view);
    }

    @Override
    public void onBindViewHolder(GIFItemViewHolder holder, int position) {
     /* float factor = deviceWidth/(mHomePageItemList.get(position).grid.width);
        int height = (int)factor*(mHomePageItemList.get(position).grid.height);
        holder.tupleContainer.setLayoutParams(new ViewGroup.LayoutParams(
                deviceWidth, height)); */
        //Glide.with(mContext).load(R.layout.layout_spinner).override(Integer.valueOf(mHomePageItemList.get(position).grid.height), deviceWidth); // resizes the image to these dimensions (in pixel). does not respect aspect ratio.into(holder.mItemIcon);
        /*if (isGifRequest != null *//*&amp;&amp; isGifRequest.get(position) *//* &amp;&amp; params != null &amp;&amp; params.get(position) != null) {*/
        Glide.with(mContext).load(mHomePageItemList.get(position).grid.gif_url)
                .asGif()
                .diskCacheStrategy(DiskCacheStrategy.RESULT)
                //.override(/*Integer.valueOf(mHomePageItemList.get(position).grid.height)*/(deviceWidth*3)/4, deviceWidth)
                .into(holder.mItemIcon);
        /*} else
            Glide.with(mContext).load(mHomePageItemList.get(position).ppurl).into(GIFItemViewHolder.mItemIcon);*/


    }


    @Override
    public int getItemCount() {
        return mHomePageItemList != null ? (mHomePageItemList.size()) : 0;
    }

    public void addAll(List&lt;? extends GridBaseData&gt; items) {
        mHomePageItemList.addAll(items);
    }


   /* @Override
    public void onItemClick(int position, View v) {
        if (GIFItemViewHolder != null &amp;&amp; mContext != null) {
            if (params.get(position) == null) {
                downloadImage(position, v);
                isGifRequest.put(position, true);
            } else {
                ImageView imageView = (ImageView) v;
                //imageView.setImageDrawable(params.get(position));
                Glide.with(mContext).load(params.get(position)).into(imageView);
            }
        }
        if (mContext != null) {
            LogUtils.makeToast(&quot;called&quot; + position, mContext.getApplicationContext());
        }
    }*/

    /*private void downloadImage(final int position, View v) {
        ImageView imageView = (ImageView) v;
     *//*   Glide.with(mContext).load(mHomePageItemList.get(position).grid.gif_url).asGif()
                .into(new SimpleTarget&lt;GifTypeRequest&gt;() {
                    @Override
                    public void onResourceReady(GifTypeRequest resource, GlideAnimation glideAnimation) {
                        params.put(position, resource);
                        //Glide.with(this).load(R.raw.sample_gif).into(imageViewTarget);
                    }
                });*//*
        Glide.with(mContext).load(mHomePageItemList.get(position).grid.gif_url).asGif().listener(new RequestListener&lt;String, GifDrawable&gt;() {
            @Override
            public boolean onException(Exception e, String model, Target&lt;GifDrawable&gt; target, boolean isFirstResource) {
                return false;
            }

            @Override
            public boolean onResourceReady(GifDrawable resource, String model, Target&lt;GifDrawable&gt; target, boolean isFromMemoryCache, boolean isFirstResource) {
                params.put(position, resource);
                return false;
            }


        }).into(imageView);
    }*/

    @Override
    public void onViewRecycled(GIFItemViewHolder holder) {
        super.onViewRecycled(holder);
        Glide.clear(holder.mItemIcon);
    }
}"><pre class="notranslate"><span class="pl-k">package</span> <span class="pl-s1">com</span>.<span class="pl-s1">example</span>.<span class="pl-s1">akash</span>.<span class="pl-s1">videogramassignment</span>.<span class="pl-s1">adapters</span>;

<span class="pl-k">import</span> <span class="pl-s1">android</span>.<span class="pl-s1">app</span>.<span class="pl-s1">Activity</span>;
<span class="pl-k">import</span> <span class="pl-s1">android</span>.<span class="pl-s1">support</span>.<span class="pl-s1">v7</span>.<span class="pl-s1">widget</span>.<span class="pl-s1">RecyclerView</span>;
<span class="pl-k">import</span> <span class="pl-s1">android</span>.<span class="pl-s1">view</span>.<span class="pl-s1">LayoutInflater</span>;
<span class="pl-k">import</span> <span class="pl-s1">android</span>.<span class="pl-s1">view</span>.<span class="pl-s1">View</span>;
<span class="pl-k">import</span> <span class="pl-s1">android</span>.<span class="pl-s1">view</span>.<span class="pl-s1">ViewGroup</span>;

<span class="pl-k">import</span> <span class="pl-s1">com</span>.<span class="pl-s1">bumptech</span>.<span class="pl-s1">glide</span>.<span class="pl-s1">Glide</span>;
<span class="pl-k">import</span> <span class="pl-s1">com</span>.<span class="pl-s1">bumptech</span>.<span class="pl-s1">glide</span>.<span class="pl-s1">load</span>.<span class="pl-s1">engine</span>.<span class="pl-s1">DiskCacheStrategy</span>;
<span class="pl-k">import</span> <span class="pl-s1">com</span>.<span class="pl-s1">example</span>.<span class="pl-s1">akash</span>.<span class="pl-s1">videogramassignment</span>.<span class="pl-s1">R</span>;
<span class="pl-k">import</span> <span class="pl-s1">com</span>.<span class="pl-s1">example</span>.<span class="pl-s1">akash</span>.<span class="pl-s1">videogramassignment</span>.<span class="pl-s1">apputils</span>.<span class="pl-s1">AppUtils</span>;
<span class="pl-k">import</span> <span class="pl-s1">com</span>.<span class="pl-s1">example</span>.<span class="pl-s1">akash</span>.<span class="pl-s1">videogramassignment</span>.<span class="pl-s1">models</span>.<span class="pl-s1">videoassignment</span>.<span class="pl-s1">GridBaseData</span>;
<span class="pl-k">import</span> <span class="pl-s1">com</span>.<span class="pl-s1">example</span>.<span class="pl-s1">akash</span>.<span class="pl-s1">videogramassignment</span>.<span class="pl-s1">viewholders</span>.<span class="pl-s1">GIFItemViewHolder</span>;

<span class="pl-k">import</span> <span class="pl-s1">java</span>.<span class="pl-s1">util</span>.<span class="pl-s1">ArrayList</span>;
<span class="pl-k">import</span> <span class="pl-s1">java</span>.<span class="pl-s1">util</span>.<span class="pl-s1">List</span>;


<span class="pl-c">/**</span>
<span class="pl-c"> * Created by akash on 12/3/16.</span>
<span class="pl-c"> */</span>
<span class="pl-k">public</span> <span class="pl-k">class</span> <span class="pl-smi">VideoGramDataAdapter</span> <span class="pl-k">extends</span> <span class="pl-smi">RecyclerView</span>.<span class="pl-smi">Adapter</span>&lt;<span class="pl-smi">GIFItemViewHolder</span>&gt; <span class="pl-c">/*implements OnItemClickListener*/</span> {
    <span class="pl-k">private</span> <span class="pl-smi">List</span>&lt;<span class="pl-smi">GridBaseData</span>&gt; <span class="pl-s1">mHomePageItemList</span> = <span class="pl-k">new</span> <span class="pl-smi">ArrayList</span>&lt;&gt;();
    <span class="pl-k">private</span> <span class="pl-k">final</span> <span class="pl-smi">int</span> <span class="pl-s1">deviceWidth</span> = <span class="pl-smi">AppUtils</span>.<span class="pl-en">getDeviceWidth</span>();
    <span class="pl-c">/*Map&lt;Integer, GifDrawable&gt; params = new HashMap(mHomePageItemList.size()) {</span>
<span class="pl-c">        @Override</span>
<span class="pl-c">        public GifDrawable get(Object key) {</span>
<span class="pl-c">            if (!containsKey(key))</span>
<span class="pl-c">                return null;</span>
<span class="pl-c">            return (GifDrawable) super.get(key);</span>
<span class="pl-c">        }</span>
<span class="pl-c">    };</span>
<span class="pl-c">    Map&lt;Integer, Boolean&gt; isGifRequest = new HashMap(mHomePageItemList.size()) {</span>
<span class="pl-c">        @Override</span>
<span class="pl-c">        public Boolean get(Object key) {</span>
<span class="pl-c">            if (!containsKey(key))</span>
<span class="pl-c">                return false;</span>
<span class="pl-c">            return (Boolean) super.get(key);</span>
<span class="pl-c">        }</span>
<span class="pl-c">    };*/</span>

    <span class="pl-k">private</span> <span class="pl-smi">Activity</span> <span class="pl-s1">mContext</span>;
    <span class="pl-k">private</span> <span class="pl-smi">GIFItemViewHolder</span> <span class="pl-s1">GIFItemViewHolder</span>;

    <span class="pl-k">public</span> <span class="pl-smi">VideoGramDataAdapter</span>(<span class="pl-smi">List</span>&lt;<span class="pl-smi">GridBaseData</span>&gt; <span class="pl-s1">homePageListItemList</span>, <span class="pl-smi">Activity</span> <span class="pl-s1">context</span>) {
        <span class="pl-s1">mHomePageItemList</span> = <span class="pl-s1">homePageListItemList</span>;
        <span class="pl-s1">mContext</span> = <span class="pl-s1">context</span>;

    }

    <span class="pl-c1">@</span><span class="pl-c1">Override</span>
    <span class="pl-k">public</span> <span class="pl-smi">GIFItemViewHolder</span> <span class="pl-en">onCreateViewHolder</span>(<span class="pl-smi">ViewGroup</span> <span class="pl-s1">parent</span>, <span class="pl-smi">int</span> <span class="pl-s1">viewType</span>) {
        <span class="pl-smi">View</span> <span class="pl-s1">view</span> = <span class="pl-smi">LayoutInflater</span>.<span class="pl-en">from</span>(<span class="pl-s1">parent</span>.<span class="pl-en">getContext</span>()).<span class="pl-en">inflate</span>(<span class="pl-smi">R</span>.<span class="pl-s1">layout</span>.<span class="pl-s1">layout_gif_item_tuple</span>, <span class="pl-s1">parent</span>, <span class="pl-c1">false</span>);
        <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-smi">GIFItemViewHolder</span>(<span class="pl-s1">view</span>);
    }

    <span class="pl-c1">@</span><span class="pl-c1">Override</span>
    <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">onBindViewHolder</span>(<span class="pl-smi">GIFItemViewHolder</span> <span class="pl-s1">holder</span>, <span class="pl-smi">int</span> <span class="pl-s1">position</span>) {
     <span class="pl-c">/* float factor = deviceWidth/(mHomePageItemList.get(position).grid.width);</span>
<span class="pl-c">        int height = (int)factor*(mHomePageItemList.get(position).grid.height);</span>
<span class="pl-c">        holder.tupleContainer.setLayoutParams(new ViewGroup.LayoutParams(</span>
<span class="pl-c">                deviceWidth, height)); */</span>
        <span class="pl-c">//Glide.with(mContext).load(R.layout.layout_spinner).override(Integer.valueOf(mHomePageItemList.get(position).grid.height), deviceWidth); // resizes the image to these dimensions (in pixel). does not respect aspect ratio.into(holder.mItemIcon);</span>
        <span class="pl-c">/*if (isGifRequest != null */</span><span class="pl-c">/*&amp;&amp; isGifRequest.get(position) */</span><span class="pl-c">/* &amp;&amp; params != null &amp;&amp; params.get(position) != null) {*/</span>
        <span class="pl-smi">Glide</span>.<span class="pl-en">with</span>(<span class="pl-s1">mContext</span>).<span class="pl-en">load</span>(<span class="pl-s1">mHomePageItemList</span>.<span class="pl-en">get</span>(<span class="pl-s1">position</span>).<span class="pl-s1">grid</span>.<span class="pl-s1">gif_url</span>)
                .<span class="pl-en">asGif</span>()
                .<span class="pl-en">diskCacheStrategy</span>(<span class="pl-smi">DiskCacheStrategy</span>.<span class="pl-c1">RESULT</span>)
                <span class="pl-c">//.override(/*Integer.valueOf(mHomePageItemList.get(position).grid.height)*/(deviceWidth*3)/4, deviceWidth)</span>
                .<span class="pl-en">into</span>(<span class="pl-s1">holder</span>.<span class="pl-s1">mItemIcon</span>);
        <span class="pl-c">/*} else</span>
<span class="pl-c">            Glide.with(mContext).load(mHomePageItemList.get(position).ppurl).into(GIFItemViewHolder.mItemIcon);*/</span>


    }


    <span class="pl-c1">@</span><span class="pl-c1">Override</span>
    <span class="pl-k">public</span> <span class="pl-smi">int</span> <span class="pl-en">getItemCount</span>() {
        <span class="pl-k">return</span> <span class="pl-s1">mHomePageItemList</span> != <span class="pl-c1">null</span> ? (<span class="pl-s1">mHomePageItemList</span>.<span class="pl-en">size</span>()) : <span class="pl-c1">0</span>;
    }

    <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">addAll</span>(<span class="pl-smi">List</span>&lt;? <span class="pl-k">extends</span> <span class="pl-smi">GridBaseData</span>&gt; <span class="pl-s1">items</span>) {
        <span class="pl-s1">mHomePageItemList</span>.<span class="pl-en">addAll</span>(<span class="pl-s1">items</span>);
    }


   <span class="pl-c">/* @Override</span>
<span class="pl-c">    public void onItemClick(int position, View v) {</span>
<span class="pl-c">        if (GIFItemViewHolder != null &amp;&amp; mContext != null) {</span>
<span class="pl-c">            if (params.get(position) == null) {</span>
<span class="pl-c">                downloadImage(position, v);</span>
<span class="pl-c">                isGifRequest.put(position, true);</span>
<span class="pl-c">            } else {</span>
<span class="pl-c">                ImageView imageView = (ImageView) v;</span>
<span class="pl-c">                //imageView.setImageDrawable(params.get(position));</span>
<span class="pl-c">                Glide.with(mContext).load(params.get(position)).into(imageView);</span>
<span class="pl-c">            }</span>
<span class="pl-c">        }</span>
<span class="pl-c">        if (mContext != null) {</span>
<span class="pl-c">            LogUtils.makeToast("called" + position, mContext.getApplicationContext());</span>
<span class="pl-c">        }</span>
<span class="pl-c">    }*/</span>

    <span class="pl-c">/*private void downloadImage(final int position, View v) {</span>
<span class="pl-c">        ImageView imageView = (ImageView) v;</span>
<span class="pl-c">     */</span><span class="pl-c">/*   Glide.with(mContext).load(mHomePageItemList.get(position).grid.gif_url).asGif()</span>
<span class="pl-c">                .into(new SimpleTarget&lt;GifTypeRequest&gt;() {</span>
<span class="pl-c">                    @Override</span>
<span class="pl-c">                    public void onResourceReady(GifTypeRequest resource, GlideAnimation glideAnimation) {</span>
<span class="pl-c">                        params.put(position, resource);</span>
<span class="pl-c">                        //Glide.with(this).load(R.raw.sample_gif).into(imageViewTarget);</span>
<span class="pl-c">                    }</span>
<span class="pl-c">                });*/</span><span class="pl-c">/*</span>
<span class="pl-c">        Glide.with(mContext).load(mHomePageItemList.get(position).grid.gif_url).asGif().listener(new RequestListener&lt;String, GifDrawable&gt;() {</span>
<span class="pl-c">            @Override</span>
<span class="pl-c">            public boolean onException(Exception e, String model, Target&lt;GifDrawable&gt; target, boolean isFirstResource) {</span>
<span class="pl-c">                return false;</span>
<span class="pl-c">            }</span>
<span class="pl-c"></span>
<span class="pl-c">            @Override</span>
<span class="pl-c">            public boolean onResourceReady(GifDrawable resource, String model, Target&lt;GifDrawable&gt; target, boolean isFromMemoryCache, boolean isFirstResource) {</span>
<span class="pl-c">                params.put(position, resource);</span>
<span class="pl-c">                return false;</span>
<span class="pl-c">            }</span>
<span class="pl-c"></span>
<span class="pl-c"></span>
<span class="pl-c">        }).into(imageView);</span>
<span class="pl-c">    }*/</span>

    <span class="pl-c1">@</span><span class="pl-c1">Override</span>
    <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">onViewRecycled</span>(<span class="pl-smi">GIFItemViewHolder</span> <span class="pl-s1">holder</span>) {
        <span class="pl-en">super</span>.<span class="pl-en">onViewRecycled</span>(<span class="pl-s1">holder</span>);
        <span class="pl-smi">Glide</span>.<span class="pl-en">clear</span>(<span class="pl-s1">holder</span>.<span class="pl-s1">mItemIcon</span>);
    }
}</pre></div>
<p dir="auto">We just started using Glide and I've been comparing the default RESULT disk cache strategy vs. SOURCE and I'm noticing that SOURCE is noticeably faster to render a newly net-retrieved image to the screen.</p>
<p dir="auto">I'm playing with two second-gen Nexus 7's with Lollipop side-by-side with images ~200K, 700x700 average.  I made the most minimal example I can and have ~100 images in a vanilla RecyclerView with a LinearLayoutManager where 4-5 images will be visible on screen at a time.  If I start up both configurations from scratch and scroll to the very bottom of the view the SOURCE config finishes showing the images in less than a second whereas the RESULT config finishes showing them in 2-4 seconds.  This is consistent with regular scrolling where images come down one at a time: SOURCE is always faster than RESULT.</p>
<p dir="auto">Without diving in too deep into the code myself I'm suspecting that RESULT resizes the image before it shows it on screen.  I'd imagine you could make it as fast as SOURCE if on the first/network retrieval you immediately show the full image in the view like SOURCE but on a background thread continue resizing the image and store it in the disk cache resized so on the second request it shows up resized.</p>
<p dir="auto">And now that I've actually typed all that out I can see how that might be unexpected for someone not using something like fitCenter() where the difference between SOURCE and RESULT looks almost the same on screen...hmmm.</p>
<p dir="auto">Does this use case sound interesting to you, though?  I assume there're probably extension points where I could create the behavior I want using custom targets or something but I do really like how Glide handles all the view/adapter/recycling stuff behind the curtains for me.</p>
<p dir="auto">Any suggestions for how to accomplish this with existing apis or if this is a valid enhancement request?</p>
<p dir="auto">Thanks much!</p>
<p dir="auto">Details:</p>
<p dir="auto"><strong>RecyclerView.Adapter</strong></p>
<div class="highlight highlight-source-java notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    Glide.with(holder.itemView.getContext())
            .load(thumbnails[position])
            .fitCenter()
            .crossFade()
//          .diskCacheStrategy(DiskCacheStrategy.SOURCE)
            .into(holder.image);
}"><pre class="notranslate"><span class="pl-c1">@</span><span class="pl-c1">Override</span>
<span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-s1">onBindViewHolder</span>(<span class="pl-smi">ViewHolder</span> <span class="pl-s1">holder</span>, <span class="pl-smi">int</span> <span class="pl-s1">position</span>) {
    <span class="pl-smi">Glide</span>.<span class="pl-en">with</span>(<span class="pl-s1">holder</span>.<span class="pl-s1">itemView</span>.<span class="pl-en">getContext</span>())
            .<span class="pl-en">load</span>(<span class="pl-s1">thumbnails</span>[<span class="pl-s1">position</span>])
            .<span class="pl-en">fitCenter</span>()
            .<span class="pl-en">crossFade</span>()
<span class="pl-c">//          .diskCacheStrategy(DiskCacheStrategy.SOURCE)</span>
            .<span class="pl-en">into</span>(<span class="pl-s1">holder</span>.<span class="pl-s1">image</span>);
}</pre></div>
<p dir="auto"><strong>View Layout</strong></p>
<div class="highlight highlight-text-xml notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;ImageView xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;200dp&quot;
    android:scaleType=&quot;centerCrop&quot;
    android:background=&quot;#444444&quot;
    android:layout_marginBottom=&quot;10dp&quot; /&gt;
"><pre class="notranslate">&lt;?<span class="pl-ent">xml</span><span class="pl-e"> version</span>=<span class="pl-s"><span class="pl-pds">"</span>1.0<span class="pl-pds">"</span></span><span class="pl-e"> encoding</span>=<span class="pl-s"><span class="pl-pds">"</span>utf-8<span class="pl-pds">"</span></span>?&gt;
&lt;<span class="pl-ent">ImageView</span> <span class="pl-e">xmlns</span><span class="pl-e">:</span><span class="pl-e">android</span>=<span class="pl-s"><span class="pl-pds">"</span>http://schemas.android.com/apk/res/android<span class="pl-pds">"</span></span>
    <span class="pl-e">android</span><span class="pl-e">:</span><span class="pl-e">layout_width</span>=<span class="pl-s"><span class="pl-pds">"</span>match_parent<span class="pl-pds">"</span></span>
    <span class="pl-e">android</span><span class="pl-e">:</span><span class="pl-e">layout_height</span>=<span class="pl-s"><span class="pl-pds">"</span>200dp<span class="pl-pds">"</span></span>
    <span class="pl-e">android</span><span class="pl-e">:</span><span class="pl-e">scaleType</span>=<span class="pl-s"><span class="pl-pds">"</span>centerCrop<span class="pl-pds">"</span></span>
    <span class="pl-e">android</span><span class="pl-e">:</span><span class="pl-e">background</span>=<span class="pl-s"><span class="pl-pds">"</span>#444444<span class="pl-pds">"</span></span>
    <span class="pl-e">android</span><span class="pl-e">:</span><span class="pl-e">layout_marginBottom</span>=<span class="pl-s"><span class="pl-pds">"</span>10dp<span class="pl-pds">"</span></span> /&gt;
</pre></div>