Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sOYVj-0001dt-7E for pgadmin-support@arkaria.postgresql.org; Tue, 02 Jul 2024 08:05:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1sOYUj-000CUO-88 for pgadmin-support@arkaria.postgresql.org; Tue, 02 Jul 2024 08:04:09 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sOGbO-001bds-3J for pgadmin-support@lists.postgresql.org; Mon, 01 Jul 2024 12:57:50 +0000 Received: from mail-oo1-xc33.google.com ([2607:f8b0:4864:20::c33]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sOGbK-004ULS-TU for pgadmin-support@postgresql.org; Mon, 01 Jul 2024 12:57:49 +0000 Received: by mail-oo1-xc33.google.com with SMTP id 006d021491bc7-5c219c54800so1406595eaf.0 for ; Mon, 01 Jul 2024 05:57:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1719838664; x=1720443464; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=9V0/OnfYsq4Z+4QjV4OXmdlZJIDi9V15k9ZOlfjkGNw=; b=gdalf185njPDSW4WrAExUlrZ+kPggkuPxZCR1P2W0w4TUktw65oOb7+rwdU/4J9MUL TpBLA1PcUnWUO5p/bvKySgQZ4TTxHX3tuwtdpZGt0LqRtj4lYwKwMGsnekq25x5pAYbv 45zB5seMDL73vvuYv1LzhBP45adSaenkZo9FavQyQ8exf5zmxtPsFkm2u4xa6N2+s8Lh gSl6bNpYhFFNLS+XzYhR/m7iBBZzca1sdmfs/uXnG9/Ejk0q0V72poChIQCG+1A7Nl/J 8P67df/CPyGPBD8vSk7NcNtAdf5OR8pHnKsZhaM9fePP+hUjTbIwUfkuKf+55clD2ZeX tCLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719838664; x=1720443464; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=9V0/OnfYsq4Z+4QjV4OXmdlZJIDi9V15k9ZOlfjkGNw=; b=jCTuwmM5w8ogVU3rmxA3llZGODA2zMYxn4z8oEwmjOyRHKh63NVwIK4UgKsWuiTrId 9xJ8t7NUItfvzKWaMtgFfNq9lzkBNE4GM53s/loJGqzuQfAbyUkfGwbTbnRQEbptN6fc eHTNowCX78dK5YzB5YfP8Y+BTAsjbVJmciUqXEG+wylT50ihVbfd7Fq9azf71pOnCjA+ mjkRPLhKBN0zl6y0nw3EhNe1w3PD+zadoE6/VDQJdWIUhTUxfmAVBKPN1kUjWN3jUi5T SyDb10SE1opMTb/B8ye7oest3TwikKtX9hw9MgDEaH8sQkAH2gomzy7VWHvLWhyOsViL 3jRA== X-Forwarded-Encrypted: i=1; AJvYcCWWmlIL0V9umYgM2ZlMR1J69CEcUTVhfc7e9ytA/rs5bNxX9bQBOYAWzc7hy4uMy87x7o1r+ADfgpHzVv9QiKdhvw8HfBJYMbHOHrt1fNo= X-Gm-Message-State: AOJu0Yzc7nXLp0phwS9WylaKYwINYsSr3/59g4t+saB+ogjnfG2op1Q2 1z03ZLpj289q21/G3ZcsdU9HrHmir0nS66EqBizBj6pOe/S1KOGoiOPcQ84kKE2++psIevmQK5N +lDCv4Qfgwa1BtI60OHCabFC2IuCdW3z7Oat0 X-Google-Smtp-Source: AGHT+IGnUgZ0PAzcBHDnYVhmguYPRV01JBq2bdVMd9gm6XUZbaLhD824gqgq+MBuXzSA3OPw9MKmqq7kX1i3N5l/HKg= X-Received: by 2002:a4a:ad8e:0:b0:5ba:f20c:361b with SMTP id 006d021491bc7-5c439286278mr6042578eaf.8.1719838664157; Mon, 01 Jul 2024 05:57:44 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Aditya Toshniwal Date: Mon, 1 Jul 2024 18:27:07 +0530 Message-ID: Subject: Re: Query tool data grid - Infinite scroll vs Pagination To: Anthony DeBarros Cc: Usman Khan , pgAdmin Support , pgadmin-hackers , Dave Page Content-Type: multipart/related; boundary="000000000000a641e2061c2f2467" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a641e2061c2f2467 Content-Type: multipart/alternative; boundary="000000000000a641e0061c2f2466" --000000000000a641e0061c2f2466 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Anthony, We already do that. It says - 464 fetched out of the total 464 rows. [image: image.png] On Mon, Jul 1, 2024 at 6:12=E2=80=AFPM Anthony DeBarros wrote: > If I may add, please have pgAdmin display the total number of rows in the > result set regardless of pagination page size. > > On Mon, Jul 1, 2024 at 4:35=E2=80=AFAM Usman Khan wrot= e: > >> Hi Aditya >> I vote for pagination, it would really be helpful for end users. >> In addition to giving the user the ability to set page size, if he can >> also select or enter what page he can jump to say 501, 990 etc it would = be >> helpful. >> >> On Fri, Jun 28, 2024 at 3:44=E2=80=AFPM Aditya Toshniwal < >> aditya.toshniwal@enterprisedb.com> wrote: >> >>> Hi, >>> >>> Unfortunately, there were only 3 responses to this. >>> In that case, we will discuss internally and decide what to do. >>> >>> On Thu, Jun 20, 2024 at 2:46=E2=80=AFPM Aditya Toshniwal < >>> aditya.toshniwal@enterprisedb.com> wrote: >>> >>>> Hi Everyone, >>>> >>>> Request you to share your opinion on this and respond on: >>>> >>>> https://docs.google.com/forms/d/e/1FAIpQLSdfJhNK8qXSe9mKcubZa8jjjYl0hi= ZVxhv6GGJo8WJcYc27ug/viewform?usp=3Dsharing >>>> >>>> On Thu, Jun 20, 2024 at 1:36=E2=80=AFPM Dave Page = wrote: >>>> >>>>> Hi >>>>> >>>>> On Wed, 19 Jun 2024 at 13:42, Aditya Toshniwal < >>>>> aditya.toshniwal@enterprisedb.com> wrote: >>>>> >>>>>> Hi Hackers, >>>>>> >>>>>> Query tool data grid currently pulls the data on load basis in >>>>>> batches. For example, it will initially load only 1000 rows and once= a user >>>>>> scrolls to the 1000th row, it will fetch the next batch of 1000. >>>>>> Many users who want access in between rows or last row struggle to d= o >>>>>> it as the user has to scroll and scroll. If someone grabs the scroll= er and >>>>>> pulls it down still it will be a good UX and the scrollbar may jump.= One >>>>>> reported here - https://github.com/pgadmin-org/pgadmin4/issues/1780 >>>>>> One more aspect to this is the in memory data of the query tool whic= h >>>>>> keep on increasing on each scroll, it affects the performance. >>>>>> >>>>>> I propose we should use pagination instead of infinite scroll with >>>>>> the following advantages: >>>>>> 1. Users can jump to any page they want. >>>>>> 2. Users can change the page size on the grid directly. >>>>>> 3. Memory will be used only for visible rows so performance >>>>>> improvement. >>>>>> 4. Predictable UI, no jumping scrollbars. >>>>>> >>>>>> Let me know what you think. >>>>>> >>>>> >>>>> >>>>> I think there are definite benefits, but there is the downside of >>>>> having to scroll and click to browse results. Personally I'm fine wit= h >>>>> that, but I think you should probably poll pgadmin-support for opinio= ns >>>>> from more users. >>>>> >>>>> -- >>>>> Dave Page >>>>> pgAdmin: https://www.pgadmin.org >>>>> PostgreSQL: https://www.postgresql.org >>>>> EDB: https://www.enterprisedb.com >>>>> >>>>> >>>> >>>> -- >>>> Thanks, >>>> Aditya Toshniwal >>>> pgAdmin Hacker | Sr. Software Architect | *enterprisedb.com* >>>> >>>> "Don't Complain about Heat, Plant a TREE" >>>> >>> >>> >>> -- >>> Thanks, >>> Aditya Toshniwal >>> pgAdmin Hacker | Sr. Software Architect | *enterprisedb.com* >>> >>> "Don't Complain about Heat, Plant a TREE" >>> >> --=20 Thanks, Aditya Toshniwal pgAdmin Hacker | Sr. Software Architect | *enterprisedb.com* "Don't Complain about Heat, Plant a TREE" --000000000000a641e0061c2f2466 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi=C2=A0Anthony,

We already do that. It says - 464 fetch= ed out of the total 464 rows.
3D"ima=
=
On Mon= , Jul 1, 2024 at 6:12=E2=80=AFPM Anthony DeBarros <anthonymdebarros@gmail.com> wrote:
If I ma= y add, please have pgAdmin display the total number of rows in the result s= et regardless of pagination page size.

=
On Mon, Jul 1, 2024 at 4:35=E2=80=AFA= M Usman Khan <umk5= 55@gmail.com> wrote:
Hi Aditya
I vote for pagination, it would = really be helpful for end users.
In addition to giving the user t= he ability to set page size, if he can also select or enter what page he ca= n jump to say 501, 990 etc it would be helpful.=C2=A0

On Fri, Jun = 28, 2024 at 3:44=E2=80=AFPM Aditya Toshniwal <aditya.toshniwal@enterprisedb.= com> wrote:
Hi,

Unfortunately, there were only 3 responses to this.=
In that case, we will discuss=C2=A0internally and decide what to do.
=

= On Thu, Jun 20, 2024 at 2:46=E2=80=AFPM Aditya Toshniwal <aditya.toshniwal@e= nterprisedb.com> wrote:
Hi Everyone,

Request you to share your opin= ion on this and respond on:

On Th= u, Jun 20, 2024 at 1:36=E2=80=AFPM Dave Page <dpage@pgadmin.org> wrote:
Hi
On We= d, 19 Jun 2024 at 13:42, Aditya Toshniwal <aditya.toshniwal@enterprisedb.com= > wrote:
=
Hi Hackers,<= /div>

Query tool data grid currently pulls the da= ta on load basis in batches. For example, it will initially load only 1000 = rows and once a user scrolls to the 1000th row, it will fetch the next batc= h of 1000.
Many users wh= o want access in between rows or last row struggle to do it as the user has= to scroll and scroll. If someone grabs the scroller and pulls it down stil= l it will be a good UX and the scrollbar may jump. One reported here -=C2= =A0https://github.com/pgadmin-org/pgadmin4/issues/1780
One more aspect to this is= the in memory data of the query tool which keep on increasing on each scro= ll, it affects the performance.

I propose w= e should use pagination instead of infinite scroll with the following advan= tages:
1. Users can jump= to any page they want.
= 2. Users can change the page size on the grid directly.
3. Memory will be used only for visible row= s so performance improvement.
4. Predictable UI, no jumping scrollbars.

Let me know what=C2=A0you think.
<= div>

I think there are definite benefits, but = there is the downside of having to scroll and click to browse results. Pers= onally I'm fine with that, but I think you should probably poll pgadmin= -support for opinions from more users.

--
Dave Page
PostgreSQL: <= a href=3D"https://www.postgresql.org" target=3D"_blank">https://www.postgre= sql.org



--
Thanks,
Aditya Toshniwal
pgAdmin Hacker=C2=A0| Sr. Software Architect=C2=A0| enterprisedb.com

--
Thanks,
Aditya Toshniwal
pgAdmin Hacker=C2=A0| Sr. Software Architect=C2=A0| enterprisedb.com

--
Thanks,
Aditya Toshniwal
pgAdmin Hacker=C2=A0| Sr. Software Architect=C2=A0| enterprisedb.com
X-Attachment-Id: ii_ly2zhz7f0 iVBORw0KGgoAAAANSUhEUgAAAbgAAABUCAYAAADwOyL+AAAMPWlDQ1BJQ0MgUHJvZmlsZQAASImV VwdYU8kWnluSkEBooUsJvQkiUgJICaGF3hFshCRAKDEGgoodXVRw7SICNnRVRMEKiB1RLCyKvS8W FJR1sWBX3qSArvvK906+uffPP2f+c+bcuWUAUDvJEYlyUHUAcoX54thgf/q45BQ6qQcg8KcB9IAl h5snYkZHhwNoQ+e/27sb0BfaVQep1j/7/6tp8Ph5XACQaIjTeHncXIgPAoBXcUXifACIUt58Wr5I imEDWmKYIMSLpThDjqukOE2O98p84mNZELcCoKTC4YgzAFC9DHl6ATcDaqj2Q+wk5AmEAKjRIfbJ zZ3CgzgVYhvoI4JYqs9I+0En42+aacOaHE7GMJbPRWZKAYI8UQ5nxv9Zjv9tuTmSoRhWsKlkikNi pXOGdbuVPSVMilUg7hOmRUZBrAnxBwFP5g8xSsmUhCTI/VFDbh4L1gzoQOzE4wSEQWwIcZAwJzJc waelC4LYEMMVgk4X5LPjIdaDeDE/LzBO4bNZPCVWEQttSBezmAr+HEcsiyuN9UCSncBU6L/O5LMV +phqYWZ8EsQUiC0KBImREKtC7JiXHRem8BlbmMmKHPIRS2Kl+VtAHMsXBvvL9bGCdHFQrMK/JDdv aL7Y5kwBO1KB9+dnxofI64O1cjmy/OFcsMt8ITNhSIefNy58aC48fkCgfO5YD1+YEKfQ+SDK94+V j8UpopxohT9uxs8JlvJmELvkFcQpxuKJ+XBByvXxdFF+dLw8T7wwixMaLc8HXwHCAQsEADqQwJYG poAsIOjoa+yD/+Q9QYADxCAD8IGDghkakSTrEcJjHCgEf0LEB3nD4/xlvXxQAPmvw6z86ADSZb0F shHZ4CnEuSAM5MD/Etko4XC0RPAEMoJ/ROfAxoX55sAm7f/3/BD7nWFCJlzBSIYi0tWGPImBxABi CDGIaIsb4D64Fx4Oj36wOeMM3GNoHt/9CU8JnYRHhOuELsLtyYIi8U9ZRoAuqB+kqEXaj7XAraCm K+6Pe0N1qIzr4AbAAXeBcZi4L4zsClmWIm9pVeg/af9tBj9cDYUf2YmMknXJfmSbn0eq2qm6DqtI a/1jfeS5pg3XmzXc83N81g/V58Fz2M+e2GLsANaGncLOY0exRkDHTmBNWDt2TIqHV9cT2eoaihYr yycb6gj+EW/oykormedU69Tr9EXel8+fLn1GA9YU0QyxICMzn86EbwQ+nS3kOo6kOzs5uwAgfb/I H19vYmTvDUSn/Tu34A8AvE8MDg4e+c6FngBgnzu8/Q9/52wY8NWhDMC5w1yJuEDO4dIDAT4l1OCd pg+MgTmwgfNxBm7AC/iBQBAKokA8SAaTYPaZcJ2LwTQwC8wHxaAUrABrQQXYBLaCnWAP2A8awVFw CpwFF8FlcB3chaunG7wA/eAd+IwgCAmhIjREHzFBLBF7xBlhID5IIBKOxCLJSCqSgQgRCTILWYCU IquQCmQLUoPsQw4jp5DzSCdyG3mI9CKvkU8ohqqgWqgRaoWOQhkoEw1D49GJaAY6FS1EF6LL0HK0 Gt2NNqCn0IvodbQLfYEOYABTxnQwU8wBY2AsLApLwdIxMTYHK8HKsGqsDmuG1/kq1oX1YR9xIk7D 6bgDXMEheALOxafic/CleAW+E2/AW/Gr+EO8H/9GoBIMCfYETwKbMI6QQZhGKCaUEbYTDhHOwHup m/COSCTqEK2J7vBeTCZmEWcSlxI3EOuJJ4mdxMfEARKJpE+yJ3mTokgcUj6pmLSetJt0gnSF1E36 oKSsZKLkrBSklKIkVCpSKlPapXRc6YrSM6XPZHWyJdmTHEXmkWeQl5O3kZvJl8jd5M8UDYo1xZsS T8mizKeUU+ooZyj3KG+UlZXNlD2UY5QFyvOUy5X3Kp9Tfqj8UUVTxU6FpTJBRaKyTGWHykmV2ypv qFSqFdWPmkLNpy6j1lBPUx9QP6jSVB1V2ao81bmqlaoNqldUX6qR1SzVmGqT1ArVytQOqF1S61Mn q1ups9Q56nPUK9UPq99UH9CgaYzWiNLI1ViqsUvjvEaPJknTSjNQk6e5UHOr5mnNxzSMZk5j0bi0 BbRttDO0bi2ilrUWWytLq1Rrj1aHVr+2praLdqL2dO1K7WPaXTqYjpUOWydHZ7nOfp0bOp90jXSZ unzdJbp1uld03+uN0PPT4+uV6NXrXdf7pE/XD9TP1l+p36h/3wA3sDOIMZhmsNHgjEHfCK0RXiO4 I0pG7B9xxxA1tDOMNZxpuNWw3XDAyNgo2EhktN7otFGfsY6xn3GW8Rrj48a9JjQTHxOByRqTEybP 6dp0Jj2HXk5vpfebGpqGmEpMt5h2mH42szZLMCsyqze7b04xZ5inm68xbzHvtzCxiLCYZVFrcceS bMmwzLRcZ9lm+d7K2irJapFVo1WPtZ4127rQutb6ng3Vxtdmqk21zTVboi3DNtt2g+1lO9TO1S7T rtLukj1q72YvsN9g3zmSMNJjpHBk9cibDioOTIcCh1qHh446juGORY6Nji9HWYxKGbVyVNuob06u TjlO25zujtYcHTq6aHTz6NfOds5c50rna2OoY4LGzB3TNOaVi70L32Wjyy1XmmuE6yLXFtevbu5u Yrc6t153C/dU9yr3mwwtRjRjKeOcB8HD32Oux1GPj55unvme+z3/8nLwyvba5dUz1nosf+y2sY+9 zbw53lu8u3zoPqk+m326fE19Ob7Vvo/8zP14ftv9njFtmVnM3cyX/k7+Yv9D/u9ZnqzZrJMBWEBw QElAR6BmYEJgReCDILOgjKDaoP5g1+CZwSdDCCFhIStDbrKN2Fx2Dbs/1D10dmhrmEpYXFhF2KNw u3BxeHMEGhEasTriXqRlpDCyMQpEsaNWR92Pto6eGn0khhgTHVMZ8zR2dOys2LY4WtzkuF1x7+L9 45fH302wSZAktCSqJU5IrEl8nxSQtCqpa9yocbPHXUw2SBYkN6WQUhJTtqcMjA8cv3Z89wTXCcUT bky0njh94vlJBpNyJh2brDaZM/lAKiE1KXVX6hdOFKeaM5DGTqtK6+eyuOu4L3h+vDW8Xr43fxX/ Wbp3+qr0ngzvjNUZvZm+mWWZfQKWoELwKiska1PW++yo7B3ZgzlJOfW5SrmpuYeFmsJsYesU4ynT p3SK7EXFoq6pnlPXTu0Xh4m35yF5E/Oa8rXgh3y7xEbyi+RhgU9BZcGHaYnTDkzXmC6c3j7DbsaS Gc8Kgwp/m4nP5M5smWU6a/6sh7OZs7fMQeakzWmZaz534dzuecHzds6nzM+e/3uRU9GqorcLkhY0 LzRaOG/h41+Cf6ktVi0WF99c5LVo02J8sWBxx5IxS9Yv+VbCK7lQ6lRaVvplKXfphV9H/1r+6+Cy 9GUdy92Wb1xBXCFccWOl78qdqzRWFa56vDpidcMa+pqSNW/XTl57vsylbNM6yjrJuq7y8PKm9Rbr V6z/UpFZcb3Sv7K+yrBqSdX7DbwNVzb6bazbZLSpdNOnzYLNt7YEb2motqou20rcWrD16bbEbW2/ MX6r2W6wvXT71x3CHV07Y3e21rjX1Owy3LW8Fq2V1PbunrD78p6APU11DnVb6nXqS/eCvZK9z/el 7ruxP2x/ywHGgbqDlgerDtEOlTQgDTMa+hszG7uakps6D4cebmn2aj50xPHIjqOmRyuPaR9bfpxy fOHxwROFJwZOik72nco49bhlcsvd0+NOX2uNae04E3bm3Nmgs6fbmG0nznmfO3re8/zhC4wLjRfd Lja0u7Yf+t3190Mdbh0Nl9wvNV32uNzcObbz+BXfK6euBlw9e4197eL1yOudNxJu3Lo54WbXLd6t nts5t1/dKbjz+e68e4R7JffV75c9MHxQ/YftH/Vdbl3HHgY8bH8U9+juY+7jF0/ynnzpXviU+rTs mcmzmh7nnqO9Qb2Xn49/3v1C9OJzX/GfGn9WvbR5efAvv7/a+8f1d78Svxp8vfSN/psdb13etgxE Dzx4l/vu8/uSD/ofdn5kfGz7lPTp2edpX0hfyr/afm3+Fvbt3mDu4KCII+bIPgUw2ND0dABe7wCA mgwADe7PKOPl+z+ZIfI9qwyB/4Tle0SZuQFQB7/fY/rg181NAPZug9svqK82AYBoKgDxHgAdM2a4 De3VZPtKqRHhPmBz9Ne03DTwb0y+5/wh75/PQKrqAn4+/wtugXxcsSRr5QAAAJZlWElmTU0AKgAA AAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQA AAABAAAAWgAAAAAAAACQAAAAAQAAAJAAAAABAAOShgAHAAAAEgAAAISgAgAEAAAAAQAAAbigAwAE AAAAAQAAAFQAAAAAQVNDSUkAAABTY3JlZW5zaG908sevywAAAAlwSFlzAAAWJQAAFiUBSVIk8AAA AtppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6 bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDYuMC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJo dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpE ZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25z LmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5h ZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPGV4aWY6VXNlckNvbW1lbnQ+U2NyZWVuc2hv dDwvZXhpZjpVc2VyQ29tbWVudD4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjQ0MDwv ZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj44NDwv ZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3Rp ZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjE0NC8xPC90aWZm OlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj4xNDQvMTwvdGlmZjpZUmVz b2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4K ICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Ch69BE4A AB5fSURBVHgB7V0HmNREG/7o/aRIb8eBqAiIgAhHk14EFLCBCorSkX70ztGP3pv0XkVBQKSJYAEF FPQX6R2OJh1P+eedvQnZXO42m909bpfve57dJJPJzOSdZL46k0Q3bt5+SBYoKG1qOn7ynMyZKVP6 OK+4e+8BnT57Mc48fJIRYAQYAUaAEfAlAol9UfjNm7d9USyXyQgwAowAI8AIWEbAJwzuzt37lhvA GRkBRoARYAQYAV8g4BMG9+CfKF+0lctkBBgBRoARYAQsI+ATBme5ds7ICDACjAAjwAj4CAGfMLjk yZL6qLlcLCPACDACjAAjYA0BnzC41KlSWKudczECjAAjwAgwAj5CwCcMLl26ND5qLhfLCDACjAAj wAhYQ8AnDC5VyuSUPiittRZwLkaAEWAEGAFGwAcI+ITBoZ1ZMmegNKlS+qDJXCQjwAgwAowAI+Aa AZ8xOFSdM0dm1uRc9wHnYAQYAUaAEfABAj4Pd4QmB58cVjfBBHDHHDlLq4P54Ha5SEaAEWAEGIEn BQGfMzgACZ8cfkyMACPACDACjEB8IeBTE2V83QTXwwgwAowAI8AIGBFgBmdEhI8ZAUaAEWAEAgIB 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 --000000000000a641e2061c2f2467--