From 48acb427b76d69dab21dd5b04674b1ffb50b2d57 Mon Sep 17 00:00:00 2001
From: Masaki Hara <ackie.h.gmai@gmail.com>
Date: Fri, 20 Aug 2021 13:24:48 +0900
Subject: [PATCH] feat(rubygems): support GitHub Packages (#11107)

---
 .../__fixtures__/dependencies-rails.dat       |  Bin 0 -> 114127 bytes
 .../rubygems/__snapshots__/index.spec.ts.snap | 1373 ++++++++++++++++-
 lib/datasource/rubygems/common.ts             |   39 +
 lib/datasource/rubygems/get-rubygems-org.ts   |    5 +-
 lib/datasource/rubygems/get.ts                |   83 +-
 lib/datasource/rubygems/index.spec.ts         |   43 +-
 lib/datasource/rubygems/releases.ts           |   14 +-
 lib/datasource/rubygems/types.ts              |   44 +
 lib/types/marshal.d.ts                        |   17 +
 lib/util/http/index.ts                        |   35 +-
 lib/util/http/types.ts                        |   12 +-
 package.json                                  |    1 +
 test/util.ts                                  |    8 +
 yarn.lock                                     |   14 +
 14 files changed, 1636 insertions(+), 52 deletions(-)
 create mode 100644 lib/datasource/rubygems/__fixtures__/dependencies-rails.dat
 create mode 100644 lib/datasource/rubygems/types.ts
 create mode 100644 lib/types/marshal.d.ts

diff --git a/lib/datasource/rubygems/__fixtures__/dependencies-rails.dat b/lib/datasource/rubygems/__fixtures__/dependencies-rails.dat
new file mode 100644
index 0000000000000000000000000000000000000000..6c6db93e0a7118cdae79bbdece5baca86e2e5d3c
GIT binary patch
literal 114127
zcmZSKh-M0Atmd@h%uCEo^;F_2O3chDX0u{*4YA_RE6q(xE%H?2Hr6xJGcsVaW(%?6
zEyzhMNy{(F^;F_4Dov^c3ks&B7Nq8-q~;}OrWQx@M6-J;2_+_%WR|5CmlhP{7nOii
zc`EVRDj-Y(DdGny%FioEOwPukLJ*{)EVU>#Ilm|chZ<p+n&SM@qU2N@s=y}Y=jA45
z=A;(kP{RxIeMx3&F%Eg2q|&?;xOVP3I|V~MaIjQ!S~I`{&zdd7n%z^0%S6vW&j@6a
zH3w2)S##nJARb!<xF)ROgRTJVDb(P>ssz>F=t|JMjV_JqYY`g-BRvBh1v^^>Lp@`N
z_d#wIDK03=PtHy)Db@vrA}k2&>_EyP%CLo!fT^C5o`GIcYDps2uo48BjV&<=*(#uE
z1*ybHQFxV=Wu}&cBFIw-yD|Yt%F4}8NzK8h4ofs(HxR54H8QX(<b&9pm7j#qUa<S}
z^O6&ja-hi`yJ@iSE6FcPOvkGdEh%6(4mCmW5}6Y0Z1JZAE>k@NJrj_3(esM{C}v@P
zKrT>tKxqJ~38V%i_Higc#5=kIaEO+rBE>km3UCx+WI4FoLCydxL5*c}Q_$lVT^{TX
zl$b?VffiHf(x`DnVx}b&RRW+=3X*9Ju|*ip8bAnAz#(Y`g%?J&VOItYR@9KkqYyRx
zu`5IiL+pwu2}wa%@uydmYzzu1Y(*d!s8Tcq$)YEGoZ-j=sY$__u!bPI0xV&Nt^{i}
zimnK34r<V%D?tlXbZOM!Bvgl*>OpH*^q|3CCO|de3L3bnND9!(1SAu{c@eWrKvDq?
z71Wdo&X4FyFai$6Ay~@<BqPA?z$_DxRA2@@iUp`aPvtU!%S6vm&jMR2<^zQ?j^Z1x
z38V(2900dOpr#@zK#3|86Tm@)9#tqRutyc95{#%qQGyxJDAJS!G$=<H;cYJ&;A=18
z%opIQ97QWqh$33xc$Fan9=kHk;K!~GOC;b?h#D2x6{6=I?5e=-L&-td)uBZ%c14s#
zGN{c2YWCvnJn$Lo8R%K+6(wVB5aFyB1VHryl18jij7<@i7{R6tYaM}2A=o_Bh{L7~
zEugU}K@Db5?tm6}SgTS{JIowgA%rtufD38^J+LOM!G%KsA}^pT0H-qaLJ00KkR9OA
z!BSr!IRmT&H2~4=K~MAO@?dwMq;_-_Xu*#zjT-czG)qj6k5J>0%Sg{y&kS1}af8B!
zvnVke+C>4`XrO1I2W~lm<Zx6Xa05YVzyXI5wkS%l)iWpxz-C|sK8g~oIe`b%#esSb
zTk_;H0e5zblCgGm`9aRd=0yQes~J>WKsAEYVfX=$B1BTfrU;x&P?9S)Rp1~&4OX1W
zP(u!zGW4X2O$}P&#HIu_fs)ps;k2_=z+L=;A_`Rek`+;Kjrbx8n<9*eLQ#Y>qEJ-f
zjwnoJSR)EW8IFiTQG-3AP?XRtqQI?Atc3}oRwq~!)(C>OI?)v%A_rXoX2hVYz!E7~
zm7qolx)QX2Mwg}}kU{k-o>nIps7(PbhSB?BoS+~?Dzo`O*-Fnu&k)`>#o~8R!EUH$
z0%_%f48SPOAS$3P0;vF-f*L#^H3oX75L2)fw>;oVR}bqD1<v*WA7o6)9HI?mHHPDG
zDnTR>OeL6!1XB&zlc<F(4n?RTfvE^R-(so&y9cFpfT;#8!C@*uO>&?Jp+*aV8#KIR
zh_&d&+4AKD)sY5z5M5Yf4MPQ%(8jI?HLx+%poJ2KJZd13R!b4cmjcG1@e%OoIo4E;
zGq{969R)*ZM-r?RYnWkIh9%&zE5zDJ!mbo-CTc)qSBMtc*cG7$IVceEbQ%P}gCw{E
z5ob{W?iUgjh-fw-g*Bqcz-}5io1(PNu&V=yA8OHoM<GT)V{ssQ5rW+~u=`Mo5$x(P
zqYaCdsL@7RP5~7@pf)njHXRqJOAVGqufuTW67bli0i=RKiZjG$3AzF-v4E}wYo0(?
z1U3gXlF*f)1t_{SYEbe*rYa#m!B$mr!GjJxaIkmE%po(Ipg_UaV*z)BkOB_uAJo)|
zt^}i&MOOee10zh}?glvpSJ=W8Ve>j4sFh%#SCkAc2GPBbGxG~T+6i!tAp0@=fJYG`
z<6~0<&Q>Vd9-As~ke~)DPGzVehfNuJhR3D`>@Jk-j!hL>+Qg;=HGNV$tAnBx+yEsy
zI-z49U`<$~5{CjrG@>g22Ng;bqN~6XeOQ&CMjg5m^k_qu2fG6$%FtDyMHjj>YE*&B
zS!y)$z&$stS&mT84Xg=Q9D&B+(G{S?5sCtE*r3M|iVEy;gsB80j!=|fhA@gWY6z2-
z89<F2Xg>*C=>{Hc0}pPZX9es9J8`3JU;{x>fIWCXBV}+U7=<FZU^hmLxPr~V2tO1v
za2M=QbFg`x8yv>q9F6XGoJkDacsE4qy<)f?mkLB8!%%^l$}p6G!vM7;$F2r7oG{d&
zB{U3q8m2UE13g1yNUs?^xUnZSQ-TA#hI)n&192oZUeFpOLnJjAvBd*YVToo4Y8Zl*
z7$B60f|lOo=ar`>6{i-JWx^Je@z^SW#-hPx3%1n81sXC0%cA=p=eRC-0LKVnGd9=5
zO$7x3Q~@HXp__o2($H04NoZJ=V1yBhL$K62DDr5@5Zwk!QX$@PTkui}aLI!n3HaOi
zMu^e~8pddCd?W?fLlCrv18gxUo^TacD2l-5U<5OY63k#kkwy(hP(^^Jm&*<6{y;|M
zhz=X@f=vSgr6Iyxkk`S!!YIg4)nE-C47<Q4p@t8J8nghykS8gG_`yjS-k?VhC7jt<
z5H$2;q-O}%2?_^{WQ0!@B12<Ug_*0dDgy@?YS80WhZ?Y0)uCr{tcuWL0IM3*SRk!=
zgEzZF(lpjW7iWHlr4g_$tTBb50!zSRsKJ}2;dX&dLJfKhlh8sGLmo9W3FLb4pa*y+
z13fw83?S%80$3B)@IhAq_7rNmLsx<|bkG%n%|Q(ubR}qEgDy>4(11FL;Fv)V8k~K8
zXwL|&30Kg-O+`|G$lvHDU}kM}72r_82wfCgz)COz4n+xiUPiYC><(<5M7UougC4~K
z)SxFVkAu3DgobE9^3dsT^ytF5L>xTsfTR&AMiA9I9z}>~!=?xvWGH<{Y^uO<gBpD}
zm7zu<Hf8A1h)oUHT_{nBO%-g^4tYs9Hg#yxj!g+_)Po|ED&qs7HUrl6goH{iuqLc=
z4J|L=3a~^Dx)OXP7pgg^v4?IBS~#LhqlO`YLLJhv#X3Jmuwx6>g*9+seMNK?h+Kf7
z0-V%PvH*q>EJ2K24QlXVs6h)q40+T5B(3}b1vkDS6i~Ym>%;-hCLy%L1J;B!uyH6r
zgf+SX%%DbBfhDA|DnSisbS3B|47xm8JfKTc5)F8pdf?$gOKhvga3*=M+YI%<ns7$~
zrUJA`KvIAs5|C8jiUf2eSRw&Q3AR8+lBOh(38!^KNM9JemL(L-@Xjwr&j%V0=n61`
z8Lj|lFvC^g4rWv(Sc4g^1bZ;UrD++=pm}?6!bA^d{FNJ0BES~Ra8p6a9eWs|D8XI1
zAz1`A2O}U+%)tyu6lv6e1f@Xy;}nK^hTxKu=&%9zkzl$&e#ZzL3>9Esp|;B~)L;!B
z3{_y0P{Rj94O#$U$deR80-%-=WD6Czt|mH|z-uLl+5&)P11Lzr-b4*B?B-z&HS9{k
zW}*fic7<r+hg}hBAVL<RS?U>@fGQ1aBevkxxaPPfesR|A(1oaQjiA86NN;!)A<8{$
ziZIJQY^uNkhZ-3;m7#_&Hf88_J~lOIF@Q}8YWS1Z1jAeRbA#rB48a2u=xH7M%mRT)
zEMCYmZHS4W=))467-}%07()fv6x7hhP=hsdps2!@QXvg~tm`jvR?Dy!GFTVLlh`}}
zo*_e5fk>bjW?-gH3?<-DKuwz1)nJ4as$<X+9EKT`q&83$gr~s|E*MPpa11vPDj47z
zu?9Lc<6u*S2zP9XFoPbODlDOoQyFRmU{i*pU_fy^T0CJhhLWhlUoe1^47h+tFBk~s
z3$QM%Q3OkB=qeELgP{U5axj!&i5cu_P@@Gy4O)0($Ws#71o8!VEdkb6D_O-bbR7WL
zKu|<r2_bYP7-bl`0<amVA&9O7YY~jB2x|!pns_q=mz3x!4QGoT+{!c3gXjWz5X1Et
zD!|UiC_E8%gG|Bde(WZp1_Xv0%%p^B6KYZdB@R68c7Cv4P|*M$GA25d1VJm2jr0uR
zIzfKK2q~<pu!I&?by!0Tt4gqmsG){c9a_j?RYOwf@qs!_hOkothz>mPhDp#W3Fz?x
zSi=sRBCtnM6B;&USVIn*La=$L0f$W)TDW0TLVB<n;i{=|=1i!)aE<ta4Mh>yn^=Pl
zMH#+eLs1Ae4{NZYD8n9XC`w2RHt+@uTs<Fr!G@v{SFm9y0(%o9*sv?Z2n`Hnn4y88
z1T{2B>xzKZN`oeiz(Ww&>H=_H1x@y2U0Q}O^gx*$t`S%0VJN~LdKk*^B{~#K!RBEE
zGlqGX!Hl5<HJAxh5PYD<8Ys<TtwnLR*T4-*Lp``gT)~E7I+7wps|}k;m<=~<s=y(J
zCH<l~3#<$yU@;tq8L${iPy?2<^b3jxJe?aZ(7p?-<3{+Wy$um7{xNE2@N6=s0z}ZG
zE5HnPbQR#RL=AGRN>GCvT?u*z23;QP4wSi4bQNfkg)U7=M1f{X2^Tc*b`hzK0=Pz`
z%z!fO4a&|aim-$^w5CK+hOeMOQ3y5<HG;62hZe-xl%NJPD23x`iSmJ3qM+@^SPL5b
z<+Bm^&<(Ig+`)#X2<%PNqzd)}nljwMhNci~9+qH3Q-&?r(3FrAY@qeK&`?EBYUtfN
z$k;0KCSTZc0<_cFK%3*hWeq4W!Tv%GC-B-^OUSk)kP>Vqi=mzwLIKze)Ubgr%mr81
zAT#i--!+3Qw#8Pfa~XjSxde?B6Y@PM--4C`!&3<k&%+G_xeDxX49}w|!RC1s1z<BU
zJddITYa#=8ZjB)2Hx92u578se>%?vTf)Ag7osGroP&+}PgWc;$3czMy@j8+c++K$&
z!s>NU=Lu^&4n567VjXE)IF48ct$hLafI<EOI~&#OkTvTjkdqEUYB2l`QDKBo0X7B0
z^Pt8DJdANCdbkI%c^{PLp=Wp!7xl!g*@x#vu*<ReA6n30^*?%{05$}R_mTD&;`Tl$
zqk^4-&HLa1EpYinobL(DD}eKvF(jXXd<J$ns_)U2U_?H;0<akvo(D~cfZYwU26w`T
zx&@op1;C41aBq6XIm!(_BoWkX0Ug;2Pv{u_z^e?=FvPA5+$=*`SA<<1IB-w{7>`2K
zP{ghfy}^iG6<XDcT@h;KOIjOVxXw-iF$W6{Wo(fMuCu_^5cSfp5n@*kmf!^^Pb4K6
z@s6$lYzAt`qbtFkexVj&^*ShcuzDS50}s094y*~3Z?L%?ZYoFt*zKsv3*8J{ZpSnS
zBMeZKprt5uYf#e?vF%@Qx<OAFID-eN%?j2C3IU8D!lnpIFkw@MHK?#D1e=E%T-cPM
z1sOIaBn2Bks22|2!~w2V(Zdbr00nr<18DIH?6f|t0f$c&qBz8=3bQoCstg=#sHqjV
zI@I9BstzrDv8q80VA9GsP%6eVP629~KzHS#M+JJ*jHK=eJZ)nMFL2Al0@2&RNd902
zrjSkqD4M}$poS&5JA%|q#Md-|c5JYgZ=iM?)`W=edulgKahH#<hACVHcJG54rf?;=
zy$|;wHt$2O9011^dhFvYz@YP6Mqpi_*ujWC3>9DxpynA2HCW3n3{_y0P*Vbi8nhgR
zA&;7yK=}jOOvV;M;3K)fEnD;e!g(YYJYc|%Me{cJ6nCh7*aHuIvX`YExVHpS0X7BA
z%V0IogT1i28dS()P1ZQeSLpIluqKeT7_o{&0iskzSAbcdqN@OV4K;wUDna!<x)QYb
zMwdp7ZmJfZ@F@!L76tSKf-?t!>rl{`O;IvfBi7)?rU*-TVN-@RD`8UzHV-v$u_;3f
zU~EcI1DQ~s0*xGki!P#r4BS$Kwo|bN7rFwl*D#V6++vU!Sc3_xIjBK|t^_T3(4|QV
z8UfI5FUX=(tO0~`@&J4s6l~EcSS!ej7?~KaGDKF!t_(9nV^@bI?C~f>4P5LBvGf<w
z0t)0?u=`M^8L*p%7Gc;Gp+*~N#RjOY0P4Gg>kVw>GpN;N0%_l%X94W(4l~4X2hIU8
zq$3Wn!~m>S0k54f(gs8Yv@r+@Pp~Pd(F1OoA)N$)yWIgg$`WiBHve;h@07td3XF4?
zA$Up%+K>e~4#W946d)2cx&m-=K^gu)R{;(Hj6wwNc91i`N-)9*MG1Q1MYjd)4wPhz
zt^yY2$h!#9)u1J6bZOM&3`(G&5mayj1$hI<wL%0BnFbASftw8I$r$Ir7Pxvw8g<1M
zk8o2#PJ=2yiANL#;P69_M-&y{NWzFmOeGlch@u2bJfg^B#sG>mY7CH8px|Ae$z=pO
zof2DS!d{kGKnfmE*uoMP+I$k+K#&^jfrp|58byd{Pw?0iQY#m121e+jn1QP{hAYBW
zj(`u91Fh!*mo(^U5NBlx-d<~<2iFMlCWasIC_<z~Y>F_`BQ{mwAVE!&IF+G>95!X>
zX%m|ou)9#o8EmT1QZY6ql%!-($%D6Q1RwANZWg0QC!rz*tO;vWLdzU<1&C-wR{#zw
zY()y(2rSWuZU|TjYSf`CL60_cd9=ttm!>2l@E0kdMGIKVb)20VaI@DCF`I^wpU@S6
zg9kMOpew;uCcs?>ifynt7{QF91Tz>>q)~&BK<5Q~+BLM1gq}ii7C6u&ouS%5uEq!+
zoJtU>6jKRiI>l524j<HT#-Ru`5HS^@r&dfAVE3RDF_>!5A_G$aYIKlRQ4%g*K<!fS
zoF01QQ81nZo!iA4uOJtJ#^B&hEpU9G1~o{H0lp*F!Q*t0ja2B)#+f0Z<6aP5*qsJl
z6As?;1yTWa8fsF(Fa>L##83q`3C)w}wxJ~i3^P#E0fB4@2_f*NVv<7$tPA9Sj7$l0
z6I=z@U)Vzkt_E)i!Bv4x!X83!H8?^DE>BVj@q(A{Li=t+hY>&M)GY%&yr=(RQ3LiJ
zYB=Fig&GD}RH20e78R)BKw60bN>|WsCAJnOxH*EgydcyZ0c*mVs-V?4x&lN&kFEe*
ztYT}9z>UBX-spyam7oSTx)SsP9$g+SCeWoRi3YsQ5lH3+kBAeUaA8>&tP5*2V5k6x
z5Ne{uP=hyf!|ei_gc{ZuCZPo;hCFI$f|4n;LxnS$g3AT;03wu3!J4p!4>Wqw6<{P&
zxB{HX6s`gsE~p`lZVOlmYS5u8!I4biwxES9x^~onC9Sl;n@qvIQP9#{aJEE`2%L>W
zXcr5v5o=`NQG|#PY>F@=1)C~xsG~*<PGzW(gH0KF1YuJHb{9%h5t}NssKllOH9A2}
zDQb*tK}Kl71L^1yiG5UsxDi^gfuIP+65x>WSG;XW&@sD)&|&~?3Tk{nM`+;|;UA#|
zE5lZxfNw^$AZPCqXu%C!Bgl~$tt#*Y5@^LB^fCaDA}ry7O&QkW7n?$`d8i?SO&MnT
z!f-xn`XW#c^Me~%pnX7CN2G8z*1^j@42U}16kQeAr>I#Mt7%|$s3C$?9a@lJRf8HP
zq!po{5X9f$f-WRR&v!Tj4_v@QHG$F+MuJ0E01gV&Aj7HzHMG!`pam4VG$mm~%;q@I
zf^=vGB08kNSpZ2R*3iPH2up}zQ-(WxqFD+y4>fqPnTHm{*p#3KGbnLE%SUXb8q#uH
z6Kn(KI2%hSYfr&iu?8JpWr%tjyE1T%h|<c(t_~b_sHqo^LexOUt`NPx#;yu2GO#N`
zjSkXE1|pZ^@`7gZjf@~GWQb1s{E*=Xm_Dr0heZvRz{a8qYr4mx4s04~j9^iP7SLE!
zpoTJmL=UdYO~|dv;To}q7&u27=%FYAdlEH$VpE1S%&;j0n}-@`*p#7#8a5>)1smiz
zB=CSgdLqN#0wl0)0e1Wl*hElZg8hXWP8e!1sxk}}U{g>-2SW|kphi)Jt+0eNfx(3x
zaRESF6BukDZvPv?ueSiH!RCKMl+h?G{)aY!;TGX<0)v%d^FR2O1FT&+d@T`h;RLE%
zusR<+!vWnR22ucaJ!%?2SAsS2&=rBrK}`kdO3?BLx-?07191uoY2kx>f(KY9C=4*-
z7^^C<4^cx3t2(T~g;gckMAR_DstzsSu&N;`^uRl3;RoBH=PjIx3tXZZ>A^K(4LfX#
zz#c^nI&8|Yh8#A9VDnG|4x2KxaKomAv|t1GtzgUlNeMO-jktmhLlM}U7{P{J8AfPe
zD8md53?-<cL0a31V2=T5Wg*tCDbC?3l;v??tyn`4uQHUTFJk2$+%&9BUo7gdL<x3#
z!3t3$1-n8lO<yebg58HQScTm*v`EITh@xmFv?2?9sGb?F#vac84fr??BR#lAtWk_d
z5h8-IDFO!{O3wzHDsY@($!}=R0xLs}T5P7FM=UlqXwijD2_=z*cd%F(lFW({lT(uu
zi@-Sny-35EB}L(vVj}6r8fAo3BH|6FO3cW^sT3SFs4<9NEowC4REr*$I2D53ijq%p
zDn*NXoa!h^0HDEWyo;T{hxLF)3&D*c^!UfQR|A|-AsYz58nH$_9z}>)$EFAzh?uz*
z%|0w~jm<EyGSq0srVK4MuqmM^BI@iE@J9rw*$(f;qDKUwCK+5Ku82S}9i#{xET}mJ
z+CD-t3ty8AMIqQcj9|vF7BiSJl%NJPfuRNP&VFzQ3O&fk>LP=ejT$4?kb!-L8cOI&
zFgg$D3czNdh77tAtf7po2wU%v8??CB5No-Ovz7&)B5I@u(FIBd7_P^q0+C}eRA6RT
z3?<+&Kn+LiYEZ)oLk)U4jG+K6ePPI>CN9!ixOi(*@G=eXIwtglh%++4<Ml>*U`<%#
z0*3-bRG=%sj0toVSRw+e64ZD=SArf5=<;Z>fG$n5NPyfE2VUrg9t${2Q1G$`(3BR=
zArlN0SOO744c07;p$cpgYFJ~aK?_U_dDPG(P+o#p2*4ZJ=z)Z@y$7B4hHJ!{T=6JE
zBw1{VFq17dRp78fEkkfBLk&`F%FvTAHZ@>(p)}^OsX~h%Y)Vk02-GN}#tH#G&<TH_
zMH^V_0Q_-js0Y`GJ1(&+LW@f@Mc^<)Z@Zy56l5Q+xI{AytPD$BqA9}~muPCh?!t^q
zG*#H*5={wh;*txr9^4dE1fl0ioCOzn{L~OK2?YvMjH(=60XQ^KGZ4BGtfdyZBCt8A
zv4XAyEgaFMQNxfxkp-J=!`jNj89InLE3iJS0fa>j*l(y|ghdtBV8WsfY#M4vVNrz^
zSXfk$6kd?Eir~}MiB3!4O2tUe5UdMpSYfCD`wcauFw|fTCk$0!lTbqmLk(IOVaSsd
zLj0g5HsBLru$G)S(-e5%9n@5Sjc#ELDXgl%enbr|tm?3a7*>^F6H!AAt2(rh!>Wd~
z&;uRqU<m5`fxG_bX$<F>0eBscp&mjfuFyj@A4wIW=D}(fxQIuodax=32OLIJU|I@R
zhY`S->M#QsQw?eWlh*A36_0q9D}l#bK_fWem2~K_fwS`g9^e3tNDw$t9@NQ%n~pUu
zu$hDz71&gPLl`wCa4JKM2yDu*v;r_3j}}+hjG-i|@b?hGBORny@dUOi!%YQ64weuF
z*S$z)U@c+L6@kq`4RUlPXhDfCjT(%gG>m6e6c>0X8e7odY{i1Nmm{4FiLLbmHx(2#
zPz8uG1l<J8G>fhR94e^k6{`}AfJ1QzdOAfn0_+ZymMXdm%%DfH05#}ID{Mf06HuuD
z?n7f6bpm%FL4`losuO2)L3>4TjYu(q*tCsD5hB{KDFO!>O39B+6_)73sSGs=u_;53
zMr>-p?m~%5Y^u<r6Pps6Mk)C2c<|l@^x6YwO9-6X4ImeYVvS041z5r!T?y`j3CSX`
zIjE6?ZVp;-qD!L&C82@|G(`^13#0@MTobOKK~Vtq5=N<lsRYB<C`vGWjUtWeYZA)@
zLUR{fpb`UX=N0=PJaOkrgAD|QAoc))+X+$vE!+`B33%|_0MR)Hn}HF6C}!YFe{e<E
zibHVT!P*Wcly|_IaJe1SL4hj(yB#BepeVuRb`(Wmb1=dHMG0mqLXk#IMW7WQpgB2k
z{=gA9(BW-Tau29MgLh0EMFH4TSON!XF(`m>2M&@VusK))2T2LGz(JBm4IDxR3n*N{
zBNL<r4S`Jta8p74273uh&>)$CJ7|y;fz81ZG)PLY1r3rkNkIc%oCe>&Lv-*!XD{Iz
zK_P%qEMQXv_8w|5VN-@RsIVynn}-@)*p#6K88#&(1sfNryvN!o!&ef)HDL`d@Wc($
znGs;Gp#~LJC8)kfSAynqbZJyyQ@g4HoxXrI-{Cxc0be}?YAzeX&P~7?gb)=-d+NYp
zh#Ej3H3qQTFR&G)e4uCo^}@k*0x4MnMI%-Rg8RUrbNiszpn?>E-G~~`IF+G#1)DOo
z_{OG$rg4rq@EPk63Bds?P{4zAf`SI4NP&$pVN-?ZwO~~R?jE3YTd*p_5*xVHp+*N*
zb!hQ{RShK(0;>A(3|K)XX|d)(oFx@_yw?DF$2Zn!z)*oD)G*XwEz>bnflWdUR}3|1
zVTvJ-8lIpK!Z#cOI&utaR>$6+Chj~nuz{ek1N#RxcY~YDm=}AYwWpC3fXzS+6Ld4M
z1}?H9Y$YA!25fNi551VfnNPusJPh^lpECm<lLea#3Ib>@M&wTnGcfZeh7xcXpoSxM
zHK^f)p$0SUpgI;c?T}U>f>Iiuya+x&7<A<xX$=Q(V+C~lH+1_aQjj8&3^qkrf()B7
ztVsu(La=$L!HZ29S_orPf*Q!6V8fF^!NCS9@JTDhp!UKw;tMtuMPP5DrZjA3;R`lQ
z^RNaRiZblMhN6U|U=skPYslHcSkoKM91h;;3F>MRaTg6PWr)0v-89S$k6j&>xWJ<j
zHIT6@L<?r@ickZZv_b&XQ3s7;;OwaLfsTuXA4Z8@@ZvlX7d%o4s;dYT11P2=C3-}Z
zU^59bLa?dA5*;{|p+*KaWmpGw(R>JY7v`WYnkv}ArpPDeVzUt~^06sFje1aLfhwzq
zKw|}<-ZB|w806>-utuclL@WBy6k(4j6i0x}!d-@8GY=z1G0ejZUkoLv;Y*<Chcr+~
zE52YgK3EsXlhEb|BEWE|K;#e%72sru(s{s8f+fhYt3eG$3^izBh#`*}fTWd8py0;S
zK!Nn#aJEoz))=r(4O}PIV8^El5%gG9VFo`|WmuvBw>s2lz^V={DzK`dVRV2i3V4{3
zT2a6?VvP)F(T7bDA}+8g!i)-Rs<6ZaPGzVOflV2XiUP&)V0U4wC{R@4sVGp?p~XBl
zN1;YMwJHk8dNS~#0q7BqzrSvzX9(7XHMYS$WMmas;s-+w*2)1x71$)yD8x{M7Md9H
zs6h!Tr0{eH!0X8%?OJSW7;uIXbS)M_C)SX{stW8!)E)s=by!0Tt4gqmsG){c9a_j?
zRf8IOpo9n-b_EYWVC(dQyHoI`0YoP<Xcq{s5o_pSQv~)ZYT#j0hBfT4DFmB`8g$r{
zp@keaC8z;MAlZSBhXCg=qJs=P8E&Kp)`T^<&=r8ah8k4pO0WhKx+1VSs6m9T1TA>b
zrAZ1J@Ej7TqY7?v5gk0>C;|192y|#bGmvo8LE#AY9%?XQGYe}_VN(b;4>h>3DMJe~
zY)VKAHqdkdXp;vxtCA9IC>lW_g3-i<4*SDR2Pp!36C>C#%mORJ2n`Hnn4y881T{3M
z+EV2L4Q^l!H=K=B@XQy|peja~;ZT5R4xuXmH#tx`1?VckVTl^#Se2j#H@XtEphlOb
zVKDQ6f*E@4B6<SF8PI&7Go%gmpxQtw4<o2?DnSG`rV`BH##DnPz;P%-4RTCHXn~HY
zfQG>iUS$j#A;Ox%39T}QYs4D#;F19{d;&HdNf9FOu_?j~er&3+L;y}@s8N7T8J31W
zXq7RF578nDn=zC`75-Jmprii5!HAwau+JSK<q23%1nn*!&|nj|8U@7*mcWFZ8f${M
z9}FXJK~$jM4u%@m;3Kn;l;A!x3+_Q|O-ZCfX28Q!=z)N9fhx*LDPXN2?_zibuQEhx
z#jXr9y<%5~C6MtbL=8vm3ei(7c2!{ap>$ZWt3ylQ*cDNd!a+R-P%{kYfHnA1RB)n1
zk6@h3IKZkwaf&5$LH2>Bv%vO&)L_IrL<Ra%7}TH#sWE^p2Emp%xj~!!46$ZToP9)a
z&(u&4q6@pzK<7##tH9<#bTwF8q8N68O+xb|x=Cn>0mBT`bU>g>13r!fKJ0-Ww>ax}
za0v^FKmzS{P}>1+I#OUFGA=fgz}W(&QH4zvIIK_`RydWR1}QdWXrYQt32MMnw=D|_
zOK@gDj{@>55$I*XpisvWRFEpd6wj615Eb|rQh_TGBqjJN5j=y=;N@1JjtY3y4|)*b
z%&Oo>0<GgBxTOkB5ti`4W)@f(mZXDb8n&c^ri6w`2Qpd+E^LVoIB=Ok=u{F=pBr&*
z2{<fJa~p;!xXU<XyTB%)hAM_hXhDi0j~bo?$~f?CiC6;&d*&i;br0A;9GMHc=mxF?
zqjp1AfF(@Om0%5AWJTC2K=5jLurr8G8{lCeq<R;d+d(sWU{i7XA4Lf+x1%V+9tJ2%
z(2@nZQ&Cd|Xc8W@HUV6$VhbEzQ0-(0ZAYVr56-F&d>IjVS1q_*0SW<(Ai}K%QSo6>
zgIVukQ3MVq)QpHr6>28Kq6#fMv8X@|QtH-upgnZp1!Cx7kF(DJ-IoW}gf-xCC_scd
zx&q7~M^}L*ys;`l4QzBJ==}k7d9XWBdIIPw(BcYR8a1LoEn`qO5}fuyAw}+Ozo0b$
zU_;R32))@4vJrGDxCv-N24o|aa097<=SYwmjEn<P0h+l0TM1GDHU%|kA!?wF4s7`v
zyfB~S?RB7`ORy%8wHOWq54fRki$l$YSe2kU9bE}#oT9h_HBPCU`QY(@9<kW#MB)zm
zHpLhD;G1lW365GI4bNhUd~kyk=?oTp4NmB0Wo$_Vd_X>ELIGTcqXz-L1}CUKf@{Q@
zRKSx0M6K_~FbiuviPJpPw1rI>TKdAK1T~Eb*@0pS;&{k8Y1l$f0OD}a+CXr2Cp!Fu
zKz&(|>2R%BLlC<%aB4u!a@ZAO4Mprq!Dga{BX)&oA&FfPYFP5w*(!j_G9z$xg)JPx
ztut_*Avy%1O&+i&tYL?)0PI85P(xROHN4Ojfz3e;DRd=hVT3M?8af2p?BJueK=};Z
z%tQ|!oDBr<A`MW{Mqpe5bUqf`bfj=ZG!(Fz1g@mf$0aa~0*4f8h+{JhtPC|ku_;4u
zIABu)b{9(H0h=nc=)tB0HHt{9a6r{E-XTQTu~MWJxroD=!1|El3bB|EiyCm~qDBH1
zRajF#7Ik3LP~!@VDzpH`q5?I131k6YNGV&C460Poa{$gN3T!K=h=u6G9bTwvz&^wh
zUZ|>YhZm|kuxVJr3sn`i@IqCA8eS-s6S!Q!R;UVq7C%E)_<+@*haAqu)!<QePznZB
zPGGHA0}rn<MEQYT891k+lpxsEfdddVI`Ak&4QcEO(aRC+s=)3;DM_%agUwtaFSf?6
z5-pOkD?*KDP)S0K&I`B>G1h}_vqVn^gz6BuMy#m-T6$trgh&I}6oEq+B?Vwpg(d!R
zDnpHZY|7B%9-A7lyHH{tn<})}#HNHcaS1-Ik+jiaaQnkh53C7m9HJ}066okkuoi&m
ziooWe#tOO;v~Wb1Mh!y(^@I>;90gk7>4D2FqLaD^>{bDAkq6O?HK+(EL?n4!3c<+>
zCE4Rr2@XBfq7Sc9)PTmN6g>;zQU`V?N;bfy5-kdGDMO7)DmSUPK+{Ix?ge_3WADWi
zJ_p87&jjyb?2t(zQ%K(sYf^!zFh-~VM<{A6fqU^tO7QjKp$C3otLk|`ZErJ3vPBO7
zoW(mID9sz{LA7D^0!}4}bdIS6oN`c7IHnqKP@tx59EwoG3sVt#dd5@%b`MHQ##Dor
zhA|bOre11Q%#eHbz=Lh*(S|+U5_!)a*hEl_VhLy1-FI*`7(;v*D!`_oMg)c$tQ7)^
zDr^ZCy#5;0{{&Y~=wX1fZ4Vy5f%I;{8bMyg@CG(TV4t9-J8a6ZdIp<9uz9E<gH0J)
z^1`MBHGvVR>9{~Ek-$U4=s|`(*_b0{w_y!dEK9Ax27-bT>?_nzf)r**GwB$?4N(D|
z+lHHh8aCkK4oL~V;ttQQ2XJW*9{C~G`|vI^PVW;}+Jh|xc@Bs7jR~Fm1!~U24Z-Jq
z=pC=vG7WeM64(%Q@1xH}Kt|q7^bEnOLGH#Dwcw#nGei=>^cz?OQsje8L5*5akqDaW
z2e-Shxf;BI3zXHtD$reyvoi{AS%W&G1P8LPD?-#%*h~V~4JdULHdSEnqUHyj%1}cE
zn=<qo3!56SyHM&ZY^q?18M*U`O&w<O0~s1X3R2YK2Nap0lnO5q$elGa(ldtiJJ91B
zdpSj*dIL}LLk+}{n9-GBq-Ask;J8JNG;}3cYXf9O*pfTstQo9LQk>Nqcy)&Xf#XC#
zgJBSJaRdQ|DOlZ)p$bbtV5mV$NEq^{sfbV|25Pi|3nui$fwRd9p6f-L^uiXqa8p6S
z166=11kg<YXEc-o09^$*Tu?JVRwWo|2*n}jnI7E;uscvPJh}?But%3h4SH&2VDRF5
z_<bGd@kD6xJzOJFR3HYc!3)idu-*oOh%ao4z+r_FXV_F>i8q|eP~#4pGW7VvrUosB
zuqi=}CDJ;<_!r-UN?P#dI`l}Qq@)EK2#P!`fe9@D;Yy%c4H3WS3czNdhBUeotR)q)
zA{-?x=vr)&CI`SJ7fct(gBY&IPyu#6YB_+R2CMrqRDn%G4G0W1XlV&U9yK8mC~3iy
z{GbCjz|COv1cI|V0(VnD>t3J($5_J&n<B6WQG*JbGOVG6O(EDk)BwY#3@yyCDIq=B
zEcJ?#u~t%qf(@<_U$CJl0(%o{u%Rf!7i=gB!RBENHWX#pgAGLqNx{YgYFrv(AB@7;
z%m<ISfOcYmdk0v945t!AZGou-v#!8Y0}dzDaL1ttH83$1q1O_aD!}eRspm1(U~AT6
zszQr4Oa-WsMy(bBcug62(1qx71iIJ@tO;w(qAS1>Ay}25MhChQv;abvMhza)s$$TJ
zT2OZr+&{urC&6djz{wdsq;R%x!JRiy#|x=vhEX%&QH00|*c5@&9(ub8)Jg?S-hmwo
ziXAM0kIgW!GSmpbrVKqtU{eEj7fPPMrV1@Ou_-}~Qfj4maP0|i%A&_5p=toG5frxA
z;u6%KLs0|{S=8bPT9u(F!&eQUC<L2_5mOk}Vumk<64dY|(C7e9RDxTFL<bpk_7AKH
zYjB|}0DBEJsL+*Q4JLF&U~^D|2we$U@SsbR6f}@we{haN4;!*t>#$*Vu!*361N#Rx
zTrkvNq(uxBU{g>-1w#$i;6+h|t$5@%&@;r*LcksXNZYeuwIjv=wgF_M35Wl|L(i6w
zRtZQ6hWEh=kOs=J_?`!}juB~74DRt;&`2n_v5n35;7&EDeFcs$^b|m-Qw`UM)fdoC
zCpJYWl>=z!IEo^0A&g!*V5kBI3Tnc_W+PY`YRbW;3`^yJVIx|;!)6R>-XpCh$KR<2
zxdz;9Av%)4tqdbXO2n4T;HDzQAR=<mO~8y8bQR#xMvWA#N>C#NT?u+*pv$901iCcM
zA_2Bq5^H9`S^I)l{~75SA?@qOhzcxfummL*Ragr>Eb73fp@upZRcHZ=MFncu5~z2<
z%@ugoMo+jn0}R^4fNMlbn}{JDY>L31L`{9zlwl1sYzo2Vp#~Z@WoV&>O$kZC#sgZR
zZUU(v&;yNvX*E-biC9Au)<6ZPY>)~pUI(cGRVH9H*eVn7;Xhc*D4ZMjz*(2TdN9zA
zK(MJGcR_OwS{a380**2YNd?$zsHp_q8DJ%-5s$6}Ez;4YQ6rqRiU5?Wpfl6hf*F21
z0Jv61Parsh8eCn0)+P}cLIVXi=y(9I=~#mtn@O0#j!hLfTv3A_r!v&w$EFM|3a}}m
zVKi`o>Q1b~aX6bz;6wtQO-Bk@M4^U50a|KDG66H#(T%_o<XDxU1~<AA95pi7`yij7
zMFqNcN}>U8vj}oBE@&zroLq^{46q|(;W|N{fR-(Y=)k865hqwxVMYvAWmsYdw>s1)
z!m17}9<ZvRBr*sUO`v`{=*$SLu|cT9hik+d8PIAKMG=<Z!=?;hg^y_-YA|Cn4=t3j
zDM1ZnP_W@yL<C=YMn<qfmY#t%;tn=6MYw_uO&RWBLsJMg4@<D2DZ>_QXiCTnHZzhY
z+`!QVu@|h7P_V%jfxU@Qdx4HK0u>{0WrTtat`KY<&R~Np!yRmJC8Px#XnxjGub?Ou
zTd-jt^dPVrM!;49#ZXX?f_;Y(S{TYO3SFFLVT2ThS-3(TMIp8(6}T?9#1<Tc>T<9q
zkascs0j&ek6(H&jbOo4I2D%C?L5fugYDl3g!BLmP9g3FT(6ytcHPTwPc<XZ5(I4Rc
z1<^G*;(QFSKCDrJTMZ&Mu&BX|5G;zY#0f4{sL_H&6<Ww+Q9()IgDN3B-3ss^Id~;D
zdf4Nvx1l4?U`<#99$f*Jz(QAoH4mdJ0-J*xoajo>!V+B?H6TGjgQtFm43dNESoE+V
ztGI*>N`p-V1svEvsAVOF8jJ!4Lj~9r)KI}tgEe?jRADP0xj{!@7=k<D=mCH;aeyz#
zFwleO0(laf2N33hRDeBz5e!(=V0aQ$4O-k|xCAxwNh`uYNd-?Xf~>U!PaBaEQlNG-
zp?d-hkZuyd9#W{L;EHNgRbZ1a!V^^uW_Y5?qlPCagz#i09&o=IG8Tm%L^x|(@G-we
zdiaL0a4JER@t8_5i+D^m;1EJhl{gfk1|y~-^qLn_1zJdBDnJct(vmLT+84Z!16+lo
zM+){Lj(SJtf-MDQe{2N==txgUS^=p5M+IsqgXhYShSqUUgn>4yfbGIs!husXxDABv
ze|#kzLKnz+*gSx$0_*|Qv;<yHXP{>Ywi{#$-h2yJ1vUvaC@@SyOHCN^sELU{zU2Zf
z&j5!XdH~^ELjqkG4Aunl8AkZvP=Ls>=n63NE4m7BxS)nGRwbxGhpq%Yr=rV)-GQ=B
z1YHGM*rQ9M20dx{7&H)%cgYXr_(^c<0zIzqCuSppN9-c2z!KEpB!;X8cVb3X1vUva
zMlei53s4Ms)DR_<m_Y|=g7Xs50R(PA8tH*G;Y!SKQ$Y&Ap2A3pC`zz~4!T8Pb5H{Z
zT?ty)pi7e!G~io9;LEUx4j%BR3aFz^V7(Z~|8UcB1QRy1um%-2g;;_Mn=-T@!={9!
zU;|HnfycwqgAC`447g`aU<(OoHU?}eD5#+2Cra^%q5xbhp{$%hw*wqH7>N?a5U>)A
z^oF7YE%4ASK@B+43O7*3#nZk9Pkw>MY{8WZ(LoKJ8-i;@3QfdtKORMhAjhT%GuW}I
z0*5PV(Bo8w8vNLlp+x~UB{Yl%(5fkDETP8%_U57~VjT*eRa4-T>p*dXC9EKudZFhB
zg495B10w#wO+gF9=25UAs38enHf4!Wg1fb7pa)%mg{`$H0P4d)j`zS?%i`?EfUmU$
z)!m@OJ-}MA`UI~sL|VkI3^O%iR|gIr)bxl)A!;~cSBTzf!mbJ}<ziPvN!k^zvr_;y
zyCD$-E-0`?B6#aI)-et2Ntn2UI^dCtC3qo87%3}YBw>gO^nInMVGmB`NJ?<0VbE+p
z*n`--4?f==eq#%IF2>nT1Q#?0dT@<c(=RqfSi%FRGE@&^Q-+p^uqmM=2@zaX4<0QA
z$2HL*2X2)iourBp`REF;gc!OKtgRw+MPPGKgA`o}T5zIEqXs3YipDd*!v)%>1#YvT
z2Mx}}OW-^TN=aa+qLxXZ-VUhi4&LAZQiBn0AQhk`Q(!wmD!`_odKjVxdTs!Y?10pI
zMRz&Q0v(+2kTim<$8aDXMTo*2n<C7j9GfbzcTockr!v$~!KMto5XYtlExBM*f|_JV
zYXjmPs6smE7F@QWM-|SJ3*~%RuvV;*g<TnzFvhMBYmUUO6l^AHgkV>Q7Tnksp$0hQ
zxD89_uoBh;52_-~ah=46GZeucB~astz%nuv(?J0Z_AN###ZZPd{IFRHHV-xQuqi_e
zJ8Vi&Lykb{23rFRPC!JbJ;X{{us%?DV3ZPA)PVhn8fI8jVGS}Y>cFO<h8PxAXaR;r
z1xeur-eCZ0Er8qh=mAEkT!m}I8e-6L2b&^{aur1p&T<t+6*#<5Lm!)sU}dPmicJ}g
zauvl!w6Mo!3~Jz0v0MfBtU(J|z?Ct2MByC70J{;gng*;9cSK=Vgcea~if}{}nksM%
zV2LPf%CJNfnlfyWfTo0!NFdm>1V;pDqylU6l2AmzHR6j1Y>F@<0!0zdh(J+=J0dWZ
zVT}kBW!NJEMF}Ml0V?RBV;FerM{u%6&kw}Zk6?|sq5)R%!4+W-I}Bx53wxwm4b?o1
zK*lf+GmtTqpawE1*zmOeArs)>B_TwI8F(z;K+h1Y3u}O3sK63h7;3Nv6^1IXNvPq3
zp$09GFyu)JAuiCN1X%Mn&LauHvqwgFuIa#`0FkHB6=3FPbQR!mK`m6VDnSi8bS3Du
z9=bf(9hehoNPdM47b2f5hHeU4{GdytMh~bf2-?^V?@*F?q8LA9(TN^(!h`744qlWE
zS{MV<i8aMzRfQ!^aH~U&7_92h!VRk$)W9RH!2v2O@D#D&5jd>vLP|#9;4N${p#>RV
zGesPyi_r>)s4zyT0Gomume3J6u**S_hkpbPtPEQX!w(uaumCN@1sB@r2?%=_5Lk&T
z2w91XFcsuJuoqCXGFEjMfq_*O*fi7t!Kw~x@r$7nYruf2AVc^pA$q{zta}9^SJ@zR
zf;^ASQ>f;HRDnH(5k#2kaCr(-CD=raV8T>~nFle|pyokPuEJ9T^Mj^X4MFEFfO7(A
zp=YFr&<P3`?4gIQ3hY-bp@*&xcj%$31e=H@^w8B|3q5o-WP~0l?P0B=@uxi_J#g9s
z>%<#+aPvW`z<$LZdMN7fh8~Jau!-114@Di0&_hu}Qs{vv6+kU?tR))Gzyo(8L3>M~
zbtx!RFj5{iMPQGj1|3disNsQ48Cq~)Q-T^A)U6FcQ|#bI33`^r+2?~!yn{7i4Ko}H
zP}+rXYe6P}+hf>P5Wwxg66EN%fR&&IH@XtEphlObVKDQ9i&xMNSJKibta5?t1O*pH
zBE_l-93H5t6stPi8Qeh65XD}wiKror)kL&l#;OK2tO-;u(AB%(5)M6?;vCF_FJlF3
z!y0Zll^~KTrV`A=im3)1QmA2%LlJ6lVk$!K%3!KM3vEmVs6kCy>4A4r1hV1}oJY}P
z1!tiP?!_AE8G?0TjT8(OSOOD64c0`Ap$cpgYKUW~K?_a{dDPG(kZ{54o3S>Cu(z|R
zx4s!{DX#DZuWyED3oM}m?rR`*hw=3_pobjbXi^*L8JfVloJ1!QaEXDe6RStCsseik
zHRoYfhc&@qRS7l`HPK*Ihn8@#sv#-y@PV%L0gcpyV+uX+aISv_9}GvtS_u@>kpdV|
z_F*##v-HEJ3LIvrv4B$<YS3a+hF%6@Qv-Gv%8(8=RcLX9O$llgkycuQ26;g1tiXjE
zwhRGY&TfWn%O}q01P?12A}-OvsQhs#Ktv<D0&q~Fx3)m*?7<ELr35U|hi(X132M}#
zD?yJoba}8lP@)W71zL2WOQS{=DDbH<!Uo?LPg+Y2JQ|KRV}lV_*c5?75+kp`Hh6;_
z0g4l>1r|>8P-6z0GPJP8rUW&72~~BV7A|<5I(kWkvn>E#@MAz|aXXR%EJ1~C2G(Fg
zR|GZ(HHgrapal=QG)Y0j4eIPbT0H1sgR_$b-acqZpq+#;7nDMvsST0wG0XtxIFy`^
zp#&T>sHqXV8r0y!P=gkJ81kqANLn!qN{M&|cp*dNph;z{6(`Q*2pfoo>qH7v#Cl(>
zs<4C_Zgr?3hgBU~=wVeu!w>`)fuNQLxb#6!vp53~T86+iVhulRim(J9Hf31zHa3M|
z^H75sn=-Ue#-;={kU<F#&lo6p6APKg%p2*!HR297G(})<qUKewAJCNH4mLD}VDqp9
z8=5j~!G@-Uv|t0ZMB$kZJ+<L%7(p9vaE-Wv4aIaMMTl||n@N~OB{o&y5W|Q83>(49
zFaj1s8G3^Wn~h+1p){JXsltpR49ifXh_nJ2)YQV;&V}sMz*>4>@Ax7uPlrvtVmaRy
zJgEhWLU4ehhC5^m%>c1&7g`-6N^Wqc7U}d_upy|i0^O+rb~wl$-2GnAVnnbq9L;<K
z$h<kxsTth1g=zxXjLr3+I0RQ|ND2_C7~KSLN<pdY(N%y005ue`D!~XN6o;UvT6818
z?m$Vg=qk`sE4nmIQ!02i7#yhRQH4FB5;H;rJw+1~OIU&!l2A<{=>wz&BdQ@Pj1elp
zreMSZsIvohImi&)DHXII1FQ^dN(J>Z!08y>`#5WPa8nq1cs0mo4CkXO0J|O|nZYdv
znSr&6!fFmiD4>{wnUYYXQBx9u+8i>Y2^zcthaS=4gFNs9)(P?;Mj&BTg(al0s>2#w
zSXF{eL=7{n>d*oXs~VC*4?K7UpFKbiJVKQ^TqD-7gVuQ16d{U3Y>L1|5lWGWO%*uI
zP}3_;WvD@mO&NOeh)oUHT_{B)HdSbGgiQ%*6j8fU2lenFC+nccC(gnGJbVsXb_5#p
z!Wx+vDzF4Uh8nCH07DhnB-9wfP=gkz81kqgN}$L95BGyd(a-~k{K~`_(V_wS2Q^_r
zstTmLTQLe6hzg|BTfwHFh6=c4gro#tWda?F#8#QWyN%#t4?PHQrV((T1+>|U;N}iA
zMPQ$xh6gsYuqGC43c==~h72}kXh{Z}5|UC4_^upyHwHb}@E4Vk0Y`9nW6fRQLIS%Y
zw4xGC5x7XgEGp4dfkO-<20&xUaQ}du1y+U;uo%j)7L{l=g58B#RHCWEj3NxnP@{;-
zMJ0HgAKY6ZIy%9vUPHtRK#YuxLjfWh(G`G$3MC5BRe<9KHTtkBL5(_eCFs$HE)RAG
zN|d3iK#MMPY1F6!bv{8&U+^RgD0Pv!k`~<Z$J+EIzp#dG^#r*JOV~n+VtmJmK~$g@
z`53_u@;=z*AdB!7*3cuWuoc#jL##o~Td+y!=@jR{G<Yo15NTEy<OYnyicb|H#bQ+j
zPA(|P7OOHW;fq@xY6xOghn5DhszFVNq?H+<rUU*#YePLloQv29Mh9Fc-sr%l3Nt!T
zRN;;e6lHj#15+LL=s;12BRWvj&@ejS8wkPcD9|$p&NWBi#e1Mz9E*~{8nH$O9z}?_
zz@`W@DzK@-5)(L;p+*EYW$1-FHZ^E*g-r=1QH6I664Ie4;1DM|s!&b<0c*t?S$LHp
zq6@n+%m~A-4oj5bQHUC8*cGBj8+KJ_5r<t7B~eG@p(v1(Ua{6gIC~A?8AZ@FYWRAV
z;LS2%b3u`dC73Zx0jog`VGK2B!G<AENr(}sCcsln@U}I2V#gU+;64gy#GYUm3r!I?
zI8a-N*v!J+#lmJDYVcw+4=seTDM1ZnP_W^fnFBTdK?}^m867>?2z9aG8bOH&qp1V!
zVqsH+C?BvX!Ym!IslpxuDE<LC3#<$yU@?@TmkZcz1iK5Ry^c*4W)xvqh8jgwYqx`j
zbg>Sy;7tC|kz}wYP+(!iA-V!^Xrd;2bR}4mJh~#VIjFIMt^_R{(WOztkU%nrY=Z@l
z2B4>LoM8hS@dE3@8aNm#z`jBa9Sk*Cg9k$u*d)~O!BB%1Kp65Qg%J4mW^g(nI)K2t
z1Pt&mzysAYU{gT>2=)|e@SvLkR)XqpbR}rsMwdqQHC4MJ;I=QQjsaJk=;1`D?F-ik
z3JQ#j25lQ+Q-o4jLXNsa+L!|_lu&ww*o*>)D{9c=RE8S-*py)@EHT`L7ERcUp(LvC
zwtYdf?9ihL(PIgH2m^95kBOck{J1JS)9mn(6)eFC9x8?&QiwH%!3vPBs|A~Z8rI-h
zb|f=!k6;++K~2Ivf&ouT=s`fR%M90v)gQ0{0BoudNfoOq%(RMC88~E66Dw|Ys3C||
z9a>Vvs)mxZ2&#PWjbMOxfP$JqSj!EZ6%cH$5v~(gbfB6KQiVMPG1XzMjIi1ZHW4GN
zF-^n_YfLq$VGRmBJS|i%kbZE+Lr=#z0}k9&fJO)?G%yNVbOm6~p(Z$VC0IiWT@lzE
z)IdU4f)+mL(j)~9xX%N+mlfPZAv$=Vod&o@tU-iL5!idE!Guj2)}X?s5NsZ5aA8x1
z7G&6zkQ8i?-B~7}?lI9}25ww|Hr{}AVGS@06=2_?h8BhztU-mL3TzT;IAN$k3nUDA
z(n81pG>nZkRiW3Ppw0_ut1wtGC}40_pGdo=z#hT~8r02K7?~C_1%R{?3~UN&uz>4W
zq(eRNRiKuTWklF2P{<8KSW^gg{}VU{0(PSh*hEkuft`*K0H6aX4B=|91pulFuqmhk
zfMFA^6oxPfTL6H21EgJ>18s+cHG#Z{;e2!jVArFD0ahib9z<7ymhRD|QIkFOdjs$#
z-RLC=q22&oBi68jwwAFeLNu|kDZ*@FVN-=A=y57T4SsCOaP$UH9FG=F*o>hhs_^y(
zxIjZ~SesthGc)0nrQrsGA`eSo@_>$gA+X{W(+t#*MmGa%Mn+bIEgwS)GH}-hJ%M8P
zJCOw$*hCzjhZR9^H5erUh6->HqIw@g4Oai7sKOQi;PnQijcr0F*}<AXUc_)d4h4ve
ziLL-MQ=+Q?2LMJ{2p%_tH8{XZP{Rn_6!eUUE)RAG%J?O^3bbsBE{&Q+K~+C!!X4Z=
z2Za>5>kU9Buwl)ggic@sYXaGfJ&vH0{74GW;s{9rIBZacQNW%@QUQ(tEOCUc1WOzt
zDZv^?Nb+EJV8#)W3RnXR%L#1o@W2+2NJh{m9>L4CaITvmG?xI^h!kCjEeg<qc5I3e
zaf(e5I6P6}6`Lw7af?$KYW!kTh91Y*)PUWE63^IFp~WLMB{Ygl(0Cp^w9)GhLX8`^
zMqF`;Vmgu{l(@uD1P(LwxWrI}Jua~;!-z`^Wmw`8Lk(suVJJb3CDPiVcpEq1Bc4D_
zEpUB>9#J@lNWcv+$XN(rjYx5TlIcL>_i)oeig1N4npt3FSV9*~8Mcr^Q$k6|5p%e&
zfgU`yk{Wt&ji7+RsDhwDjG_n}EU0w|PGwj_55+X>p@*V`rlAK}odB->i4Hp0ngFma
ztl@^C0!yG_SA!a27;4ah3qzigumTNYLPs32HABJYG(mSrp$8St!W4R75mX!2u)?VX
zQIKLP!7N5G)nEy89Ewl_9a9l{0g9;tEnYAcP!chC3s3O1G2oPl9w|5rPVj&&bhsL8
zl%OlX5|Zdjuy$?G6@kq`4QzBJXaR{XjT(%g6btnSwiF8<TL#TMfCu)74j$;>EL<bj
zAi|~y>^+Q<5j6IXViwk*!f76AaA8x17G&6zkQQv9njf@b9o!U04>p`x9b5@Owu*x_
z;tDnt(~%S*vO6}DFf%+hRoG(y!$z<&jDW>ZhMw)Q*@zkV7{;ImJ{8+dT%fJG;HD3H
zB;o9+fIEZ+h@0~;YJ40D5Rrqf05f9HRe(bqHCtd+f*K*{O3)(%T^{TXl+Fmc3bd#~
zm!>3|K*I>2!7y++jI}5Njf24VG!h+M(9RNEBT{xjY2u=oj-&_?ZP-i#2N`-_1j8sS
z(TB}2urkyr#HI{A8nLMXy9*^Mv8h6fPHakO8l~X*1@HhNdUWEectM>JuqLEfLPRBW
z=pU{C9H<ys2gMAq64Y=<Hw7)E(4{E~r8+wW{0SeluM{**i?y7>8B*X%40Hn<fwlH1
zrh|eM92}@2hRrP8bugNxVDnIe7n^x#L5xiaYA_RMx`4;~u{K+<k9iX}-VZhqM<_vu
z;o(ZK)eNARhAY4lGU#St4P|6SSc^(f@`f+WAv$k?D`x{exJHmSG5ml{5!fFXDF($6
zAhW>AFcJcWGR%a4p#(J{kk%d$gylEAqGa$aE4C2i0!@s9%MkR?!=88uOqhTp%vcX>
zAUq^c0}NdWM!=&hz!IA1N^mD0s9Ugk9Wq%2u7;`Nci7|%*hCzj$54aedkhs=ypN#<
ztN&3{VG960P>BfNNQE8-gvwjEMvzxAya6rMP!xfEf|?kxDZ}a+Yzo2VVPrEDPl4Qq
znawbipk^}y<t=zUjS;wPBRb5W>r)`QK#sx)Fbox7-=T&Uh8nCvg`o;;5^6YMs6h)P
z40)15NC0#mA>{sJtignHMJ9OT5oilH5f@bBQif>9VmA%kVnk`lVpj(aHPrCOqYyQC
zu`5IiW9*7h1DdoFpYZrEs22#jn*-eIMo+ysdxGHhvVk64Bi00rM-d`Quqncf5NxWj
zL<de~sF8t98P=`^nh(M5!t7e0sX~iXY?h%$DX9NPm1$&9V}ayzR^ghk#v!!14>lE~
z085}_Re~De=t|In2wfUAct}g}prRVjI5hY&Lr{+bYkJ3741t?|hI(*~prF7gu<<BD
zN$;St5XB^Lx<V;{uo;CV=y57T4SsCO(4qjF5*kJW<cI-y@qu3M;EV^@%5}I-tPz1v
z6(T0Es=|y4tje&&1#Weyk%3hmT5ModL-XhWjWd&$Enx11>%<!!*i>Og2Z}1((Sf22
zPjq0a!yX+d>TpB{iW(Y52RCRG82hQvI0w+dlX--0&p?=q6j6vMz%T<d_%W1V33}{m
zP=g&q4SM~Hp#UvTFytwT54>|^;H{HJ;65CBIfb)F1a2)G=s|QLg*9TZ4nqa@fCP0+
z5T@X6-6PutHVGrRQBA@OO;mZ*&;(Vgc&5t0J5;ci95@3AJT-^3APb{1MOOg!6l&ue
ZT?y9EL01Ge2Q_fem7s+Ux-`z90RSdNK4<^{

literal 0
HcmV?d00001

diff --git a/lib/datasource/rubygems/__snapshots__/index.spec.ts.snap b/lib/datasource/rubygems/__snapshots__/index.spec.ts.snap
index e947f8bc27..2f12ed4e3c 100644
--- a/lib/datasource/rubygems/__snapshots__/index.spec.ts.snap
+++ b/lib/datasource/rubygems/__snapshots__/index.spec.ts.snap
@@ -1,5 +1,1369 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
+exports[`datasource/rubygems/index getReleases returns a dep for GitHub Packages package hit 1`] = `
+Object {
+  "registryUrl": "https://rubygems.pkg.github.com/example",
+  "releases": Array [
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "0.8.0",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "0.8.5",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "0.9.0",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "0.9.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "0.9.2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "0.9.3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "0.9.4",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "0.9.4.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "0.9.5",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "0.10.0",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "0.10.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "0.11.0",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "0.11.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "0.12.0",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "0.12.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "0.13.0",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "0.13.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "0.14.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "0.14.2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "0.14.3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "0.14.4",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "1.0.0",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "1.1.0",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "1.1.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "1.1.2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "1.1.3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "1.1.4",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "1.1.5",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "1.1.6",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "1.2.0",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "1.2.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "1.2.2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "1.2.3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "1.2.4",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "1.2.5",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "1.2.6",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.0.0",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.0.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.0.2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.0.4",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.0.5",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.1.0",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.1.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.1.2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.2.2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.2.3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.3.2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.3.3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.3.4",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.3.5",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.3.6",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.3.7",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.3.8.pre1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.3.8",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.3.9.pre",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.3.9",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.3.10",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.3.11",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.3.12",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.3.14",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.3.15",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.3.16",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.3.17",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "2.3.18",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.0.beta",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.0.beta2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.0.beta3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.0.beta4",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.0.rc",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.0.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.0",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.4.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.4",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.5.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.5",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.6.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.6.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.6",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.7.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.7.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.7",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.8.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.8.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.8.rc4",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.8",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.9.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.9.rc3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.9.rc4",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.9.rc5",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.9",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.10.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.10",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.11",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.12.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.12",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.13.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.13",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.14",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.15",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.16",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.17",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.18",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.19",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.0.20",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.0.beta1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.0.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.0.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.0.rc3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.0.rc4",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.0.rc5",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.0.rc6",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.0.rc8",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.0",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.1.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.1.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.1.rc3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.2.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.2.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.4.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.4",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.5.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.5",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.6",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.7",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.8",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.9",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.10",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.11",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.1.12",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.0.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.0.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.0",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.2.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.3.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.3.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.4.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.4",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.5",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.6",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.7.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.7",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.8.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.8.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.8",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.9.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.9.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.9.rc3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.9",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.10",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.11",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.12",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.13.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.13.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.13",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.14.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.14.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.14",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.15.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.15.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.15.rc3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.15",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.16",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.17",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.18",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.19",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.20",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.21",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.22",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.22.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.22.2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.22.3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.22.4",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "3.2.22.5",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.0.beta1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.0.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.0.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.0",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.1.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.1.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.1.rc3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.1.rc4",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.4.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.4",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.5",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.6.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.6.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.6.rc3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.6",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.7",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.8",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.9",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.10.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.10.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.10",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.11",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.11.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.12",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.13.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.0.13",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.0.beta1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.0.beta2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.0.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.0.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.0",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.2.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.2.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.2.rc3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.4",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.5",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.6.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.6.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.6",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.7",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.7.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.8",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.9.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.9",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.10.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.10.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.10.rc3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.10.rc4",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.10",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.11",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.12.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.12",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.13.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.13",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.14.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.14.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.14",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.14.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.14.2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.15.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.15",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.16.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.1.16",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.0.beta1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.0.beta2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.0.beta3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.0.beta4",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.0.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.0.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.0.rc3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.0",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.1.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.1.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.1.rc3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.1.rc4",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.3.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.4.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.4",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.5.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.5.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.5",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.5.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.5.2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.6.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.6",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.7.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.7",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.7.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.8.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.8",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.9.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.9.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.9",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.10.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.10",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "4.2.11",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.0.0.beta1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.0.0.beta1.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.0.0.beta2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.0.0.beta3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.0.0.beta4",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.0.0.racecar1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.0.0.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.0.0.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.0.0",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.0.0.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.0.1.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.0.1.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.0.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.0.2.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.0.2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.0.3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.0.4.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.0.4",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.0.5.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.0.5.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.0.5",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.0.6.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.0.6",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.0.7",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.0.7.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.1.0.beta1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.1.0.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.1.0.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.1.0",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.1.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.1.2.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.1.2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.1.3.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.1.3.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.1.3.rc3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.1.3",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.1.4.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.1.4",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.1.5.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.1.5",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.1.6",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.1.6.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.2.0.beta1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.2.0.beta2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.2.0.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.2.0.rc2",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.2.0",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.2.1.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.2.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.2.1.1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.2.2.rc1",
+    },
+    Object {
+      "rubyPlatform": "ruby",
+      "version": "5.2.2",
+    },
+  ],
+}
+`;
+
 exports[`datasource/rubygems/index getReleases returns a dep for rubygems.org package hit 1`] = `
 Object {
   "registryUrl": "https://rubygems.org",
@@ -36,7 +1400,6 @@ Array [
       "accept": "application/json",
       "accept-encoding": "gzip, deflate, br",
       "host": "thirdparty.com",
-      "hosttype": "rubygems",
       "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)",
     },
     "method": "GET",
@@ -47,7 +1410,6 @@ Array [
       "accept": "application/json",
       "accept-encoding": "gzip, deflate, br",
       "host": "firstparty.com",
-      "hosttype": "rubygems",
       "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)",
     },
     "method": "GET",
@@ -78,7 +1440,6 @@ Array [
       "accept": "application/json",
       "accept-encoding": "gzip, deflate, br",
       "host": "thirdparty.com",
-      "hosttype": "rubygems",
       "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)",
     },
     "method": "GET",
@@ -89,7 +1450,6 @@ Array [
       "accept": "application/json",
       "accept-encoding": "gzip, deflate, br",
       "host": "firstparty.com",
-      "hosttype": "rubygems",
       "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)",
     },
     "method": "GET",
@@ -2488,7 +3848,6 @@ Array [
       "accept": "application/json",
       "accept-encoding": "gzip, deflate, br",
       "host": "thirdparty.com",
-      "hosttype": "rubygems",
       "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)",
     },
     "method": "GET",
@@ -2499,7 +3858,6 @@ Array [
       "accept": "application/json",
       "accept-encoding": "gzip, deflate, br",
       "host": "firstparty.com",
-      "hosttype": "rubygems",
       "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)",
     },
     "method": "GET",
@@ -2510,7 +3868,6 @@ Array [
       "accept": "application/json",
       "accept-encoding": "gzip, deflate, br",
       "host": "firstparty.com",
-      "hosttype": "rubygems",
       "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)",
     },
     "method": "GET",
@@ -4938,7 +6295,6 @@ Array [
       "accept": "application/json",
       "accept-encoding": "gzip, deflate, br",
       "host": "thirdparty.com",
-      "hosttype": "rubygems",
       "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)",
     },
     "method": "GET",
@@ -4949,7 +6305,6 @@ Array [
       "accept": "application/json",
       "accept-encoding": "gzip, deflate, br",
       "host": "thirdparty.com",
-      "hosttype": "rubygems",
       "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)",
     },
     "method": "GET",
diff --git a/lib/datasource/rubygems/common.ts b/lib/datasource/rubygems/common.ts
index 73a47c02d8..ce52a088a1 100644
--- a/lib/datasource/rubygems/common.ts
+++ b/lib/datasource/rubygems/common.ts
@@ -1 +1,40 @@
+import Marshal from 'marshal';
+import urlJoin from 'url-join';
+import { logger } from '../../logger';
+import { Http } from '../../util/http';
+import { getQueryString } from '../../util/url';
+
 export const id = 'rubygems';
+export const http = new Http(id);
+
+export const knownFallbackHosts = ['rubygems.pkg.github.com', 'gitlab.com'];
+
+export async function fetchJson<T>(
+  dependency: string,
+  registry: string,
+  path: string
+): Promise<T> {
+  const url = urlJoin(registry, path, `${dependency}.json`);
+
+  logger.trace({ registry, dependency, url }, `RubyGems lookup request`);
+  const response = (await http.getJson<T>(url)) || {
+    body: undefined,
+  };
+
+  return response.body;
+}
+
+export async function fetchBuffer<T>(
+  dependency: string,
+  registry: string,
+  path: string
+): Promise<T> {
+  const url = `${urlJoin(registry, path)}?${getQueryString({
+    gems: dependency,
+  })}`;
+
+  logger.trace({ registry, dependency, url }, `RubyGems lookup request`);
+  const response = await http.getBuffer(url);
+
+  return new Marshal(response.body).parsed as T;
+}
diff --git a/lib/datasource/rubygems/get-rubygems-org.ts b/lib/datasource/rubygems/get-rubygems-org.ts
index 3d043e1e34..7ca2bdcda8 100644
--- a/lib/datasource/rubygems/get-rubygems-org.ts
+++ b/lib/datasource/rubygems/get-rubygems-org.ts
@@ -1,11 +1,8 @@
 import { logger } from '../../logger';
 import { ExternalHostError } from '../../types/errors/external-host-error';
 import { getElapsedMinutes } from '../../util/date';
-import { Http } from '../../util/http';
 import type { ReleaseResult } from '../types';
-import { id } from './common';
-
-const http = new Http(id);
+import { http } from './common';
 
 let lastSync = new Date('2000-01-01');
 let packageReleases: Record<string, string[]> = Object.create(null); // Because we might need a "constructor" key
diff --git a/lib/datasource/rubygems/get.ts b/lib/datasource/rubygems/get.ts
index 71546019ca..6d1d491b19 100644
--- a/lib/datasource/rubygems/get.ts
+++ b/lib/datasource/rubygems/get.ts
@@ -1,40 +1,65 @@
-import urlJoin from 'url-join';
 import { logger } from '../../logger';
-import { Http } from '../../util/http';
-import type { OutgoingHttpHeaders } from '../../util/http/types';
-import type { ReleaseResult } from '../types';
-import { id } from './common';
-
-const http = new Http(id);
+import { HttpError } from '../../util/http/types';
+import type { Release, ReleaseResult } from '../types';
+import { fetchBuffer, fetchJson } from './common';
+import type {
+  JsonGemVersions,
+  JsonGemsInfo,
+  MarshalledVersionInfo,
+} from './types';
 
 const INFO_PATH = '/api/v1/gems';
 const VERSIONS_PATH = '/api/v1/versions';
+const DEPENDENCIES_PATH = '/api/v1/dependencies';
 
-const getHeaders = (): OutgoingHttpHeaders => ({ hostType: id });
-
-export async function fetch(
+export async function getDependencyFallback(
   dependency: string,
-  registry: string,
-  path: string
-): Promise<any> {
-  const headers = getHeaders();
-
-  const url = urlJoin(registry, path, `${dependency}.json`);
-
-  logger.trace({ dependency }, `RubyGems lookup request: ${String(url)}`);
-  const response = (await http.getJson(url, { headers })) || {
-    body: undefined,
+  registry: string
+): Promise<ReleaseResult | null> {
+  logger.debug(
+    { dependency, api: DEPENDENCIES_PATH },
+    'RubyGems lookup for dependency'
+  );
+  const info = await fetchBuffer<MarshalledVersionInfo[]>(
+    dependency,
+    registry,
+    DEPENDENCIES_PATH
+  );
+  if (!info || info.length === 0) {
+    return null;
+  }
+  const releases = info.map(({ number: version, platform: rubyPlatform }) => ({
+    version,
+    rubyPlatform,
+  }));
+  return {
+    releases,
+    homepage: null,
+    sourceUrl: null,
+    changelogUrl: null,
   };
-
-  return response.body;
 }
 
 export async function getDependency(
   dependency: string,
   registry: string
 ): Promise<ReleaseResult | null> {
-  logger.debug({ dependency }, 'RubyGems lookup for dependency');
-  const info = await fetch(dependency, registry, INFO_PATH);
+  logger.debug(
+    { dependency, api: INFO_PATH },
+    'RubyGems lookup for dependency'
+  );
+  let info: JsonGemsInfo;
+
+  try {
+    info = await fetchJson(dependency, registry, INFO_PATH);
+  } catch (error) {
+    // fallback to deps api on 404
+    if (error instanceof HttpError && error.response?.statusCode === 404) {
+      return await getDependencyFallback(dependency, registry);
+    }
+    throw error;
+  }
+
   if (!info) {
     logger.debug({ dependency }, 'RubyGems package not found.');
     return null;
@@ -48,10 +73,10 @@ export async function getDependency(
     return null;
   }
 
-  let versions = [];
-  let releases = [];
+  let versions: JsonGemVersions[] = [];
+  let releases: Release[] = [];
   try {
-    versions = await fetch(dependency, registry, VERSIONS_PATH);
+    versions = await fetchJson(dependency, registry, VERSIONS_PATH);
   } catch (err) {
     if (err.statusCode === 400 || err.statusCode === 404) {
       logger.debug(
@@ -63,13 +88,15 @@ export async function getDependency(
     }
   }
 
+  // TODO: invalid properties for `Release` see #11312
+
   if (versions.length === 0 && info.version) {
     logger.warn('falling back to the version from the info endpoint');
     releases = [
       {
         version: info.version,
         rubyPlatform: info.platform,
-      },
+      } as Release,
     ];
   } else {
     releases = versions.map(
diff --git a/lib/datasource/rubygems/index.spec.ts b/lib/datasource/rubygems/index.spec.ts
index cd213d66b1..913204eafb 100644
--- a/lib/datasource/rubygems/index.spec.ts
+++ b/lib/datasource/rubygems/index.spec.ts
@@ -1,6 +1,10 @@
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { loadFixture, loadJsonFixture } from '../../../test/util';
+import {
+  loadBinaryFixture,
+  loadFixture,
+  loadJsonFixture,
+} from '../../../test/util';
 import * as rubyVersioning from '../../versioning/ruby';
 import { resetCache } from './get-rubygems-org';
 import * as rubygems from '.';
@@ -8,6 +12,8 @@ import * as rubygems from '.';
 const rubygemsOrgVersions = loadFixture('rubygems-org.txt');
 const railsInfo = loadJsonFixture('rails/info.json');
 const railsVersions = loadJsonFixture('rails/versions.json');
+const railsDependencies = loadBinaryFixture('dependencies-rails.dat');
+const emptyMarshalArray = Buffer.from([4, 8, 91, 0]);
 
 describe('datasource/rubygems/index', () => {
   describe('getReleases', () => {
@@ -149,6 +155,7 @@ describe('datasource/rubygems/index', () => {
       expect(await getPkgReleases(params)).toBeNull();
       expect(httpMock.getTrace()).toMatchSnapshot();
     });
+
     it('falls back to info when version request fails', async () => {
       httpMock
         .scope('https://thirdparty.com/')
@@ -173,5 +180,39 @@ describe('datasource/rubygems/index', () => {
         .reply(500);
       expect(await getPkgReleases(params)).toBeNull();
     });
+
+    it('falls back to dependencies api', async () => {
+      httpMock
+        .scope('https://thirdparty.com/')
+        .get('/api/v1/gems/rails.json')
+        .reply(404, railsInfo)
+        .get('/api/v1/dependencies?gems=rails')
+        .reply(200, railsDependencies);
+
+      const res = await getPkgReleases(params);
+      expect(res?.releases).toHaveLength(339);
+    });
+
+    it('returns null for GitHub Packages package miss', async () => {
+      const newparams = { ...params };
+      newparams.registryUrls = ['https://rubygems.pkg.github.com/example'];
+      httpMock
+        .scope('https://rubygems.pkg.github.com/example')
+        .get('/api/v1/dependencies?gems=rails')
+        .reply(200, emptyMarshalArray);
+      expect(await getPkgReleases(newparams)).toBeNull();
+    });
+
+    it('returns a dep for GitHub Packages package hit', async () => {
+      const newparams = { ...params };
+      newparams.registryUrls = ['https://rubygems.pkg.github.com/example'];
+      httpMock
+        .scope('https://rubygems.pkg.github.com/example')
+        .get('/api/v1/dependencies?gems=rails')
+        .reply(200, railsDependencies);
+      const res = await getPkgReleases(newparams);
+      expect(res.releases).toHaveLength(339);
+      expect(res).toMatchSnapshot();
+    });
   });
 });
diff --git a/lib/datasource/rubygems/releases.ts b/lib/datasource/rubygems/releases.ts
index c22aa3513b..5a4a2c9e91 100644
--- a/lib/datasource/rubygems/releases.ts
+++ b/lib/datasource/rubygems/releases.ts
@@ -1,14 +1,18 @@
+import { parseUrl } from '../../util/url';
 import type { GetReleasesConfig, ReleaseResult } from '../types';
-import { getDependency } from './get';
+import { knownFallbackHosts } from './common';
+import { getDependency, getDependencyFallback } from './get';
 import { getRubygemsOrgDependency } from './get-rubygems-org';
 
 export function getReleases({
   lookupName,
   registryUrl,
 }: GetReleasesConfig): Promise<ReleaseResult | null> {
-  // prettier-ignore
-  if (registryUrl.endsWith('rubygems.org')) { // lgtm [js/incomplete-url-substring-sanitization]
-      return getRubygemsOrgDependency(lookupName);
-    }
+  if (parseUrl(registryUrl)?.hostname === 'rubygems.org') {
+    return getRubygemsOrgDependency(lookupName);
+  }
+  if (knownFallbackHosts.includes(parseUrl(registryUrl)?.hostname)) {
+    return getDependencyFallback(lookupName, registryUrl);
+  }
   return getDependency(lookupName, registryUrl);
 }
diff --git a/lib/datasource/rubygems/types.ts b/lib/datasource/rubygems/types.ts
new file mode 100644
index 0000000000..907ec3620f
--- /dev/null
+++ b/lib/datasource/rubygems/types.ts
@@ -0,0 +1,44 @@
+/**
+ * see https://guides.rubygems.org/rubygems-org-api/#get---apiv1dependenciesgemscomma-delimited-gem-names
+ */
+export interface MarshalledVersionInfo {
+  name: string;
+  number: string;
+  platform: string;
+  dependencies: MarshalledDependency[];
+}
+
+export type MarshalledDependency = [name: string, version: string];
+
+export interface JsonGemDependency {
+  name: string;
+  requirements: string;
+}
+
+/**
+ * see https://guides.rubygems.org/rubygems-org-api/#get---apiv1gemsgem-namejsonyaml
+ */
+export interface JsonGemsInfo {
+  // FIXME: This property doesn't exist in api
+  changelog_uri: string;
+  dependencies: {
+    development: JsonGemDependency;
+    runtime: JsonGemDependency;
+  };
+  homepage_uri: string;
+  name: string;
+  platform?: string;
+  source_code_uri: string;
+  version?: string;
+}
+
+/**
+ * see https://guides.rubygems.org/rubygems-org-api/#get---apiv1versionsgem-namejsonyaml
+ */
+export interface JsonGemVersions {
+  created_at: string;
+  number: string;
+  platform: string;
+  rubygems_version: string;
+  ruby_version: string;
+}
diff --git a/lib/types/marshal.d.ts b/lib/types/marshal.d.ts
new file mode 100644
index 0000000000..96aeb1e6f5
--- /dev/null
+++ b/lib/types/marshal.d.ts
@@ -0,0 +1,17 @@
+declare module 'marshal' {
+  class Marshal {
+    public parsed?: unknown;
+
+    constructor();
+    constructor(buffer: Buffer);
+    constructor(buffer: string, encoding: BufferEncoding);
+
+    public load(buffer: Buffer): this;
+    public load(buffer: string, encoding: BufferEncoding): this;
+
+    public toString(encoding?: BufferEncoding): string;
+    public toJSON(): unknown;
+  }
+
+  export = Marshal;
+}
diff --git a/lib/util/http/index.ts b/lib/util/http/index.ts
index 914dece03b..72a298434b 100644
--- a/lib/util/http/index.ts
+++ b/lib/util/http/index.ts
@@ -10,7 +10,12 @@ import { resolveBaseUrl } from '../url';
 import { applyAuthorization, removeAuthorization } from './auth';
 import { applyHostRules } from './host-rules';
 import { getQueue } from './queue';
-import type { GotOptions, OutgoingHttpHeaders, RequestStats } from './types';
+import type {
+  GotJSONOptions,
+  GotOptions,
+  OutgoingHttpHeaders,
+  RequestStats,
+} from './types';
 
 // TODO: refactor code to remove this (#9651)
 import './legacy';
@@ -31,7 +36,7 @@ export interface HttpPostOptions extends HttpOptions {
 
 export interface InternalHttpOptions extends HttpOptions {
   json?: Record<string, unknown>;
-  responseType?: 'json';
+  responseType?: 'json' | 'buffer';
   method?: 'get' | 'post' | 'put' | 'patch' | 'delete' | 'head';
 }
 
@@ -69,6 +74,11 @@ function applyDefaultHeaders(options: Options): void {
   };
 }
 
+// Note on types:
+// options.requestType can be either 'json' or 'buffer', but `T` should be
+// `Buffer` in the latter case.
+// We don't declare overload signatures because it's immediately wrapped by
+// `request`.
 async function gotRoutine<T>(
   url: string,
   options: GotOptions,
@@ -76,7 +86,9 @@ async function gotRoutine<T>(
 ): Promise<Response<T>> {
   logger.trace({ url, options }, 'got request');
 
-  const resp = await got<T>(url, options);
+  // Cheat the TS compiler using `as` to pick a specific overload.
+  // Otherwise it doesn't typecheck.
+  const resp = await got<T>(url, options as GotJSONOptions);
   const duration = resp.timings.phases.total || 0;
 
   const httpRequests = memCache.get('http-requests') || [];
@@ -172,6 +184,23 @@ export class Http<GetOptions = HttpOptions, PostOptions = HttpPostOptions> {
     return this.request<string>(url, { ...options, method: 'head' });
   }
 
+  protected requestBuffer(
+    url: string | URL,
+    httpOptions?: InternalHttpOptions
+  ): Promise<HttpResponse<Buffer> | null> {
+    return this.request<Buffer>(url, {
+      ...httpOptions,
+      responseType: 'buffer',
+    });
+  }
+
+  getBuffer(
+    url: string,
+    options: HttpOptions = {}
+  ): Promise<HttpResponse<Buffer> | null> {
+    return this.requestBuffer(url, options);
+  }
+
   private async requestJson<T = unknown>(
     url: string,
     options: InternalHttpOptions
diff --git a/lib/util/http/types.ts b/lib/util/http/types.ts
index 9ec9a273fd..c3741feeff 100644
--- a/lib/util/http/types.ts
+++ b/lib/util/http/types.ts
@@ -1,11 +1,19 @@
-import { OptionsOfJSONResponseBody, RequestError as RequestError_ } from 'got';
+import {
+  OptionsOfBufferResponseBody,
+  OptionsOfJSONResponseBody,
+  RequestError as RequestError_,
+} from 'got';
 
 export type GotContextOptions = {
   authType?: string;
 } & Record<string, unknown>;
 
 // TODO: Move options to context
-export type GotOptions = OptionsOfJSONResponseBody & {
+export type GotOptions = GotBufferOptions | GotJSONOptions;
+export type GotBufferOptions = OptionsOfBufferResponseBody & GotExtraOptions;
+export type GotJSONOptions = OptionsOfJSONResponseBody & GotExtraOptions;
+
+export type GotExtraOptions = {
   abortOnError?: boolean;
   abortIgnoreStatusCodes?: number[];
   token?: string;
diff --git a/package.json b/package.json
index 183b099922..1d4d9798e0 100644
--- a/package.json
+++ b/package.json
@@ -167,6 +167,7 @@
     "luxon": "2.0.2",
     "markdown-it": "12.2.0",
     "markdown-table": "2.0.0",
+    "marshal": "0.5.2",
     "minimatch": "3.0.4",
     "moo": "0.5.1",
     "node-html-parser": "3.3.6",
diff --git a/test/util.ts b/test/util.ts
index ab90bbbf2a..7d31ca3a52 100644
--- a/test/util.ts
+++ b/test/util.ts
@@ -80,6 +80,14 @@ export function getFixturePath(fixtureFile: string, fixtureRoot = '.'): string {
   return upath.join(callerDir, fixtureRoot, '__fixtures__', fixtureFile);
 }
 
+export function loadBinaryFixture(
+  fixtureFile: string,
+  fixtureRoot = '.'
+): Buffer {
+  const fixtureAbsFile = getFixturePath(fixtureFile, fixtureRoot);
+  return readFileSync(fixtureAbsFile);
+}
+
 export function loadFixture(fixtureFile: string, fixtureRoot = '.'): string {
   const fixtureAbsFile = getFixturePath(fixtureFile, fixtureRoot);
   return readFileSync(fixtureAbsFile, { encoding: 'utf8' });
diff --git a/yarn.lock b/yarn.lock
index 4748298b20..9f8063e1c7 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3381,6 +3381,13 @@ debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1:
   dependencies:
     ms "2.1.2"
 
+debug@4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
+  integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+  dependencies:
+    ms "^2.1.1"
+
 debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:
   version "2.6.9"
   resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
@@ -6512,6 +6519,13 @@ marked@^2.0.0:
   resolved "https://registry.yarnpkg.com/marked/-/marked-2.1.3.tgz#bd017cef6431724fd4b27e0657f5ceb14bff3753"
   integrity sha512-/Q+7MGzaETqifOMWYEA7HVMaZb4XbcRfaOzcSsHZEith83KGlvaSG33u0SKu89Mj5h+T8V2hM+8O45Qc5XTgwA==
 
+marshal@0.5.2:
+  version "0.5.2"
+  resolved "https://registry.yarnpkg.com/marshal/-/marshal-0.5.2.tgz#4a6e6a20c5f59053a5b86d7fac7ad28081214b36"
+  integrity sha512-f6zOFkXq8k8AJbACRR06s4RFCP19ugCFLn9fX4v01yinL634v8gzSf8mVVHrXFhn6GpMKXR0n8LU2wIUL+c32Q==
+  dependencies:
+    debug "4.1.1"
+
 matcher@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca"
-- 
GitLab