utils.adoc 540 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578
  1. :github-icon: pass:[<svg class="icon"><use href="#github-icon"/></svg>]
  2. :Math: pass:normal[xref:utils.adoc#Math[`Math`]]
  3. :SignedMath: pass:normal[xref:utils.adoc#SignedMath[`SignedMath`]]
  4. :SafeCast: pass:normal[xref:utils.adoc#SafeCast[`SafeCast`]]
  5. :ReentrancyGuard: pass:normal[xref:utils.adoc#ReentrancyGuard[`ReentrancyGuard`]]
  6. :ReentrancyGuardTransient: pass:normal[xref:utils.adoc#ReentrancyGuardTransient[`ReentrancyGuardTransient`]]
  7. :ReentrancyGuard: pass:normal[xref:utils.adoc#ReentrancyGuard[`ReentrancyGuard`]]
  8. :Pausable: pass:normal[xref:utils.adoc#Pausable[`Pausable`]]
  9. :Nonces: pass:normal[xref:utils.adoc#Nonces[`Nonces`]]
  10. :NoncesKeyed: pass:normal[xref:utils.adoc#NoncesKeyed[`NoncesKeyed`]]
  11. :Nonces: pass:normal[xref:utils.adoc#Nonces[`Nonces`]]
  12. :ERC165: pass:normal[xref:utils.adoc#ERC165[`ERC165`]]
  13. :ERC165Checker: pass:normal[xref:utils.adoc#ERC165Checker[`ERC165Checker`]]
  14. :BitMaps: pass:normal[xref:utils.adoc#BitMaps[`BitMaps`]]
  15. :EnumerableMap: pass:normal[xref:utils.adoc#EnumerableMap[`EnumerableMap`]]
  16. :EnumerableSet: pass:normal[xref:utils.adoc#EnumerableSet[`EnumerableSet`]]
  17. :EnumerableMap: pass:normal[xref:utils.adoc#EnumerableMap[`EnumerableMap`]]
  18. :DoubleEndedQueue: pass:normal[xref:utils.adoc#DoubleEndedQueue[`DoubleEndedQueue`]]
  19. :CircularBuffer: pass:normal[xref:utils.adoc#CircularBuffer[`CircularBuffer`]]
  20. :Checkpoints: pass:normal[xref:utils.adoc#Checkpoints[`Checkpoints`]]
  21. :Heap: pass:normal[xref:utils.adoc#Heap[`Heap`]]
  22. :MerkleTree: pass:normal[xref:utils.adoc#MerkleTree[`MerkleTree`]]
  23. :Create2: pass:normal[xref:utils.adoc#Create2[`Create2`]]
  24. :Address: pass:normal[xref:utils.adoc#Address[`Address`]]
  25. :Arrays: pass:normal[xref:utils.adoc#Arrays[`Arrays`]]
  26. :Base64: pass:normal[xref:utils.adoc#Base64[`Base64`]]
  27. :Bytes: pass:normal[xref:utils.adoc#Bytes[`Bytes`]]
  28. :Calldata: pass:normal[xref:utils.adoc#Calldata[`Calldata`]]
  29. :Strings: pass:normal[xref:utils.adoc#Strings[`Strings`]]
  30. :ShortStrings: pass:normal[xref:utils.adoc#ShortStrings[`ShortStrings`]]
  31. :SlotDerivation: pass:normal[xref:utils.adoc#SlotDerivation[`SlotDerivation`]]
  32. :StorageSlot: pass:normal[xref:utils.adoc#StorageSlot[`StorageSlot`]]
  33. :TransientSlot: pass:normal[xref:utils.adoc#TransientSlot[`TransientSlot`]]
  34. :Multicall: pass:normal[xref:utils.adoc#Multicall[`Multicall`]]
  35. :Context: pass:normal[xref:utils.adoc#Context[`Context`]]
  36. :Packing: pass:normal[xref:utils.adoc#Packing[`Packing`]]
  37. :Panic: pass:normal[xref:utils.adoc#Panic[`Panic`]]
  38. :Comparators: pass:normal[xref:utils.adoc#Comparators[`Comparators`]]
  39. :Heap: pass:normal[xref:utils.adoc#Heap[`Heap`]]
  40. :CAIP2: pass:normal[xref:utils.adoc#CAIP2[`CAIP2`]]
  41. :CAIP10: pass:normal[xref:utils.adoc#CAIP10[`CAIP10`]]
  42. :Blockhash: pass:normal[xref:utils.adoc#Blockhash[`Blockhash`]]
  43. :Time: pass:normal[xref:utils.adoc#Time[`Time`]]
  44. :EnumerableMap: pass:normal[xref:utils.adoc#EnumerableMap[`EnumerableMap`]]
  45. :EnumerableSet: pass:normal[xref:utils.adoc#EnumerableSet[`EnumerableSet`]]
  46. :xref-Math-add512-uint256-uint256-: xref:utils.adoc#Math-add512-uint256-uint256-
  47. :xref-Math-mul512-uint256-uint256-: xref:utils.adoc#Math-mul512-uint256-uint256-
  48. :xref-Math-tryAdd-uint256-uint256-: xref:utils.adoc#Math-tryAdd-uint256-uint256-
  49. :xref-Math-trySub-uint256-uint256-: xref:utils.adoc#Math-trySub-uint256-uint256-
  50. :xref-Math-tryMul-uint256-uint256-: xref:utils.adoc#Math-tryMul-uint256-uint256-
  51. :xref-Math-tryDiv-uint256-uint256-: xref:utils.adoc#Math-tryDiv-uint256-uint256-
  52. :xref-Math-tryMod-uint256-uint256-: xref:utils.adoc#Math-tryMod-uint256-uint256-
  53. :xref-Math-saturatingAdd-uint256-uint256-: xref:utils.adoc#Math-saturatingAdd-uint256-uint256-
  54. :xref-Math-saturatingSub-uint256-uint256-: xref:utils.adoc#Math-saturatingSub-uint256-uint256-
  55. :xref-Math-saturatingMul-uint256-uint256-: xref:utils.adoc#Math-saturatingMul-uint256-uint256-
  56. :xref-Math-ternary-bool-uint256-uint256-: xref:utils.adoc#Math-ternary-bool-uint256-uint256-
  57. :xref-Math-max-uint256-uint256-: xref:utils.adoc#Math-max-uint256-uint256-
  58. :xref-Math-min-uint256-uint256-: xref:utils.adoc#Math-min-uint256-uint256-
  59. :xref-Math-average-uint256-uint256-: xref:utils.adoc#Math-average-uint256-uint256-
  60. :xref-Math-ceilDiv-uint256-uint256-: xref:utils.adoc#Math-ceilDiv-uint256-uint256-
  61. :xref-Math-mulDiv-uint256-uint256-uint256-: xref:utils.adoc#Math-mulDiv-uint256-uint256-uint256-
  62. :xref-Math-mulDiv-uint256-uint256-uint256-enum-Math-Rounding-: xref:utils.adoc#Math-mulDiv-uint256-uint256-uint256-enum-Math-Rounding-
  63. :xref-Math-mulShr-uint256-uint256-uint8-: xref:utils.adoc#Math-mulShr-uint256-uint256-uint8-
  64. :xref-Math-mulShr-uint256-uint256-uint8-enum-Math-Rounding-: xref:utils.adoc#Math-mulShr-uint256-uint256-uint8-enum-Math-Rounding-
  65. :xref-Math-invMod-uint256-uint256-: xref:utils.adoc#Math-invMod-uint256-uint256-
  66. :xref-Math-invModPrime-uint256-uint256-: xref:utils.adoc#Math-invModPrime-uint256-uint256-
  67. :xref-Math-modExp-uint256-uint256-uint256-: xref:utils.adoc#Math-modExp-uint256-uint256-uint256-
  68. :xref-Math-tryModExp-uint256-uint256-uint256-: xref:utils.adoc#Math-tryModExp-uint256-uint256-uint256-
  69. :xref-Math-modExp-bytes-bytes-bytes-: xref:utils.adoc#Math-modExp-bytes-bytes-bytes-
  70. :xref-Math-tryModExp-bytes-bytes-bytes-: xref:utils.adoc#Math-tryModExp-bytes-bytes-bytes-
  71. :xref-Math-sqrt-uint256-: xref:utils.adoc#Math-sqrt-uint256-
  72. :xref-Math-sqrt-uint256-enum-Math-Rounding-: xref:utils.adoc#Math-sqrt-uint256-enum-Math-Rounding-
  73. :xref-Math-log2-uint256-: xref:utils.adoc#Math-log2-uint256-
  74. :xref-Math-log2-uint256-enum-Math-Rounding-: xref:utils.adoc#Math-log2-uint256-enum-Math-Rounding-
  75. :xref-Math-log10-uint256-: xref:utils.adoc#Math-log10-uint256-
  76. :xref-Math-log10-uint256-enum-Math-Rounding-: xref:utils.adoc#Math-log10-uint256-enum-Math-Rounding-
  77. :xref-Math-log256-uint256-: xref:utils.adoc#Math-log256-uint256-
  78. :xref-Math-log256-uint256-enum-Math-Rounding-: xref:utils.adoc#Math-log256-uint256-enum-Math-Rounding-
  79. :xref-Math-unsignedRoundsUp-enum-Math-Rounding-: xref:utils.adoc#Math-unsignedRoundsUp-enum-Math-Rounding-
  80. :xref-SignedMath-ternary-bool-int256-int256-: xref:utils.adoc#SignedMath-ternary-bool-int256-int256-
  81. :xref-SignedMath-max-int256-int256-: xref:utils.adoc#SignedMath-max-int256-int256-
  82. :xref-SignedMath-min-int256-int256-: xref:utils.adoc#SignedMath-min-int256-int256-
  83. :xref-SignedMath-average-int256-int256-: xref:utils.adoc#SignedMath-average-int256-int256-
  84. :xref-SignedMath-abs-int256-: xref:utils.adoc#SignedMath-abs-int256-
  85. :xref-SafeCast-toUint248-uint256-: xref:utils.adoc#SafeCast-toUint248-uint256-
  86. :xref-SafeCast-toUint240-uint256-: xref:utils.adoc#SafeCast-toUint240-uint256-
  87. :xref-SafeCast-toUint232-uint256-: xref:utils.adoc#SafeCast-toUint232-uint256-
  88. :xref-SafeCast-toUint224-uint256-: xref:utils.adoc#SafeCast-toUint224-uint256-
  89. :xref-SafeCast-toUint216-uint256-: xref:utils.adoc#SafeCast-toUint216-uint256-
  90. :xref-SafeCast-toUint208-uint256-: xref:utils.adoc#SafeCast-toUint208-uint256-
  91. :xref-SafeCast-toUint200-uint256-: xref:utils.adoc#SafeCast-toUint200-uint256-
  92. :xref-SafeCast-toUint192-uint256-: xref:utils.adoc#SafeCast-toUint192-uint256-
  93. :xref-SafeCast-toUint184-uint256-: xref:utils.adoc#SafeCast-toUint184-uint256-
  94. :xref-SafeCast-toUint176-uint256-: xref:utils.adoc#SafeCast-toUint176-uint256-
  95. :xref-SafeCast-toUint168-uint256-: xref:utils.adoc#SafeCast-toUint168-uint256-
  96. :xref-SafeCast-toUint160-uint256-: xref:utils.adoc#SafeCast-toUint160-uint256-
  97. :xref-SafeCast-toUint152-uint256-: xref:utils.adoc#SafeCast-toUint152-uint256-
  98. :xref-SafeCast-toUint144-uint256-: xref:utils.adoc#SafeCast-toUint144-uint256-
  99. :xref-SafeCast-toUint136-uint256-: xref:utils.adoc#SafeCast-toUint136-uint256-
  100. :xref-SafeCast-toUint128-uint256-: xref:utils.adoc#SafeCast-toUint128-uint256-
  101. :xref-SafeCast-toUint120-uint256-: xref:utils.adoc#SafeCast-toUint120-uint256-
  102. :xref-SafeCast-toUint112-uint256-: xref:utils.adoc#SafeCast-toUint112-uint256-
  103. :xref-SafeCast-toUint104-uint256-: xref:utils.adoc#SafeCast-toUint104-uint256-
  104. :xref-SafeCast-toUint96-uint256-: xref:utils.adoc#SafeCast-toUint96-uint256-
  105. :xref-SafeCast-toUint88-uint256-: xref:utils.adoc#SafeCast-toUint88-uint256-
  106. :xref-SafeCast-toUint80-uint256-: xref:utils.adoc#SafeCast-toUint80-uint256-
  107. :xref-SafeCast-toUint72-uint256-: xref:utils.adoc#SafeCast-toUint72-uint256-
  108. :xref-SafeCast-toUint64-uint256-: xref:utils.adoc#SafeCast-toUint64-uint256-
  109. :xref-SafeCast-toUint56-uint256-: xref:utils.adoc#SafeCast-toUint56-uint256-
  110. :xref-SafeCast-toUint48-uint256-: xref:utils.adoc#SafeCast-toUint48-uint256-
  111. :xref-SafeCast-toUint40-uint256-: xref:utils.adoc#SafeCast-toUint40-uint256-
  112. :xref-SafeCast-toUint32-uint256-: xref:utils.adoc#SafeCast-toUint32-uint256-
  113. :xref-SafeCast-toUint24-uint256-: xref:utils.adoc#SafeCast-toUint24-uint256-
  114. :xref-SafeCast-toUint16-uint256-: xref:utils.adoc#SafeCast-toUint16-uint256-
  115. :xref-SafeCast-toUint8-uint256-: xref:utils.adoc#SafeCast-toUint8-uint256-
  116. :xref-SafeCast-toUint256-int256-: xref:utils.adoc#SafeCast-toUint256-int256-
  117. :xref-SafeCast-toInt248-int256-: xref:utils.adoc#SafeCast-toInt248-int256-
  118. :xref-SafeCast-toInt240-int256-: xref:utils.adoc#SafeCast-toInt240-int256-
  119. :xref-SafeCast-toInt232-int256-: xref:utils.adoc#SafeCast-toInt232-int256-
  120. :xref-SafeCast-toInt224-int256-: xref:utils.adoc#SafeCast-toInt224-int256-
  121. :xref-SafeCast-toInt216-int256-: xref:utils.adoc#SafeCast-toInt216-int256-
  122. :xref-SafeCast-toInt208-int256-: xref:utils.adoc#SafeCast-toInt208-int256-
  123. :xref-SafeCast-toInt200-int256-: xref:utils.adoc#SafeCast-toInt200-int256-
  124. :xref-SafeCast-toInt192-int256-: xref:utils.adoc#SafeCast-toInt192-int256-
  125. :xref-SafeCast-toInt184-int256-: xref:utils.adoc#SafeCast-toInt184-int256-
  126. :xref-SafeCast-toInt176-int256-: xref:utils.adoc#SafeCast-toInt176-int256-
  127. :xref-SafeCast-toInt168-int256-: xref:utils.adoc#SafeCast-toInt168-int256-
  128. :xref-SafeCast-toInt160-int256-: xref:utils.adoc#SafeCast-toInt160-int256-
  129. :xref-SafeCast-toInt152-int256-: xref:utils.adoc#SafeCast-toInt152-int256-
  130. :xref-SafeCast-toInt144-int256-: xref:utils.adoc#SafeCast-toInt144-int256-
  131. :xref-SafeCast-toInt136-int256-: xref:utils.adoc#SafeCast-toInt136-int256-
  132. :xref-SafeCast-toInt128-int256-: xref:utils.adoc#SafeCast-toInt128-int256-
  133. :xref-SafeCast-toInt120-int256-: xref:utils.adoc#SafeCast-toInt120-int256-
  134. :xref-SafeCast-toInt112-int256-: xref:utils.adoc#SafeCast-toInt112-int256-
  135. :xref-SafeCast-toInt104-int256-: xref:utils.adoc#SafeCast-toInt104-int256-
  136. :xref-SafeCast-toInt96-int256-: xref:utils.adoc#SafeCast-toInt96-int256-
  137. :xref-SafeCast-toInt88-int256-: xref:utils.adoc#SafeCast-toInt88-int256-
  138. :xref-SafeCast-toInt80-int256-: xref:utils.adoc#SafeCast-toInt80-int256-
  139. :xref-SafeCast-toInt72-int256-: xref:utils.adoc#SafeCast-toInt72-int256-
  140. :xref-SafeCast-toInt64-int256-: xref:utils.adoc#SafeCast-toInt64-int256-
  141. :xref-SafeCast-toInt56-int256-: xref:utils.adoc#SafeCast-toInt56-int256-
  142. :xref-SafeCast-toInt48-int256-: xref:utils.adoc#SafeCast-toInt48-int256-
  143. :xref-SafeCast-toInt40-int256-: xref:utils.adoc#SafeCast-toInt40-int256-
  144. :xref-SafeCast-toInt32-int256-: xref:utils.adoc#SafeCast-toInt32-int256-
  145. :xref-SafeCast-toInt24-int256-: xref:utils.adoc#SafeCast-toInt24-int256-
  146. :xref-SafeCast-toInt16-int256-: xref:utils.adoc#SafeCast-toInt16-int256-
  147. :xref-SafeCast-toInt8-int256-: xref:utils.adoc#SafeCast-toInt8-int256-
  148. :xref-SafeCast-toInt256-uint256-: xref:utils.adoc#SafeCast-toInt256-uint256-
  149. :xref-SafeCast-toUint-bool-: xref:utils.adoc#SafeCast-toUint-bool-
  150. :xref-SafeCast-SafeCastOverflowedUintDowncast-uint8-uint256-: xref:utils.adoc#SafeCast-SafeCastOverflowedUintDowncast-uint8-uint256-
  151. :xref-SafeCast-SafeCastOverflowedIntToUint-int256-: xref:utils.adoc#SafeCast-SafeCastOverflowedIntToUint-int256-
  152. :xref-SafeCast-SafeCastOverflowedIntDowncast-uint8-int256-: xref:utils.adoc#SafeCast-SafeCastOverflowedIntDowncast-uint8-int256-
  153. :xref-SafeCast-SafeCastOverflowedUintToInt-uint256-: xref:utils.adoc#SafeCast-SafeCastOverflowedUintToInt-uint256-
  154. :ReentrancyGuardTransient: pass:normal[xref:utils.adoc#ReentrancyGuardTransient[`ReentrancyGuardTransient`]]
  155. :xref-ReentrancyGuard-nonReentrant--: xref:utils.adoc#ReentrancyGuard-nonReentrant--
  156. :xref-ReentrancyGuard-constructor--: xref:utils.adoc#ReentrancyGuard-constructor--
  157. :xref-ReentrancyGuard-_reentrancyGuardEntered--: xref:utils.adoc#ReentrancyGuard-_reentrancyGuardEntered--
  158. :xref-ReentrancyGuard-ReentrancyGuardReentrantCall--: xref:utils.adoc#ReentrancyGuard-ReentrancyGuardReentrantCall--
  159. :ReentrancyGuard: pass:normal[xref:utils.adoc#ReentrancyGuard[`ReentrancyGuard`]]
  160. :xref-ReentrancyGuardTransient-nonReentrant--: xref:utils.adoc#ReentrancyGuardTransient-nonReentrant--
  161. :xref-ReentrancyGuardTransient-_reentrancyGuardEntered--: xref:utils.adoc#ReentrancyGuardTransient-_reentrancyGuardEntered--
  162. :xref-ReentrancyGuardTransient-ReentrancyGuardReentrantCall--: xref:utils.adoc#ReentrancyGuardTransient-ReentrancyGuardReentrantCall--
  163. :xref-Pausable-whenNotPaused--: xref:utils.adoc#Pausable-whenNotPaused--
  164. :xref-Pausable-whenPaused--: xref:utils.adoc#Pausable-whenPaused--
  165. :xref-Pausable-paused--: xref:utils.adoc#Pausable-paused--
  166. :xref-Pausable-_requireNotPaused--: xref:utils.adoc#Pausable-_requireNotPaused--
  167. :xref-Pausable-_requirePaused--: xref:utils.adoc#Pausable-_requirePaused--
  168. :xref-Pausable-_pause--: xref:utils.adoc#Pausable-_pause--
  169. :xref-Pausable-_unpause--: xref:utils.adoc#Pausable-_unpause--
  170. :xref-Pausable-Paused-address-: xref:utils.adoc#Pausable-Paused-address-
  171. :xref-Pausable-Unpaused-address-: xref:utils.adoc#Pausable-Unpaused-address-
  172. :xref-Pausable-EnforcedPause--: xref:utils.adoc#Pausable-EnforcedPause--
  173. :xref-Pausable-ExpectedPause--: xref:utils.adoc#Pausable-ExpectedPause--
  174. :xref-Nonces-nonces-address-: xref:utils.adoc#Nonces-nonces-address-
  175. :xref-Nonces-_useNonce-address-: xref:utils.adoc#Nonces-_useNonce-address-
  176. :xref-Nonces-_useCheckedNonce-address-uint256-: xref:utils.adoc#Nonces-_useCheckedNonce-address-uint256-
  177. :xref-Nonces-InvalidAccountNonce-address-uint256-: xref:utils.adoc#Nonces-InvalidAccountNonce-address-uint256-
  178. :Nonces: pass:normal[xref:utils.adoc#Nonces[`Nonces`]]
  179. :Nonces: pass:normal[xref:utils.adoc#Nonces[`Nonces`]]
  180. :Nonces: pass:normal[xref:utils.adoc#Nonces[`Nonces`]]
  181. :NoncesKeyed: pass:normal[xref:utils.adoc#NoncesKeyed[`NoncesKeyed`]]
  182. :xref-NoncesKeyed-nonces-address-uint192-: xref:utils.adoc#NoncesKeyed-nonces-address-uint192-
  183. :xref-NoncesKeyed-_useNonce-address-uint192-: xref:utils.adoc#NoncesKeyed-_useNonce-address-uint192-
  184. :xref-NoncesKeyed-_useCheckedNonce-address-uint256-: xref:utils.adoc#NoncesKeyed-_useCheckedNonce-address-uint256-
  185. :xref-NoncesKeyed-_useCheckedNonce-address-uint192-uint64-: xref:utils.adoc#NoncesKeyed-_useCheckedNonce-address-uint192-uint64-
  186. :xref-Nonces-nonces-address-: xref:utils.adoc#Nonces-nonces-address-
  187. :xref-Nonces-_useNonce-address-: xref:utils.adoc#Nonces-_useNonce-address-
  188. :xref-Nonces-InvalidAccountNonce-address-uint256-: xref:utils.adoc#Nonces-InvalidAccountNonce-address-uint256-
  189. :ERC165Checker: pass:normal[xref:utils.adoc#ERC165Checker[`ERC165Checker`]]
  190. :ERC165: pass:normal[xref:utils.adoc#ERC165[`ERC165`]]
  191. :xref-IERC165-supportsInterface-bytes4-: xref:utils.adoc#IERC165-supportsInterface-bytes4-
  192. :IERC165: pass:normal[xref:utils.adoc#IERC165[`IERC165`]]
  193. :xref-ERC165-supportsInterface-bytes4-: xref:utils.adoc#ERC165-supportsInterface-bytes4-
  194. :IERC165: pass:normal[xref:utils.adoc#IERC165[`IERC165`]]
  195. :xref-ERC165Checker-supportsERC165-address-: xref:utils.adoc#ERC165Checker-supportsERC165-address-
  196. :xref-ERC165Checker-supportsInterface-address-bytes4-: xref:utils.adoc#ERC165Checker-supportsInterface-address-bytes4-
  197. :xref-ERC165Checker-getSupportedInterfaces-address-bytes4---: xref:utils.adoc#ERC165Checker-getSupportedInterfaces-address-bytes4---
  198. :xref-ERC165Checker-supportsAllInterfaces-address-bytes4---: xref:utils.adoc#ERC165Checker-supportsAllInterfaces-address-bytes4---
  199. :xref-ERC165Checker-supportsERC165InterfaceUnchecked-address-bytes4-: xref:utils.adoc#ERC165Checker-supportsERC165InterfaceUnchecked-address-bytes4-
  200. :IERC165: pass:normal[xref:utils.adoc#IERC165[`IERC165`]]
  201. :IERC165: pass:normal[xref:utils.adoc#IERC165[`IERC165`]]
  202. :IERC165-supportsInterface: pass:normal[xref:utils.adoc#IERC165-supportsInterface-bytes4-[`IERC165.supportsInterface`]]
  203. :IERC165-supportsInterface: pass:normal[xref:utils.adoc#IERC165-supportsInterface-bytes4-[`IERC165.supportsInterface`]]
  204. :IERC165: pass:normal[xref:utils.adoc#IERC165[`IERC165`]]
  205. :IERC165: pass:normal[xref:utils.adoc#IERC165[`IERC165`]]
  206. :IERC165-supportsInterface: pass:normal[xref:utils.adoc#IERC165-supportsInterface-bytes4-[`IERC165.supportsInterface`]]
  207. :xref-BitMaps-get-struct-BitMaps-BitMap-uint256-: xref:utils.adoc#BitMaps-get-struct-BitMaps-BitMap-uint256-
  208. :xref-BitMaps-setTo-struct-BitMaps-BitMap-uint256-bool-: xref:utils.adoc#BitMaps-setTo-struct-BitMaps-BitMap-uint256-bool-
  209. :xref-BitMaps-set-struct-BitMaps-BitMap-uint256-: xref:utils.adoc#BitMaps-set-struct-BitMaps-BitMap-uint256-
  210. :xref-BitMaps-unset-struct-BitMaps-BitMap-uint256-: xref:utils.adoc#BitMaps-unset-struct-BitMaps-BitMap-uint256-
  211. :xref-EnumerableMap-set-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-bytes32-: xref:utils.adoc#EnumerableMap-set-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-bytes32-
  212. :xref-EnumerableMap-remove-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-: xref:utils.adoc#EnumerableMap-remove-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-
  213. :xref-EnumerableMap-clear-struct-EnumerableMap-Bytes32ToBytes32Map-: xref:utils.adoc#EnumerableMap-clear-struct-EnumerableMap-Bytes32ToBytes32Map-
  214. :xref-EnumerableMap-contains-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-: xref:utils.adoc#EnumerableMap-contains-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-
  215. :xref-EnumerableMap-length-struct-EnumerableMap-Bytes32ToBytes32Map-: xref:utils.adoc#EnumerableMap-length-struct-EnumerableMap-Bytes32ToBytes32Map-
  216. :xref-EnumerableMap-at-struct-EnumerableMap-Bytes32ToBytes32Map-uint256-: xref:utils.adoc#EnumerableMap-at-struct-EnumerableMap-Bytes32ToBytes32Map-uint256-
  217. :xref-EnumerableMap-tryGet-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-: xref:utils.adoc#EnumerableMap-tryGet-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-
  218. :xref-EnumerableMap-get-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-: xref:utils.adoc#EnumerableMap-get-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-
  219. :xref-EnumerableMap-keys-struct-EnumerableMap-Bytes32ToBytes32Map-: xref:utils.adoc#EnumerableMap-keys-struct-EnumerableMap-Bytes32ToBytes32Map-
  220. :xref-EnumerableMap-keys-struct-EnumerableMap-Bytes32ToBytes32Map-uint256-uint256-: xref:utils.adoc#EnumerableMap-keys-struct-EnumerableMap-Bytes32ToBytes32Map-uint256-uint256-
  221. :xref-EnumerableMap-set-struct-EnumerableMap-UintToUintMap-uint256-uint256-: xref:utils.adoc#EnumerableMap-set-struct-EnumerableMap-UintToUintMap-uint256-uint256-
  222. :xref-EnumerableMap-remove-struct-EnumerableMap-UintToUintMap-uint256-: xref:utils.adoc#EnumerableMap-remove-struct-EnumerableMap-UintToUintMap-uint256-
  223. :xref-EnumerableMap-clear-struct-EnumerableMap-UintToUintMap-: xref:utils.adoc#EnumerableMap-clear-struct-EnumerableMap-UintToUintMap-
  224. :xref-EnumerableMap-contains-struct-EnumerableMap-UintToUintMap-uint256-: xref:utils.adoc#EnumerableMap-contains-struct-EnumerableMap-UintToUintMap-uint256-
  225. :xref-EnumerableMap-length-struct-EnumerableMap-UintToUintMap-: xref:utils.adoc#EnumerableMap-length-struct-EnumerableMap-UintToUintMap-
  226. :xref-EnumerableMap-at-struct-EnumerableMap-UintToUintMap-uint256-: xref:utils.adoc#EnumerableMap-at-struct-EnumerableMap-UintToUintMap-uint256-
  227. :xref-EnumerableMap-tryGet-struct-EnumerableMap-UintToUintMap-uint256-: xref:utils.adoc#EnumerableMap-tryGet-struct-EnumerableMap-UintToUintMap-uint256-
  228. :xref-EnumerableMap-get-struct-EnumerableMap-UintToUintMap-uint256-: xref:utils.adoc#EnumerableMap-get-struct-EnumerableMap-UintToUintMap-uint256-
  229. :xref-EnumerableMap-keys-struct-EnumerableMap-UintToUintMap-: xref:utils.adoc#EnumerableMap-keys-struct-EnumerableMap-UintToUintMap-
  230. :xref-EnumerableMap-keys-struct-EnumerableMap-UintToUintMap-uint256-uint256-: xref:utils.adoc#EnumerableMap-keys-struct-EnumerableMap-UintToUintMap-uint256-uint256-
  231. :xref-EnumerableMap-set-struct-EnumerableMap-UintToAddressMap-uint256-address-: xref:utils.adoc#EnumerableMap-set-struct-EnumerableMap-UintToAddressMap-uint256-address-
  232. :xref-EnumerableMap-remove-struct-EnumerableMap-UintToAddressMap-uint256-: xref:utils.adoc#EnumerableMap-remove-struct-EnumerableMap-UintToAddressMap-uint256-
  233. :xref-EnumerableMap-clear-struct-EnumerableMap-UintToAddressMap-: xref:utils.adoc#EnumerableMap-clear-struct-EnumerableMap-UintToAddressMap-
  234. :xref-EnumerableMap-contains-struct-EnumerableMap-UintToAddressMap-uint256-: xref:utils.adoc#EnumerableMap-contains-struct-EnumerableMap-UintToAddressMap-uint256-
  235. :xref-EnumerableMap-length-struct-EnumerableMap-UintToAddressMap-: xref:utils.adoc#EnumerableMap-length-struct-EnumerableMap-UintToAddressMap-
  236. :xref-EnumerableMap-at-struct-EnumerableMap-UintToAddressMap-uint256-: xref:utils.adoc#EnumerableMap-at-struct-EnumerableMap-UintToAddressMap-uint256-
  237. :xref-EnumerableMap-tryGet-struct-EnumerableMap-UintToAddressMap-uint256-: xref:utils.adoc#EnumerableMap-tryGet-struct-EnumerableMap-UintToAddressMap-uint256-
  238. :xref-EnumerableMap-get-struct-EnumerableMap-UintToAddressMap-uint256-: xref:utils.adoc#EnumerableMap-get-struct-EnumerableMap-UintToAddressMap-uint256-
  239. :xref-EnumerableMap-keys-struct-EnumerableMap-UintToAddressMap-: xref:utils.adoc#EnumerableMap-keys-struct-EnumerableMap-UintToAddressMap-
  240. :xref-EnumerableMap-keys-struct-EnumerableMap-UintToAddressMap-uint256-uint256-: xref:utils.adoc#EnumerableMap-keys-struct-EnumerableMap-UintToAddressMap-uint256-uint256-
  241. :xref-EnumerableMap-set-struct-EnumerableMap-UintToBytes32Map-uint256-bytes32-: xref:utils.adoc#EnumerableMap-set-struct-EnumerableMap-UintToBytes32Map-uint256-bytes32-
  242. :xref-EnumerableMap-remove-struct-EnumerableMap-UintToBytes32Map-uint256-: xref:utils.adoc#EnumerableMap-remove-struct-EnumerableMap-UintToBytes32Map-uint256-
  243. :xref-EnumerableMap-clear-struct-EnumerableMap-UintToBytes32Map-: xref:utils.adoc#EnumerableMap-clear-struct-EnumerableMap-UintToBytes32Map-
  244. :xref-EnumerableMap-contains-struct-EnumerableMap-UintToBytes32Map-uint256-: xref:utils.adoc#EnumerableMap-contains-struct-EnumerableMap-UintToBytes32Map-uint256-
  245. :xref-EnumerableMap-length-struct-EnumerableMap-UintToBytes32Map-: xref:utils.adoc#EnumerableMap-length-struct-EnumerableMap-UintToBytes32Map-
  246. :xref-EnumerableMap-at-struct-EnumerableMap-UintToBytes32Map-uint256-: xref:utils.adoc#EnumerableMap-at-struct-EnumerableMap-UintToBytes32Map-uint256-
  247. :xref-EnumerableMap-tryGet-struct-EnumerableMap-UintToBytes32Map-uint256-: xref:utils.adoc#EnumerableMap-tryGet-struct-EnumerableMap-UintToBytes32Map-uint256-
  248. :xref-EnumerableMap-get-struct-EnumerableMap-UintToBytes32Map-uint256-: xref:utils.adoc#EnumerableMap-get-struct-EnumerableMap-UintToBytes32Map-uint256-
  249. :xref-EnumerableMap-keys-struct-EnumerableMap-UintToBytes32Map-: xref:utils.adoc#EnumerableMap-keys-struct-EnumerableMap-UintToBytes32Map-
  250. :xref-EnumerableMap-keys-struct-EnumerableMap-UintToBytes32Map-uint256-uint256-: xref:utils.adoc#EnumerableMap-keys-struct-EnumerableMap-UintToBytes32Map-uint256-uint256-
  251. :xref-EnumerableMap-set-struct-EnumerableMap-AddressToUintMap-address-uint256-: xref:utils.adoc#EnumerableMap-set-struct-EnumerableMap-AddressToUintMap-address-uint256-
  252. :xref-EnumerableMap-remove-struct-EnumerableMap-AddressToUintMap-address-: xref:utils.adoc#EnumerableMap-remove-struct-EnumerableMap-AddressToUintMap-address-
  253. :xref-EnumerableMap-clear-struct-EnumerableMap-AddressToUintMap-: xref:utils.adoc#EnumerableMap-clear-struct-EnumerableMap-AddressToUintMap-
  254. :xref-EnumerableMap-contains-struct-EnumerableMap-AddressToUintMap-address-: xref:utils.adoc#EnumerableMap-contains-struct-EnumerableMap-AddressToUintMap-address-
  255. :xref-EnumerableMap-length-struct-EnumerableMap-AddressToUintMap-: xref:utils.adoc#EnumerableMap-length-struct-EnumerableMap-AddressToUintMap-
  256. :xref-EnumerableMap-at-struct-EnumerableMap-AddressToUintMap-uint256-: xref:utils.adoc#EnumerableMap-at-struct-EnumerableMap-AddressToUintMap-uint256-
  257. :xref-EnumerableMap-tryGet-struct-EnumerableMap-AddressToUintMap-address-: xref:utils.adoc#EnumerableMap-tryGet-struct-EnumerableMap-AddressToUintMap-address-
  258. :xref-EnumerableMap-get-struct-EnumerableMap-AddressToUintMap-address-: xref:utils.adoc#EnumerableMap-get-struct-EnumerableMap-AddressToUintMap-address-
  259. :xref-EnumerableMap-keys-struct-EnumerableMap-AddressToUintMap-: xref:utils.adoc#EnumerableMap-keys-struct-EnumerableMap-AddressToUintMap-
  260. :xref-EnumerableMap-keys-struct-EnumerableMap-AddressToUintMap-uint256-uint256-: xref:utils.adoc#EnumerableMap-keys-struct-EnumerableMap-AddressToUintMap-uint256-uint256-
  261. :xref-EnumerableMap-set-struct-EnumerableMap-AddressToAddressMap-address-address-: xref:utils.adoc#EnumerableMap-set-struct-EnumerableMap-AddressToAddressMap-address-address-
  262. :xref-EnumerableMap-remove-struct-EnumerableMap-AddressToAddressMap-address-: xref:utils.adoc#EnumerableMap-remove-struct-EnumerableMap-AddressToAddressMap-address-
  263. :xref-EnumerableMap-clear-struct-EnumerableMap-AddressToAddressMap-: xref:utils.adoc#EnumerableMap-clear-struct-EnumerableMap-AddressToAddressMap-
  264. :xref-EnumerableMap-contains-struct-EnumerableMap-AddressToAddressMap-address-: xref:utils.adoc#EnumerableMap-contains-struct-EnumerableMap-AddressToAddressMap-address-
  265. :xref-EnumerableMap-length-struct-EnumerableMap-AddressToAddressMap-: xref:utils.adoc#EnumerableMap-length-struct-EnumerableMap-AddressToAddressMap-
  266. :xref-EnumerableMap-at-struct-EnumerableMap-AddressToAddressMap-uint256-: xref:utils.adoc#EnumerableMap-at-struct-EnumerableMap-AddressToAddressMap-uint256-
  267. :xref-EnumerableMap-tryGet-struct-EnumerableMap-AddressToAddressMap-address-: xref:utils.adoc#EnumerableMap-tryGet-struct-EnumerableMap-AddressToAddressMap-address-
  268. :xref-EnumerableMap-get-struct-EnumerableMap-AddressToAddressMap-address-: xref:utils.adoc#EnumerableMap-get-struct-EnumerableMap-AddressToAddressMap-address-
  269. :xref-EnumerableMap-keys-struct-EnumerableMap-AddressToAddressMap-: xref:utils.adoc#EnumerableMap-keys-struct-EnumerableMap-AddressToAddressMap-
  270. :xref-EnumerableMap-keys-struct-EnumerableMap-AddressToAddressMap-uint256-uint256-: xref:utils.adoc#EnumerableMap-keys-struct-EnumerableMap-AddressToAddressMap-uint256-uint256-
  271. :xref-EnumerableMap-set-struct-EnumerableMap-AddressToBytes32Map-address-bytes32-: xref:utils.adoc#EnumerableMap-set-struct-EnumerableMap-AddressToBytes32Map-address-bytes32-
  272. :xref-EnumerableMap-remove-struct-EnumerableMap-AddressToBytes32Map-address-: xref:utils.adoc#EnumerableMap-remove-struct-EnumerableMap-AddressToBytes32Map-address-
  273. :xref-EnumerableMap-clear-struct-EnumerableMap-AddressToBytes32Map-: xref:utils.adoc#EnumerableMap-clear-struct-EnumerableMap-AddressToBytes32Map-
  274. :xref-EnumerableMap-contains-struct-EnumerableMap-AddressToBytes32Map-address-: xref:utils.adoc#EnumerableMap-contains-struct-EnumerableMap-AddressToBytes32Map-address-
  275. :xref-EnumerableMap-length-struct-EnumerableMap-AddressToBytes32Map-: xref:utils.adoc#EnumerableMap-length-struct-EnumerableMap-AddressToBytes32Map-
  276. :xref-EnumerableMap-at-struct-EnumerableMap-AddressToBytes32Map-uint256-: xref:utils.adoc#EnumerableMap-at-struct-EnumerableMap-AddressToBytes32Map-uint256-
  277. :xref-EnumerableMap-tryGet-struct-EnumerableMap-AddressToBytes32Map-address-: xref:utils.adoc#EnumerableMap-tryGet-struct-EnumerableMap-AddressToBytes32Map-address-
  278. :xref-EnumerableMap-get-struct-EnumerableMap-AddressToBytes32Map-address-: xref:utils.adoc#EnumerableMap-get-struct-EnumerableMap-AddressToBytes32Map-address-
  279. :xref-EnumerableMap-keys-struct-EnumerableMap-AddressToBytes32Map-: xref:utils.adoc#EnumerableMap-keys-struct-EnumerableMap-AddressToBytes32Map-
  280. :xref-EnumerableMap-keys-struct-EnumerableMap-AddressToBytes32Map-uint256-uint256-: xref:utils.adoc#EnumerableMap-keys-struct-EnumerableMap-AddressToBytes32Map-uint256-uint256-
  281. :xref-EnumerableMap-set-struct-EnumerableMap-Bytes32ToUintMap-bytes32-uint256-: xref:utils.adoc#EnumerableMap-set-struct-EnumerableMap-Bytes32ToUintMap-bytes32-uint256-
  282. :xref-EnumerableMap-remove-struct-EnumerableMap-Bytes32ToUintMap-bytes32-: xref:utils.adoc#EnumerableMap-remove-struct-EnumerableMap-Bytes32ToUintMap-bytes32-
  283. :xref-EnumerableMap-clear-struct-EnumerableMap-Bytes32ToUintMap-: xref:utils.adoc#EnumerableMap-clear-struct-EnumerableMap-Bytes32ToUintMap-
  284. :xref-EnumerableMap-contains-struct-EnumerableMap-Bytes32ToUintMap-bytes32-: xref:utils.adoc#EnumerableMap-contains-struct-EnumerableMap-Bytes32ToUintMap-bytes32-
  285. :xref-EnumerableMap-length-struct-EnumerableMap-Bytes32ToUintMap-: xref:utils.adoc#EnumerableMap-length-struct-EnumerableMap-Bytes32ToUintMap-
  286. :xref-EnumerableMap-at-struct-EnumerableMap-Bytes32ToUintMap-uint256-: xref:utils.adoc#EnumerableMap-at-struct-EnumerableMap-Bytes32ToUintMap-uint256-
  287. :xref-EnumerableMap-tryGet-struct-EnumerableMap-Bytes32ToUintMap-bytes32-: xref:utils.adoc#EnumerableMap-tryGet-struct-EnumerableMap-Bytes32ToUintMap-bytes32-
  288. :xref-EnumerableMap-get-struct-EnumerableMap-Bytes32ToUintMap-bytes32-: xref:utils.adoc#EnumerableMap-get-struct-EnumerableMap-Bytes32ToUintMap-bytes32-
  289. :xref-EnumerableMap-keys-struct-EnumerableMap-Bytes32ToUintMap-: xref:utils.adoc#EnumerableMap-keys-struct-EnumerableMap-Bytes32ToUintMap-
  290. :xref-EnumerableMap-keys-struct-EnumerableMap-Bytes32ToUintMap-uint256-uint256-: xref:utils.adoc#EnumerableMap-keys-struct-EnumerableMap-Bytes32ToUintMap-uint256-uint256-
  291. :xref-EnumerableMap-set-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-address-: xref:utils.adoc#EnumerableMap-set-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-address-
  292. :xref-EnumerableMap-remove-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-: xref:utils.adoc#EnumerableMap-remove-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-
  293. :xref-EnumerableMap-clear-struct-EnumerableMap-Bytes32ToAddressMap-: xref:utils.adoc#EnumerableMap-clear-struct-EnumerableMap-Bytes32ToAddressMap-
  294. :xref-EnumerableMap-contains-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-: xref:utils.adoc#EnumerableMap-contains-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-
  295. :xref-EnumerableMap-length-struct-EnumerableMap-Bytes32ToAddressMap-: xref:utils.adoc#EnumerableMap-length-struct-EnumerableMap-Bytes32ToAddressMap-
  296. :xref-EnumerableMap-at-struct-EnumerableMap-Bytes32ToAddressMap-uint256-: xref:utils.adoc#EnumerableMap-at-struct-EnumerableMap-Bytes32ToAddressMap-uint256-
  297. :xref-EnumerableMap-tryGet-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-: xref:utils.adoc#EnumerableMap-tryGet-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-
  298. :xref-EnumerableMap-get-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-: xref:utils.adoc#EnumerableMap-get-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-
  299. :xref-EnumerableMap-keys-struct-EnumerableMap-Bytes32ToAddressMap-: xref:utils.adoc#EnumerableMap-keys-struct-EnumerableMap-Bytes32ToAddressMap-
  300. :xref-EnumerableMap-keys-struct-EnumerableMap-Bytes32ToAddressMap-uint256-uint256-: xref:utils.adoc#EnumerableMap-keys-struct-EnumerableMap-Bytes32ToAddressMap-uint256-uint256-
  301. :xref-EnumerableMap-set-struct-EnumerableMap-BytesToBytesMap-bytes-bytes-: xref:utils.adoc#EnumerableMap-set-struct-EnumerableMap-BytesToBytesMap-bytes-bytes-
  302. :xref-EnumerableMap-remove-struct-EnumerableMap-BytesToBytesMap-bytes-: xref:utils.adoc#EnumerableMap-remove-struct-EnumerableMap-BytesToBytesMap-bytes-
  303. :xref-EnumerableMap-clear-struct-EnumerableMap-BytesToBytesMap-: xref:utils.adoc#EnumerableMap-clear-struct-EnumerableMap-BytesToBytesMap-
  304. :xref-EnumerableMap-contains-struct-EnumerableMap-BytesToBytesMap-bytes-: xref:utils.adoc#EnumerableMap-contains-struct-EnumerableMap-BytesToBytesMap-bytes-
  305. :xref-EnumerableMap-length-struct-EnumerableMap-BytesToBytesMap-: xref:utils.adoc#EnumerableMap-length-struct-EnumerableMap-BytesToBytesMap-
  306. :xref-EnumerableMap-at-struct-EnumerableMap-BytesToBytesMap-uint256-: xref:utils.adoc#EnumerableMap-at-struct-EnumerableMap-BytesToBytesMap-uint256-
  307. :xref-EnumerableMap-tryGet-struct-EnumerableMap-BytesToBytesMap-bytes-: xref:utils.adoc#EnumerableMap-tryGet-struct-EnumerableMap-BytesToBytesMap-bytes-
  308. :xref-EnumerableMap-get-struct-EnumerableMap-BytesToBytesMap-bytes-: xref:utils.adoc#EnumerableMap-get-struct-EnumerableMap-BytesToBytesMap-bytes-
  309. :xref-EnumerableMap-keys-struct-EnumerableMap-BytesToBytesMap-: xref:utils.adoc#EnumerableMap-keys-struct-EnumerableMap-BytesToBytesMap-
  310. :xref-EnumerableMap-keys-struct-EnumerableMap-BytesToBytesMap-uint256-uint256-: xref:utils.adoc#EnumerableMap-keys-struct-EnumerableMap-BytesToBytesMap-uint256-uint256-
  311. :xref-EnumerableMap-EnumerableMapNonexistentKey-bytes32-: xref:utils.adoc#EnumerableMap-EnumerableMapNonexistentKey-bytes32-
  312. :xref-EnumerableMap-EnumerableMapNonexistentBytesKey-bytes-: xref:utils.adoc#EnumerableMap-EnumerableMapNonexistentBytesKey-bytes-
  313. :xref-EnumerableSet-add-struct-EnumerableSet-Bytes32Set-bytes32-: xref:utils.adoc#EnumerableSet-add-struct-EnumerableSet-Bytes32Set-bytes32-
  314. :xref-EnumerableSet-remove-struct-EnumerableSet-Bytes32Set-bytes32-: xref:utils.adoc#EnumerableSet-remove-struct-EnumerableSet-Bytes32Set-bytes32-
  315. :xref-EnumerableSet-clear-struct-EnumerableSet-Bytes32Set-: xref:utils.adoc#EnumerableSet-clear-struct-EnumerableSet-Bytes32Set-
  316. :xref-EnumerableSet-contains-struct-EnumerableSet-Bytes32Set-bytes32-: xref:utils.adoc#EnumerableSet-contains-struct-EnumerableSet-Bytes32Set-bytes32-
  317. :xref-EnumerableSet-length-struct-EnumerableSet-Bytes32Set-: xref:utils.adoc#EnumerableSet-length-struct-EnumerableSet-Bytes32Set-
  318. :xref-EnumerableSet-at-struct-EnumerableSet-Bytes32Set-uint256-: xref:utils.adoc#EnumerableSet-at-struct-EnumerableSet-Bytes32Set-uint256-
  319. :xref-EnumerableSet-values-struct-EnumerableSet-Bytes32Set-: xref:utils.adoc#EnumerableSet-values-struct-EnumerableSet-Bytes32Set-
  320. :xref-EnumerableSet-values-struct-EnumerableSet-Bytes32Set-uint256-uint256-: xref:utils.adoc#EnumerableSet-values-struct-EnumerableSet-Bytes32Set-uint256-uint256-
  321. :xref-EnumerableSet-add-struct-EnumerableSet-AddressSet-address-: xref:utils.adoc#EnumerableSet-add-struct-EnumerableSet-AddressSet-address-
  322. :xref-EnumerableSet-remove-struct-EnumerableSet-AddressSet-address-: xref:utils.adoc#EnumerableSet-remove-struct-EnumerableSet-AddressSet-address-
  323. :xref-EnumerableSet-clear-struct-EnumerableSet-AddressSet-: xref:utils.adoc#EnumerableSet-clear-struct-EnumerableSet-AddressSet-
  324. :xref-EnumerableSet-contains-struct-EnumerableSet-AddressSet-address-: xref:utils.adoc#EnumerableSet-contains-struct-EnumerableSet-AddressSet-address-
  325. :xref-EnumerableSet-length-struct-EnumerableSet-AddressSet-: xref:utils.adoc#EnumerableSet-length-struct-EnumerableSet-AddressSet-
  326. :xref-EnumerableSet-at-struct-EnumerableSet-AddressSet-uint256-: xref:utils.adoc#EnumerableSet-at-struct-EnumerableSet-AddressSet-uint256-
  327. :xref-EnumerableSet-values-struct-EnumerableSet-AddressSet-: xref:utils.adoc#EnumerableSet-values-struct-EnumerableSet-AddressSet-
  328. :xref-EnumerableSet-values-struct-EnumerableSet-AddressSet-uint256-uint256-: xref:utils.adoc#EnumerableSet-values-struct-EnumerableSet-AddressSet-uint256-uint256-
  329. :xref-EnumerableSet-add-struct-EnumerableSet-UintSet-uint256-: xref:utils.adoc#EnumerableSet-add-struct-EnumerableSet-UintSet-uint256-
  330. :xref-EnumerableSet-remove-struct-EnumerableSet-UintSet-uint256-: xref:utils.adoc#EnumerableSet-remove-struct-EnumerableSet-UintSet-uint256-
  331. :xref-EnumerableSet-clear-struct-EnumerableSet-UintSet-: xref:utils.adoc#EnumerableSet-clear-struct-EnumerableSet-UintSet-
  332. :xref-EnumerableSet-contains-struct-EnumerableSet-UintSet-uint256-: xref:utils.adoc#EnumerableSet-contains-struct-EnumerableSet-UintSet-uint256-
  333. :xref-EnumerableSet-length-struct-EnumerableSet-UintSet-: xref:utils.adoc#EnumerableSet-length-struct-EnumerableSet-UintSet-
  334. :xref-EnumerableSet-at-struct-EnumerableSet-UintSet-uint256-: xref:utils.adoc#EnumerableSet-at-struct-EnumerableSet-UintSet-uint256-
  335. :xref-EnumerableSet-values-struct-EnumerableSet-UintSet-: xref:utils.adoc#EnumerableSet-values-struct-EnumerableSet-UintSet-
  336. :xref-EnumerableSet-values-struct-EnumerableSet-UintSet-uint256-uint256-: xref:utils.adoc#EnumerableSet-values-struct-EnumerableSet-UintSet-uint256-uint256-
  337. :xref-EnumerableSet-add-struct-EnumerableSet-StringSet-string-: xref:utils.adoc#EnumerableSet-add-struct-EnumerableSet-StringSet-string-
  338. :xref-EnumerableSet-remove-struct-EnumerableSet-StringSet-string-: xref:utils.adoc#EnumerableSet-remove-struct-EnumerableSet-StringSet-string-
  339. :xref-EnumerableSet-clear-struct-EnumerableSet-StringSet-: xref:utils.adoc#EnumerableSet-clear-struct-EnumerableSet-StringSet-
  340. :xref-EnumerableSet-contains-struct-EnumerableSet-StringSet-string-: xref:utils.adoc#EnumerableSet-contains-struct-EnumerableSet-StringSet-string-
  341. :xref-EnumerableSet-length-struct-EnumerableSet-StringSet-: xref:utils.adoc#EnumerableSet-length-struct-EnumerableSet-StringSet-
  342. :xref-EnumerableSet-at-struct-EnumerableSet-StringSet-uint256-: xref:utils.adoc#EnumerableSet-at-struct-EnumerableSet-StringSet-uint256-
  343. :xref-EnumerableSet-values-struct-EnumerableSet-StringSet-: xref:utils.adoc#EnumerableSet-values-struct-EnumerableSet-StringSet-
  344. :xref-EnumerableSet-values-struct-EnumerableSet-StringSet-uint256-uint256-: xref:utils.adoc#EnumerableSet-values-struct-EnumerableSet-StringSet-uint256-uint256-
  345. :xref-EnumerableSet-add-struct-EnumerableSet-BytesSet-bytes-: xref:utils.adoc#EnumerableSet-add-struct-EnumerableSet-BytesSet-bytes-
  346. :xref-EnumerableSet-remove-struct-EnumerableSet-BytesSet-bytes-: xref:utils.adoc#EnumerableSet-remove-struct-EnumerableSet-BytesSet-bytes-
  347. :xref-EnumerableSet-clear-struct-EnumerableSet-BytesSet-: xref:utils.adoc#EnumerableSet-clear-struct-EnumerableSet-BytesSet-
  348. :xref-EnumerableSet-contains-struct-EnumerableSet-BytesSet-bytes-: xref:utils.adoc#EnumerableSet-contains-struct-EnumerableSet-BytesSet-bytes-
  349. :xref-EnumerableSet-length-struct-EnumerableSet-BytesSet-: xref:utils.adoc#EnumerableSet-length-struct-EnumerableSet-BytesSet-
  350. :xref-EnumerableSet-at-struct-EnumerableSet-BytesSet-uint256-: xref:utils.adoc#EnumerableSet-at-struct-EnumerableSet-BytesSet-uint256-
  351. :xref-EnumerableSet-values-struct-EnumerableSet-BytesSet-: xref:utils.adoc#EnumerableSet-values-struct-EnumerableSet-BytesSet-
  352. :xref-EnumerableSet-values-struct-EnumerableSet-BytesSet-uint256-uint256-: xref:utils.adoc#EnumerableSet-values-struct-EnumerableSet-BytesSet-uint256-uint256-
  353. :xref-DoubleEndedQueue-pushBack-struct-DoubleEndedQueue-Bytes32Deque-bytes32-: xref:utils.adoc#DoubleEndedQueue-pushBack-struct-DoubleEndedQueue-Bytes32Deque-bytes32-
  354. :xref-DoubleEndedQueue-popBack-struct-DoubleEndedQueue-Bytes32Deque-: xref:utils.adoc#DoubleEndedQueue-popBack-struct-DoubleEndedQueue-Bytes32Deque-
  355. :xref-DoubleEndedQueue-pushFront-struct-DoubleEndedQueue-Bytes32Deque-bytes32-: xref:utils.adoc#DoubleEndedQueue-pushFront-struct-DoubleEndedQueue-Bytes32Deque-bytes32-
  356. :xref-DoubleEndedQueue-popFront-struct-DoubleEndedQueue-Bytes32Deque-: xref:utils.adoc#DoubleEndedQueue-popFront-struct-DoubleEndedQueue-Bytes32Deque-
  357. :xref-DoubleEndedQueue-front-struct-DoubleEndedQueue-Bytes32Deque-: xref:utils.adoc#DoubleEndedQueue-front-struct-DoubleEndedQueue-Bytes32Deque-
  358. :xref-DoubleEndedQueue-back-struct-DoubleEndedQueue-Bytes32Deque-: xref:utils.adoc#DoubleEndedQueue-back-struct-DoubleEndedQueue-Bytes32Deque-
  359. :xref-DoubleEndedQueue-at-struct-DoubleEndedQueue-Bytes32Deque-uint256-: xref:utils.adoc#DoubleEndedQueue-at-struct-DoubleEndedQueue-Bytes32Deque-uint256-
  360. :xref-DoubleEndedQueue-clear-struct-DoubleEndedQueue-Bytes32Deque-: xref:utils.adoc#DoubleEndedQueue-clear-struct-DoubleEndedQueue-Bytes32Deque-
  361. :xref-DoubleEndedQueue-length-struct-DoubleEndedQueue-Bytes32Deque-: xref:utils.adoc#DoubleEndedQueue-length-struct-DoubleEndedQueue-Bytes32Deque-
  362. :xref-DoubleEndedQueue-empty-struct-DoubleEndedQueue-Bytes32Deque-: xref:utils.adoc#DoubleEndedQueue-empty-struct-DoubleEndedQueue-Bytes32Deque-
  363. :Panic-RESOURCE_ERROR: pass:normal[xref:utils.adoc#Panic-RESOURCE_ERROR-uint256[`Panic.RESOURCE_ERROR`]]
  364. :Panic-EMPTY_ARRAY_POP: pass:normal[xref:utils.adoc#Panic-EMPTY_ARRAY_POP-uint256[`Panic.EMPTY_ARRAY_POP`]]
  365. :Panic-RESOURCE_ERROR: pass:normal[xref:utils.adoc#Panic-RESOURCE_ERROR-uint256[`Panic.RESOURCE_ERROR`]]
  366. :Panic-EMPTY_ARRAY_POP: pass:normal[xref:utils.adoc#Panic-EMPTY_ARRAY_POP-uint256[`Panic.EMPTY_ARRAY_POP`]]
  367. :Panic-ARRAY_OUT_OF_BOUNDS: pass:normal[xref:utils.adoc#Panic-ARRAY_OUT_OF_BOUNDS-uint256[`Panic.ARRAY_OUT_OF_BOUNDS`]]
  368. :Panic-ARRAY_OUT_OF_BOUNDS: pass:normal[xref:utils.adoc#Panic-ARRAY_OUT_OF_BOUNDS-uint256[`Panic.ARRAY_OUT_OF_BOUNDS`]]
  369. :Panic-ARRAY_OUT_OF_BOUNDS: pass:normal[xref:utils.adoc#Panic-ARRAY_OUT_OF_BOUNDS-uint256[`Panic.ARRAY_OUT_OF_BOUNDS`]]
  370. :xref-CircularBuffer-setup-struct-CircularBuffer-Bytes32CircularBuffer-uint256-: xref:utils.adoc#CircularBuffer-setup-struct-CircularBuffer-Bytes32CircularBuffer-uint256-
  371. :xref-CircularBuffer-clear-struct-CircularBuffer-Bytes32CircularBuffer-: xref:utils.adoc#CircularBuffer-clear-struct-CircularBuffer-Bytes32CircularBuffer-
  372. :xref-CircularBuffer-push-struct-CircularBuffer-Bytes32CircularBuffer-bytes32-: xref:utils.adoc#CircularBuffer-push-struct-CircularBuffer-Bytes32CircularBuffer-bytes32-
  373. :xref-CircularBuffer-count-struct-CircularBuffer-Bytes32CircularBuffer-: xref:utils.adoc#CircularBuffer-count-struct-CircularBuffer-Bytes32CircularBuffer-
  374. :xref-CircularBuffer-length-struct-CircularBuffer-Bytes32CircularBuffer-: xref:utils.adoc#CircularBuffer-length-struct-CircularBuffer-Bytes32CircularBuffer-
  375. :xref-CircularBuffer-last-struct-CircularBuffer-Bytes32CircularBuffer-uint256-: xref:utils.adoc#CircularBuffer-last-struct-CircularBuffer-Bytes32CircularBuffer-uint256-
  376. :xref-CircularBuffer-includes-struct-CircularBuffer-Bytes32CircularBuffer-bytes32-: xref:utils.adoc#CircularBuffer-includes-struct-CircularBuffer-Bytes32CircularBuffer-bytes32-
  377. :xref-CircularBuffer-InvalidBufferSize--: xref:utils.adoc#CircularBuffer-InvalidBufferSize--
  378. :Panic-ARRAY_OUT_OF_BOUNDS: pass:normal[xref:utils.adoc#Panic-ARRAY_OUT_OF_BOUNDS-uint256[`Panic.ARRAY_OUT_OF_BOUNDS`]]
  379. :Votes: pass:normal[xref:governance.adoc#Votes[`Votes`]]
  380. :xref-Checkpoints-push-struct-Checkpoints-Trace224-uint32-uint224-: xref:utils.adoc#Checkpoints-push-struct-Checkpoints-Trace224-uint32-uint224-
  381. :xref-Checkpoints-lowerLookup-struct-Checkpoints-Trace224-uint32-: xref:utils.adoc#Checkpoints-lowerLookup-struct-Checkpoints-Trace224-uint32-
  382. :xref-Checkpoints-upperLookup-struct-Checkpoints-Trace224-uint32-: xref:utils.adoc#Checkpoints-upperLookup-struct-Checkpoints-Trace224-uint32-
  383. :xref-Checkpoints-upperLookupRecent-struct-Checkpoints-Trace224-uint32-: xref:utils.adoc#Checkpoints-upperLookupRecent-struct-Checkpoints-Trace224-uint32-
  384. :xref-Checkpoints-latest-struct-Checkpoints-Trace224-: xref:utils.adoc#Checkpoints-latest-struct-Checkpoints-Trace224-
  385. :xref-Checkpoints-latestCheckpoint-struct-Checkpoints-Trace224-: xref:utils.adoc#Checkpoints-latestCheckpoint-struct-Checkpoints-Trace224-
  386. :xref-Checkpoints-length-struct-Checkpoints-Trace224-: xref:utils.adoc#Checkpoints-length-struct-Checkpoints-Trace224-
  387. :xref-Checkpoints-at-struct-Checkpoints-Trace224-uint32-: xref:utils.adoc#Checkpoints-at-struct-Checkpoints-Trace224-uint32-
  388. :xref-Checkpoints-push-struct-Checkpoints-Trace208-uint48-uint208-: xref:utils.adoc#Checkpoints-push-struct-Checkpoints-Trace208-uint48-uint208-
  389. :xref-Checkpoints-lowerLookup-struct-Checkpoints-Trace208-uint48-: xref:utils.adoc#Checkpoints-lowerLookup-struct-Checkpoints-Trace208-uint48-
  390. :xref-Checkpoints-upperLookup-struct-Checkpoints-Trace208-uint48-: xref:utils.adoc#Checkpoints-upperLookup-struct-Checkpoints-Trace208-uint48-
  391. :xref-Checkpoints-upperLookupRecent-struct-Checkpoints-Trace208-uint48-: xref:utils.adoc#Checkpoints-upperLookupRecent-struct-Checkpoints-Trace208-uint48-
  392. :xref-Checkpoints-latest-struct-Checkpoints-Trace208-: xref:utils.adoc#Checkpoints-latest-struct-Checkpoints-Trace208-
  393. :xref-Checkpoints-latestCheckpoint-struct-Checkpoints-Trace208-: xref:utils.adoc#Checkpoints-latestCheckpoint-struct-Checkpoints-Trace208-
  394. :xref-Checkpoints-length-struct-Checkpoints-Trace208-: xref:utils.adoc#Checkpoints-length-struct-Checkpoints-Trace208-
  395. :xref-Checkpoints-at-struct-Checkpoints-Trace208-uint32-: xref:utils.adoc#Checkpoints-at-struct-Checkpoints-Trace208-uint32-
  396. :xref-Checkpoints-push-struct-Checkpoints-Trace160-uint96-uint160-: xref:utils.adoc#Checkpoints-push-struct-Checkpoints-Trace160-uint96-uint160-
  397. :xref-Checkpoints-lowerLookup-struct-Checkpoints-Trace160-uint96-: xref:utils.adoc#Checkpoints-lowerLookup-struct-Checkpoints-Trace160-uint96-
  398. :xref-Checkpoints-upperLookup-struct-Checkpoints-Trace160-uint96-: xref:utils.adoc#Checkpoints-upperLookup-struct-Checkpoints-Trace160-uint96-
  399. :xref-Checkpoints-upperLookupRecent-struct-Checkpoints-Trace160-uint96-: xref:utils.adoc#Checkpoints-upperLookupRecent-struct-Checkpoints-Trace160-uint96-
  400. :xref-Checkpoints-latest-struct-Checkpoints-Trace160-: xref:utils.adoc#Checkpoints-latest-struct-Checkpoints-Trace160-
  401. :xref-Checkpoints-latestCheckpoint-struct-Checkpoints-Trace160-: xref:utils.adoc#Checkpoints-latestCheckpoint-struct-Checkpoints-Trace160-
  402. :xref-Checkpoints-length-struct-Checkpoints-Trace160-: xref:utils.adoc#Checkpoints-length-struct-Checkpoints-Trace160-
  403. :xref-Checkpoints-at-struct-Checkpoints-Trace160-uint32-: xref:utils.adoc#Checkpoints-at-struct-Checkpoints-Trace160-uint32-
  404. :xref-Checkpoints-CheckpointUnorderedInsertion--: xref:utils.adoc#Checkpoints-CheckpointUnorderedInsertion--
  405. :xref-Heap-peek-struct-Heap-Uint256Heap-: xref:utils.adoc#Heap-peek-struct-Heap-Uint256Heap-
  406. :xref-Heap-pop-struct-Heap-Uint256Heap-: xref:utils.adoc#Heap-pop-struct-Heap-Uint256Heap-
  407. :xref-Heap-pop-struct-Heap-Uint256Heap-function--uint256-uint256--view-returns--bool--: xref:utils.adoc#Heap-pop-struct-Heap-Uint256Heap-function--uint256-uint256--view-returns--bool--
  408. :xref-Heap-insert-struct-Heap-Uint256Heap-uint256-: xref:utils.adoc#Heap-insert-struct-Heap-Uint256Heap-uint256-
  409. :xref-Heap-insert-struct-Heap-Uint256Heap-uint256-function--uint256-uint256--view-returns--bool--: xref:utils.adoc#Heap-insert-struct-Heap-Uint256Heap-uint256-function--uint256-uint256--view-returns--bool--
  410. :xref-Heap-replace-struct-Heap-Uint256Heap-uint256-: xref:utils.adoc#Heap-replace-struct-Heap-Uint256Heap-uint256-
  411. :xref-Heap-replace-struct-Heap-Uint256Heap-uint256-function--uint256-uint256--view-returns--bool--: xref:utils.adoc#Heap-replace-struct-Heap-Uint256Heap-uint256-function--uint256-uint256--view-returns--bool--
  412. :xref-Heap-length-struct-Heap-Uint256Heap-: xref:utils.adoc#Heap-length-struct-Heap-Uint256Heap-
  413. :xref-Heap-clear-struct-Heap-Uint256Heap-: xref:utils.adoc#Heap-clear-struct-Heap-Uint256Heap-
  414. :MerkleProof: pass:normal[xref:utils/cryptography.adoc#MerkleProof[`MerkleProof`]]
  415. :Hashes-commutativeKeccak256: pass:normal[xref:utils/cryptography.adoc#Hashes-commutativeKeccak256-bytes32-bytes32-[`Hashes.commutativeKeccak256`]]
  416. :MerkleProof: pass:normal[xref:utils/cryptography.adoc#MerkleProof[`MerkleProof`]]
  417. :xref-MerkleTree-setup-struct-MerkleTree-Bytes32PushTree-uint8-bytes32-: xref:utils.adoc#MerkleTree-setup-struct-MerkleTree-Bytes32PushTree-uint8-bytes32-
  418. :xref-MerkleTree-setup-struct-MerkleTree-Bytes32PushTree-uint8-bytes32-function--bytes32-bytes32--view-returns--bytes32--: xref:utils.adoc#MerkleTree-setup-struct-MerkleTree-Bytes32PushTree-uint8-bytes32-function--bytes32-bytes32--view-returns--bytes32--
  419. :xref-MerkleTree-push-struct-MerkleTree-Bytes32PushTree-bytes32-: xref:utils.adoc#MerkleTree-push-struct-MerkleTree-Bytes32PushTree-bytes32-
  420. :xref-MerkleTree-push-struct-MerkleTree-Bytes32PushTree-bytes32-function--bytes32-bytes32--view-returns--bytes32--: xref:utils.adoc#MerkleTree-push-struct-MerkleTree-Bytes32PushTree-bytes32-function--bytes32-bytes32--view-returns--bytes32--
  421. :xref-MerkleTree-update-struct-MerkleTree-Bytes32PushTree-uint256-bytes32-bytes32-bytes32---: xref:utils.adoc#MerkleTree-update-struct-MerkleTree-Bytes32PushTree-uint256-bytes32-bytes32-bytes32---
  422. :xref-MerkleTree-update-struct-MerkleTree-Bytes32PushTree-uint256-bytes32-bytes32-bytes32---function--bytes32-bytes32--view-returns--bytes32--: xref:utils.adoc#MerkleTree-update-struct-MerkleTree-Bytes32PushTree-uint256-bytes32-bytes32-bytes32---function--bytes32-bytes32--view-returns--bytes32--
  423. :xref-MerkleTree-depth-struct-MerkleTree-Bytes32PushTree-: xref:utils.adoc#MerkleTree-depth-struct-MerkleTree-Bytes32PushTree-
  424. :xref-MerkleTree-MerkleTreeUpdateInvalidIndex-uint256-uint256-: xref:utils.adoc#MerkleTree-MerkleTreeUpdateInvalidIndex-uint256-uint256-
  425. :xref-MerkleTree-MerkleTreeUpdateInvalidProof--: xref:utils.adoc#MerkleTree-MerkleTreeUpdateInvalidProof--
  426. :Hashes-commutativeKeccak256: pass:normal[xref:utils/cryptography.adoc#Hashes-commutativeKeccak256-bytes32-bytes32-[`Hashes.commutativeKeccak256`]]
  427. :xref-MerkleTree-push-struct-MerkleTree-Bytes32PushTree-bytes32-: xref:utils.adoc#MerkleTree-push-struct-MerkleTree-Bytes32PushTree-bytes32-
  428. :xref-MerkleTree-setup-struct-MerkleTree-Bytes32PushTree-uint8-bytes32-: xref:utils.adoc#MerkleTree-setup-struct-MerkleTree-Bytes32PushTree-uint8-bytes32-
  429. :Hashes-commutativeKeccak256: pass:normal[xref:utils/cryptography.adoc#Hashes-commutativeKeccak256-bytes32-bytes32-[`Hashes.commutativeKeccak256`]]
  430. :xref-MerkleTree-setup-struct-MerkleTree-Bytes32PushTree-uint8-bytes32-: xref:utils.adoc#MerkleTree-setup-struct-MerkleTree-Bytes32PushTree-uint8-bytes32-
  431. :Hashes-commutativeKeccak256: pass:normal[xref:utils/cryptography.adoc#Hashes-commutativeKeccak256-bytes32-bytes32-[`Hashes.commutativeKeccak256`]]
  432. :xref-MerkleTree-setup-struct-MerkleTree-Bytes32PushTree-uint8-bytes32-: xref:utils.adoc#MerkleTree-setup-struct-MerkleTree-Bytes32PushTree-uint8-bytes32-
  433. :xref-Create2-deploy-uint256-bytes32-bytes-: xref:utils.adoc#Create2-deploy-uint256-bytes32-bytes-
  434. :xref-Create2-computeAddress-bytes32-bytes32-: xref:utils.adoc#Create2-computeAddress-bytes32-bytes32-
  435. :xref-Create2-computeAddress-bytes32-bytes32-address-: xref:utils.adoc#Create2-computeAddress-bytes32-bytes32-address-
  436. :xref-Create2-Create2EmptyBytecode--: xref:utils.adoc#Create2-Create2EmptyBytecode--
  437. :xref-Address-sendValue-address-payable-uint256-: xref:utils.adoc#Address-sendValue-address-payable-uint256-
  438. :xref-Address-functionCall-address-bytes-: xref:utils.adoc#Address-functionCall-address-bytes-
  439. :xref-Address-functionCallWithValue-address-bytes-uint256-: xref:utils.adoc#Address-functionCallWithValue-address-bytes-uint256-
  440. :xref-Address-functionStaticCall-address-bytes-: xref:utils.adoc#Address-functionStaticCall-address-bytes-
  441. :xref-Address-functionDelegateCall-address-bytes-: xref:utils.adoc#Address-functionDelegateCall-address-bytes-
  442. :xref-Address-verifyCallResultFromTarget-address-bool-bytes-: xref:utils.adoc#Address-verifyCallResultFromTarget-address-bool-bytes-
  443. :xref-Address-verifyCallResult-bool-bytes-: xref:utils.adoc#Address-verifyCallResult-bool-bytes-
  444. :xref-Address-AddressEmptyCode-address-: xref:utils.adoc#Address-AddressEmptyCode-address-
  445. :ReentrancyGuard: pass:normal[xref:utils.adoc#ReentrancyGuard[`ReentrancyGuard`]]
  446. :xref-Address-functionCall-address-bytes-: xref:utils.adoc#Address-functionCall-address-bytes-
  447. :xref-Address-functionCall-address-bytes-: xref:utils.adoc#Address-functionCall-address-bytes-
  448. :xref-Address-functionCall-address-bytes-: xref:utils.adoc#Address-functionCall-address-bytes-
  449. :xref-Arrays-sort-uint256---function--uint256-uint256--pure-returns--bool--: xref:utils.adoc#Arrays-sort-uint256---function--uint256-uint256--pure-returns--bool--
  450. :xref-Arrays-sort-uint256---: xref:utils.adoc#Arrays-sort-uint256---
  451. :xref-Arrays-sort-address---function--address-address--pure-returns--bool--: xref:utils.adoc#Arrays-sort-address---function--address-address--pure-returns--bool--
  452. :xref-Arrays-sort-address---: xref:utils.adoc#Arrays-sort-address---
  453. :xref-Arrays-sort-bytes32---function--bytes32-bytes32--pure-returns--bool--: xref:utils.adoc#Arrays-sort-bytes32---function--bytes32-bytes32--pure-returns--bool--
  454. :xref-Arrays-sort-bytes32---: xref:utils.adoc#Arrays-sort-bytes32---
  455. :xref-Arrays-findUpperBound-uint256---uint256-: xref:utils.adoc#Arrays-findUpperBound-uint256---uint256-
  456. :xref-Arrays-lowerBound-uint256---uint256-: xref:utils.adoc#Arrays-lowerBound-uint256---uint256-
  457. :xref-Arrays-upperBound-uint256---uint256-: xref:utils.adoc#Arrays-upperBound-uint256---uint256-
  458. :xref-Arrays-lowerBoundMemory-uint256---uint256-: xref:utils.adoc#Arrays-lowerBoundMemory-uint256---uint256-
  459. :xref-Arrays-upperBoundMemory-uint256---uint256-: xref:utils.adoc#Arrays-upperBoundMemory-uint256---uint256-
  460. :xref-Arrays-unsafeAccess-address---uint256-: xref:utils.adoc#Arrays-unsafeAccess-address---uint256-
  461. :xref-Arrays-unsafeAccess-bytes32---uint256-: xref:utils.adoc#Arrays-unsafeAccess-bytes32---uint256-
  462. :xref-Arrays-unsafeAccess-uint256---uint256-: xref:utils.adoc#Arrays-unsafeAccess-uint256---uint256-
  463. :xref-Arrays-unsafeAccess-bytes---uint256-: xref:utils.adoc#Arrays-unsafeAccess-bytes---uint256-
  464. :xref-Arrays-unsafeAccess-string---uint256-: xref:utils.adoc#Arrays-unsafeAccess-string---uint256-
  465. :xref-Arrays-unsafeMemoryAccess-address---uint256-: xref:utils.adoc#Arrays-unsafeMemoryAccess-address---uint256-
  466. :xref-Arrays-unsafeMemoryAccess-bytes32---uint256-: xref:utils.adoc#Arrays-unsafeMemoryAccess-bytes32---uint256-
  467. :xref-Arrays-unsafeMemoryAccess-uint256---uint256-: xref:utils.adoc#Arrays-unsafeMemoryAccess-uint256---uint256-
  468. :xref-Arrays-unsafeMemoryAccess-bytes---uint256-: xref:utils.adoc#Arrays-unsafeMemoryAccess-bytes---uint256-
  469. :xref-Arrays-unsafeMemoryAccess-string---uint256-: xref:utils.adoc#Arrays-unsafeMemoryAccess-string---uint256-
  470. :xref-Arrays-unsafeSetLength-address---uint256-: xref:utils.adoc#Arrays-unsafeSetLength-address---uint256-
  471. :xref-Arrays-unsafeSetLength-bytes32---uint256-: xref:utils.adoc#Arrays-unsafeSetLength-bytes32---uint256-
  472. :xref-Arrays-unsafeSetLength-uint256---uint256-: xref:utils.adoc#Arrays-unsafeSetLength-uint256---uint256-
  473. :xref-Arrays-unsafeSetLength-bytes---uint256-: xref:utils.adoc#Arrays-unsafeSetLength-bytes---uint256-
  474. :xref-Arrays-unsafeSetLength-string---uint256-: xref:utils.adoc#Arrays-unsafeSetLength-string---uint256-
  475. :xref-Base64-encode-bytes-: xref:utils.adoc#Base64-encode-bytes-
  476. :xref-Base64-encodeURL-bytes-: xref:utils.adoc#Base64-encodeURL-bytes-
  477. :xref-Base64-_TABLE-string: xref:utils.adoc#Base64-_TABLE-string
  478. :xref-Base64-_TABLE_URL-string: xref:utils.adoc#Base64-_TABLE_URL-string
  479. :xref-Bytes-indexOf-bytes-bytes1-: xref:utils.adoc#Bytes-indexOf-bytes-bytes1-
  480. :xref-Bytes-indexOf-bytes-bytes1-uint256-: xref:utils.adoc#Bytes-indexOf-bytes-bytes1-uint256-
  481. :xref-Bytes-lastIndexOf-bytes-bytes1-: xref:utils.adoc#Bytes-lastIndexOf-bytes-bytes1-
  482. :xref-Bytes-lastIndexOf-bytes-bytes1-uint256-: xref:utils.adoc#Bytes-lastIndexOf-bytes-bytes1-uint256-
  483. :xref-Bytes-slice-bytes-uint256-: xref:utils.adoc#Bytes-slice-bytes-uint256-
  484. :xref-Bytes-slice-bytes-uint256-uint256-: xref:utils.adoc#Bytes-slice-bytes-uint256-uint256-
  485. :xref-Calldata-emptyBytes--: xref:utils.adoc#Calldata-emptyBytes--
  486. :xref-Calldata-emptyString--: xref:utils.adoc#Calldata-emptyString--
  487. :xref-Strings-toString-uint256-: xref:utils.adoc#Strings-toString-uint256-
  488. :xref-Strings-toStringSigned-int256-: xref:utils.adoc#Strings-toStringSigned-int256-
  489. :xref-Strings-toHexString-uint256-: xref:utils.adoc#Strings-toHexString-uint256-
  490. :xref-Strings-toHexString-uint256-uint256-: xref:utils.adoc#Strings-toHexString-uint256-uint256-
  491. :xref-Strings-toHexString-address-: xref:utils.adoc#Strings-toHexString-address-
  492. :xref-Strings-toChecksumHexString-address-: xref:utils.adoc#Strings-toChecksumHexString-address-
  493. :xref-Strings-equal-string-string-: xref:utils.adoc#Strings-equal-string-string-
  494. :xref-Strings-parseUint-string-: xref:utils.adoc#Strings-parseUint-string-
  495. :xref-Strings-parseUint-string-uint256-uint256-: xref:utils.adoc#Strings-parseUint-string-uint256-uint256-
  496. :xref-Strings-tryParseUint-string-: xref:utils.adoc#Strings-tryParseUint-string-
  497. :xref-Strings-tryParseUint-string-uint256-uint256-: xref:utils.adoc#Strings-tryParseUint-string-uint256-uint256-
  498. :xref-Strings-parseInt-string-: xref:utils.adoc#Strings-parseInt-string-
  499. :xref-Strings-parseInt-string-uint256-uint256-: xref:utils.adoc#Strings-parseInt-string-uint256-uint256-
  500. :xref-Strings-tryParseInt-string-: xref:utils.adoc#Strings-tryParseInt-string-
  501. :xref-Strings-tryParseInt-string-uint256-uint256-: xref:utils.adoc#Strings-tryParseInt-string-uint256-uint256-
  502. :xref-Strings-parseHexUint-string-: xref:utils.adoc#Strings-parseHexUint-string-
  503. :xref-Strings-parseHexUint-string-uint256-uint256-: xref:utils.adoc#Strings-parseHexUint-string-uint256-uint256-
  504. :xref-Strings-tryParseHexUint-string-: xref:utils.adoc#Strings-tryParseHexUint-string-
  505. :xref-Strings-tryParseHexUint-string-uint256-uint256-: xref:utils.adoc#Strings-tryParseHexUint-string-uint256-uint256-
  506. :xref-Strings-parseAddress-string-: xref:utils.adoc#Strings-parseAddress-string-
  507. :xref-Strings-parseAddress-string-uint256-uint256-: xref:utils.adoc#Strings-parseAddress-string-uint256-uint256-
  508. :xref-Strings-tryParseAddress-string-: xref:utils.adoc#Strings-tryParseAddress-string-
  509. :xref-Strings-tryParseAddress-string-uint256-uint256-: xref:utils.adoc#Strings-tryParseAddress-string-uint256-uint256-
  510. :xref-Strings-escapeJSON-string-: xref:utils.adoc#Strings-escapeJSON-string-
  511. :xref-Strings-StringsInsufficientHexLength-uint256-uint256-: xref:utils.adoc#Strings-StringsInsufficientHexLength-uint256-uint256-
  512. :xref-Strings-StringsInvalidChar--: xref:utils.adoc#Strings-StringsInvalidChar--
  513. :xref-Strings-StringsInvalidAddressFormat--: xref:utils.adoc#Strings-StringsInvalidAddressFormat--
  514. :xref-ShortStrings-toShortString-string-: xref:utils.adoc#ShortStrings-toShortString-string-
  515. :xref-ShortStrings-toString-ShortString-: xref:utils.adoc#ShortStrings-toString-ShortString-
  516. :xref-ShortStrings-byteLength-ShortString-: xref:utils.adoc#ShortStrings-byteLength-ShortString-
  517. :xref-ShortStrings-toShortStringWithFallback-string-string-: xref:utils.adoc#ShortStrings-toShortStringWithFallback-string-string-
  518. :xref-ShortStrings-toStringWithFallback-ShortString-string-: xref:utils.adoc#ShortStrings-toStringWithFallback-ShortString-string-
  519. :xref-ShortStrings-byteLengthWithFallback-ShortString-string-: xref:utils.adoc#ShortStrings-byteLengthWithFallback-ShortString-string-
  520. :xref-ShortStrings-StringTooLong-string-: xref:utils.adoc#ShortStrings-StringTooLong-string-
  521. :xref-ShortStrings-InvalidShortString--: xref:utils.adoc#ShortStrings-InvalidShortString--
  522. :StorageSlot: pass:normal[xref:utils.adoc#StorageSlot[`StorageSlot`]]
  523. :xref-SlotDerivation-erc7201Slot-string-: xref:utils.adoc#SlotDerivation-erc7201Slot-string-
  524. :xref-SlotDerivation-offset-bytes32-uint256-: xref:utils.adoc#SlotDerivation-offset-bytes32-uint256-
  525. :xref-SlotDerivation-deriveArray-bytes32-: xref:utils.adoc#SlotDerivation-deriveArray-bytes32-
  526. :xref-SlotDerivation-deriveMapping-bytes32-address-: xref:utils.adoc#SlotDerivation-deriveMapping-bytes32-address-
  527. :xref-SlotDerivation-deriveMapping-bytes32-bool-: xref:utils.adoc#SlotDerivation-deriveMapping-bytes32-bool-
  528. :xref-SlotDerivation-deriveMapping-bytes32-bytes32-: xref:utils.adoc#SlotDerivation-deriveMapping-bytes32-bytes32-
  529. :xref-SlotDerivation-deriveMapping-bytes32-uint256-: xref:utils.adoc#SlotDerivation-deriveMapping-bytes32-uint256-
  530. :xref-SlotDerivation-deriveMapping-bytes32-int256-: xref:utils.adoc#SlotDerivation-deriveMapping-bytes32-int256-
  531. :xref-SlotDerivation-deriveMapping-bytes32-string-: xref:utils.adoc#SlotDerivation-deriveMapping-bytes32-string-
  532. :xref-SlotDerivation-deriveMapping-bytes32-bytes-: xref:utils.adoc#SlotDerivation-deriveMapping-bytes32-bytes-
  533. :SlotDerivation: pass:normal[xref:utils.adoc#SlotDerivation[`SlotDerivation`]]
  534. :xref-StorageSlot-getAddressSlot-bytes32-: xref:utils.adoc#StorageSlot-getAddressSlot-bytes32-
  535. :xref-StorageSlot-getBooleanSlot-bytes32-: xref:utils.adoc#StorageSlot-getBooleanSlot-bytes32-
  536. :xref-StorageSlot-getBytes32Slot-bytes32-: xref:utils.adoc#StorageSlot-getBytes32Slot-bytes32-
  537. :xref-StorageSlot-getUint256Slot-bytes32-: xref:utils.adoc#StorageSlot-getUint256Slot-bytes32-
  538. :xref-StorageSlot-getInt256Slot-bytes32-: xref:utils.adoc#StorageSlot-getInt256Slot-bytes32-
  539. :xref-StorageSlot-getStringSlot-bytes32-: xref:utils.adoc#StorageSlot-getStringSlot-bytes32-
  540. :xref-StorageSlot-getStringSlot-string-: xref:utils.adoc#StorageSlot-getStringSlot-string-
  541. :xref-StorageSlot-getBytesSlot-bytes32-: xref:utils.adoc#StorageSlot-getBytesSlot-bytes32-
  542. :xref-StorageSlot-getBytesSlot-bytes-: xref:utils.adoc#StorageSlot-getBytesSlot-bytes-
  543. :SlotDerivation: pass:normal[xref:utils.adoc#SlotDerivation[`SlotDerivation`]]
  544. :xref-TransientSlot-asAddress-bytes32-: xref:utils.adoc#TransientSlot-asAddress-bytes32-
  545. :xref-TransientSlot-asBoolean-bytes32-: xref:utils.adoc#TransientSlot-asBoolean-bytes32-
  546. :xref-TransientSlot-asBytes32-bytes32-: xref:utils.adoc#TransientSlot-asBytes32-bytes32-
  547. :xref-TransientSlot-asUint256-bytes32-: xref:utils.adoc#TransientSlot-asUint256-bytes32-
  548. :xref-TransientSlot-asInt256-bytes32-: xref:utils.adoc#TransientSlot-asInt256-bytes32-
  549. :xref-TransientSlot-tload-TransientSlot-AddressSlot-: xref:utils.adoc#TransientSlot-tload-TransientSlot-AddressSlot-
  550. :xref-TransientSlot-tstore-TransientSlot-AddressSlot-address-: xref:utils.adoc#TransientSlot-tstore-TransientSlot-AddressSlot-address-
  551. :xref-TransientSlot-tload-TransientSlot-BooleanSlot-: xref:utils.adoc#TransientSlot-tload-TransientSlot-BooleanSlot-
  552. :xref-TransientSlot-tstore-TransientSlot-BooleanSlot-bool-: xref:utils.adoc#TransientSlot-tstore-TransientSlot-BooleanSlot-bool-
  553. :xref-TransientSlot-tload-TransientSlot-Bytes32Slot-: xref:utils.adoc#TransientSlot-tload-TransientSlot-Bytes32Slot-
  554. :xref-TransientSlot-tstore-TransientSlot-Bytes32Slot-bytes32-: xref:utils.adoc#TransientSlot-tstore-TransientSlot-Bytes32Slot-bytes32-
  555. :xref-TransientSlot-tload-TransientSlot-Uint256Slot-: xref:utils.adoc#TransientSlot-tload-TransientSlot-Uint256Slot-
  556. :xref-TransientSlot-tstore-TransientSlot-Uint256Slot-uint256-: xref:utils.adoc#TransientSlot-tstore-TransientSlot-Uint256Slot-uint256-
  557. :xref-TransientSlot-tload-TransientSlot-Int256Slot-: xref:utils.adoc#TransientSlot-tload-TransientSlot-Int256Slot-
  558. :xref-TransientSlot-tstore-TransientSlot-Int256Slot-int256-: xref:utils.adoc#TransientSlot-tstore-TransientSlot-Int256Slot-int256-
  559. :Context-_msgSender: pass:normal[xref:utils.adoc#Context-_msgSender--[`Context._msgSender`]]
  560. :ERC2771Context: pass:normal[xref:metatx.adoc#ERC2771Context[`ERC2771Context`]]
  561. :Context-_msgSender: pass:normal[xref:utils.adoc#Context-_msgSender--[`Context._msgSender`]]
  562. :xref-Multicall-multicall-bytes---: xref:utils.adoc#Multicall-multicall-bytes---
  563. :xref-Context-_msgSender--: xref:utils.adoc#Context-_msgSender--
  564. :xref-Context-_msgData--: xref:utils.adoc#Context-_msgData--
  565. :xref-Context-_contextSuffixLength--: xref:utils.adoc#Context-_contextSuffixLength--
  566. :xref-Packing-pack_1_1-bytes1-bytes1-: xref:utils.adoc#Packing-pack_1_1-bytes1-bytes1-
  567. :xref-Packing-pack_2_2-bytes2-bytes2-: xref:utils.adoc#Packing-pack_2_2-bytes2-bytes2-
  568. :xref-Packing-pack_2_4-bytes2-bytes4-: xref:utils.adoc#Packing-pack_2_4-bytes2-bytes4-
  569. :xref-Packing-pack_2_6-bytes2-bytes6-: xref:utils.adoc#Packing-pack_2_6-bytes2-bytes6-
  570. :xref-Packing-pack_2_8-bytes2-bytes8-: xref:utils.adoc#Packing-pack_2_8-bytes2-bytes8-
  571. :xref-Packing-pack_2_10-bytes2-bytes10-: xref:utils.adoc#Packing-pack_2_10-bytes2-bytes10-
  572. :xref-Packing-pack_2_20-bytes2-bytes20-: xref:utils.adoc#Packing-pack_2_20-bytes2-bytes20-
  573. :xref-Packing-pack_2_22-bytes2-bytes22-: xref:utils.adoc#Packing-pack_2_22-bytes2-bytes22-
  574. :xref-Packing-pack_4_2-bytes4-bytes2-: xref:utils.adoc#Packing-pack_4_2-bytes4-bytes2-
  575. :xref-Packing-pack_4_4-bytes4-bytes4-: xref:utils.adoc#Packing-pack_4_4-bytes4-bytes4-
  576. :xref-Packing-pack_4_6-bytes4-bytes6-: xref:utils.adoc#Packing-pack_4_6-bytes4-bytes6-
  577. :xref-Packing-pack_4_8-bytes4-bytes8-: xref:utils.adoc#Packing-pack_4_8-bytes4-bytes8-
  578. :xref-Packing-pack_4_12-bytes4-bytes12-: xref:utils.adoc#Packing-pack_4_12-bytes4-bytes12-
  579. :xref-Packing-pack_4_16-bytes4-bytes16-: xref:utils.adoc#Packing-pack_4_16-bytes4-bytes16-
  580. :xref-Packing-pack_4_20-bytes4-bytes20-: xref:utils.adoc#Packing-pack_4_20-bytes4-bytes20-
  581. :xref-Packing-pack_4_24-bytes4-bytes24-: xref:utils.adoc#Packing-pack_4_24-bytes4-bytes24-
  582. :xref-Packing-pack_4_28-bytes4-bytes28-: xref:utils.adoc#Packing-pack_4_28-bytes4-bytes28-
  583. :xref-Packing-pack_6_2-bytes6-bytes2-: xref:utils.adoc#Packing-pack_6_2-bytes6-bytes2-
  584. :xref-Packing-pack_6_4-bytes6-bytes4-: xref:utils.adoc#Packing-pack_6_4-bytes6-bytes4-
  585. :xref-Packing-pack_6_6-bytes6-bytes6-: xref:utils.adoc#Packing-pack_6_6-bytes6-bytes6-
  586. :xref-Packing-pack_6_10-bytes6-bytes10-: xref:utils.adoc#Packing-pack_6_10-bytes6-bytes10-
  587. :xref-Packing-pack_6_16-bytes6-bytes16-: xref:utils.adoc#Packing-pack_6_16-bytes6-bytes16-
  588. :xref-Packing-pack_6_22-bytes6-bytes22-: xref:utils.adoc#Packing-pack_6_22-bytes6-bytes22-
  589. :xref-Packing-pack_8_2-bytes8-bytes2-: xref:utils.adoc#Packing-pack_8_2-bytes8-bytes2-
  590. :xref-Packing-pack_8_4-bytes8-bytes4-: xref:utils.adoc#Packing-pack_8_4-bytes8-bytes4-
  591. :xref-Packing-pack_8_8-bytes8-bytes8-: xref:utils.adoc#Packing-pack_8_8-bytes8-bytes8-
  592. :xref-Packing-pack_8_12-bytes8-bytes12-: xref:utils.adoc#Packing-pack_8_12-bytes8-bytes12-
  593. :xref-Packing-pack_8_16-bytes8-bytes16-: xref:utils.adoc#Packing-pack_8_16-bytes8-bytes16-
  594. :xref-Packing-pack_8_20-bytes8-bytes20-: xref:utils.adoc#Packing-pack_8_20-bytes8-bytes20-
  595. :xref-Packing-pack_8_24-bytes8-bytes24-: xref:utils.adoc#Packing-pack_8_24-bytes8-bytes24-
  596. :xref-Packing-pack_10_2-bytes10-bytes2-: xref:utils.adoc#Packing-pack_10_2-bytes10-bytes2-
  597. :xref-Packing-pack_10_6-bytes10-bytes6-: xref:utils.adoc#Packing-pack_10_6-bytes10-bytes6-
  598. :xref-Packing-pack_10_10-bytes10-bytes10-: xref:utils.adoc#Packing-pack_10_10-bytes10-bytes10-
  599. :xref-Packing-pack_10_12-bytes10-bytes12-: xref:utils.adoc#Packing-pack_10_12-bytes10-bytes12-
  600. :xref-Packing-pack_10_22-bytes10-bytes22-: xref:utils.adoc#Packing-pack_10_22-bytes10-bytes22-
  601. :xref-Packing-pack_12_4-bytes12-bytes4-: xref:utils.adoc#Packing-pack_12_4-bytes12-bytes4-
  602. :xref-Packing-pack_12_8-bytes12-bytes8-: xref:utils.adoc#Packing-pack_12_8-bytes12-bytes8-
  603. :xref-Packing-pack_12_10-bytes12-bytes10-: xref:utils.adoc#Packing-pack_12_10-bytes12-bytes10-
  604. :xref-Packing-pack_12_12-bytes12-bytes12-: xref:utils.adoc#Packing-pack_12_12-bytes12-bytes12-
  605. :xref-Packing-pack_12_16-bytes12-bytes16-: xref:utils.adoc#Packing-pack_12_16-bytes12-bytes16-
  606. :xref-Packing-pack_12_20-bytes12-bytes20-: xref:utils.adoc#Packing-pack_12_20-bytes12-bytes20-
  607. :xref-Packing-pack_16_4-bytes16-bytes4-: xref:utils.adoc#Packing-pack_16_4-bytes16-bytes4-
  608. :xref-Packing-pack_16_6-bytes16-bytes6-: xref:utils.adoc#Packing-pack_16_6-bytes16-bytes6-
  609. :xref-Packing-pack_16_8-bytes16-bytes8-: xref:utils.adoc#Packing-pack_16_8-bytes16-bytes8-
  610. :xref-Packing-pack_16_12-bytes16-bytes12-: xref:utils.adoc#Packing-pack_16_12-bytes16-bytes12-
  611. :xref-Packing-pack_16_16-bytes16-bytes16-: xref:utils.adoc#Packing-pack_16_16-bytes16-bytes16-
  612. :xref-Packing-pack_20_2-bytes20-bytes2-: xref:utils.adoc#Packing-pack_20_2-bytes20-bytes2-
  613. :xref-Packing-pack_20_4-bytes20-bytes4-: xref:utils.adoc#Packing-pack_20_4-bytes20-bytes4-
  614. :xref-Packing-pack_20_8-bytes20-bytes8-: xref:utils.adoc#Packing-pack_20_8-bytes20-bytes8-
  615. :xref-Packing-pack_20_12-bytes20-bytes12-: xref:utils.adoc#Packing-pack_20_12-bytes20-bytes12-
  616. :xref-Packing-pack_22_2-bytes22-bytes2-: xref:utils.adoc#Packing-pack_22_2-bytes22-bytes2-
  617. :xref-Packing-pack_22_6-bytes22-bytes6-: xref:utils.adoc#Packing-pack_22_6-bytes22-bytes6-
  618. :xref-Packing-pack_22_10-bytes22-bytes10-: xref:utils.adoc#Packing-pack_22_10-bytes22-bytes10-
  619. :xref-Packing-pack_24_4-bytes24-bytes4-: xref:utils.adoc#Packing-pack_24_4-bytes24-bytes4-
  620. :xref-Packing-pack_24_8-bytes24-bytes8-: xref:utils.adoc#Packing-pack_24_8-bytes24-bytes8-
  621. :xref-Packing-pack_28_4-bytes28-bytes4-: xref:utils.adoc#Packing-pack_28_4-bytes28-bytes4-
  622. :xref-Packing-extract_2_1-bytes2-uint8-: xref:utils.adoc#Packing-extract_2_1-bytes2-uint8-
  623. :xref-Packing-replace_2_1-bytes2-bytes1-uint8-: xref:utils.adoc#Packing-replace_2_1-bytes2-bytes1-uint8-
  624. :xref-Packing-extract_4_1-bytes4-uint8-: xref:utils.adoc#Packing-extract_4_1-bytes4-uint8-
  625. :xref-Packing-replace_4_1-bytes4-bytes1-uint8-: xref:utils.adoc#Packing-replace_4_1-bytes4-bytes1-uint8-
  626. :xref-Packing-extract_4_2-bytes4-uint8-: xref:utils.adoc#Packing-extract_4_2-bytes4-uint8-
  627. :xref-Packing-replace_4_2-bytes4-bytes2-uint8-: xref:utils.adoc#Packing-replace_4_2-bytes4-bytes2-uint8-
  628. :xref-Packing-extract_6_1-bytes6-uint8-: xref:utils.adoc#Packing-extract_6_1-bytes6-uint8-
  629. :xref-Packing-replace_6_1-bytes6-bytes1-uint8-: xref:utils.adoc#Packing-replace_6_1-bytes6-bytes1-uint8-
  630. :xref-Packing-extract_6_2-bytes6-uint8-: xref:utils.adoc#Packing-extract_6_2-bytes6-uint8-
  631. :xref-Packing-replace_6_2-bytes6-bytes2-uint8-: xref:utils.adoc#Packing-replace_6_2-bytes6-bytes2-uint8-
  632. :xref-Packing-extract_6_4-bytes6-uint8-: xref:utils.adoc#Packing-extract_6_4-bytes6-uint8-
  633. :xref-Packing-replace_6_4-bytes6-bytes4-uint8-: xref:utils.adoc#Packing-replace_6_4-bytes6-bytes4-uint8-
  634. :xref-Packing-extract_8_1-bytes8-uint8-: xref:utils.adoc#Packing-extract_8_1-bytes8-uint8-
  635. :xref-Packing-replace_8_1-bytes8-bytes1-uint8-: xref:utils.adoc#Packing-replace_8_1-bytes8-bytes1-uint8-
  636. :xref-Packing-extract_8_2-bytes8-uint8-: xref:utils.adoc#Packing-extract_8_2-bytes8-uint8-
  637. :xref-Packing-replace_8_2-bytes8-bytes2-uint8-: xref:utils.adoc#Packing-replace_8_2-bytes8-bytes2-uint8-
  638. :xref-Packing-extract_8_4-bytes8-uint8-: xref:utils.adoc#Packing-extract_8_4-bytes8-uint8-
  639. :xref-Packing-replace_8_4-bytes8-bytes4-uint8-: xref:utils.adoc#Packing-replace_8_4-bytes8-bytes4-uint8-
  640. :xref-Packing-extract_8_6-bytes8-uint8-: xref:utils.adoc#Packing-extract_8_6-bytes8-uint8-
  641. :xref-Packing-replace_8_6-bytes8-bytes6-uint8-: xref:utils.adoc#Packing-replace_8_6-bytes8-bytes6-uint8-
  642. :xref-Packing-extract_10_1-bytes10-uint8-: xref:utils.adoc#Packing-extract_10_1-bytes10-uint8-
  643. :xref-Packing-replace_10_1-bytes10-bytes1-uint8-: xref:utils.adoc#Packing-replace_10_1-bytes10-bytes1-uint8-
  644. :xref-Packing-extract_10_2-bytes10-uint8-: xref:utils.adoc#Packing-extract_10_2-bytes10-uint8-
  645. :xref-Packing-replace_10_2-bytes10-bytes2-uint8-: xref:utils.adoc#Packing-replace_10_2-bytes10-bytes2-uint8-
  646. :xref-Packing-extract_10_4-bytes10-uint8-: xref:utils.adoc#Packing-extract_10_4-bytes10-uint8-
  647. :xref-Packing-replace_10_4-bytes10-bytes4-uint8-: xref:utils.adoc#Packing-replace_10_4-bytes10-bytes4-uint8-
  648. :xref-Packing-extract_10_6-bytes10-uint8-: xref:utils.adoc#Packing-extract_10_6-bytes10-uint8-
  649. :xref-Packing-replace_10_6-bytes10-bytes6-uint8-: xref:utils.adoc#Packing-replace_10_6-bytes10-bytes6-uint8-
  650. :xref-Packing-extract_10_8-bytes10-uint8-: xref:utils.adoc#Packing-extract_10_8-bytes10-uint8-
  651. :xref-Packing-replace_10_8-bytes10-bytes8-uint8-: xref:utils.adoc#Packing-replace_10_8-bytes10-bytes8-uint8-
  652. :xref-Packing-extract_12_1-bytes12-uint8-: xref:utils.adoc#Packing-extract_12_1-bytes12-uint8-
  653. :xref-Packing-replace_12_1-bytes12-bytes1-uint8-: xref:utils.adoc#Packing-replace_12_1-bytes12-bytes1-uint8-
  654. :xref-Packing-extract_12_2-bytes12-uint8-: xref:utils.adoc#Packing-extract_12_2-bytes12-uint8-
  655. :xref-Packing-replace_12_2-bytes12-bytes2-uint8-: xref:utils.adoc#Packing-replace_12_2-bytes12-bytes2-uint8-
  656. :xref-Packing-extract_12_4-bytes12-uint8-: xref:utils.adoc#Packing-extract_12_4-bytes12-uint8-
  657. :xref-Packing-replace_12_4-bytes12-bytes4-uint8-: xref:utils.adoc#Packing-replace_12_4-bytes12-bytes4-uint8-
  658. :xref-Packing-extract_12_6-bytes12-uint8-: xref:utils.adoc#Packing-extract_12_6-bytes12-uint8-
  659. :xref-Packing-replace_12_6-bytes12-bytes6-uint8-: xref:utils.adoc#Packing-replace_12_6-bytes12-bytes6-uint8-
  660. :xref-Packing-extract_12_8-bytes12-uint8-: xref:utils.adoc#Packing-extract_12_8-bytes12-uint8-
  661. :xref-Packing-replace_12_8-bytes12-bytes8-uint8-: xref:utils.adoc#Packing-replace_12_8-bytes12-bytes8-uint8-
  662. :xref-Packing-extract_12_10-bytes12-uint8-: xref:utils.adoc#Packing-extract_12_10-bytes12-uint8-
  663. :xref-Packing-replace_12_10-bytes12-bytes10-uint8-: xref:utils.adoc#Packing-replace_12_10-bytes12-bytes10-uint8-
  664. :xref-Packing-extract_16_1-bytes16-uint8-: xref:utils.adoc#Packing-extract_16_1-bytes16-uint8-
  665. :xref-Packing-replace_16_1-bytes16-bytes1-uint8-: xref:utils.adoc#Packing-replace_16_1-bytes16-bytes1-uint8-
  666. :xref-Packing-extract_16_2-bytes16-uint8-: xref:utils.adoc#Packing-extract_16_2-bytes16-uint8-
  667. :xref-Packing-replace_16_2-bytes16-bytes2-uint8-: xref:utils.adoc#Packing-replace_16_2-bytes16-bytes2-uint8-
  668. :xref-Packing-extract_16_4-bytes16-uint8-: xref:utils.adoc#Packing-extract_16_4-bytes16-uint8-
  669. :xref-Packing-replace_16_4-bytes16-bytes4-uint8-: xref:utils.adoc#Packing-replace_16_4-bytes16-bytes4-uint8-
  670. :xref-Packing-extract_16_6-bytes16-uint8-: xref:utils.adoc#Packing-extract_16_6-bytes16-uint8-
  671. :xref-Packing-replace_16_6-bytes16-bytes6-uint8-: xref:utils.adoc#Packing-replace_16_6-bytes16-bytes6-uint8-
  672. :xref-Packing-extract_16_8-bytes16-uint8-: xref:utils.adoc#Packing-extract_16_8-bytes16-uint8-
  673. :xref-Packing-replace_16_8-bytes16-bytes8-uint8-: xref:utils.adoc#Packing-replace_16_8-bytes16-bytes8-uint8-
  674. :xref-Packing-extract_16_10-bytes16-uint8-: xref:utils.adoc#Packing-extract_16_10-bytes16-uint8-
  675. :xref-Packing-replace_16_10-bytes16-bytes10-uint8-: xref:utils.adoc#Packing-replace_16_10-bytes16-bytes10-uint8-
  676. :xref-Packing-extract_16_12-bytes16-uint8-: xref:utils.adoc#Packing-extract_16_12-bytes16-uint8-
  677. :xref-Packing-replace_16_12-bytes16-bytes12-uint8-: xref:utils.adoc#Packing-replace_16_12-bytes16-bytes12-uint8-
  678. :xref-Packing-extract_20_1-bytes20-uint8-: xref:utils.adoc#Packing-extract_20_1-bytes20-uint8-
  679. :xref-Packing-replace_20_1-bytes20-bytes1-uint8-: xref:utils.adoc#Packing-replace_20_1-bytes20-bytes1-uint8-
  680. :xref-Packing-extract_20_2-bytes20-uint8-: xref:utils.adoc#Packing-extract_20_2-bytes20-uint8-
  681. :xref-Packing-replace_20_2-bytes20-bytes2-uint8-: xref:utils.adoc#Packing-replace_20_2-bytes20-bytes2-uint8-
  682. :xref-Packing-extract_20_4-bytes20-uint8-: xref:utils.adoc#Packing-extract_20_4-bytes20-uint8-
  683. :xref-Packing-replace_20_4-bytes20-bytes4-uint8-: xref:utils.adoc#Packing-replace_20_4-bytes20-bytes4-uint8-
  684. :xref-Packing-extract_20_6-bytes20-uint8-: xref:utils.adoc#Packing-extract_20_6-bytes20-uint8-
  685. :xref-Packing-replace_20_6-bytes20-bytes6-uint8-: xref:utils.adoc#Packing-replace_20_6-bytes20-bytes6-uint8-
  686. :xref-Packing-extract_20_8-bytes20-uint8-: xref:utils.adoc#Packing-extract_20_8-bytes20-uint8-
  687. :xref-Packing-replace_20_8-bytes20-bytes8-uint8-: xref:utils.adoc#Packing-replace_20_8-bytes20-bytes8-uint8-
  688. :xref-Packing-extract_20_10-bytes20-uint8-: xref:utils.adoc#Packing-extract_20_10-bytes20-uint8-
  689. :xref-Packing-replace_20_10-bytes20-bytes10-uint8-: xref:utils.adoc#Packing-replace_20_10-bytes20-bytes10-uint8-
  690. :xref-Packing-extract_20_12-bytes20-uint8-: xref:utils.adoc#Packing-extract_20_12-bytes20-uint8-
  691. :xref-Packing-replace_20_12-bytes20-bytes12-uint8-: xref:utils.adoc#Packing-replace_20_12-bytes20-bytes12-uint8-
  692. :xref-Packing-extract_20_16-bytes20-uint8-: xref:utils.adoc#Packing-extract_20_16-bytes20-uint8-
  693. :xref-Packing-replace_20_16-bytes20-bytes16-uint8-: xref:utils.adoc#Packing-replace_20_16-bytes20-bytes16-uint8-
  694. :xref-Packing-extract_22_1-bytes22-uint8-: xref:utils.adoc#Packing-extract_22_1-bytes22-uint8-
  695. :xref-Packing-replace_22_1-bytes22-bytes1-uint8-: xref:utils.adoc#Packing-replace_22_1-bytes22-bytes1-uint8-
  696. :xref-Packing-extract_22_2-bytes22-uint8-: xref:utils.adoc#Packing-extract_22_2-bytes22-uint8-
  697. :xref-Packing-replace_22_2-bytes22-bytes2-uint8-: xref:utils.adoc#Packing-replace_22_2-bytes22-bytes2-uint8-
  698. :xref-Packing-extract_22_4-bytes22-uint8-: xref:utils.adoc#Packing-extract_22_4-bytes22-uint8-
  699. :xref-Packing-replace_22_4-bytes22-bytes4-uint8-: xref:utils.adoc#Packing-replace_22_4-bytes22-bytes4-uint8-
  700. :xref-Packing-extract_22_6-bytes22-uint8-: xref:utils.adoc#Packing-extract_22_6-bytes22-uint8-
  701. :xref-Packing-replace_22_6-bytes22-bytes6-uint8-: xref:utils.adoc#Packing-replace_22_6-bytes22-bytes6-uint8-
  702. :xref-Packing-extract_22_8-bytes22-uint8-: xref:utils.adoc#Packing-extract_22_8-bytes22-uint8-
  703. :xref-Packing-replace_22_8-bytes22-bytes8-uint8-: xref:utils.adoc#Packing-replace_22_8-bytes22-bytes8-uint8-
  704. :xref-Packing-extract_22_10-bytes22-uint8-: xref:utils.adoc#Packing-extract_22_10-bytes22-uint8-
  705. :xref-Packing-replace_22_10-bytes22-bytes10-uint8-: xref:utils.adoc#Packing-replace_22_10-bytes22-bytes10-uint8-
  706. :xref-Packing-extract_22_12-bytes22-uint8-: xref:utils.adoc#Packing-extract_22_12-bytes22-uint8-
  707. :xref-Packing-replace_22_12-bytes22-bytes12-uint8-: xref:utils.adoc#Packing-replace_22_12-bytes22-bytes12-uint8-
  708. :xref-Packing-extract_22_16-bytes22-uint8-: xref:utils.adoc#Packing-extract_22_16-bytes22-uint8-
  709. :xref-Packing-replace_22_16-bytes22-bytes16-uint8-: xref:utils.adoc#Packing-replace_22_16-bytes22-bytes16-uint8-
  710. :xref-Packing-extract_22_20-bytes22-uint8-: xref:utils.adoc#Packing-extract_22_20-bytes22-uint8-
  711. :xref-Packing-replace_22_20-bytes22-bytes20-uint8-: xref:utils.adoc#Packing-replace_22_20-bytes22-bytes20-uint8-
  712. :xref-Packing-extract_24_1-bytes24-uint8-: xref:utils.adoc#Packing-extract_24_1-bytes24-uint8-
  713. :xref-Packing-replace_24_1-bytes24-bytes1-uint8-: xref:utils.adoc#Packing-replace_24_1-bytes24-bytes1-uint8-
  714. :xref-Packing-extract_24_2-bytes24-uint8-: xref:utils.adoc#Packing-extract_24_2-bytes24-uint8-
  715. :xref-Packing-replace_24_2-bytes24-bytes2-uint8-: xref:utils.adoc#Packing-replace_24_2-bytes24-bytes2-uint8-
  716. :xref-Packing-extract_24_4-bytes24-uint8-: xref:utils.adoc#Packing-extract_24_4-bytes24-uint8-
  717. :xref-Packing-replace_24_4-bytes24-bytes4-uint8-: xref:utils.adoc#Packing-replace_24_4-bytes24-bytes4-uint8-
  718. :xref-Packing-extract_24_6-bytes24-uint8-: xref:utils.adoc#Packing-extract_24_6-bytes24-uint8-
  719. :xref-Packing-replace_24_6-bytes24-bytes6-uint8-: xref:utils.adoc#Packing-replace_24_6-bytes24-bytes6-uint8-
  720. :xref-Packing-extract_24_8-bytes24-uint8-: xref:utils.adoc#Packing-extract_24_8-bytes24-uint8-
  721. :xref-Packing-replace_24_8-bytes24-bytes8-uint8-: xref:utils.adoc#Packing-replace_24_8-bytes24-bytes8-uint8-
  722. :xref-Packing-extract_24_10-bytes24-uint8-: xref:utils.adoc#Packing-extract_24_10-bytes24-uint8-
  723. :xref-Packing-replace_24_10-bytes24-bytes10-uint8-: xref:utils.adoc#Packing-replace_24_10-bytes24-bytes10-uint8-
  724. :xref-Packing-extract_24_12-bytes24-uint8-: xref:utils.adoc#Packing-extract_24_12-bytes24-uint8-
  725. :xref-Packing-replace_24_12-bytes24-bytes12-uint8-: xref:utils.adoc#Packing-replace_24_12-bytes24-bytes12-uint8-
  726. :xref-Packing-extract_24_16-bytes24-uint8-: xref:utils.adoc#Packing-extract_24_16-bytes24-uint8-
  727. :xref-Packing-replace_24_16-bytes24-bytes16-uint8-: xref:utils.adoc#Packing-replace_24_16-bytes24-bytes16-uint8-
  728. :xref-Packing-extract_24_20-bytes24-uint8-: xref:utils.adoc#Packing-extract_24_20-bytes24-uint8-
  729. :xref-Packing-replace_24_20-bytes24-bytes20-uint8-: xref:utils.adoc#Packing-replace_24_20-bytes24-bytes20-uint8-
  730. :xref-Packing-extract_24_22-bytes24-uint8-: xref:utils.adoc#Packing-extract_24_22-bytes24-uint8-
  731. :xref-Packing-replace_24_22-bytes24-bytes22-uint8-: xref:utils.adoc#Packing-replace_24_22-bytes24-bytes22-uint8-
  732. :xref-Packing-extract_28_1-bytes28-uint8-: xref:utils.adoc#Packing-extract_28_1-bytes28-uint8-
  733. :xref-Packing-replace_28_1-bytes28-bytes1-uint8-: xref:utils.adoc#Packing-replace_28_1-bytes28-bytes1-uint8-
  734. :xref-Packing-extract_28_2-bytes28-uint8-: xref:utils.adoc#Packing-extract_28_2-bytes28-uint8-
  735. :xref-Packing-replace_28_2-bytes28-bytes2-uint8-: xref:utils.adoc#Packing-replace_28_2-bytes28-bytes2-uint8-
  736. :xref-Packing-extract_28_4-bytes28-uint8-: xref:utils.adoc#Packing-extract_28_4-bytes28-uint8-
  737. :xref-Packing-replace_28_4-bytes28-bytes4-uint8-: xref:utils.adoc#Packing-replace_28_4-bytes28-bytes4-uint8-
  738. :xref-Packing-extract_28_6-bytes28-uint8-: xref:utils.adoc#Packing-extract_28_6-bytes28-uint8-
  739. :xref-Packing-replace_28_6-bytes28-bytes6-uint8-: xref:utils.adoc#Packing-replace_28_6-bytes28-bytes6-uint8-
  740. :xref-Packing-extract_28_8-bytes28-uint8-: xref:utils.adoc#Packing-extract_28_8-bytes28-uint8-
  741. :xref-Packing-replace_28_8-bytes28-bytes8-uint8-: xref:utils.adoc#Packing-replace_28_8-bytes28-bytes8-uint8-
  742. :xref-Packing-extract_28_10-bytes28-uint8-: xref:utils.adoc#Packing-extract_28_10-bytes28-uint8-
  743. :xref-Packing-replace_28_10-bytes28-bytes10-uint8-: xref:utils.adoc#Packing-replace_28_10-bytes28-bytes10-uint8-
  744. :xref-Packing-extract_28_12-bytes28-uint8-: xref:utils.adoc#Packing-extract_28_12-bytes28-uint8-
  745. :xref-Packing-replace_28_12-bytes28-bytes12-uint8-: xref:utils.adoc#Packing-replace_28_12-bytes28-bytes12-uint8-
  746. :xref-Packing-extract_28_16-bytes28-uint8-: xref:utils.adoc#Packing-extract_28_16-bytes28-uint8-
  747. :xref-Packing-replace_28_16-bytes28-bytes16-uint8-: xref:utils.adoc#Packing-replace_28_16-bytes28-bytes16-uint8-
  748. :xref-Packing-extract_28_20-bytes28-uint8-: xref:utils.adoc#Packing-extract_28_20-bytes28-uint8-
  749. :xref-Packing-replace_28_20-bytes28-bytes20-uint8-: xref:utils.adoc#Packing-replace_28_20-bytes28-bytes20-uint8-
  750. :xref-Packing-extract_28_22-bytes28-uint8-: xref:utils.adoc#Packing-extract_28_22-bytes28-uint8-
  751. :xref-Packing-replace_28_22-bytes28-bytes22-uint8-: xref:utils.adoc#Packing-replace_28_22-bytes28-bytes22-uint8-
  752. :xref-Packing-extract_28_24-bytes28-uint8-: xref:utils.adoc#Packing-extract_28_24-bytes28-uint8-
  753. :xref-Packing-replace_28_24-bytes28-bytes24-uint8-: xref:utils.adoc#Packing-replace_28_24-bytes28-bytes24-uint8-
  754. :xref-Packing-extract_32_1-bytes32-uint8-: xref:utils.adoc#Packing-extract_32_1-bytes32-uint8-
  755. :xref-Packing-replace_32_1-bytes32-bytes1-uint8-: xref:utils.adoc#Packing-replace_32_1-bytes32-bytes1-uint8-
  756. :xref-Packing-extract_32_2-bytes32-uint8-: xref:utils.adoc#Packing-extract_32_2-bytes32-uint8-
  757. :xref-Packing-replace_32_2-bytes32-bytes2-uint8-: xref:utils.adoc#Packing-replace_32_2-bytes32-bytes2-uint8-
  758. :xref-Packing-extract_32_4-bytes32-uint8-: xref:utils.adoc#Packing-extract_32_4-bytes32-uint8-
  759. :xref-Packing-replace_32_4-bytes32-bytes4-uint8-: xref:utils.adoc#Packing-replace_32_4-bytes32-bytes4-uint8-
  760. :xref-Packing-extract_32_6-bytes32-uint8-: xref:utils.adoc#Packing-extract_32_6-bytes32-uint8-
  761. :xref-Packing-replace_32_6-bytes32-bytes6-uint8-: xref:utils.adoc#Packing-replace_32_6-bytes32-bytes6-uint8-
  762. :xref-Packing-extract_32_8-bytes32-uint8-: xref:utils.adoc#Packing-extract_32_8-bytes32-uint8-
  763. :xref-Packing-replace_32_8-bytes32-bytes8-uint8-: xref:utils.adoc#Packing-replace_32_8-bytes32-bytes8-uint8-
  764. :xref-Packing-extract_32_10-bytes32-uint8-: xref:utils.adoc#Packing-extract_32_10-bytes32-uint8-
  765. :xref-Packing-replace_32_10-bytes32-bytes10-uint8-: xref:utils.adoc#Packing-replace_32_10-bytes32-bytes10-uint8-
  766. :xref-Packing-extract_32_12-bytes32-uint8-: xref:utils.adoc#Packing-extract_32_12-bytes32-uint8-
  767. :xref-Packing-replace_32_12-bytes32-bytes12-uint8-: xref:utils.adoc#Packing-replace_32_12-bytes32-bytes12-uint8-
  768. :xref-Packing-extract_32_16-bytes32-uint8-: xref:utils.adoc#Packing-extract_32_16-bytes32-uint8-
  769. :xref-Packing-replace_32_16-bytes32-bytes16-uint8-: xref:utils.adoc#Packing-replace_32_16-bytes32-bytes16-uint8-
  770. :xref-Packing-extract_32_20-bytes32-uint8-: xref:utils.adoc#Packing-extract_32_20-bytes32-uint8-
  771. :xref-Packing-replace_32_20-bytes32-bytes20-uint8-: xref:utils.adoc#Packing-replace_32_20-bytes32-bytes20-uint8-
  772. :xref-Packing-extract_32_22-bytes32-uint8-: xref:utils.adoc#Packing-extract_32_22-bytes32-uint8-
  773. :xref-Packing-replace_32_22-bytes32-bytes22-uint8-: xref:utils.adoc#Packing-replace_32_22-bytes32-bytes22-uint8-
  774. :xref-Packing-extract_32_24-bytes32-uint8-: xref:utils.adoc#Packing-extract_32_24-bytes32-uint8-
  775. :xref-Packing-replace_32_24-bytes32-bytes24-uint8-: xref:utils.adoc#Packing-replace_32_24-bytes32-bytes24-uint8-
  776. :xref-Packing-extract_32_28-bytes32-uint8-: xref:utils.adoc#Packing-extract_32_28-bytes32-uint8-
  777. :xref-Packing-replace_32_28-bytes32-bytes28-uint8-: xref:utils.adoc#Packing-replace_32_28-bytes32-bytes28-uint8-
  778. :xref-Packing-OutOfRangeAccess--: xref:utils.adoc#Packing-OutOfRangeAccess--
  779. :xref-Panic-panic-uint256-: xref:utils.adoc#Panic-panic-uint256-
  780. :xref-Panic-GENERIC-uint256: xref:utils.adoc#Panic-GENERIC-uint256
  781. :xref-Panic-ASSERT-uint256: xref:utils.adoc#Panic-ASSERT-uint256
  782. :xref-Panic-UNDER_OVERFLOW-uint256: xref:utils.adoc#Panic-UNDER_OVERFLOW-uint256
  783. :xref-Panic-DIVISION_BY_ZERO-uint256: xref:utils.adoc#Panic-DIVISION_BY_ZERO-uint256
  784. :xref-Panic-ENUM_CONVERSION_ERROR-uint256: xref:utils.adoc#Panic-ENUM_CONVERSION_ERROR-uint256
  785. :xref-Panic-STORAGE_ENCODING_ERROR-uint256: xref:utils.adoc#Panic-STORAGE_ENCODING_ERROR-uint256
  786. :xref-Panic-EMPTY_ARRAY_POP-uint256: xref:utils.adoc#Panic-EMPTY_ARRAY_POP-uint256
  787. :xref-Panic-ARRAY_OUT_OF_BOUNDS-uint256: xref:utils.adoc#Panic-ARRAY_OUT_OF_BOUNDS-uint256
  788. :xref-Panic-RESOURCE_ERROR-uint256: xref:utils.adoc#Panic-RESOURCE_ERROR-uint256
  789. :xref-Panic-INVALID_INTERNAL_FUNCTION-uint256: xref:utils.adoc#Panic-INVALID_INTERNAL_FUNCTION-uint256
  790. :xref-Comparators-lt-uint256-uint256-: xref:utils.adoc#Comparators-lt-uint256-uint256-
  791. :xref-Comparators-gt-uint256-uint256-: xref:utils.adoc#Comparators-gt-uint256-uint256-
  792. :xref-CAIP2-local--: xref:utils.adoc#CAIP2-local--
  793. :xref-CAIP2-format-string-string-: xref:utils.adoc#CAIP2-format-string-string-
  794. :xref-CAIP2-parse-string-: xref:utils.adoc#CAIP2-parse-string-
  795. :CAIP2: pass:normal[xref:utils.adoc#CAIP2[`CAIP2`]]
  796. :Strings-toChecksumHexString: pass:normal[xref:utils.adoc#Strings-toChecksumHexString-address-[`Strings.toChecksumHexString`]]
  797. :xref-CAIP10-local-address-: xref:utils.adoc#CAIP10-local-address-
  798. :xref-CAIP10-format-string-string-: xref:utils.adoc#CAIP10-format-string-string-
  799. :xref-CAIP10-parse-string-: xref:utils.adoc#CAIP10-parse-string-
  800. :CAIP2: pass:normal[xref:utils.adoc#CAIP2[`CAIP2`]]
  801. :xref-Blockhash-blockHash-uint256-: xref:utils.adoc#Blockhash-blockHash-uint256-
  802. :xref-Blockhash-HISTORY_STORAGE_ADDRESS-address: xref:utils.adoc#Blockhash-HISTORY_STORAGE_ADDRESS-address
  803. :xref-Time-timestamp--: xref:utils.adoc#Time-timestamp--
  804. :xref-Time-blockNumber--: xref:utils.adoc#Time-blockNumber--
  805. :xref-Time-toDelay-uint32-: xref:utils.adoc#Time-toDelay-uint32-
  806. :xref-Time-getFull-Time-Delay-: xref:utils.adoc#Time-getFull-Time-Delay-
  807. :xref-Time-get-Time-Delay-: xref:utils.adoc#Time-get-Time-Delay-
  808. :xref-Time-withUpdate-Time-Delay-uint32-uint32-: xref:utils.adoc#Time-withUpdate-Time-Delay-uint32-uint32-
  809. :xref-Time-unpack-Time-Delay-: xref:utils.adoc#Time-unpack-Time-Delay-
  810. :xref-Time-pack-uint32-uint32-uint48-: xref:utils.adoc#Time-pack-uint32-uint32-uint48-
  811. = Utilities
  812. [.readme-notice]
  813. NOTE: This document is better viewed at https://docs.openzeppelin.com/contracts/api/utils
  814. Miscellaneous contracts and libraries containing utility functions you can use to improve security, work with new data types, or safely use low-level primitives.
  815. * {Math}, {SignedMath}: Implementation of various arithmetic functions.
  816. * {SafeCast}: Checked downcasting functions to avoid silent truncation.
  817. * {ReentrancyGuard}: A modifier that can prevent reentrancy during certain functions.
  818. * {ReentrancyGuardTransient}: Variant of {ReentrancyGuard} that uses transient storage (https://eips.ethereum.org/EIPS/eip-1153[EIP-1153]).
  819. * {Pausable}: A common emergency response mechanism that can pause functionality while a remediation is pending.
  820. * {Nonces}: Utility for tracking and verifying address nonces that only increment.
  821. * {NoncesKeyed}: Alternative to {Nonces}, that support keyed nonces following https://eips.ethereum.org/EIPS/eip-4337#semi-abstracted-nonce-support[ERC-4337 specifications].
  822. * {ERC165}, {ERC165Checker}: Utilities for inspecting interfaces supported by contracts.
  823. * {BitMaps}: A simple library to manage boolean value mapped to a numerical index in an efficient way.
  824. * {EnumerableMap}: A type like Solidity's https://solidity.readthedocs.io/en/latest/types.html#mapping-types[`mapping`], but with key-value _enumeration_: this will let you know how many entries a mapping has, and iterate over them (which is not possible with `mapping`).
  825. * {EnumerableSet}: Like {EnumerableMap}, but for https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets]. Can be used to store privileged accounts, issued IDs, etc.
  826. * {DoubleEndedQueue}: An implementation of a https://en.wikipedia.org/wiki/Double-ended_queue[double ended queue] whose values can be added or removed from both sides. Useful for FIFO and LIFO structures.
  827. * {CircularBuffer}: A data structure to store the last N values pushed to it.
  828. * {Checkpoints}: A data structure to store values mapped to a strictly increasing key. Can be used for storing and accessing values over time.
  829. * {Heap}: A library that implements a https://en.wikipedia.org/wiki/Binary_heap[binary heap] in storage.
  830. * {MerkleTree}: A library with https://wikipedia.org/wiki/Merkle_Tree[Merkle Tree] data structures and helper functions.
  831. * {Create2}: Wrapper around the https://blog.openzeppelin.com/getting-the-most-out-of-create2/[`CREATE2` EVM opcode] for safe use without having to deal with low-level assembly.
  832. * {Address}: Collection of functions for overloading Solidity's https://docs.soliditylang.org/en/latest/types.html#address[`address`] type.
  833. * {Arrays}: Collection of functions that operate on https://docs.soliditylang.org/en/latest/types.html#arrays[`arrays`].
  834. * {Base64}: On-chain base64 and base64URL encoding according to https://datatracker.ietf.org/doc/html/rfc4648[RFC-4648].
  835. * {Bytes}: Common operations on bytes objects.
  836. * {Calldata}: Helpers for manipulating calldata.
  837. * {Strings}: Common operations for strings formatting.
  838. * {ShortStrings}: Library to encode (and decode) short strings into (or from) a single bytes32 slot for optimizing costs. Short strings are limited to 31 characters.
  839. * {SlotDerivation}: Methods for deriving storage slot from ERC-7201 namespaces as well as from constructions such as mapping and arrays.
  840. * {StorageSlot}: Methods for accessing specific storage slots formatted as common primitive types.
  841. * {TransientSlot}: Primitives for reading from and writing to transient storage (only value types are currently supported).
  842. * {Multicall}: Abstract contract with a utility to allow batching together multiple calls in a single transaction. Useful for allowing EOAs to perform multiple operations at once.
  843. * {Context}: A utility for abstracting the sender and calldata in the current execution context.
  844. * {Packing}: A library for packing and unpacking multiple values into bytes32
  845. * {Panic}: A library to revert with https://docs.soliditylang.org/en/v0.8.20/control-structures.html#panic-via-assert-and-error-via-require[Solidity panic codes].
  846. * {Comparators}: A library that contains comparator functions to use with the {Heap} library.
  847. * {CAIP2}, {CAIP10}: Libraries for formatting and parsing CAIP-2 and CAIP-10 identifiers.
  848. * {Blockhash}: A library for accessing historical block hashes beyond the standard 256 block limit utilizing EIP-2935's historical blockhash functionality.
  849. * {Time}: A library that provides helpers for manipulating time-related objects, including a `Delay` type.
  850. [NOTE]
  851. ====
  852. Because Solidity does not support generic types, {EnumerableMap} and {EnumerableSet} are specialized to a limited number of key-value types.
  853. ====
  854. == Math
  855. :Rounding: pass:normal[xref:#Math-Rounding[`++Rounding++`]]
  856. :add512: pass:normal[xref:#Math-add512-uint256-uint256-[`++add512++`]]
  857. :mul512: pass:normal[xref:#Math-mul512-uint256-uint256-[`++mul512++`]]
  858. :tryAdd: pass:normal[xref:#Math-tryAdd-uint256-uint256-[`++tryAdd++`]]
  859. :trySub: pass:normal[xref:#Math-trySub-uint256-uint256-[`++trySub++`]]
  860. :tryMul: pass:normal[xref:#Math-tryMul-uint256-uint256-[`++tryMul++`]]
  861. :tryDiv: pass:normal[xref:#Math-tryDiv-uint256-uint256-[`++tryDiv++`]]
  862. :tryMod: pass:normal[xref:#Math-tryMod-uint256-uint256-[`++tryMod++`]]
  863. :saturatingAdd: pass:normal[xref:#Math-saturatingAdd-uint256-uint256-[`++saturatingAdd++`]]
  864. :saturatingSub: pass:normal[xref:#Math-saturatingSub-uint256-uint256-[`++saturatingSub++`]]
  865. :saturatingMul: pass:normal[xref:#Math-saturatingMul-uint256-uint256-[`++saturatingMul++`]]
  866. :ternary: pass:normal[xref:#Math-ternary-bool-uint256-uint256-[`++ternary++`]]
  867. :max: pass:normal[xref:#Math-max-uint256-uint256-[`++max++`]]
  868. :min: pass:normal[xref:#Math-min-uint256-uint256-[`++min++`]]
  869. :average: pass:normal[xref:#Math-average-uint256-uint256-[`++average++`]]
  870. :ceilDiv: pass:normal[xref:#Math-ceilDiv-uint256-uint256-[`++ceilDiv++`]]
  871. :mulDiv: pass:normal[xref:#Math-mulDiv-uint256-uint256-uint256-[`++mulDiv++`]]
  872. :mulDiv: pass:normal[xref:#Math-mulDiv-uint256-uint256-uint256-enum-Math-Rounding-[`++mulDiv++`]]
  873. :mulShr: pass:normal[xref:#Math-mulShr-uint256-uint256-uint8-[`++mulShr++`]]
  874. :mulShr: pass:normal[xref:#Math-mulShr-uint256-uint256-uint8-enum-Math-Rounding-[`++mulShr++`]]
  875. :invMod: pass:normal[xref:#Math-invMod-uint256-uint256-[`++invMod++`]]
  876. :invModPrime: pass:normal[xref:#Math-invModPrime-uint256-uint256-[`++invModPrime++`]]
  877. :modExp: pass:normal[xref:#Math-modExp-uint256-uint256-uint256-[`++modExp++`]]
  878. :tryModExp: pass:normal[xref:#Math-tryModExp-uint256-uint256-uint256-[`++tryModExp++`]]
  879. :modExp: pass:normal[xref:#Math-modExp-bytes-bytes-bytes-[`++modExp++`]]
  880. :tryModExp: pass:normal[xref:#Math-tryModExp-bytes-bytes-bytes-[`++tryModExp++`]]
  881. :sqrt: pass:normal[xref:#Math-sqrt-uint256-[`++sqrt++`]]
  882. :sqrt: pass:normal[xref:#Math-sqrt-uint256-enum-Math-Rounding-[`++sqrt++`]]
  883. :log2: pass:normal[xref:#Math-log2-uint256-[`++log2++`]]
  884. :log2: pass:normal[xref:#Math-log2-uint256-enum-Math-Rounding-[`++log2++`]]
  885. :log10: pass:normal[xref:#Math-log10-uint256-[`++log10++`]]
  886. :log10: pass:normal[xref:#Math-log10-uint256-enum-Math-Rounding-[`++log10++`]]
  887. :log256: pass:normal[xref:#Math-log256-uint256-[`++log256++`]]
  888. :log256: pass:normal[xref:#Math-log256-uint256-enum-Math-Rounding-[`++log256++`]]
  889. :unsignedRoundsUp: pass:normal[xref:#Math-unsignedRoundsUp-enum-Math-Rounding-[`++unsignedRoundsUp++`]]
  890. :add512-uint256-uint256: pass:normal[xref:#Math-add512-uint256-uint256-[`++add512++`]]
  891. :mul512-uint256-uint256: pass:normal[xref:#Math-mul512-uint256-uint256-[`++mul512++`]]
  892. :tryAdd-uint256-uint256: pass:normal[xref:#Math-tryAdd-uint256-uint256-[`++tryAdd++`]]
  893. :trySub-uint256-uint256: pass:normal[xref:#Math-trySub-uint256-uint256-[`++trySub++`]]
  894. :tryMul-uint256-uint256: pass:normal[xref:#Math-tryMul-uint256-uint256-[`++tryMul++`]]
  895. :tryDiv-uint256-uint256: pass:normal[xref:#Math-tryDiv-uint256-uint256-[`++tryDiv++`]]
  896. :tryMod-uint256-uint256: pass:normal[xref:#Math-tryMod-uint256-uint256-[`++tryMod++`]]
  897. :saturatingAdd-uint256-uint256: pass:normal[xref:#Math-saturatingAdd-uint256-uint256-[`++saturatingAdd++`]]
  898. :saturatingSub-uint256-uint256: pass:normal[xref:#Math-saturatingSub-uint256-uint256-[`++saturatingSub++`]]
  899. :saturatingMul-uint256-uint256: pass:normal[xref:#Math-saturatingMul-uint256-uint256-[`++saturatingMul++`]]
  900. :ternary-bool-uint256-uint256: pass:normal[xref:#Math-ternary-bool-uint256-uint256-[`++ternary++`]]
  901. :max-uint256-uint256: pass:normal[xref:#Math-max-uint256-uint256-[`++max++`]]
  902. :min-uint256-uint256: pass:normal[xref:#Math-min-uint256-uint256-[`++min++`]]
  903. :average-uint256-uint256: pass:normal[xref:#Math-average-uint256-uint256-[`++average++`]]
  904. :ceilDiv-uint256-uint256: pass:normal[xref:#Math-ceilDiv-uint256-uint256-[`++ceilDiv++`]]
  905. :mulDiv-uint256-uint256-uint256: pass:normal[xref:#Math-mulDiv-uint256-uint256-uint256-[`++mulDiv++`]]
  906. :mulDiv-uint256-uint256-uint256-enum-Math-Rounding: pass:normal[xref:#Math-mulDiv-uint256-uint256-uint256-enum-Math-Rounding-[`++mulDiv++`]]
  907. :mulShr-uint256-uint256-uint8: pass:normal[xref:#Math-mulShr-uint256-uint256-uint8-[`++mulShr++`]]
  908. :mulShr-uint256-uint256-uint8-enum-Math-Rounding: pass:normal[xref:#Math-mulShr-uint256-uint256-uint8-enum-Math-Rounding-[`++mulShr++`]]
  909. :invMod-uint256-uint256: pass:normal[xref:#Math-invMod-uint256-uint256-[`++invMod++`]]
  910. :invModPrime-uint256-uint256: pass:normal[xref:#Math-invModPrime-uint256-uint256-[`++invModPrime++`]]
  911. :modExp-uint256-uint256-uint256: pass:normal[xref:#Math-modExp-uint256-uint256-uint256-[`++modExp++`]]
  912. :tryModExp-uint256-uint256-uint256: pass:normal[xref:#Math-tryModExp-uint256-uint256-uint256-[`++tryModExp++`]]
  913. :modExp-bytes-bytes-bytes: pass:normal[xref:#Math-modExp-bytes-bytes-bytes-[`++modExp++`]]
  914. :tryModExp-bytes-bytes-bytes: pass:normal[xref:#Math-tryModExp-bytes-bytes-bytes-[`++tryModExp++`]]
  915. :sqrt-uint256: pass:normal[xref:#Math-sqrt-uint256-[`++sqrt++`]]
  916. :sqrt-uint256-enum-Math-Rounding: pass:normal[xref:#Math-sqrt-uint256-enum-Math-Rounding-[`++sqrt++`]]
  917. :log2-uint256: pass:normal[xref:#Math-log2-uint256-[`++log2++`]]
  918. :log2-uint256-enum-Math-Rounding: pass:normal[xref:#Math-log2-uint256-enum-Math-Rounding-[`++log2++`]]
  919. :log10-uint256: pass:normal[xref:#Math-log10-uint256-[`++log10++`]]
  920. :log10-uint256-enum-Math-Rounding: pass:normal[xref:#Math-log10-uint256-enum-Math-Rounding-[`++log10++`]]
  921. :log256-uint256: pass:normal[xref:#Math-log256-uint256-[`++log256++`]]
  922. :log256-uint256-enum-Math-Rounding: pass:normal[xref:#Math-log256-uint256-enum-Math-Rounding-[`++log256++`]]
  923. :unsignedRoundsUp-enum-Math-Rounding: pass:normal[xref:#Math-unsignedRoundsUp-enum-Math-Rounding-[`++unsignedRoundsUp++`]]
  924. [.contract]
  925. [[Math]]
  926. === `++Math++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/math/Math.sol[{github-icon},role=heading-link]
  927. [.hljs-theme-light.nopadding]
  928. ```solidity
  929. import "@openzeppelin/contracts/utils/math/Math.sol";
  930. ```
  931. Standard math utilities missing in the Solidity language.
  932. [.contract-index]
  933. .Functions
  934. --
  935. * {xref-Math-add512-uint256-uint256-}[`++add512(a, b)++`]
  936. * {xref-Math-mul512-uint256-uint256-}[`++mul512(a, b)++`]
  937. * {xref-Math-tryAdd-uint256-uint256-}[`++tryAdd(a, b)++`]
  938. * {xref-Math-trySub-uint256-uint256-}[`++trySub(a, b)++`]
  939. * {xref-Math-tryMul-uint256-uint256-}[`++tryMul(a, b)++`]
  940. * {xref-Math-tryDiv-uint256-uint256-}[`++tryDiv(a, b)++`]
  941. * {xref-Math-tryMod-uint256-uint256-}[`++tryMod(a, b)++`]
  942. * {xref-Math-saturatingAdd-uint256-uint256-}[`++saturatingAdd(a, b)++`]
  943. * {xref-Math-saturatingSub-uint256-uint256-}[`++saturatingSub(a, b)++`]
  944. * {xref-Math-saturatingMul-uint256-uint256-}[`++saturatingMul(a, b)++`]
  945. * {xref-Math-ternary-bool-uint256-uint256-}[`++ternary(condition, a, b)++`]
  946. * {xref-Math-max-uint256-uint256-}[`++max(a, b)++`]
  947. * {xref-Math-min-uint256-uint256-}[`++min(a, b)++`]
  948. * {xref-Math-average-uint256-uint256-}[`++average(a, b)++`]
  949. * {xref-Math-ceilDiv-uint256-uint256-}[`++ceilDiv(a, b)++`]
  950. * {xref-Math-mulDiv-uint256-uint256-uint256-}[`++mulDiv(x, y, denominator)++`]
  951. * {xref-Math-mulDiv-uint256-uint256-uint256-enum-Math-Rounding-}[`++mulDiv(x, y, denominator, rounding)++`]
  952. * {xref-Math-mulShr-uint256-uint256-uint8-}[`++mulShr(x, y, n)++`]
  953. * {xref-Math-mulShr-uint256-uint256-uint8-enum-Math-Rounding-}[`++mulShr(x, y, n, rounding)++`]
  954. * {xref-Math-invMod-uint256-uint256-}[`++invMod(a, n)++`]
  955. * {xref-Math-invModPrime-uint256-uint256-}[`++invModPrime(a, p)++`]
  956. * {xref-Math-modExp-uint256-uint256-uint256-}[`++modExp(b, e, m)++`]
  957. * {xref-Math-tryModExp-uint256-uint256-uint256-}[`++tryModExp(b, e, m)++`]
  958. * {xref-Math-modExp-bytes-bytes-bytes-}[`++modExp(b, e, m)++`]
  959. * {xref-Math-tryModExp-bytes-bytes-bytes-}[`++tryModExp(b, e, m)++`]
  960. * {xref-Math-sqrt-uint256-}[`++sqrt(a)++`]
  961. * {xref-Math-sqrt-uint256-enum-Math-Rounding-}[`++sqrt(a, rounding)++`]
  962. * {xref-Math-log2-uint256-}[`++log2(x)++`]
  963. * {xref-Math-log2-uint256-enum-Math-Rounding-}[`++log2(value, rounding)++`]
  964. * {xref-Math-log10-uint256-}[`++log10(value)++`]
  965. * {xref-Math-log10-uint256-enum-Math-Rounding-}[`++log10(value, rounding)++`]
  966. * {xref-Math-log256-uint256-}[`++log256(x)++`]
  967. * {xref-Math-log256-uint256-enum-Math-Rounding-}[`++log256(value, rounding)++`]
  968. * {xref-Math-unsignedRoundsUp-enum-Math-Rounding-}[`++unsignedRoundsUp(rounding)++`]
  969. --
  970. [.contract-item]
  971. [[Math-add512-uint256-uint256-]]
  972. ==== `[.contract-item-name]#++add512++#++(uint256 a, uint256 b) โ†’ uint256 high, uint256 low++` [.item-kind]#internal#
  973. Return the 512-bit addition of two uint256.
  974. The result is stored in two 256 variables such that sum = high * 2ยฒโตโถ + low.
  975. [.contract-item]
  976. [[Math-mul512-uint256-uint256-]]
  977. ==== `[.contract-item-name]#++mul512++#++(uint256 a, uint256 b) โ†’ uint256 high, uint256 low++` [.item-kind]#internal#
  978. Return the 512-bit multiplication of two uint256.
  979. The result is stored in two 256 variables such that product = high * 2ยฒโตโถ + low.
  980. [.contract-item]
  981. [[Math-tryAdd-uint256-uint256-]]
  982. ==== `[.contract-item-name]#++tryAdd++#++(uint256 a, uint256 b) โ†’ bool success, uint256 result++` [.item-kind]#internal#
  983. Returns the addition of two unsigned integers, with a success flag (no overflow).
  984. [.contract-item]
  985. [[Math-trySub-uint256-uint256-]]
  986. ==== `[.contract-item-name]#++trySub++#++(uint256 a, uint256 b) โ†’ bool success, uint256 result++` [.item-kind]#internal#
  987. Returns the subtraction of two unsigned integers, with a success flag (no overflow).
  988. [.contract-item]
  989. [[Math-tryMul-uint256-uint256-]]
  990. ==== `[.contract-item-name]#++tryMul++#++(uint256 a, uint256 b) โ†’ bool success, uint256 result++` [.item-kind]#internal#
  991. Returns the multiplication of two unsigned integers, with a success flag (no overflow).
  992. [.contract-item]
  993. [[Math-tryDiv-uint256-uint256-]]
  994. ==== `[.contract-item-name]#++tryDiv++#++(uint256 a, uint256 b) โ†’ bool success, uint256 result++` [.item-kind]#internal#
  995. Returns the division of two unsigned integers, with a success flag (no division by zero).
  996. [.contract-item]
  997. [[Math-tryMod-uint256-uint256-]]
  998. ==== `[.contract-item-name]#++tryMod++#++(uint256 a, uint256 b) โ†’ bool success, uint256 result++` [.item-kind]#internal#
  999. Returns the remainder of dividing two unsigned integers, with a success flag (no division by zero).
  1000. [.contract-item]
  1001. [[Math-saturatingAdd-uint256-uint256-]]
  1002. ==== `[.contract-item-name]#++saturatingAdd++#++(uint256 a, uint256 b) โ†’ uint256++` [.item-kind]#internal#
  1003. Unsigned saturating addition, bounds to `2ยฒโตโถ - 1` instead of overflowing.
  1004. [.contract-item]
  1005. [[Math-saturatingSub-uint256-uint256-]]
  1006. ==== `[.contract-item-name]#++saturatingSub++#++(uint256 a, uint256 b) โ†’ uint256++` [.item-kind]#internal#
  1007. Unsigned saturating subtraction, bounds to zero instead of overflowing.
  1008. [.contract-item]
  1009. [[Math-saturatingMul-uint256-uint256-]]
  1010. ==== `[.contract-item-name]#++saturatingMul++#++(uint256 a, uint256 b) โ†’ uint256++` [.item-kind]#internal#
  1011. Unsigned saturating multiplication, bounds to `2ยฒโตโถ - 1` instead of overflowing.
  1012. [.contract-item]
  1013. [[Math-ternary-bool-uint256-uint256-]]
  1014. ==== `[.contract-item-name]#++ternary++#++(bool condition, uint256 a, uint256 b) โ†’ uint256++` [.item-kind]#internal#
  1015. Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.
  1016. IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.
  1017. However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute
  1018. one branch when needed, making this function more expensive.
  1019. [.contract-item]
  1020. [[Math-max-uint256-uint256-]]
  1021. ==== `[.contract-item-name]#++max++#++(uint256 a, uint256 b) โ†’ uint256++` [.item-kind]#internal#
  1022. Returns the largest of two numbers.
  1023. [.contract-item]
  1024. [[Math-min-uint256-uint256-]]
  1025. ==== `[.contract-item-name]#++min++#++(uint256 a, uint256 b) โ†’ uint256++` [.item-kind]#internal#
  1026. Returns the smallest of two numbers.
  1027. [.contract-item]
  1028. [[Math-average-uint256-uint256-]]
  1029. ==== `[.contract-item-name]#++average++#++(uint256 a, uint256 b) โ†’ uint256++` [.item-kind]#internal#
  1030. Returns the average of two numbers. The result is rounded towards
  1031. zero.
  1032. [.contract-item]
  1033. [[Math-ceilDiv-uint256-uint256-]]
  1034. ==== `[.contract-item-name]#++ceilDiv++#++(uint256 a, uint256 b) โ†’ uint256++` [.item-kind]#internal#
  1035. Returns the ceiling of the division of two numbers.
  1036. This differs from standard division with `/` in that it rounds towards infinity instead
  1037. of rounding towards zero.
  1038. [.contract-item]
  1039. [[Math-mulDiv-uint256-uint256-uint256-]]
  1040. ==== `[.contract-item-name]#++mulDiv++#++(uint256 x, uint256 y, uint256 denominator) โ†’ uint256 result++` [.item-kind]#internal#
  1041. Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or
  1042. denominator == 0.
  1043. Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by
  1044. Uniswap Labs also under MIT license.
  1045. [.contract-item]
  1046. [[Math-mulDiv-uint256-uint256-uint256-enum-Math-Rounding-]]
  1047. ==== `[.contract-item-name]#++mulDiv++#++(uint256 x, uint256 y, uint256 denominator, enum Math.Rounding rounding) โ†’ uint256++` [.item-kind]#internal#
  1048. Calculates x * y / denominator with full precision, following the selected rounding direction.
  1049. [.contract-item]
  1050. [[Math-mulShr-uint256-uint256-uint8-]]
  1051. ==== `[.contract-item-name]#++mulShr++#++(uint256 x, uint256 y, uint8 n) โ†’ uint256 result++` [.item-kind]#internal#
  1052. Calculates floor(x * y >> n) with full precision. Throws if result overflows a uint256.
  1053. [.contract-item]
  1054. [[Math-mulShr-uint256-uint256-uint8-enum-Math-Rounding-]]
  1055. ==== `[.contract-item-name]#++mulShr++#++(uint256 x, uint256 y, uint8 n, enum Math.Rounding rounding) โ†’ uint256++` [.item-kind]#internal#
  1056. Calculates x * y >> n with full precision, following the selected rounding direction.
  1057. [.contract-item]
  1058. [[Math-invMod-uint256-uint256-]]
  1059. ==== `[.contract-item-name]#++invMod++#++(uint256 a, uint256 n) โ†’ uint256++` [.item-kind]#internal#
  1060. Calculate the modular multiplicative inverse of a number in Z/nZ.
  1061. If n is a prime, then Z/nZ is a field. In that case all elements are inversible, except 0.
  1062. If n is not a prime, then Z/nZ is not a field, and some elements might not be inversible.
  1063. If the input value is not inversible, 0 is returned.
  1064. NOTE: If you know for sure that n is (big) a prime, it may be cheaper to use Fermat's little theorem and get the
  1065. inverse using `Math.modExp(a, n - 2, n)`. See {invModPrime}.
  1066. [.contract-item]
  1067. [[Math-invModPrime-uint256-uint256-]]
  1068. ==== `[.contract-item-name]#++invModPrime++#++(uint256 a, uint256 p) โ†’ uint256++` [.item-kind]#internal#
  1069. Variant of {invMod}. More efficient, but only works if `p` is known to be a prime greater than `2`.
  1070. From https://en.wikipedia.org/wiki/Fermat%27s_little_theorem[Fermat's little theorem], we know that if p is
  1071. prime, then `a**(p-1) โ‰ก 1 mod p`. As a consequence, we have `a * a**(p-2) โ‰ก 1 mod p`, which means that
  1072. `a**(p-2)` is the modular multiplicative inverse of a in Fp.
  1073. NOTE: this function does NOT check that `p` is a prime greater than `2`.
  1074. [.contract-item]
  1075. [[Math-modExp-uint256-uint256-uint256-]]
  1076. ==== `[.contract-item-name]#++modExp++#++(uint256 b, uint256 e, uint256 m) โ†’ uint256++` [.item-kind]#internal#
  1077. Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m)
  1078. Requirements:
  1079. - modulus can't be zero
  1080. - underlying staticcall to precompile must succeed
  1081. IMPORTANT: The result is only valid if the underlying call succeeds. When using this function, make
  1082. sure the chain you're using it on supports the precompiled contract for modular exponentiation
  1083. at address 0x05 as specified in https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise,
  1084. the underlying function will succeed given the lack of a revert, but the result may be incorrectly
  1085. interpreted as 0.
  1086. [.contract-item]
  1087. [[Math-tryModExp-uint256-uint256-uint256-]]
  1088. ==== `[.contract-item-name]#++tryModExp++#++(uint256 b, uint256 e, uint256 m) โ†’ bool success, uint256 result++` [.item-kind]#internal#
  1089. Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m).
  1090. It includes a success flag indicating if the operation succeeded. Operation will be marked as failed if trying
  1091. to operate modulo 0 or if the underlying precompile reverted.
  1092. IMPORTANT: The result is only valid if the success flag is true. When using this function, make sure the chain
  1093. you're using it on supports the precompiled contract for modular exponentiation at address 0x05 as specified in
  1094. https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise, the underlying function will succeed given the lack
  1095. of a revert, but the result may be incorrectly interpreted as 0.
  1096. [.contract-item]
  1097. [[Math-modExp-bytes-bytes-bytes-]]
  1098. ==== `[.contract-item-name]#++modExp++#++(bytes b, bytes e, bytes m) โ†’ bytes++` [.item-kind]#internal#
  1099. Variant of {modExp} that supports inputs of arbitrary length.
  1100. [.contract-item]
  1101. [[Math-tryModExp-bytes-bytes-bytes-]]
  1102. ==== `[.contract-item-name]#++tryModExp++#++(bytes b, bytes e, bytes m) โ†’ bool success, bytes result++` [.item-kind]#internal#
  1103. Variant of {tryModExp} that supports inputs of arbitrary length.
  1104. [.contract-item]
  1105. [[Math-sqrt-uint256-]]
  1106. ==== `[.contract-item-name]#++sqrt++#++(uint256 a) โ†’ uint256++` [.item-kind]#internal#
  1107. Returns the square root of a number. If the number is not a perfect square, the value is rounded
  1108. towards zero.
  1109. This method is based on Newton's method for computing square roots; the algorithm is restricted to only
  1110. using integer operations.
  1111. [.contract-item]
  1112. [[Math-sqrt-uint256-enum-Math-Rounding-]]
  1113. ==== `[.contract-item-name]#++sqrt++#++(uint256 a, enum Math.Rounding rounding) โ†’ uint256++` [.item-kind]#internal#
  1114. Calculates sqrt(a), following the selected rounding direction.
  1115. [.contract-item]
  1116. [[Math-log2-uint256-]]
  1117. ==== `[.contract-item-name]#++log2++#++(uint256 x) โ†’ uint256 r++` [.item-kind]#internal#
  1118. Return the log in base 2 of a positive value rounded towards zero.
  1119. Returns 0 if given 0.
  1120. [.contract-item]
  1121. [[Math-log2-uint256-enum-Math-Rounding-]]
  1122. ==== `[.contract-item-name]#++log2++#++(uint256 value, enum Math.Rounding rounding) โ†’ uint256++` [.item-kind]#internal#
  1123. Return the log in base 2, following the selected rounding direction, of a positive value.
  1124. Returns 0 if given 0.
  1125. [.contract-item]
  1126. [[Math-log10-uint256-]]
  1127. ==== `[.contract-item-name]#++log10++#++(uint256 value) โ†’ uint256++` [.item-kind]#internal#
  1128. Return the log in base 10 of a positive value rounded towards zero.
  1129. Returns 0 if given 0.
  1130. [.contract-item]
  1131. [[Math-log10-uint256-enum-Math-Rounding-]]
  1132. ==== `[.contract-item-name]#++log10++#++(uint256 value, enum Math.Rounding rounding) โ†’ uint256++` [.item-kind]#internal#
  1133. Return the log in base 10, following the selected rounding direction, of a positive value.
  1134. Returns 0 if given 0.
  1135. [.contract-item]
  1136. [[Math-log256-uint256-]]
  1137. ==== `[.contract-item-name]#++log256++#++(uint256 x) โ†’ uint256 r++` [.item-kind]#internal#
  1138. Return the log in base 256 of a positive value rounded towards zero.
  1139. Returns 0 if given 0.
  1140. Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.
  1141. [.contract-item]
  1142. [[Math-log256-uint256-enum-Math-Rounding-]]
  1143. ==== `[.contract-item-name]#++log256++#++(uint256 value, enum Math.Rounding rounding) โ†’ uint256++` [.item-kind]#internal#
  1144. Return the log in base 256, following the selected rounding direction, of a positive value.
  1145. Returns 0 if given 0.
  1146. [.contract-item]
  1147. [[Math-unsignedRoundsUp-enum-Math-Rounding-]]
  1148. ==== `[.contract-item-name]#++unsignedRoundsUp++#++(enum Math.Rounding rounding) โ†’ bool++` [.item-kind]#internal#
  1149. Returns whether a provided rounding mode is considered rounding up for unsigned integers.
  1150. :ternary: pass:normal[xref:#SignedMath-ternary-bool-int256-int256-[`++ternary++`]]
  1151. :max: pass:normal[xref:#SignedMath-max-int256-int256-[`++max++`]]
  1152. :min: pass:normal[xref:#SignedMath-min-int256-int256-[`++min++`]]
  1153. :average: pass:normal[xref:#SignedMath-average-int256-int256-[`++average++`]]
  1154. :abs: pass:normal[xref:#SignedMath-abs-int256-[`++abs++`]]
  1155. :ternary-bool-int256-int256: pass:normal[xref:#SignedMath-ternary-bool-int256-int256-[`++ternary++`]]
  1156. :max-int256-int256: pass:normal[xref:#SignedMath-max-int256-int256-[`++max++`]]
  1157. :min-int256-int256: pass:normal[xref:#SignedMath-min-int256-int256-[`++min++`]]
  1158. :average-int256-int256: pass:normal[xref:#SignedMath-average-int256-int256-[`++average++`]]
  1159. :abs-int256: pass:normal[xref:#SignedMath-abs-int256-[`++abs++`]]
  1160. [.contract]
  1161. [[SignedMath]]
  1162. === `++SignedMath++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/math/SignedMath.sol[{github-icon},role=heading-link]
  1163. [.hljs-theme-light.nopadding]
  1164. ```solidity
  1165. import "@openzeppelin/contracts/utils/math/SignedMath.sol";
  1166. ```
  1167. Standard signed math utilities missing in the Solidity language.
  1168. [.contract-index]
  1169. .Functions
  1170. --
  1171. * {xref-SignedMath-ternary-bool-int256-int256-}[`++ternary(condition, a, b)++`]
  1172. * {xref-SignedMath-max-int256-int256-}[`++max(a, b)++`]
  1173. * {xref-SignedMath-min-int256-int256-}[`++min(a, b)++`]
  1174. * {xref-SignedMath-average-int256-int256-}[`++average(a, b)++`]
  1175. * {xref-SignedMath-abs-int256-}[`++abs(n)++`]
  1176. --
  1177. [.contract-item]
  1178. [[SignedMath-ternary-bool-int256-int256-]]
  1179. ==== `[.contract-item-name]#++ternary++#++(bool condition, int256 a, int256 b) โ†’ int256++` [.item-kind]#internal#
  1180. Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.
  1181. IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.
  1182. However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute
  1183. one branch when needed, making this function more expensive.
  1184. [.contract-item]
  1185. [[SignedMath-max-int256-int256-]]
  1186. ==== `[.contract-item-name]#++max++#++(int256 a, int256 b) โ†’ int256++` [.item-kind]#internal#
  1187. Returns the largest of two signed numbers.
  1188. [.contract-item]
  1189. [[SignedMath-min-int256-int256-]]
  1190. ==== `[.contract-item-name]#++min++#++(int256 a, int256 b) โ†’ int256++` [.item-kind]#internal#
  1191. Returns the smallest of two signed numbers.
  1192. [.contract-item]
  1193. [[SignedMath-average-int256-int256-]]
  1194. ==== `[.contract-item-name]#++average++#++(int256 a, int256 b) โ†’ int256++` [.item-kind]#internal#
  1195. Returns the average of two signed numbers without overflow.
  1196. The result is rounded towards zero.
  1197. [.contract-item]
  1198. [[SignedMath-abs-int256-]]
  1199. ==== `[.contract-item-name]#++abs++#++(int256 n) โ†’ uint256++` [.item-kind]#internal#
  1200. Returns the absolute unsigned value of a signed value.
  1201. :SafeCastOverflowedUintDowncast: pass:normal[xref:#SafeCast-SafeCastOverflowedUintDowncast-uint8-uint256-[`++SafeCastOverflowedUintDowncast++`]]
  1202. :SafeCastOverflowedIntToUint: pass:normal[xref:#SafeCast-SafeCastOverflowedIntToUint-int256-[`++SafeCastOverflowedIntToUint++`]]
  1203. :SafeCastOverflowedIntDowncast: pass:normal[xref:#SafeCast-SafeCastOverflowedIntDowncast-uint8-int256-[`++SafeCastOverflowedIntDowncast++`]]
  1204. :SafeCastOverflowedUintToInt: pass:normal[xref:#SafeCast-SafeCastOverflowedUintToInt-uint256-[`++SafeCastOverflowedUintToInt++`]]
  1205. :toUint248: pass:normal[xref:#SafeCast-toUint248-uint256-[`++toUint248++`]]
  1206. :toUint240: pass:normal[xref:#SafeCast-toUint240-uint256-[`++toUint240++`]]
  1207. :toUint232: pass:normal[xref:#SafeCast-toUint232-uint256-[`++toUint232++`]]
  1208. :toUint224: pass:normal[xref:#SafeCast-toUint224-uint256-[`++toUint224++`]]
  1209. :toUint216: pass:normal[xref:#SafeCast-toUint216-uint256-[`++toUint216++`]]
  1210. :toUint208: pass:normal[xref:#SafeCast-toUint208-uint256-[`++toUint208++`]]
  1211. :toUint200: pass:normal[xref:#SafeCast-toUint200-uint256-[`++toUint200++`]]
  1212. :toUint192: pass:normal[xref:#SafeCast-toUint192-uint256-[`++toUint192++`]]
  1213. :toUint184: pass:normal[xref:#SafeCast-toUint184-uint256-[`++toUint184++`]]
  1214. :toUint176: pass:normal[xref:#SafeCast-toUint176-uint256-[`++toUint176++`]]
  1215. :toUint168: pass:normal[xref:#SafeCast-toUint168-uint256-[`++toUint168++`]]
  1216. :toUint160: pass:normal[xref:#SafeCast-toUint160-uint256-[`++toUint160++`]]
  1217. :toUint152: pass:normal[xref:#SafeCast-toUint152-uint256-[`++toUint152++`]]
  1218. :toUint144: pass:normal[xref:#SafeCast-toUint144-uint256-[`++toUint144++`]]
  1219. :toUint136: pass:normal[xref:#SafeCast-toUint136-uint256-[`++toUint136++`]]
  1220. :toUint128: pass:normal[xref:#SafeCast-toUint128-uint256-[`++toUint128++`]]
  1221. :toUint120: pass:normal[xref:#SafeCast-toUint120-uint256-[`++toUint120++`]]
  1222. :toUint112: pass:normal[xref:#SafeCast-toUint112-uint256-[`++toUint112++`]]
  1223. :toUint104: pass:normal[xref:#SafeCast-toUint104-uint256-[`++toUint104++`]]
  1224. :toUint96: pass:normal[xref:#SafeCast-toUint96-uint256-[`++toUint96++`]]
  1225. :toUint88: pass:normal[xref:#SafeCast-toUint88-uint256-[`++toUint88++`]]
  1226. :toUint80: pass:normal[xref:#SafeCast-toUint80-uint256-[`++toUint80++`]]
  1227. :toUint72: pass:normal[xref:#SafeCast-toUint72-uint256-[`++toUint72++`]]
  1228. :toUint64: pass:normal[xref:#SafeCast-toUint64-uint256-[`++toUint64++`]]
  1229. :toUint56: pass:normal[xref:#SafeCast-toUint56-uint256-[`++toUint56++`]]
  1230. :toUint48: pass:normal[xref:#SafeCast-toUint48-uint256-[`++toUint48++`]]
  1231. :toUint40: pass:normal[xref:#SafeCast-toUint40-uint256-[`++toUint40++`]]
  1232. :toUint32: pass:normal[xref:#SafeCast-toUint32-uint256-[`++toUint32++`]]
  1233. :toUint24: pass:normal[xref:#SafeCast-toUint24-uint256-[`++toUint24++`]]
  1234. :toUint16: pass:normal[xref:#SafeCast-toUint16-uint256-[`++toUint16++`]]
  1235. :toUint8: pass:normal[xref:#SafeCast-toUint8-uint256-[`++toUint8++`]]
  1236. :toUint256: pass:normal[xref:#SafeCast-toUint256-int256-[`++toUint256++`]]
  1237. :toInt248: pass:normal[xref:#SafeCast-toInt248-int256-[`++toInt248++`]]
  1238. :toInt240: pass:normal[xref:#SafeCast-toInt240-int256-[`++toInt240++`]]
  1239. :toInt232: pass:normal[xref:#SafeCast-toInt232-int256-[`++toInt232++`]]
  1240. :toInt224: pass:normal[xref:#SafeCast-toInt224-int256-[`++toInt224++`]]
  1241. :toInt216: pass:normal[xref:#SafeCast-toInt216-int256-[`++toInt216++`]]
  1242. :toInt208: pass:normal[xref:#SafeCast-toInt208-int256-[`++toInt208++`]]
  1243. :toInt200: pass:normal[xref:#SafeCast-toInt200-int256-[`++toInt200++`]]
  1244. :toInt192: pass:normal[xref:#SafeCast-toInt192-int256-[`++toInt192++`]]
  1245. :toInt184: pass:normal[xref:#SafeCast-toInt184-int256-[`++toInt184++`]]
  1246. :toInt176: pass:normal[xref:#SafeCast-toInt176-int256-[`++toInt176++`]]
  1247. :toInt168: pass:normal[xref:#SafeCast-toInt168-int256-[`++toInt168++`]]
  1248. :toInt160: pass:normal[xref:#SafeCast-toInt160-int256-[`++toInt160++`]]
  1249. :toInt152: pass:normal[xref:#SafeCast-toInt152-int256-[`++toInt152++`]]
  1250. :toInt144: pass:normal[xref:#SafeCast-toInt144-int256-[`++toInt144++`]]
  1251. :toInt136: pass:normal[xref:#SafeCast-toInt136-int256-[`++toInt136++`]]
  1252. :toInt128: pass:normal[xref:#SafeCast-toInt128-int256-[`++toInt128++`]]
  1253. :toInt120: pass:normal[xref:#SafeCast-toInt120-int256-[`++toInt120++`]]
  1254. :toInt112: pass:normal[xref:#SafeCast-toInt112-int256-[`++toInt112++`]]
  1255. :toInt104: pass:normal[xref:#SafeCast-toInt104-int256-[`++toInt104++`]]
  1256. :toInt96: pass:normal[xref:#SafeCast-toInt96-int256-[`++toInt96++`]]
  1257. :toInt88: pass:normal[xref:#SafeCast-toInt88-int256-[`++toInt88++`]]
  1258. :toInt80: pass:normal[xref:#SafeCast-toInt80-int256-[`++toInt80++`]]
  1259. :toInt72: pass:normal[xref:#SafeCast-toInt72-int256-[`++toInt72++`]]
  1260. :toInt64: pass:normal[xref:#SafeCast-toInt64-int256-[`++toInt64++`]]
  1261. :toInt56: pass:normal[xref:#SafeCast-toInt56-int256-[`++toInt56++`]]
  1262. :toInt48: pass:normal[xref:#SafeCast-toInt48-int256-[`++toInt48++`]]
  1263. :toInt40: pass:normal[xref:#SafeCast-toInt40-int256-[`++toInt40++`]]
  1264. :toInt32: pass:normal[xref:#SafeCast-toInt32-int256-[`++toInt32++`]]
  1265. :toInt24: pass:normal[xref:#SafeCast-toInt24-int256-[`++toInt24++`]]
  1266. :toInt16: pass:normal[xref:#SafeCast-toInt16-int256-[`++toInt16++`]]
  1267. :toInt8: pass:normal[xref:#SafeCast-toInt8-int256-[`++toInt8++`]]
  1268. :toInt256: pass:normal[xref:#SafeCast-toInt256-uint256-[`++toInt256++`]]
  1269. :toUint: pass:normal[xref:#SafeCast-toUint-bool-[`++toUint++`]]
  1270. :toUint248-uint256: pass:normal[xref:#SafeCast-toUint248-uint256-[`++toUint248++`]]
  1271. :toUint240-uint256: pass:normal[xref:#SafeCast-toUint240-uint256-[`++toUint240++`]]
  1272. :toUint232-uint256: pass:normal[xref:#SafeCast-toUint232-uint256-[`++toUint232++`]]
  1273. :toUint224-uint256: pass:normal[xref:#SafeCast-toUint224-uint256-[`++toUint224++`]]
  1274. :toUint216-uint256: pass:normal[xref:#SafeCast-toUint216-uint256-[`++toUint216++`]]
  1275. :toUint208-uint256: pass:normal[xref:#SafeCast-toUint208-uint256-[`++toUint208++`]]
  1276. :toUint200-uint256: pass:normal[xref:#SafeCast-toUint200-uint256-[`++toUint200++`]]
  1277. :toUint192-uint256: pass:normal[xref:#SafeCast-toUint192-uint256-[`++toUint192++`]]
  1278. :toUint184-uint256: pass:normal[xref:#SafeCast-toUint184-uint256-[`++toUint184++`]]
  1279. :toUint176-uint256: pass:normal[xref:#SafeCast-toUint176-uint256-[`++toUint176++`]]
  1280. :toUint168-uint256: pass:normal[xref:#SafeCast-toUint168-uint256-[`++toUint168++`]]
  1281. :toUint160-uint256: pass:normal[xref:#SafeCast-toUint160-uint256-[`++toUint160++`]]
  1282. :toUint152-uint256: pass:normal[xref:#SafeCast-toUint152-uint256-[`++toUint152++`]]
  1283. :toUint144-uint256: pass:normal[xref:#SafeCast-toUint144-uint256-[`++toUint144++`]]
  1284. :toUint136-uint256: pass:normal[xref:#SafeCast-toUint136-uint256-[`++toUint136++`]]
  1285. :toUint128-uint256: pass:normal[xref:#SafeCast-toUint128-uint256-[`++toUint128++`]]
  1286. :toUint120-uint256: pass:normal[xref:#SafeCast-toUint120-uint256-[`++toUint120++`]]
  1287. :toUint112-uint256: pass:normal[xref:#SafeCast-toUint112-uint256-[`++toUint112++`]]
  1288. :toUint104-uint256: pass:normal[xref:#SafeCast-toUint104-uint256-[`++toUint104++`]]
  1289. :toUint96-uint256: pass:normal[xref:#SafeCast-toUint96-uint256-[`++toUint96++`]]
  1290. :toUint88-uint256: pass:normal[xref:#SafeCast-toUint88-uint256-[`++toUint88++`]]
  1291. :toUint80-uint256: pass:normal[xref:#SafeCast-toUint80-uint256-[`++toUint80++`]]
  1292. :toUint72-uint256: pass:normal[xref:#SafeCast-toUint72-uint256-[`++toUint72++`]]
  1293. :toUint64-uint256: pass:normal[xref:#SafeCast-toUint64-uint256-[`++toUint64++`]]
  1294. :toUint56-uint256: pass:normal[xref:#SafeCast-toUint56-uint256-[`++toUint56++`]]
  1295. :toUint48-uint256: pass:normal[xref:#SafeCast-toUint48-uint256-[`++toUint48++`]]
  1296. :toUint40-uint256: pass:normal[xref:#SafeCast-toUint40-uint256-[`++toUint40++`]]
  1297. :toUint32-uint256: pass:normal[xref:#SafeCast-toUint32-uint256-[`++toUint32++`]]
  1298. :toUint24-uint256: pass:normal[xref:#SafeCast-toUint24-uint256-[`++toUint24++`]]
  1299. :toUint16-uint256: pass:normal[xref:#SafeCast-toUint16-uint256-[`++toUint16++`]]
  1300. :toUint8-uint256: pass:normal[xref:#SafeCast-toUint8-uint256-[`++toUint8++`]]
  1301. :toUint256-int256: pass:normal[xref:#SafeCast-toUint256-int256-[`++toUint256++`]]
  1302. :toInt248-int256: pass:normal[xref:#SafeCast-toInt248-int256-[`++toInt248++`]]
  1303. :toInt240-int256: pass:normal[xref:#SafeCast-toInt240-int256-[`++toInt240++`]]
  1304. :toInt232-int256: pass:normal[xref:#SafeCast-toInt232-int256-[`++toInt232++`]]
  1305. :toInt224-int256: pass:normal[xref:#SafeCast-toInt224-int256-[`++toInt224++`]]
  1306. :toInt216-int256: pass:normal[xref:#SafeCast-toInt216-int256-[`++toInt216++`]]
  1307. :toInt208-int256: pass:normal[xref:#SafeCast-toInt208-int256-[`++toInt208++`]]
  1308. :toInt200-int256: pass:normal[xref:#SafeCast-toInt200-int256-[`++toInt200++`]]
  1309. :toInt192-int256: pass:normal[xref:#SafeCast-toInt192-int256-[`++toInt192++`]]
  1310. :toInt184-int256: pass:normal[xref:#SafeCast-toInt184-int256-[`++toInt184++`]]
  1311. :toInt176-int256: pass:normal[xref:#SafeCast-toInt176-int256-[`++toInt176++`]]
  1312. :toInt168-int256: pass:normal[xref:#SafeCast-toInt168-int256-[`++toInt168++`]]
  1313. :toInt160-int256: pass:normal[xref:#SafeCast-toInt160-int256-[`++toInt160++`]]
  1314. :toInt152-int256: pass:normal[xref:#SafeCast-toInt152-int256-[`++toInt152++`]]
  1315. :toInt144-int256: pass:normal[xref:#SafeCast-toInt144-int256-[`++toInt144++`]]
  1316. :toInt136-int256: pass:normal[xref:#SafeCast-toInt136-int256-[`++toInt136++`]]
  1317. :toInt128-int256: pass:normal[xref:#SafeCast-toInt128-int256-[`++toInt128++`]]
  1318. :toInt120-int256: pass:normal[xref:#SafeCast-toInt120-int256-[`++toInt120++`]]
  1319. :toInt112-int256: pass:normal[xref:#SafeCast-toInt112-int256-[`++toInt112++`]]
  1320. :toInt104-int256: pass:normal[xref:#SafeCast-toInt104-int256-[`++toInt104++`]]
  1321. :toInt96-int256: pass:normal[xref:#SafeCast-toInt96-int256-[`++toInt96++`]]
  1322. :toInt88-int256: pass:normal[xref:#SafeCast-toInt88-int256-[`++toInt88++`]]
  1323. :toInt80-int256: pass:normal[xref:#SafeCast-toInt80-int256-[`++toInt80++`]]
  1324. :toInt72-int256: pass:normal[xref:#SafeCast-toInt72-int256-[`++toInt72++`]]
  1325. :toInt64-int256: pass:normal[xref:#SafeCast-toInt64-int256-[`++toInt64++`]]
  1326. :toInt56-int256: pass:normal[xref:#SafeCast-toInt56-int256-[`++toInt56++`]]
  1327. :toInt48-int256: pass:normal[xref:#SafeCast-toInt48-int256-[`++toInt48++`]]
  1328. :toInt40-int256: pass:normal[xref:#SafeCast-toInt40-int256-[`++toInt40++`]]
  1329. :toInt32-int256: pass:normal[xref:#SafeCast-toInt32-int256-[`++toInt32++`]]
  1330. :toInt24-int256: pass:normal[xref:#SafeCast-toInt24-int256-[`++toInt24++`]]
  1331. :toInt16-int256: pass:normal[xref:#SafeCast-toInt16-int256-[`++toInt16++`]]
  1332. :toInt8-int256: pass:normal[xref:#SafeCast-toInt8-int256-[`++toInt8++`]]
  1333. :toInt256-uint256: pass:normal[xref:#SafeCast-toInt256-uint256-[`++toInt256++`]]
  1334. :toUint-bool: pass:normal[xref:#SafeCast-toUint-bool-[`++toUint++`]]
  1335. [.contract]
  1336. [[SafeCast]]
  1337. === `++SafeCast++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/math/SafeCast.sol[{github-icon},role=heading-link]
  1338. [.hljs-theme-light.nopadding]
  1339. ```solidity
  1340. import "@openzeppelin/contracts/utils/math/SafeCast.sol";
  1341. ```
  1342. Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow
  1343. checks.
  1344. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can
  1345. easily result in undesired exploitation or bugs, since developers usually
  1346. assume that overflows raise errors. `SafeCast` restores this intuition by
  1347. reverting the transaction when such an operation overflows.
  1348. Using this library instead of the unchecked operations eliminates an entire
  1349. class of bugs, so it's recommended to use it always.
  1350. [.contract-index]
  1351. .Functions
  1352. --
  1353. * {xref-SafeCast-toUint248-uint256-}[`++toUint248(value)++`]
  1354. * {xref-SafeCast-toUint240-uint256-}[`++toUint240(value)++`]
  1355. * {xref-SafeCast-toUint232-uint256-}[`++toUint232(value)++`]
  1356. * {xref-SafeCast-toUint224-uint256-}[`++toUint224(value)++`]
  1357. * {xref-SafeCast-toUint216-uint256-}[`++toUint216(value)++`]
  1358. * {xref-SafeCast-toUint208-uint256-}[`++toUint208(value)++`]
  1359. * {xref-SafeCast-toUint200-uint256-}[`++toUint200(value)++`]
  1360. * {xref-SafeCast-toUint192-uint256-}[`++toUint192(value)++`]
  1361. * {xref-SafeCast-toUint184-uint256-}[`++toUint184(value)++`]
  1362. * {xref-SafeCast-toUint176-uint256-}[`++toUint176(value)++`]
  1363. * {xref-SafeCast-toUint168-uint256-}[`++toUint168(value)++`]
  1364. * {xref-SafeCast-toUint160-uint256-}[`++toUint160(value)++`]
  1365. * {xref-SafeCast-toUint152-uint256-}[`++toUint152(value)++`]
  1366. * {xref-SafeCast-toUint144-uint256-}[`++toUint144(value)++`]
  1367. * {xref-SafeCast-toUint136-uint256-}[`++toUint136(value)++`]
  1368. * {xref-SafeCast-toUint128-uint256-}[`++toUint128(value)++`]
  1369. * {xref-SafeCast-toUint120-uint256-}[`++toUint120(value)++`]
  1370. * {xref-SafeCast-toUint112-uint256-}[`++toUint112(value)++`]
  1371. * {xref-SafeCast-toUint104-uint256-}[`++toUint104(value)++`]
  1372. * {xref-SafeCast-toUint96-uint256-}[`++toUint96(value)++`]
  1373. * {xref-SafeCast-toUint88-uint256-}[`++toUint88(value)++`]
  1374. * {xref-SafeCast-toUint80-uint256-}[`++toUint80(value)++`]
  1375. * {xref-SafeCast-toUint72-uint256-}[`++toUint72(value)++`]
  1376. * {xref-SafeCast-toUint64-uint256-}[`++toUint64(value)++`]
  1377. * {xref-SafeCast-toUint56-uint256-}[`++toUint56(value)++`]
  1378. * {xref-SafeCast-toUint48-uint256-}[`++toUint48(value)++`]
  1379. * {xref-SafeCast-toUint40-uint256-}[`++toUint40(value)++`]
  1380. * {xref-SafeCast-toUint32-uint256-}[`++toUint32(value)++`]
  1381. * {xref-SafeCast-toUint24-uint256-}[`++toUint24(value)++`]
  1382. * {xref-SafeCast-toUint16-uint256-}[`++toUint16(value)++`]
  1383. * {xref-SafeCast-toUint8-uint256-}[`++toUint8(value)++`]
  1384. * {xref-SafeCast-toUint256-int256-}[`++toUint256(value)++`]
  1385. * {xref-SafeCast-toInt248-int256-}[`++toInt248(value)++`]
  1386. * {xref-SafeCast-toInt240-int256-}[`++toInt240(value)++`]
  1387. * {xref-SafeCast-toInt232-int256-}[`++toInt232(value)++`]
  1388. * {xref-SafeCast-toInt224-int256-}[`++toInt224(value)++`]
  1389. * {xref-SafeCast-toInt216-int256-}[`++toInt216(value)++`]
  1390. * {xref-SafeCast-toInt208-int256-}[`++toInt208(value)++`]
  1391. * {xref-SafeCast-toInt200-int256-}[`++toInt200(value)++`]
  1392. * {xref-SafeCast-toInt192-int256-}[`++toInt192(value)++`]
  1393. * {xref-SafeCast-toInt184-int256-}[`++toInt184(value)++`]
  1394. * {xref-SafeCast-toInt176-int256-}[`++toInt176(value)++`]
  1395. * {xref-SafeCast-toInt168-int256-}[`++toInt168(value)++`]
  1396. * {xref-SafeCast-toInt160-int256-}[`++toInt160(value)++`]
  1397. * {xref-SafeCast-toInt152-int256-}[`++toInt152(value)++`]
  1398. * {xref-SafeCast-toInt144-int256-}[`++toInt144(value)++`]
  1399. * {xref-SafeCast-toInt136-int256-}[`++toInt136(value)++`]
  1400. * {xref-SafeCast-toInt128-int256-}[`++toInt128(value)++`]
  1401. * {xref-SafeCast-toInt120-int256-}[`++toInt120(value)++`]
  1402. * {xref-SafeCast-toInt112-int256-}[`++toInt112(value)++`]
  1403. * {xref-SafeCast-toInt104-int256-}[`++toInt104(value)++`]
  1404. * {xref-SafeCast-toInt96-int256-}[`++toInt96(value)++`]
  1405. * {xref-SafeCast-toInt88-int256-}[`++toInt88(value)++`]
  1406. * {xref-SafeCast-toInt80-int256-}[`++toInt80(value)++`]
  1407. * {xref-SafeCast-toInt72-int256-}[`++toInt72(value)++`]
  1408. * {xref-SafeCast-toInt64-int256-}[`++toInt64(value)++`]
  1409. * {xref-SafeCast-toInt56-int256-}[`++toInt56(value)++`]
  1410. * {xref-SafeCast-toInt48-int256-}[`++toInt48(value)++`]
  1411. * {xref-SafeCast-toInt40-int256-}[`++toInt40(value)++`]
  1412. * {xref-SafeCast-toInt32-int256-}[`++toInt32(value)++`]
  1413. * {xref-SafeCast-toInt24-int256-}[`++toInt24(value)++`]
  1414. * {xref-SafeCast-toInt16-int256-}[`++toInt16(value)++`]
  1415. * {xref-SafeCast-toInt8-int256-}[`++toInt8(value)++`]
  1416. * {xref-SafeCast-toInt256-uint256-}[`++toInt256(value)++`]
  1417. * {xref-SafeCast-toUint-bool-}[`++toUint(b)++`]
  1418. --
  1419. [.contract-index]
  1420. .Errors
  1421. --
  1422. * {xref-SafeCast-SafeCastOverflowedUintDowncast-uint8-uint256-}[`++SafeCastOverflowedUintDowncast(bits, value)++`]
  1423. * {xref-SafeCast-SafeCastOverflowedIntToUint-int256-}[`++SafeCastOverflowedIntToUint(value)++`]
  1424. * {xref-SafeCast-SafeCastOverflowedIntDowncast-uint8-int256-}[`++SafeCastOverflowedIntDowncast(bits, value)++`]
  1425. * {xref-SafeCast-SafeCastOverflowedUintToInt-uint256-}[`++SafeCastOverflowedUintToInt(value)++`]
  1426. --
  1427. [.contract-item]
  1428. [[SafeCast-toUint248-uint256-]]
  1429. ==== `[.contract-item-name]#++toUint248++#++(uint256 value) โ†’ uint248++` [.item-kind]#internal#
  1430. Returns the downcasted uint248 from uint256, reverting on
  1431. overflow (when the input is greater than largest uint248).
  1432. Counterpart to Solidity's `uint248` operator.
  1433. Requirements:
  1434. - input must fit into 248 bits
  1435. [.contract-item]
  1436. [[SafeCast-toUint240-uint256-]]
  1437. ==== `[.contract-item-name]#++toUint240++#++(uint256 value) โ†’ uint240++` [.item-kind]#internal#
  1438. Returns the downcasted uint240 from uint256, reverting on
  1439. overflow (when the input is greater than largest uint240).
  1440. Counterpart to Solidity's `uint240` operator.
  1441. Requirements:
  1442. - input must fit into 240 bits
  1443. [.contract-item]
  1444. [[SafeCast-toUint232-uint256-]]
  1445. ==== `[.contract-item-name]#++toUint232++#++(uint256 value) โ†’ uint232++` [.item-kind]#internal#
  1446. Returns the downcasted uint232 from uint256, reverting on
  1447. overflow (when the input is greater than largest uint232).
  1448. Counterpart to Solidity's `uint232` operator.
  1449. Requirements:
  1450. - input must fit into 232 bits
  1451. [.contract-item]
  1452. [[SafeCast-toUint224-uint256-]]
  1453. ==== `[.contract-item-name]#++toUint224++#++(uint256 value) โ†’ uint224++` [.item-kind]#internal#
  1454. Returns the downcasted uint224 from uint256, reverting on
  1455. overflow (when the input is greater than largest uint224).
  1456. Counterpart to Solidity's `uint224` operator.
  1457. Requirements:
  1458. - input must fit into 224 bits
  1459. [.contract-item]
  1460. [[SafeCast-toUint216-uint256-]]
  1461. ==== `[.contract-item-name]#++toUint216++#++(uint256 value) โ†’ uint216++` [.item-kind]#internal#
  1462. Returns the downcasted uint216 from uint256, reverting on
  1463. overflow (when the input is greater than largest uint216).
  1464. Counterpart to Solidity's `uint216` operator.
  1465. Requirements:
  1466. - input must fit into 216 bits
  1467. [.contract-item]
  1468. [[SafeCast-toUint208-uint256-]]
  1469. ==== `[.contract-item-name]#++toUint208++#++(uint256 value) โ†’ uint208++` [.item-kind]#internal#
  1470. Returns the downcasted uint208 from uint256, reverting on
  1471. overflow (when the input is greater than largest uint208).
  1472. Counterpart to Solidity's `uint208` operator.
  1473. Requirements:
  1474. - input must fit into 208 bits
  1475. [.contract-item]
  1476. [[SafeCast-toUint200-uint256-]]
  1477. ==== `[.contract-item-name]#++toUint200++#++(uint256 value) โ†’ uint200++` [.item-kind]#internal#
  1478. Returns the downcasted uint200 from uint256, reverting on
  1479. overflow (when the input is greater than largest uint200).
  1480. Counterpart to Solidity's `uint200` operator.
  1481. Requirements:
  1482. - input must fit into 200 bits
  1483. [.contract-item]
  1484. [[SafeCast-toUint192-uint256-]]
  1485. ==== `[.contract-item-name]#++toUint192++#++(uint256 value) โ†’ uint192++` [.item-kind]#internal#
  1486. Returns the downcasted uint192 from uint256, reverting on
  1487. overflow (when the input is greater than largest uint192).
  1488. Counterpart to Solidity's `uint192` operator.
  1489. Requirements:
  1490. - input must fit into 192 bits
  1491. [.contract-item]
  1492. [[SafeCast-toUint184-uint256-]]
  1493. ==== `[.contract-item-name]#++toUint184++#++(uint256 value) โ†’ uint184++` [.item-kind]#internal#
  1494. Returns the downcasted uint184 from uint256, reverting on
  1495. overflow (when the input is greater than largest uint184).
  1496. Counterpart to Solidity's `uint184` operator.
  1497. Requirements:
  1498. - input must fit into 184 bits
  1499. [.contract-item]
  1500. [[SafeCast-toUint176-uint256-]]
  1501. ==== `[.contract-item-name]#++toUint176++#++(uint256 value) โ†’ uint176++` [.item-kind]#internal#
  1502. Returns the downcasted uint176 from uint256, reverting on
  1503. overflow (when the input is greater than largest uint176).
  1504. Counterpart to Solidity's `uint176` operator.
  1505. Requirements:
  1506. - input must fit into 176 bits
  1507. [.contract-item]
  1508. [[SafeCast-toUint168-uint256-]]
  1509. ==== `[.contract-item-name]#++toUint168++#++(uint256 value) โ†’ uint168++` [.item-kind]#internal#
  1510. Returns the downcasted uint168 from uint256, reverting on
  1511. overflow (when the input is greater than largest uint168).
  1512. Counterpart to Solidity's `uint168` operator.
  1513. Requirements:
  1514. - input must fit into 168 bits
  1515. [.contract-item]
  1516. [[SafeCast-toUint160-uint256-]]
  1517. ==== `[.contract-item-name]#++toUint160++#++(uint256 value) โ†’ uint160++` [.item-kind]#internal#
  1518. Returns the downcasted uint160 from uint256, reverting on
  1519. overflow (when the input is greater than largest uint160).
  1520. Counterpart to Solidity's `uint160` operator.
  1521. Requirements:
  1522. - input must fit into 160 bits
  1523. [.contract-item]
  1524. [[SafeCast-toUint152-uint256-]]
  1525. ==== `[.contract-item-name]#++toUint152++#++(uint256 value) โ†’ uint152++` [.item-kind]#internal#
  1526. Returns the downcasted uint152 from uint256, reverting on
  1527. overflow (when the input is greater than largest uint152).
  1528. Counterpart to Solidity's `uint152` operator.
  1529. Requirements:
  1530. - input must fit into 152 bits
  1531. [.contract-item]
  1532. [[SafeCast-toUint144-uint256-]]
  1533. ==== `[.contract-item-name]#++toUint144++#++(uint256 value) โ†’ uint144++` [.item-kind]#internal#
  1534. Returns the downcasted uint144 from uint256, reverting on
  1535. overflow (when the input is greater than largest uint144).
  1536. Counterpart to Solidity's `uint144` operator.
  1537. Requirements:
  1538. - input must fit into 144 bits
  1539. [.contract-item]
  1540. [[SafeCast-toUint136-uint256-]]
  1541. ==== `[.contract-item-name]#++toUint136++#++(uint256 value) โ†’ uint136++` [.item-kind]#internal#
  1542. Returns the downcasted uint136 from uint256, reverting on
  1543. overflow (when the input is greater than largest uint136).
  1544. Counterpart to Solidity's `uint136` operator.
  1545. Requirements:
  1546. - input must fit into 136 bits
  1547. [.contract-item]
  1548. [[SafeCast-toUint128-uint256-]]
  1549. ==== `[.contract-item-name]#++toUint128++#++(uint256 value) โ†’ uint128++` [.item-kind]#internal#
  1550. Returns the downcasted uint128 from uint256, reverting on
  1551. overflow (when the input is greater than largest uint128).
  1552. Counterpart to Solidity's `uint128` operator.
  1553. Requirements:
  1554. - input must fit into 128 bits
  1555. [.contract-item]
  1556. [[SafeCast-toUint120-uint256-]]
  1557. ==== `[.contract-item-name]#++toUint120++#++(uint256 value) โ†’ uint120++` [.item-kind]#internal#
  1558. Returns the downcasted uint120 from uint256, reverting on
  1559. overflow (when the input is greater than largest uint120).
  1560. Counterpart to Solidity's `uint120` operator.
  1561. Requirements:
  1562. - input must fit into 120 bits
  1563. [.contract-item]
  1564. [[SafeCast-toUint112-uint256-]]
  1565. ==== `[.contract-item-name]#++toUint112++#++(uint256 value) โ†’ uint112++` [.item-kind]#internal#
  1566. Returns the downcasted uint112 from uint256, reverting on
  1567. overflow (when the input is greater than largest uint112).
  1568. Counterpart to Solidity's `uint112` operator.
  1569. Requirements:
  1570. - input must fit into 112 bits
  1571. [.contract-item]
  1572. [[SafeCast-toUint104-uint256-]]
  1573. ==== `[.contract-item-name]#++toUint104++#++(uint256 value) โ†’ uint104++` [.item-kind]#internal#
  1574. Returns the downcasted uint104 from uint256, reverting on
  1575. overflow (when the input is greater than largest uint104).
  1576. Counterpart to Solidity's `uint104` operator.
  1577. Requirements:
  1578. - input must fit into 104 bits
  1579. [.contract-item]
  1580. [[SafeCast-toUint96-uint256-]]
  1581. ==== `[.contract-item-name]#++toUint96++#++(uint256 value) โ†’ uint96++` [.item-kind]#internal#
  1582. Returns the downcasted uint96 from uint256, reverting on
  1583. overflow (when the input is greater than largest uint96).
  1584. Counterpart to Solidity's `uint96` operator.
  1585. Requirements:
  1586. - input must fit into 96 bits
  1587. [.contract-item]
  1588. [[SafeCast-toUint88-uint256-]]
  1589. ==== `[.contract-item-name]#++toUint88++#++(uint256 value) โ†’ uint88++` [.item-kind]#internal#
  1590. Returns the downcasted uint88 from uint256, reverting on
  1591. overflow (when the input is greater than largest uint88).
  1592. Counterpart to Solidity's `uint88` operator.
  1593. Requirements:
  1594. - input must fit into 88 bits
  1595. [.contract-item]
  1596. [[SafeCast-toUint80-uint256-]]
  1597. ==== `[.contract-item-name]#++toUint80++#++(uint256 value) โ†’ uint80++` [.item-kind]#internal#
  1598. Returns the downcasted uint80 from uint256, reverting on
  1599. overflow (when the input is greater than largest uint80).
  1600. Counterpart to Solidity's `uint80` operator.
  1601. Requirements:
  1602. - input must fit into 80 bits
  1603. [.contract-item]
  1604. [[SafeCast-toUint72-uint256-]]
  1605. ==== `[.contract-item-name]#++toUint72++#++(uint256 value) โ†’ uint72++` [.item-kind]#internal#
  1606. Returns the downcasted uint72 from uint256, reverting on
  1607. overflow (when the input is greater than largest uint72).
  1608. Counterpart to Solidity's `uint72` operator.
  1609. Requirements:
  1610. - input must fit into 72 bits
  1611. [.contract-item]
  1612. [[SafeCast-toUint64-uint256-]]
  1613. ==== `[.contract-item-name]#++toUint64++#++(uint256 value) โ†’ uint64++` [.item-kind]#internal#
  1614. Returns the downcasted uint64 from uint256, reverting on
  1615. overflow (when the input is greater than largest uint64).
  1616. Counterpart to Solidity's `uint64` operator.
  1617. Requirements:
  1618. - input must fit into 64 bits
  1619. [.contract-item]
  1620. [[SafeCast-toUint56-uint256-]]
  1621. ==== `[.contract-item-name]#++toUint56++#++(uint256 value) โ†’ uint56++` [.item-kind]#internal#
  1622. Returns the downcasted uint56 from uint256, reverting on
  1623. overflow (when the input is greater than largest uint56).
  1624. Counterpart to Solidity's `uint56` operator.
  1625. Requirements:
  1626. - input must fit into 56 bits
  1627. [.contract-item]
  1628. [[SafeCast-toUint48-uint256-]]
  1629. ==== `[.contract-item-name]#++toUint48++#++(uint256 value) โ†’ uint48++` [.item-kind]#internal#
  1630. Returns the downcasted uint48 from uint256, reverting on
  1631. overflow (when the input is greater than largest uint48).
  1632. Counterpart to Solidity's `uint48` operator.
  1633. Requirements:
  1634. - input must fit into 48 bits
  1635. [.contract-item]
  1636. [[SafeCast-toUint40-uint256-]]
  1637. ==== `[.contract-item-name]#++toUint40++#++(uint256 value) โ†’ uint40++` [.item-kind]#internal#
  1638. Returns the downcasted uint40 from uint256, reverting on
  1639. overflow (when the input is greater than largest uint40).
  1640. Counterpart to Solidity's `uint40` operator.
  1641. Requirements:
  1642. - input must fit into 40 bits
  1643. [.contract-item]
  1644. [[SafeCast-toUint32-uint256-]]
  1645. ==== `[.contract-item-name]#++toUint32++#++(uint256 value) โ†’ uint32++` [.item-kind]#internal#
  1646. Returns the downcasted uint32 from uint256, reverting on
  1647. overflow (when the input is greater than largest uint32).
  1648. Counterpart to Solidity's `uint32` operator.
  1649. Requirements:
  1650. - input must fit into 32 bits
  1651. [.contract-item]
  1652. [[SafeCast-toUint24-uint256-]]
  1653. ==== `[.contract-item-name]#++toUint24++#++(uint256 value) โ†’ uint24++` [.item-kind]#internal#
  1654. Returns the downcasted uint24 from uint256, reverting on
  1655. overflow (when the input is greater than largest uint24).
  1656. Counterpart to Solidity's `uint24` operator.
  1657. Requirements:
  1658. - input must fit into 24 bits
  1659. [.contract-item]
  1660. [[SafeCast-toUint16-uint256-]]
  1661. ==== `[.contract-item-name]#++toUint16++#++(uint256 value) โ†’ uint16++` [.item-kind]#internal#
  1662. Returns the downcasted uint16 from uint256, reverting on
  1663. overflow (when the input is greater than largest uint16).
  1664. Counterpart to Solidity's `uint16` operator.
  1665. Requirements:
  1666. - input must fit into 16 bits
  1667. [.contract-item]
  1668. [[SafeCast-toUint8-uint256-]]
  1669. ==== `[.contract-item-name]#++toUint8++#++(uint256 value) โ†’ uint8++` [.item-kind]#internal#
  1670. Returns the downcasted uint8 from uint256, reverting on
  1671. overflow (when the input is greater than largest uint8).
  1672. Counterpart to Solidity's `uint8` operator.
  1673. Requirements:
  1674. - input must fit into 8 bits
  1675. [.contract-item]
  1676. [[SafeCast-toUint256-int256-]]
  1677. ==== `[.contract-item-name]#++toUint256++#++(int256 value) โ†’ uint256++` [.item-kind]#internal#
  1678. Converts a signed int256 into an unsigned uint256.
  1679. Requirements:
  1680. - input must be greater than or equal to 0.
  1681. [.contract-item]
  1682. [[SafeCast-toInt248-int256-]]
  1683. ==== `[.contract-item-name]#++toInt248++#++(int256 value) โ†’ int248 downcasted++` [.item-kind]#internal#
  1684. Returns the downcasted int248 from int256, reverting on
  1685. overflow (when the input is less than smallest int248 or
  1686. greater than largest int248).
  1687. Counterpart to Solidity's `int248` operator.
  1688. Requirements:
  1689. - input must fit into 248 bits
  1690. [.contract-item]
  1691. [[SafeCast-toInt240-int256-]]
  1692. ==== `[.contract-item-name]#++toInt240++#++(int256 value) โ†’ int240 downcasted++` [.item-kind]#internal#
  1693. Returns the downcasted int240 from int256, reverting on
  1694. overflow (when the input is less than smallest int240 or
  1695. greater than largest int240).
  1696. Counterpart to Solidity's `int240` operator.
  1697. Requirements:
  1698. - input must fit into 240 bits
  1699. [.contract-item]
  1700. [[SafeCast-toInt232-int256-]]
  1701. ==== `[.contract-item-name]#++toInt232++#++(int256 value) โ†’ int232 downcasted++` [.item-kind]#internal#
  1702. Returns the downcasted int232 from int256, reverting on
  1703. overflow (when the input is less than smallest int232 or
  1704. greater than largest int232).
  1705. Counterpart to Solidity's `int232` operator.
  1706. Requirements:
  1707. - input must fit into 232 bits
  1708. [.contract-item]
  1709. [[SafeCast-toInt224-int256-]]
  1710. ==== `[.contract-item-name]#++toInt224++#++(int256 value) โ†’ int224 downcasted++` [.item-kind]#internal#
  1711. Returns the downcasted int224 from int256, reverting on
  1712. overflow (when the input is less than smallest int224 or
  1713. greater than largest int224).
  1714. Counterpart to Solidity's `int224` operator.
  1715. Requirements:
  1716. - input must fit into 224 bits
  1717. [.contract-item]
  1718. [[SafeCast-toInt216-int256-]]
  1719. ==== `[.contract-item-name]#++toInt216++#++(int256 value) โ†’ int216 downcasted++` [.item-kind]#internal#
  1720. Returns the downcasted int216 from int256, reverting on
  1721. overflow (when the input is less than smallest int216 or
  1722. greater than largest int216).
  1723. Counterpart to Solidity's `int216` operator.
  1724. Requirements:
  1725. - input must fit into 216 bits
  1726. [.contract-item]
  1727. [[SafeCast-toInt208-int256-]]
  1728. ==== `[.contract-item-name]#++toInt208++#++(int256 value) โ†’ int208 downcasted++` [.item-kind]#internal#
  1729. Returns the downcasted int208 from int256, reverting on
  1730. overflow (when the input is less than smallest int208 or
  1731. greater than largest int208).
  1732. Counterpart to Solidity's `int208` operator.
  1733. Requirements:
  1734. - input must fit into 208 bits
  1735. [.contract-item]
  1736. [[SafeCast-toInt200-int256-]]
  1737. ==== `[.contract-item-name]#++toInt200++#++(int256 value) โ†’ int200 downcasted++` [.item-kind]#internal#
  1738. Returns the downcasted int200 from int256, reverting on
  1739. overflow (when the input is less than smallest int200 or
  1740. greater than largest int200).
  1741. Counterpart to Solidity's `int200` operator.
  1742. Requirements:
  1743. - input must fit into 200 bits
  1744. [.contract-item]
  1745. [[SafeCast-toInt192-int256-]]
  1746. ==== `[.contract-item-name]#++toInt192++#++(int256 value) โ†’ int192 downcasted++` [.item-kind]#internal#
  1747. Returns the downcasted int192 from int256, reverting on
  1748. overflow (when the input is less than smallest int192 or
  1749. greater than largest int192).
  1750. Counterpart to Solidity's `int192` operator.
  1751. Requirements:
  1752. - input must fit into 192 bits
  1753. [.contract-item]
  1754. [[SafeCast-toInt184-int256-]]
  1755. ==== `[.contract-item-name]#++toInt184++#++(int256 value) โ†’ int184 downcasted++` [.item-kind]#internal#
  1756. Returns the downcasted int184 from int256, reverting on
  1757. overflow (when the input is less than smallest int184 or
  1758. greater than largest int184).
  1759. Counterpart to Solidity's `int184` operator.
  1760. Requirements:
  1761. - input must fit into 184 bits
  1762. [.contract-item]
  1763. [[SafeCast-toInt176-int256-]]
  1764. ==== `[.contract-item-name]#++toInt176++#++(int256 value) โ†’ int176 downcasted++` [.item-kind]#internal#
  1765. Returns the downcasted int176 from int256, reverting on
  1766. overflow (when the input is less than smallest int176 or
  1767. greater than largest int176).
  1768. Counterpart to Solidity's `int176` operator.
  1769. Requirements:
  1770. - input must fit into 176 bits
  1771. [.contract-item]
  1772. [[SafeCast-toInt168-int256-]]
  1773. ==== `[.contract-item-name]#++toInt168++#++(int256 value) โ†’ int168 downcasted++` [.item-kind]#internal#
  1774. Returns the downcasted int168 from int256, reverting on
  1775. overflow (when the input is less than smallest int168 or
  1776. greater than largest int168).
  1777. Counterpart to Solidity's `int168` operator.
  1778. Requirements:
  1779. - input must fit into 168 bits
  1780. [.contract-item]
  1781. [[SafeCast-toInt160-int256-]]
  1782. ==== `[.contract-item-name]#++toInt160++#++(int256 value) โ†’ int160 downcasted++` [.item-kind]#internal#
  1783. Returns the downcasted int160 from int256, reverting on
  1784. overflow (when the input is less than smallest int160 or
  1785. greater than largest int160).
  1786. Counterpart to Solidity's `int160` operator.
  1787. Requirements:
  1788. - input must fit into 160 bits
  1789. [.contract-item]
  1790. [[SafeCast-toInt152-int256-]]
  1791. ==== `[.contract-item-name]#++toInt152++#++(int256 value) โ†’ int152 downcasted++` [.item-kind]#internal#
  1792. Returns the downcasted int152 from int256, reverting on
  1793. overflow (when the input is less than smallest int152 or
  1794. greater than largest int152).
  1795. Counterpart to Solidity's `int152` operator.
  1796. Requirements:
  1797. - input must fit into 152 bits
  1798. [.contract-item]
  1799. [[SafeCast-toInt144-int256-]]
  1800. ==== `[.contract-item-name]#++toInt144++#++(int256 value) โ†’ int144 downcasted++` [.item-kind]#internal#
  1801. Returns the downcasted int144 from int256, reverting on
  1802. overflow (when the input is less than smallest int144 or
  1803. greater than largest int144).
  1804. Counterpart to Solidity's `int144` operator.
  1805. Requirements:
  1806. - input must fit into 144 bits
  1807. [.contract-item]
  1808. [[SafeCast-toInt136-int256-]]
  1809. ==== `[.contract-item-name]#++toInt136++#++(int256 value) โ†’ int136 downcasted++` [.item-kind]#internal#
  1810. Returns the downcasted int136 from int256, reverting on
  1811. overflow (when the input is less than smallest int136 or
  1812. greater than largest int136).
  1813. Counterpart to Solidity's `int136` operator.
  1814. Requirements:
  1815. - input must fit into 136 bits
  1816. [.contract-item]
  1817. [[SafeCast-toInt128-int256-]]
  1818. ==== `[.contract-item-name]#++toInt128++#++(int256 value) โ†’ int128 downcasted++` [.item-kind]#internal#
  1819. Returns the downcasted int128 from int256, reverting on
  1820. overflow (when the input is less than smallest int128 or
  1821. greater than largest int128).
  1822. Counterpart to Solidity's `int128` operator.
  1823. Requirements:
  1824. - input must fit into 128 bits
  1825. [.contract-item]
  1826. [[SafeCast-toInt120-int256-]]
  1827. ==== `[.contract-item-name]#++toInt120++#++(int256 value) โ†’ int120 downcasted++` [.item-kind]#internal#
  1828. Returns the downcasted int120 from int256, reverting on
  1829. overflow (when the input is less than smallest int120 or
  1830. greater than largest int120).
  1831. Counterpart to Solidity's `int120` operator.
  1832. Requirements:
  1833. - input must fit into 120 bits
  1834. [.contract-item]
  1835. [[SafeCast-toInt112-int256-]]
  1836. ==== `[.contract-item-name]#++toInt112++#++(int256 value) โ†’ int112 downcasted++` [.item-kind]#internal#
  1837. Returns the downcasted int112 from int256, reverting on
  1838. overflow (when the input is less than smallest int112 or
  1839. greater than largest int112).
  1840. Counterpart to Solidity's `int112` operator.
  1841. Requirements:
  1842. - input must fit into 112 bits
  1843. [.contract-item]
  1844. [[SafeCast-toInt104-int256-]]
  1845. ==== `[.contract-item-name]#++toInt104++#++(int256 value) โ†’ int104 downcasted++` [.item-kind]#internal#
  1846. Returns the downcasted int104 from int256, reverting on
  1847. overflow (when the input is less than smallest int104 or
  1848. greater than largest int104).
  1849. Counterpart to Solidity's `int104` operator.
  1850. Requirements:
  1851. - input must fit into 104 bits
  1852. [.contract-item]
  1853. [[SafeCast-toInt96-int256-]]
  1854. ==== `[.contract-item-name]#++toInt96++#++(int256 value) โ†’ int96 downcasted++` [.item-kind]#internal#
  1855. Returns the downcasted int96 from int256, reverting on
  1856. overflow (when the input is less than smallest int96 or
  1857. greater than largest int96).
  1858. Counterpart to Solidity's `int96` operator.
  1859. Requirements:
  1860. - input must fit into 96 bits
  1861. [.contract-item]
  1862. [[SafeCast-toInt88-int256-]]
  1863. ==== `[.contract-item-name]#++toInt88++#++(int256 value) โ†’ int88 downcasted++` [.item-kind]#internal#
  1864. Returns the downcasted int88 from int256, reverting on
  1865. overflow (when the input is less than smallest int88 or
  1866. greater than largest int88).
  1867. Counterpart to Solidity's `int88` operator.
  1868. Requirements:
  1869. - input must fit into 88 bits
  1870. [.contract-item]
  1871. [[SafeCast-toInt80-int256-]]
  1872. ==== `[.contract-item-name]#++toInt80++#++(int256 value) โ†’ int80 downcasted++` [.item-kind]#internal#
  1873. Returns the downcasted int80 from int256, reverting on
  1874. overflow (when the input is less than smallest int80 or
  1875. greater than largest int80).
  1876. Counterpart to Solidity's `int80` operator.
  1877. Requirements:
  1878. - input must fit into 80 bits
  1879. [.contract-item]
  1880. [[SafeCast-toInt72-int256-]]
  1881. ==== `[.contract-item-name]#++toInt72++#++(int256 value) โ†’ int72 downcasted++` [.item-kind]#internal#
  1882. Returns the downcasted int72 from int256, reverting on
  1883. overflow (when the input is less than smallest int72 or
  1884. greater than largest int72).
  1885. Counterpart to Solidity's `int72` operator.
  1886. Requirements:
  1887. - input must fit into 72 bits
  1888. [.contract-item]
  1889. [[SafeCast-toInt64-int256-]]
  1890. ==== `[.contract-item-name]#++toInt64++#++(int256 value) โ†’ int64 downcasted++` [.item-kind]#internal#
  1891. Returns the downcasted int64 from int256, reverting on
  1892. overflow (when the input is less than smallest int64 or
  1893. greater than largest int64).
  1894. Counterpart to Solidity's `int64` operator.
  1895. Requirements:
  1896. - input must fit into 64 bits
  1897. [.contract-item]
  1898. [[SafeCast-toInt56-int256-]]
  1899. ==== `[.contract-item-name]#++toInt56++#++(int256 value) โ†’ int56 downcasted++` [.item-kind]#internal#
  1900. Returns the downcasted int56 from int256, reverting on
  1901. overflow (when the input is less than smallest int56 or
  1902. greater than largest int56).
  1903. Counterpart to Solidity's `int56` operator.
  1904. Requirements:
  1905. - input must fit into 56 bits
  1906. [.contract-item]
  1907. [[SafeCast-toInt48-int256-]]
  1908. ==== `[.contract-item-name]#++toInt48++#++(int256 value) โ†’ int48 downcasted++` [.item-kind]#internal#
  1909. Returns the downcasted int48 from int256, reverting on
  1910. overflow (when the input is less than smallest int48 or
  1911. greater than largest int48).
  1912. Counterpart to Solidity's `int48` operator.
  1913. Requirements:
  1914. - input must fit into 48 bits
  1915. [.contract-item]
  1916. [[SafeCast-toInt40-int256-]]
  1917. ==== `[.contract-item-name]#++toInt40++#++(int256 value) โ†’ int40 downcasted++` [.item-kind]#internal#
  1918. Returns the downcasted int40 from int256, reverting on
  1919. overflow (when the input is less than smallest int40 or
  1920. greater than largest int40).
  1921. Counterpart to Solidity's `int40` operator.
  1922. Requirements:
  1923. - input must fit into 40 bits
  1924. [.contract-item]
  1925. [[SafeCast-toInt32-int256-]]
  1926. ==== `[.contract-item-name]#++toInt32++#++(int256 value) โ†’ int32 downcasted++` [.item-kind]#internal#
  1927. Returns the downcasted int32 from int256, reverting on
  1928. overflow (when the input is less than smallest int32 or
  1929. greater than largest int32).
  1930. Counterpart to Solidity's `int32` operator.
  1931. Requirements:
  1932. - input must fit into 32 bits
  1933. [.contract-item]
  1934. [[SafeCast-toInt24-int256-]]
  1935. ==== `[.contract-item-name]#++toInt24++#++(int256 value) โ†’ int24 downcasted++` [.item-kind]#internal#
  1936. Returns the downcasted int24 from int256, reverting on
  1937. overflow (when the input is less than smallest int24 or
  1938. greater than largest int24).
  1939. Counterpart to Solidity's `int24` operator.
  1940. Requirements:
  1941. - input must fit into 24 bits
  1942. [.contract-item]
  1943. [[SafeCast-toInt16-int256-]]
  1944. ==== `[.contract-item-name]#++toInt16++#++(int256 value) โ†’ int16 downcasted++` [.item-kind]#internal#
  1945. Returns the downcasted int16 from int256, reverting on
  1946. overflow (when the input is less than smallest int16 or
  1947. greater than largest int16).
  1948. Counterpart to Solidity's `int16` operator.
  1949. Requirements:
  1950. - input must fit into 16 bits
  1951. [.contract-item]
  1952. [[SafeCast-toInt8-int256-]]
  1953. ==== `[.contract-item-name]#++toInt8++#++(int256 value) โ†’ int8 downcasted++` [.item-kind]#internal#
  1954. Returns the downcasted int8 from int256, reverting on
  1955. overflow (when the input is less than smallest int8 or
  1956. greater than largest int8).
  1957. Counterpart to Solidity's `int8` operator.
  1958. Requirements:
  1959. - input must fit into 8 bits
  1960. [.contract-item]
  1961. [[SafeCast-toInt256-uint256-]]
  1962. ==== `[.contract-item-name]#++toInt256++#++(uint256 value) โ†’ int256++` [.item-kind]#internal#
  1963. Converts an unsigned uint256 into a signed int256.
  1964. Requirements:
  1965. - input must be less than or equal to maxInt256.
  1966. [.contract-item]
  1967. [[SafeCast-toUint-bool-]]
  1968. ==== `[.contract-item-name]#++toUint++#++(bool b) โ†’ uint256 u++` [.item-kind]#internal#
  1969. Cast a boolean (false or true) to a uint256 (0 or 1) with no jump.
  1970. [.contract-item]
  1971. [[SafeCast-SafeCastOverflowedUintDowncast-uint8-uint256-]]
  1972. ==== `[.contract-item-name]#++SafeCastOverflowedUintDowncast++#++(uint8 bits, uint256 value)++` [.item-kind]#error#
  1973. Value doesn't fit in an uint of `bits` size.
  1974. [.contract-item]
  1975. [[SafeCast-SafeCastOverflowedIntToUint-int256-]]
  1976. ==== `[.contract-item-name]#++SafeCastOverflowedIntToUint++#++(int256 value)++` [.item-kind]#error#
  1977. An int value doesn't fit in an uint of `bits` size.
  1978. [.contract-item]
  1979. [[SafeCast-SafeCastOverflowedIntDowncast-uint8-int256-]]
  1980. ==== `[.contract-item-name]#++SafeCastOverflowedIntDowncast++#++(uint8 bits, int256 value)++` [.item-kind]#error#
  1981. Value doesn't fit in an int of `bits` size.
  1982. [.contract-item]
  1983. [[SafeCast-SafeCastOverflowedUintToInt-uint256-]]
  1984. ==== `[.contract-item-name]#++SafeCastOverflowedUintToInt++#++(uint256 value)++` [.item-kind]#error#
  1985. An uint value doesn't fit in an int of `bits` size.
  1986. == Security
  1987. :ReentrancyGuardReentrantCall: pass:normal[xref:#ReentrancyGuard-ReentrancyGuardReentrantCall--[`++ReentrancyGuardReentrantCall++`]]
  1988. :constructor: pass:normal[xref:#ReentrancyGuard-constructor--[`++constructor++`]]
  1989. :nonReentrant: pass:normal[xref:#ReentrancyGuard-nonReentrant--[`++nonReentrant++`]]
  1990. :_reentrancyGuardEntered: pass:normal[xref:#ReentrancyGuard-_reentrancyGuardEntered--[`++_reentrancyGuardEntered++`]]
  1991. :constructor-: pass:normal[xref:#ReentrancyGuard-constructor--[`++constructor++`]]
  1992. :_reentrancyGuardEntered-: pass:normal[xref:#ReentrancyGuard-_reentrancyGuardEntered--[`++_reentrancyGuardEntered++`]]
  1993. [.contract]
  1994. [[ReentrancyGuard]]
  1995. === `++ReentrancyGuard++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/ReentrancyGuard.sol[{github-icon},role=heading-link]
  1996. [.hljs-theme-light.nopadding]
  1997. ```solidity
  1998. import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
  1999. ```
  2000. Contract module that helps prevent reentrant calls to a function.
  2001. Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
  2002. available, which can be applied to functions to make sure there are no nested
  2003. (reentrant) calls to them.
  2004. Note that because there is a single `nonReentrant` guard, functions marked as
  2005. `nonReentrant` may not call one another. This can be worked around by making
  2006. those functions `private`, and then adding `external` `nonReentrant` entry
  2007. points to them.
  2008. TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,
  2009. consider using {ReentrancyGuardTransient} instead.
  2010. TIP: If you would like to learn more about reentrancy and alternative ways
  2011. to protect against it, check out our blog post
  2012. https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
  2013. [.contract-index]
  2014. .Modifiers
  2015. --
  2016. * {xref-ReentrancyGuard-nonReentrant--}[`++nonReentrant()++`]
  2017. --
  2018. [.contract-index]
  2019. .Functions
  2020. --
  2021. * {xref-ReentrancyGuard-constructor--}[`++constructor()++`]
  2022. * {xref-ReentrancyGuard-_reentrancyGuardEntered--}[`++_reentrancyGuardEntered()++`]
  2023. --
  2024. [.contract-index]
  2025. .Errors
  2026. --
  2027. * {xref-ReentrancyGuard-ReentrancyGuardReentrantCall--}[`++ReentrancyGuardReentrantCall()++`]
  2028. --
  2029. [.contract-item]
  2030. [[ReentrancyGuard-nonReentrant--]]
  2031. ==== `[.contract-item-name]#++nonReentrant++#++()++` [.item-kind]#modifier#
  2032. Prevents a contract from calling itself, directly or indirectly.
  2033. Calling a `nonReentrant` function from another `nonReentrant`
  2034. function is not supported. It is possible to prevent this from happening
  2035. by making the `nonReentrant` function external, and making it call a
  2036. `private` function that does the actual work.
  2037. [.contract-item]
  2038. [[ReentrancyGuard-constructor--]]
  2039. ==== `[.contract-item-name]#++constructor++#++()++` [.item-kind]#internal#
  2040. [.contract-item]
  2041. [[ReentrancyGuard-_reentrancyGuardEntered--]]
  2042. ==== `[.contract-item-name]#++_reentrancyGuardEntered++#++() โ†’ bool++` [.item-kind]#internal#
  2043. Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
  2044. `nonReentrant` function in the call stack.
  2045. [.contract-item]
  2046. [[ReentrancyGuard-ReentrancyGuardReentrantCall--]]
  2047. ==== `[.contract-item-name]#++ReentrancyGuardReentrantCall++#++()++` [.item-kind]#error#
  2048. Unauthorized reentrant call.
  2049. :ReentrancyGuardReentrantCall: pass:normal[xref:#ReentrancyGuardTransient-ReentrancyGuardReentrantCall--[`++ReentrancyGuardReentrantCall++`]]
  2050. :nonReentrant: pass:normal[xref:#ReentrancyGuardTransient-nonReentrant--[`++nonReentrant++`]]
  2051. :_reentrancyGuardEntered: pass:normal[xref:#ReentrancyGuardTransient-_reentrancyGuardEntered--[`++_reentrancyGuardEntered++`]]
  2052. :_reentrancyGuardEntered-: pass:normal[xref:#ReentrancyGuardTransient-_reentrancyGuardEntered--[`++_reentrancyGuardEntered++`]]
  2053. [.contract]
  2054. [[ReentrancyGuardTransient]]
  2055. === `++ReentrancyGuardTransient++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/ReentrancyGuardTransient.sol[{github-icon},role=heading-link]
  2056. [.hljs-theme-light.nopadding]
  2057. ```solidity
  2058. import "@openzeppelin/contracts/utils/ReentrancyGuardTransient.sol";
  2059. ```
  2060. Variant of {ReentrancyGuard} that uses transient storage.
  2061. NOTE: This variant only works on networks where EIP-1153 is available.
  2062. _Available since v5.1._
  2063. [.contract-index]
  2064. .Modifiers
  2065. --
  2066. * {xref-ReentrancyGuardTransient-nonReentrant--}[`++nonReentrant()++`]
  2067. --
  2068. [.contract-index]
  2069. .Functions
  2070. --
  2071. * {xref-ReentrancyGuardTransient-_reentrancyGuardEntered--}[`++_reentrancyGuardEntered()++`]
  2072. --
  2073. [.contract-index]
  2074. .Errors
  2075. --
  2076. * {xref-ReentrancyGuardTransient-ReentrancyGuardReentrantCall--}[`++ReentrancyGuardReentrantCall()++`]
  2077. --
  2078. [.contract-item]
  2079. [[ReentrancyGuardTransient-nonReentrant--]]
  2080. ==== `[.contract-item-name]#++nonReentrant++#++()++` [.item-kind]#modifier#
  2081. Prevents a contract from calling itself, directly or indirectly.
  2082. Calling a `nonReentrant` function from another `nonReentrant`
  2083. function is not supported. It is possible to prevent this from happening
  2084. by making the `nonReentrant` function external, and making it call a
  2085. `private` function that does the actual work.
  2086. [.contract-item]
  2087. [[ReentrancyGuardTransient-_reentrancyGuardEntered--]]
  2088. ==== `[.contract-item-name]#++_reentrancyGuardEntered++#++() โ†’ bool++` [.item-kind]#internal#
  2089. Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
  2090. `nonReentrant` function in the call stack.
  2091. [.contract-item]
  2092. [[ReentrancyGuardTransient-ReentrancyGuardReentrantCall--]]
  2093. ==== `[.contract-item-name]#++ReentrancyGuardReentrantCall++#++()++` [.item-kind]#error#
  2094. Unauthorized reentrant call.
  2095. :Paused: pass:normal[xref:#Pausable-Paused-address-[`++Paused++`]]
  2096. :Unpaused: pass:normal[xref:#Pausable-Unpaused-address-[`++Unpaused++`]]
  2097. :EnforcedPause: pass:normal[xref:#Pausable-EnforcedPause--[`++EnforcedPause++`]]
  2098. :ExpectedPause: pass:normal[xref:#Pausable-ExpectedPause--[`++ExpectedPause++`]]
  2099. :whenNotPaused: pass:normal[xref:#Pausable-whenNotPaused--[`++whenNotPaused++`]]
  2100. :whenPaused: pass:normal[xref:#Pausable-whenPaused--[`++whenPaused++`]]
  2101. :paused: pass:normal[xref:#Pausable-paused--[`++paused++`]]
  2102. :_requireNotPaused: pass:normal[xref:#Pausable-_requireNotPaused--[`++_requireNotPaused++`]]
  2103. :_requirePaused: pass:normal[xref:#Pausable-_requirePaused--[`++_requirePaused++`]]
  2104. :_pause: pass:normal[xref:#Pausable-_pause--[`++_pause++`]]
  2105. :_unpause: pass:normal[xref:#Pausable-_unpause--[`++_unpause++`]]
  2106. :paused-: pass:normal[xref:#Pausable-paused--[`++paused++`]]
  2107. :_requireNotPaused-: pass:normal[xref:#Pausable-_requireNotPaused--[`++_requireNotPaused++`]]
  2108. :_requirePaused-: pass:normal[xref:#Pausable-_requirePaused--[`++_requirePaused++`]]
  2109. :_pause-: pass:normal[xref:#Pausable-_pause--[`++_pause++`]]
  2110. :_unpause-: pass:normal[xref:#Pausable-_unpause--[`++_unpause++`]]
  2111. [.contract]
  2112. [[Pausable]]
  2113. === `++Pausable++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/Pausable.sol[{github-icon},role=heading-link]
  2114. [.hljs-theme-light.nopadding]
  2115. ```solidity
  2116. import "@openzeppelin/contracts/utils/Pausable.sol";
  2117. ```
  2118. Contract module which allows children to implement an emergency stop
  2119. mechanism that can be triggered by an authorized account.
  2120. This module is used through inheritance. It will make available the
  2121. modifiers `whenNotPaused` and `whenPaused`, which can be applied to
  2122. the functions of your contract. Note that they will not be pausable by
  2123. simply including this module, only once the modifiers are put in place.
  2124. [.contract-index]
  2125. .Modifiers
  2126. --
  2127. * {xref-Pausable-whenNotPaused--}[`++whenNotPaused()++`]
  2128. * {xref-Pausable-whenPaused--}[`++whenPaused()++`]
  2129. --
  2130. [.contract-index]
  2131. .Functions
  2132. --
  2133. * {xref-Pausable-paused--}[`++paused()++`]
  2134. * {xref-Pausable-_requireNotPaused--}[`++_requireNotPaused()++`]
  2135. * {xref-Pausable-_requirePaused--}[`++_requirePaused()++`]
  2136. * {xref-Pausable-_pause--}[`++_pause()++`]
  2137. * {xref-Pausable-_unpause--}[`++_unpause()++`]
  2138. --
  2139. [.contract-index]
  2140. .Events
  2141. --
  2142. * {xref-Pausable-Paused-address-}[`++Paused(account)++`]
  2143. * {xref-Pausable-Unpaused-address-}[`++Unpaused(account)++`]
  2144. --
  2145. [.contract-index]
  2146. .Errors
  2147. --
  2148. * {xref-Pausable-EnforcedPause--}[`++EnforcedPause()++`]
  2149. * {xref-Pausable-ExpectedPause--}[`++ExpectedPause()++`]
  2150. --
  2151. [.contract-item]
  2152. [[Pausable-whenNotPaused--]]
  2153. ==== `[.contract-item-name]#++whenNotPaused++#++()++` [.item-kind]#modifier#
  2154. Modifier to make a function callable only when the contract is not paused.
  2155. Requirements:
  2156. - The contract must not be paused.
  2157. [.contract-item]
  2158. [[Pausable-whenPaused--]]
  2159. ==== `[.contract-item-name]#++whenPaused++#++()++` [.item-kind]#modifier#
  2160. Modifier to make a function callable only when the contract is paused.
  2161. Requirements:
  2162. - The contract must be paused.
  2163. [.contract-item]
  2164. [[Pausable-paused--]]
  2165. ==== `[.contract-item-name]#++paused++#++() โ†’ bool++` [.item-kind]#public#
  2166. Returns true if the contract is paused, and false otherwise.
  2167. [.contract-item]
  2168. [[Pausable-_requireNotPaused--]]
  2169. ==== `[.contract-item-name]#++_requireNotPaused++#++()++` [.item-kind]#internal#
  2170. Throws if the contract is paused.
  2171. [.contract-item]
  2172. [[Pausable-_requirePaused--]]
  2173. ==== `[.contract-item-name]#++_requirePaused++#++()++` [.item-kind]#internal#
  2174. Throws if the contract is not paused.
  2175. [.contract-item]
  2176. [[Pausable-_pause--]]
  2177. ==== `[.contract-item-name]#++_pause++#++()++` [.item-kind]#internal#
  2178. Triggers stopped state.
  2179. Requirements:
  2180. - The contract must not be paused.
  2181. [.contract-item]
  2182. [[Pausable-_unpause--]]
  2183. ==== `[.contract-item-name]#++_unpause++#++()++` [.item-kind]#internal#
  2184. Returns to normal state.
  2185. Requirements:
  2186. - The contract must be paused.
  2187. [.contract-item]
  2188. [[Pausable-Paused-address-]]
  2189. ==== `[.contract-item-name]#++Paused++#++(address account)++` [.item-kind]#event#
  2190. Emitted when the pause is triggered by `account`.
  2191. [.contract-item]
  2192. [[Pausable-Unpaused-address-]]
  2193. ==== `[.contract-item-name]#++Unpaused++#++(address account)++` [.item-kind]#event#
  2194. Emitted when the pause is lifted by `account`.
  2195. [.contract-item]
  2196. [[Pausable-EnforcedPause--]]
  2197. ==== `[.contract-item-name]#++EnforcedPause++#++()++` [.item-kind]#error#
  2198. The operation failed because the contract is paused.
  2199. [.contract-item]
  2200. [[Pausable-ExpectedPause--]]
  2201. ==== `[.contract-item-name]#++ExpectedPause++#++()++` [.item-kind]#error#
  2202. The operation failed because the contract is not paused.
  2203. :InvalidAccountNonce: pass:normal[xref:#Nonces-InvalidAccountNonce-address-uint256-[`++InvalidAccountNonce++`]]
  2204. :nonces: pass:normal[xref:#Nonces-nonces-address-[`++nonces++`]]
  2205. :_useNonce: pass:normal[xref:#Nonces-_useNonce-address-[`++_useNonce++`]]
  2206. :_useCheckedNonce: pass:normal[xref:#Nonces-_useCheckedNonce-address-uint256-[`++_useCheckedNonce++`]]
  2207. :nonces-address: pass:normal[xref:#Nonces-nonces-address-[`++nonces++`]]
  2208. :_useNonce-address: pass:normal[xref:#Nonces-_useNonce-address-[`++_useNonce++`]]
  2209. :_useCheckedNonce-address-uint256: pass:normal[xref:#Nonces-_useCheckedNonce-address-uint256-[`++_useCheckedNonce++`]]
  2210. [.contract]
  2211. [[Nonces]]
  2212. === `++Nonces++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/Nonces.sol[{github-icon},role=heading-link]
  2213. [.hljs-theme-light.nopadding]
  2214. ```solidity
  2215. import "@openzeppelin/contracts/utils/Nonces.sol";
  2216. ```
  2217. Provides tracking nonces for addresses. Nonces will only increment.
  2218. [.contract-index]
  2219. .Functions
  2220. --
  2221. * {xref-Nonces-nonces-address-}[`++nonces(owner)++`]
  2222. * {xref-Nonces-_useNonce-address-}[`++_useNonce(owner)++`]
  2223. * {xref-Nonces-_useCheckedNonce-address-uint256-}[`++_useCheckedNonce(owner, nonce)++`]
  2224. --
  2225. [.contract-index]
  2226. .Errors
  2227. --
  2228. * {xref-Nonces-InvalidAccountNonce-address-uint256-}[`++InvalidAccountNonce(account, currentNonce)++`]
  2229. --
  2230. [.contract-item]
  2231. [[Nonces-nonces-address-]]
  2232. ==== `[.contract-item-name]#++nonces++#++(address owner) โ†’ uint256++` [.item-kind]#public#
  2233. Returns the next unused nonce for an address.
  2234. [.contract-item]
  2235. [[Nonces-_useNonce-address-]]
  2236. ==== `[.contract-item-name]#++_useNonce++#++(address owner) โ†’ uint256++` [.item-kind]#internal#
  2237. Consumes a nonce.
  2238. Returns the current value and increments nonce.
  2239. [.contract-item]
  2240. [[Nonces-_useCheckedNonce-address-uint256-]]
  2241. ==== `[.contract-item-name]#++_useCheckedNonce++#++(address owner, uint256 nonce)++` [.item-kind]#internal#
  2242. Same as {_useNonce} but checking that `nonce` is the next valid for `owner`.
  2243. [.contract-item]
  2244. [[Nonces-InvalidAccountNonce-address-uint256-]]
  2245. ==== `[.contract-item-name]#++InvalidAccountNonce++#++(address account, uint256 currentNonce)++` [.item-kind]#error#
  2246. The nonce used for an `account` is not the expected current nonce.
  2247. :nonces: pass:normal[xref:#NoncesKeyed-nonces-address-uint192-[`++nonces++`]]
  2248. :_useNonce: pass:normal[xref:#NoncesKeyed-_useNonce-address-uint192-[`++_useNonce++`]]
  2249. :_useCheckedNonce: pass:normal[xref:#NoncesKeyed-_useCheckedNonce-address-uint256-[`++_useCheckedNonce++`]]
  2250. :_useCheckedNonce: pass:normal[xref:#NoncesKeyed-_useCheckedNonce-address-uint192-uint64-[`++_useCheckedNonce++`]]
  2251. :nonces-address-uint192: pass:normal[xref:#NoncesKeyed-nonces-address-uint192-[`++nonces++`]]
  2252. :_useNonce-address-uint192: pass:normal[xref:#NoncesKeyed-_useNonce-address-uint192-[`++_useNonce++`]]
  2253. :_useCheckedNonce-address-uint256: pass:normal[xref:#NoncesKeyed-_useCheckedNonce-address-uint256-[`++_useCheckedNonce++`]]
  2254. :_useCheckedNonce-address-uint192-uint64: pass:normal[xref:#NoncesKeyed-_useCheckedNonce-address-uint192-uint64-[`++_useCheckedNonce++`]]
  2255. [.contract]
  2256. [[NoncesKeyed]]
  2257. === `++NoncesKeyed++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/NoncesKeyed.sol[{github-icon},role=heading-link]
  2258. [.hljs-theme-light.nopadding]
  2259. ```solidity
  2260. import "@openzeppelin/contracts/utils/NoncesKeyed.sol";
  2261. ```
  2262. Alternative to {Nonces}, that supports key-ed nonces.
  2263. Follows the https://eips.ethereum.org/EIPS/eip-4337#semi-abstracted-nonce-support[ERC-4337's semi-abstracted nonce system].
  2264. NOTE: This contract inherits from {Nonces} and reuses its storage for the first nonce key (i.e. `0`). This
  2265. makes upgrading from {Nonces} to {NoncesKeyed} safe when using their upgradeable versions (e.g. `NoncesKeyedUpgradeable`).
  2266. Doing so will NOT reset the current state of nonces, avoiding replay attacks where a nonce is reused after the upgrade.
  2267. [.contract-index]
  2268. .Functions
  2269. --
  2270. * {xref-NoncesKeyed-nonces-address-uint192-}[`++nonces(owner, key)++`]
  2271. * {xref-NoncesKeyed-_useNonce-address-uint192-}[`++_useNonce(owner, key)++`]
  2272. * {xref-NoncesKeyed-_useCheckedNonce-address-uint256-}[`++_useCheckedNonce(owner, keyNonce)++`]
  2273. * {xref-NoncesKeyed-_useCheckedNonce-address-uint192-uint64-}[`++_useCheckedNonce(owner, key, nonce)++`]
  2274. [.contract-subindex-inherited]
  2275. .Nonces
  2276. * {xref-Nonces-nonces-address-}[`++nonces(owner)++`]
  2277. * {xref-Nonces-_useNonce-address-}[`++_useNonce(owner)++`]
  2278. --
  2279. [.contract-index]
  2280. .Errors
  2281. --
  2282. [.contract-subindex-inherited]
  2283. .Nonces
  2284. * {xref-Nonces-InvalidAccountNonce-address-uint256-}[`++InvalidAccountNonce(account, currentNonce)++`]
  2285. --
  2286. [.contract-item]
  2287. [[NoncesKeyed-nonces-address-uint192-]]
  2288. ==== `[.contract-item-name]#++nonces++#++(address owner, uint192 key) โ†’ uint256++` [.item-kind]#public#
  2289. Returns the next unused nonce for an address and key. Result contains the key prefix.
  2290. [.contract-item]
  2291. [[NoncesKeyed-_useNonce-address-uint192-]]
  2292. ==== `[.contract-item-name]#++_useNonce++#++(address owner, uint192 key) โ†’ uint256++` [.item-kind]#internal#
  2293. Consumes the next unused nonce for an address and key.
  2294. Returns the current value without the key prefix. Consumed nonce is increased, so calling this function twice
  2295. with the same arguments will return different (sequential) results.
  2296. [.contract-item]
  2297. [[NoncesKeyed-_useCheckedNonce-address-uint256-]]
  2298. ==== `[.contract-item-name]#++_useCheckedNonce++#++(address owner, uint256 keyNonce)++` [.item-kind]#internal#
  2299. Same as {_useNonce} but checking that `nonce` is the next valid for `owner`.
  2300. This version takes the key and the nonce in a single uint256 parameter:
  2301. - use the first 24 bytes for the key
  2302. - use the last 8 bytes for the nonce
  2303. [.contract-item]
  2304. [[NoncesKeyed-_useCheckedNonce-address-uint192-uint64-]]
  2305. ==== `[.contract-item-name]#++_useCheckedNonce++#++(address owner, uint192 key, uint64 nonce)++` [.item-kind]#internal#
  2306. Same as {_useNonce} but checking that `nonce` is the next valid for `owner`.
  2307. This version takes the key and the nonce as two different parameters.
  2308. == Introspection
  2309. This set of interfaces and contracts deal with https://en.wikipedia.org/wiki/Type_introspection[type introspection] of contracts, that is, examining which functions can be called on them. This is usually referred to as a contract's _interface_.
  2310. Ethereum contracts have no native concept of an interface, so applications must usually simply trust they are not making an incorrect call. For trusted setups this is a non-issue, but often unknown and untrusted third-party addresses need to be interacted with. There may even not be any direct calls to them! (e.g. ERC-20 tokens may be sent to a contract that lacks a way to transfer them out of it, locking them forever). In these cases, a contract _declaring_ its interface can be very helpful in preventing errors.
  2311. :supportsInterface: pass:normal[xref:#IERC165-supportsInterface-bytes4-[`++supportsInterface++`]]
  2312. :supportsInterface-bytes4: pass:normal[xref:#IERC165-supportsInterface-bytes4-[`++supportsInterface++`]]
  2313. [.contract]
  2314. [[IERC165]]
  2315. === `++IERC165++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/introspection/IERC165.sol[{github-icon},role=heading-link]
  2316. [.hljs-theme-light.nopadding]
  2317. ```solidity
  2318. import "@openzeppelin/contracts/utils/introspection/IERC165.sol";
  2319. ```
  2320. Interface of the ERC-165 standard, as defined in the
  2321. https://eips.ethereum.org/EIPS/eip-165[ERC].
  2322. Implementers can declare support of contract interfaces, which can then be
  2323. queried by others ({ERC165Checker}).
  2324. For an implementation, see {ERC165}.
  2325. [.contract-index]
  2326. .Functions
  2327. --
  2328. * {xref-IERC165-supportsInterface-bytes4-}[`++supportsInterface(interfaceId)++`]
  2329. --
  2330. [.contract-item]
  2331. [[IERC165-supportsInterface-bytes4-]]
  2332. ==== `[.contract-item-name]#++supportsInterface++#++(bytes4 interfaceId) โ†’ bool++` [.item-kind]#external#
  2333. Returns true if this contract implements the interface defined by
  2334. `interfaceId`. See the corresponding
  2335. https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
  2336. to learn more about how these ids are created.
  2337. This function call must use less than 30 000 gas.
  2338. :supportsInterface: pass:normal[xref:#ERC165-supportsInterface-bytes4-[`++supportsInterface++`]]
  2339. :supportsInterface-bytes4: pass:normal[xref:#ERC165-supportsInterface-bytes4-[`++supportsInterface++`]]
  2340. [.contract]
  2341. [[ERC165]]
  2342. === `++ERC165++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/introspection/ERC165.sol[{github-icon},role=heading-link]
  2343. [.hljs-theme-light.nopadding]
  2344. ```solidity
  2345. import "@openzeppelin/contracts/utils/introspection/ERC165.sol";
  2346. ```
  2347. Implementation of the {IERC165} interface.
  2348. Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check
  2349. for the additional interface id that will be supported. For example:
  2350. ```solidity
  2351. function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
  2352. return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
  2353. }
  2354. ```
  2355. [.contract-index]
  2356. .Functions
  2357. --
  2358. * {xref-ERC165-supportsInterface-bytes4-}[`++supportsInterface(interfaceId)++`]
  2359. [.contract-subindex-inherited]
  2360. .IERC165
  2361. --
  2362. [.contract-item]
  2363. [[ERC165-supportsInterface-bytes4-]]
  2364. ==== `[.contract-item-name]#++supportsInterface++#++(bytes4 interfaceId) โ†’ bool++` [.item-kind]#public#
  2365. Returns true if this contract implements the interface defined by
  2366. `interfaceId`. See the corresponding
  2367. https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
  2368. to learn more about how these ids are created.
  2369. This function call must use less than 30 000 gas.
  2370. :supportsERC165: pass:normal[xref:#ERC165Checker-supportsERC165-address-[`++supportsERC165++`]]
  2371. :supportsInterface: pass:normal[xref:#ERC165Checker-supportsInterface-address-bytes4-[`++supportsInterface++`]]
  2372. :getSupportedInterfaces: pass:normal[xref:#ERC165Checker-getSupportedInterfaces-address-bytes4---[`++getSupportedInterfaces++`]]
  2373. :supportsAllInterfaces: pass:normal[xref:#ERC165Checker-supportsAllInterfaces-address-bytes4---[`++supportsAllInterfaces++`]]
  2374. :supportsERC165InterfaceUnchecked: pass:normal[xref:#ERC165Checker-supportsERC165InterfaceUnchecked-address-bytes4-[`++supportsERC165InterfaceUnchecked++`]]
  2375. :supportsERC165-address: pass:normal[xref:#ERC165Checker-supportsERC165-address-[`++supportsERC165++`]]
  2376. :supportsInterface-address-bytes4: pass:normal[xref:#ERC165Checker-supportsInterface-address-bytes4-[`++supportsInterface++`]]
  2377. :getSupportedInterfaces-address-bytes4--: pass:normal[xref:#ERC165Checker-getSupportedInterfaces-address-bytes4---[`++getSupportedInterfaces++`]]
  2378. :supportsAllInterfaces-address-bytes4--: pass:normal[xref:#ERC165Checker-supportsAllInterfaces-address-bytes4---[`++supportsAllInterfaces++`]]
  2379. :supportsERC165InterfaceUnchecked-address-bytes4: pass:normal[xref:#ERC165Checker-supportsERC165InterfaceUnchecked-address-bytes4-[`++supportsERC165InterfaceUnchecked++`]]
  2380. [.contract]
  2381. [[ERC165Checker]]
  2382. === `++ERC165Checker++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/introspection/ERC165Checker.sol[{github-icon},role=heading-link]
  2383. [.hljs-theme-light.nopadding]
  2384. ```solidity
  2385. import "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
  2386. ```
  2387. Library used to query support of an interface declared via {IERC165}.
  2388. Note that these functions return the actual result of the query: they do not
  2389. `revert` if an interface is not supported. It is up to the caller to decide
  2390. what to do in these cases.
  2391. [.contract-index]
  2392. .Functions
  2393. --
  2394. * {xref-ERC165Checker-supportsERC165-address-}[`++supportsERC165(account)++`]
  2395. * {xref-ERC165Checker-supportsInterface-address-bytes4-}[`++supportsInterface(account, interfaceId)++`]
  2396. * {xref-ERC165Checker-getSupportedInterfaces-address-bytes4---}[`++getSupportedInterfaces(account, interfaceIds)++`]
  2397. * {xref-ERC165Checker-supportsAllInterfaces-address-bytes4---}[`++supportsAllInterfaces(account, interfaceIds)++`]
  2398. * {xref-ERC165Checker-supportsERC165InterfaceUnchecked-address-bytes4-}[`++supportsERC165InterfaceUnchecked(account, interfaceId)++`]
  2399. --
  2400. [.contract-item]
  2401. [[ERC165Checker-supportsERC165-address-]]
  2402. ==== `[.contract-item-name]#++supportsERC165++#++(address account) โ†’ bool++` [.item-kind]#internal#
  2403. Returns true if `account` supports the {IERC165} interface.
  2404. [.contract-item]
  2405. [[ERC165Checker-supportsInterface-address-bytes4-]]
  2406. ==== `[.contract-item-name]#++supportsInterface++#++(address account, bytes4 interfaceId) โ†’ bool++` [.item-kind]#internal#
  2407. Returns true if `account` supports the interface defined by
  2408. `interfaceId`. Support for {IERC165} itself is queried automatically.
  2409. See {IERC165-supportsInterface}.
  2410. [.contract-item]
  2411. [[ERC165Checker-getSupportedInterfaces-address-bytes4---]]
  2412. ==== `[.contract-item-name]#++getSupportedInterfaces++#++(address account, bytes4[] interfaceIds) โ†’ bool[]++` [.item-kind]#internal#
  2413. Returns a boolean array where each value corresponds to the
  2414. interfaces passed in and whether they're supported or not. This allows
  2415. you to batch check interfaces for a contract where your expectation
  2416. is that some interfaces may not be supported.
  2417. See {IERC165-supportsInterface}.
  2418. [.contract-item]
  2419. [[ERC165Checker-supportsAllInterfaces-address-bytes4---]]
  2420. ==== `[.contract-item-name]#++supportsAllInterfaces++#++(address account, bytes4[] interfaceIds) โ†’ bool++` [.item-kind]#internal#
  2421. Returns true if `account` supports all the interfaces defined in
  2422. `interfaceIds`. Support for {IERC165} itself is queried automatically.
  2423. Batch-querying can lead to gas savings by skipping repeated checks for
  2424. {IERC165} support.
  2425. See {IERC165-supportsInterface}.
  2426. [.contract-item]
  2427. [[ERC165Checker-supportsERC165InterfaceUnchecked-address-bytes4-]]
  2428. ==== `[.contract-item-name]#++supportsERC165InterfaceUnchecked++#++(address account, bytes4 interfaceId) โ†’ bool++` [.item-kind]#internal#
  2429. Assumes that account contains a contract that supports ERC-165, otherwise
  2430. the behavior of this method is undefined. This precondition can be checked
  2431. with {supportsERC165}.
  2432. Some precompiled contracts will falsely indicate support for a given interface, so caution
  2433. should be exercised when using this function.
  2434. Interface identification is specified in ERC-165.
  2435. == Data Structures
  2436. :BitMap: pass:normal[xref:#BitMaps-BitMap[`++BitMap++`]]
  2437. :get: pass:normal[xref:#BitMaps-get-struct-BitMaps-BitMap-uint256-[`++get++`]]
  2438. :setTo: pass:normal[xref:#BitMaps-setTo-struct-BitMaps-BitMap-uint256-bool-[`++setTo++`]]
  2439. :set: pass:normal[xref:#BitMaps-set-struct-BitMaps-BitMap-uint256-[`++set++`]]
  2440. :unset: pass:normal[xref:#BitMaps-unset-struct-BitMaps-BitMap-uint256-[`++unset++`]]
  2441. :get-struct-BitMaps-BitMap-uint256: pass:normal[xref:#BitMaps-get-struct-BitMaps-BitMap-uint256-[`++get++`]]
  2442. :setTo-struct-BitMaps-BitMap-uint256-bool: pass:normal[xref:#BitMaps-setTo-struct-BitMaps-BitMap-uint256-bool-[`++setTo++`]]
  2443. :set-struct-BitMaps-BitMap-uint256: pass:normal[xref:#BitMaps-set-struct-BitMaps-BitMap-uint256-[`++set++`]]
  2444. :unset-struct-BitMaps-BitMap-uint256: pass:normal[xref:#BitMaps-unset-struct-BitMaps-BitMap-uint256-[`++unset++`]]
  2445. [.contract]
  2446. [[BitMaps]]
  2447. === `++BitMaps++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/structs/BitMaps.sol[{github-icon},role=heading-link]
  2448. [.hljs-theme-light.nopadding]
  2449. ```solidity
  2450. import "@openzeppelin/contracts/utils/structs/BitMaps.sol";
  2451. ```
  2452. Library for managing uint256 to bool mapping in a compact and efficient way, provided the keys are sequential.
  2453. Largely inspired by Uniswap's https://github.com/Uniswap/merkle-distributor/blob/master/contracts/MerkleDistributor.sol[merkle-distributor].
  2454. BitMaps pack 256 booleans across each bit of a single 256-bit slot of `uint256` type.
  2455. Hence booleans corresponding to 256 _sequential_ indices would only consume a single slot,
  2456. unlike the regular `bool` which would consume an entire slot for a single value.
  2457. This results in gas savings in two ways:
  2458. - Setting a zero value to non-zero only once every 256 times
  2459. - Accessing the same warm slot for every 256 _sequential_ indices
  2460. [.contract-index]
  2461. .Functions
  2462. --
  2463. * {xref-BitMaps-get-struct-BitMaps-BitMap-uint256-}[`++get(bitmap, index)++`]
  2464. * {xref-BitMaps-setTo-struct-BitMaps-BitMap-uint256-bool-}[`++setTo(bitmap, index, value)++`]
  2465. * {xref-BitMaps-set-struct-BitMaps-BitMap-uint256-}[`++set(bitmap, index)++`]
  2466. * {xref-BitMaps-unset-struct-BitMaps-BitMap-uint256-}[`++unset(bitmap, index)++`]
  2467. --
  2468. [.contract-item]
  2469. [[BitMaps-get-struct-BitMaps-BitMap-uint256-]]
  2470. ==== `[.contract-item-name]#++get++#++(struct BitMaps.BitMap bitmap, uint256 index) โ†’ bool++` [.item-kind]#internal#
  2471. Returns whether the bit at `index` is set.
  2472. [.contract-item]
  2473. [[BitMaps-setTo-struct-BitMaps-BitMap-uint256-bool-]]
  2474. ==== `[.contract-item-name]#++setTo++#++(struct BitMaps.BitMap bitmap, uint256 index, bool value)++` [.item-kind]#internal#
  2475. Sets the bit at `index` to the boolean `value`.
  2476. [.contract-item]
  2477. [[BitMaps-set-struct-BitMaps-BitMap-uint256-]]
  2478. ==== `[.contract-item-name]#++set++#++(struct BitMaps.BitMap bitmap, uint256 index)++` [.item-kind]#internal#
  2479. Sets the bit at `index`.
  2480. [.contract-item]
  2481. [[BitMaps-unset-struct-BitMaps-BitMap-uint256-]]
  2482. ==== `[.contract-item-name]#++unset++#++(struct BitMaps.BitMap bitmap, uint256 index)++` [.item-kind]#internal#
  2483. Unsets the bit at `index`.
  2484. :EnumerableMapNonexistentKey: pass:normal[xref:#EnumerableMap-EnumerableMapNonexistentKey-bytes32-[`++EnumerableMapNonexistentKey++`]]
  2485. :Bytes32ToBytes32Map: pass:normal[xref:#EnumerableMap-Bytes32ToBytes32Map[`++Bytes32ToBytes32Map++`]]
  2486. :set: pass:normal[xref:#EnumerableMap-set-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-bytes32-[`++set++`]]
  2487. :remove: pass:normal[xref:#EnumerableMap-remove-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-[`++remove++`]]
  2488. :clear: pass:normal[xref:#EnumerableMap-clear-struct-EnumerableMap-Bytes32ToBytes32Map-[`++clear++`]]
  2489. :contains: pass:normal[xref:#EnumerableMap-contains-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-[`++contains++`]]
  2490. :length: pass:normal[xref:#EnumerableMap-length-struct-EnumerableMap-Bytes32ToBytes32Map-[`++length++`]]
  2491. :at: pass:normal[xref:#EnumerableMap-at-struct-EnumerableMap-Bytes32ToBytes32Map-uint256-[`++at++`]]
  2492. :tryGet: pass:normal[xref:#EnumerableMap-tryGet-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-[`++tryGet++`]]
  2493. :get: pass:normal[xref:#EnumerableMap-get-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-[`++get++`]]
  2494. :keys: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-Bytes32ToBytes32Map-[`++keys++`]]
  2495. :keys: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-Bytes32ToBytes32Map-uint256-uint256-[`++keys++`]]
  2496. :UintToUintMap: pass:normal[xref:#EnumerableMap-UintToUintMap[`++UintToUintMap++`]]
  2497. :set: pass:normal[xref:#EnumerableMap-set-struct-EnumerableMap-UintToUintMap-uint256-uint256-[`++set++`]]
  2498. :remove: pass:normal[xref:#EnumerableMap-remove-struct-EnumerableMap-UintToUintMap-uint256-[`++remove++`]]
  2499. :clear: pass:normal[xref:#EnumerableMap-clear-struct-EnumerableMap-UintToUintMap-[`++clear++`]]
  2500. :contains: pass:normal[xref:#EnumerableMap-contains-struct-EnumerableMap-UintToUintMap-uint256-[`++contains++`]]
  2501. :length: pass:normal[xref:#EnumerableMap-length-struct-EnumerableMap-UintToUintMap-[`++length++`]]
  2502. :at: pass:normal[xref:#EnumerableMap-at-struct-EnumerableMap-UintToUintMap-uint256-[`++at++`]]
  2503. :tryGet: pass:normal[xref:#EnumerableMap-tryGet-struct-EnumerableMap-UintToUintMap-uint256-[`++tryGet++`]]
  2504. :get: pass:normal[xref:#EnumerableMap-get-struct-EnumerableMap-UintToUintMap-uint256-[`++get++`]]
  2505. :keys: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-UintToUintMap-[`++keys++`]]
  2506. :keys: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-UintToUintMap-uint256-uint256-[`++keys++`]]
  2507. :UintToAddressMap: pass:normal[xref:#EnumerableMap-UintToAddressMap[`++UintToAddressMap++`]]
  2508. :set: pass:normal[xref:#EnumerableMap-set-struct-EnumerableMap-UintToAddressMap-uint256-address-[`++set++`]]
  2509. :remove: pass:normal[xref:#EnumerableMap-remove-struct-EnumerableMap-UintToAddressMap-uint256-[`++remove++`]]
  2510. :clear: pass:normal[xref:#EnumerableMap-clear-struct-EnumerableMap-UintToAddressMap-[`++clear++`]]
  2511. :contains: pass:normal[xref:#EnumerableMap-contains-struct-EnumerableMap-UintToAddressMap-uint256-[`++contains++`]]
  2512. :length: pass:normal[xref:#EnumerableMap-length-struct-EnumerableMap-UintToAddressMap-[`++length++`]]
  2513. :at: pass:normal[xref:#EnumerableMap-at-struct-EnumerableMap-UintToAddressMap-uint256-[`++at++`]]
  2514. :tryGet: pass:normal[xref:#EnumerableMap-tryGet-struct-EnumerableMap-UintToAddressMap-uint256-[`++tryGet++`]]
  2515. :get: pass:normal[xref:#EnumerableMap-get-struct-EnumerableMap-UintToAddressMap-uint256-[`++get++`]]
  2516. :keys: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-UintToAddressMap-[`++keys++`]]
  2517. :keys: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-UintToAddressMap-uint256-uint256-[`++keys++`]]
  2518. :UintToBytes32Map: pass:normal[xref:#EnumerableMap-UintToBytes32Map[`++UintToBytes32Map++`]]
  2519. :set: pass:normal[xref:#EnumerableMap-set-struct-EnumerableMap-UintToBytes32Map-uint256-bytes32-[`++set++`]]
  2520. :remove: pass:normal[xref:#EnumerableMap-remove-struct-EnumerableMap-UintToBytes32Map-uint256-[`++remove++`]]
  2521. :clear: pass:normal[xref:#EnumerableMap-clear-struct-EnumerableMap-UintToBytes32Map-[`++clear++`]]
  2522. :contains: pass:normal[xref:#EnumerableMap-contains-struct-EnumerableMap-UintToBytes32Map-uint256-[`++contains++`]]
  2523. :length: pass:normal[xref:#EnumerableMap-length-struct-EnumerableMap-UintToBytes32Map-[`++length++`]]
  2524. :at: pass:normal[xref:#EnumerableMap-at-struct-EnumerableMap-UintToBytes32Map-uint256-[`++at++`]]
  2525. :tryGet: pass:normal[xref:#EnumerableMap-tryGet-struct-EnumerableMap-UintToBytes32Map-uint256-[`++tryGet++`]]
  2526. :get: pass:normal[xref:#EnumerableMap-get-struct-EnumerableMap-UintToBytes32Map-uint256-[`++get++`]]
  2527. :keys: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-UintToBytes32Map-[`++keys++`]]
  2528. :keys: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-UintToBytes32Map-uint256-uint256-[`++keys++`]]
  2529. :AddressToUintMap: pass:normal[xref:#EnumerableMap-AddressToUintMap[`++AddressToUintMap++`]]
  2530. :set: pass:normal[xref:#EnumerableMap-set-struct-EnumerableMap-AddressToUintMap-address-uint256-[`++set++`]]
  2531. :remove: pass:normal[xref:#EnumerableMap-remove-struct-EnumerableMap-AddressToUintMap-address-[`++remove++`]]
  2532. :clear: pass:normal[xref:#EnumerableMap-clear-struct-EnumerableMap-AddressToUintMap-[`++clear++`]]
  2533. :contains: pass:normal[xref:#EnumerableMap-contains-struct-EnumerableMap-AddressToUintMap-address-[`++contains++`]]
  2534. :length: pass:normal[xref:#EnumerableMap-length-struct-EnumerableMap-AddressToUintMap-[`++length++`]]
  2535. :at: pass:normal[xref:#EnumerableMap-at-struct-EnumerableMap-AddressToUintMap-uint256-[`++at++`]]
  2536. :tryGet: pass:normal[xref:#EnumerableMap-tryGet-struct-EnumerableMap-AddressToUintMap-address-[`++tryGet++`]]
  2537. :get: pass:normal[xref:#EnumerableMap-get-struct-EnumerableMap-AddressToUintMap-address-[`++get++`]]
  2538. :keys: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-AddressToUintMap-[`++keys++`]]
  2539. :keys: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-AddressToUintMap-uint256-uint256-[`++keys++`]]
  2540. :AddressToAddressMap: pass:normal[xref:#EnumerableMap-AddressToAddressMap[`++AddressToAddressMap++`]]
  2541. :set: pass:normal[xref:#EnumerableMap-set-struct-EnumerableMap-AddressToAddressMap-address-address-[`++set++`]]
  2542. :remove: pass:normal[xref:#EnumerableMap-remove-struct-EnumerableMap-AddressToAddressMap-address-[`++remove++`]]
  2543. :clear: pass:normal[xref:#EnumerableMap-clear-struct-EnumerableMap-AddressToAddressMap-[`++clear++`]]
  2544. :contains: pass:normal[xref:#EnumerableMap-contains-struct-EnumerableMap-AddressToAddressMap-address-[`++contains++`]]
  2545. :length: pass:normal[xref:#EnumerableMap-length-struct-EnumerableMap-AddressToAddressMap-[`++length++`]]
  2546. :at: pass:normal[xref:#EnumerableMap-at-struct-EnumerableMap-AddressToAddressMap-uint256-[`++at++`]]
  2547. :tryGet: pass:normal[xref:#EnumerableMap-tryGet-struct-EnumerableMap-AddressToAddressMap-address-[`++tryGet++`]]
  2548. :get: pass:normal[xref:#EnumerableMap-get-struct-EnumerableMap-AddressToAddressMap-address-[`++get++`]]
  2549. :keys: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-AddressToAddressMap-[`++keys++`]]
  2550. :keys: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-AddressToAddressMap-uint256-uint256-[`++keys++`]]
  2551. :AddressToBytes32Map: pass:normal[xref:#EnumerableMap-AddressToBytes32Map[`++AddressToBytes32Map++`]]
  2552. :set: pass:normal[xref:#EnumerableMap-set-struct-EnumerableMap-AddressToBytes32Map-address-bytes32-[`++set++`]]
  2553. :remove: pass:normal[xref:#EnumerableMap-remove-struct-EnumerableMap-AddressToBytes32Map-address-[`++remove++`]]
  2554. :clear: pass:normal[xref:#EnumerableMap-clear-struct-EnumerableMap-AddressToBytes32Map-[`++clear++`]]
  2555. :contains: pass:normal[xref:#EnumerableMap-contains-struct-EnumerableMap-AddressToBytes32Map-address-[`++contains++`]]
  2556. :length: pass:normal[xref:#EnumerableMap-length-struct-EnumerableMap-AddressToBytes32Map-[`++length++`]]
  2557. :at: pass:normal[xref:#EnumerableMap-at-struct-EnumerableMap-AddressToBytes32Map-uint256-[`++at++`]]
  2558. :tryGet: pass:normal[xref:#EnumerableMap-tryGet-struct-EnumerableMap-AddressToBytes32Map-address-[`++tryGet++`]]
  2559. :get: pass:normal[xref:#EnumerableMap-get-struct-EnumerableMap-AddressToBytes32Map-address-[`++get++`]]
  2560. :keys: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-AddressToBytes32Map-[`++keys++`]]
  2561. :keys: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-AddressToBytes32Map-uint256-uint256-[`++keys++`]]
  2562. :Bytes32ToUintMap: pass:normal[xref:#EnumerableMap-Bytes32ToUintMap[`++Bytes32ToUintMap++`]]
  2563. :set: pass:normal[xref:#EnumerableMap-set-struct-EnumerableMap-Bytes32ToUintMap-bytes32-uint256-[`++set++`]]
  2564. :remove: pass:normal[xref:#EnumerableMap-remove-struct-EnumerableMap-Bytes32ToUintMap-bytes32-[`++remove++`]]
  2565. :clear: pass:normal[xref:#EnumerableMap-clear-struct-EnumerableMap-Bytes32ToUintMap-[`++clear++`]]
  2566. :contains: pass:normal[xref:#EnumerableMap-contains-struct-EnumerableMap-Bytes32ToUintMap-bytes32-[`++contains++`]]
  2567. :length: pass:normal[xref:#EnumerableMap-length-struct-EnumerableMap-Bytes32ToUintMap-[`++length++`]]
  2568. :at: pass:normal[xref:#EnumerableMap-at-struct-EnumerableMap-Bytes32ToUintMap-uint256-[`++at++`]]
  2569. :tryGet: pass:normal[xref:#EnumerableMap-tryGet-struct-EnumerableMap-Bytes32ToUintMap-bytes32-[`++tryGet++`]]
  2570. :get: pass:normal[xref:#EnumerableMap-get-struct-EnumerableMap-Bytes32ToUintMap-bytes32-[`++get++`]]
  2571. :keys: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-Bytes32ToUintMap-[`++keys++`]]
  2572. :keys: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-Bytes32ToUintMap-uint256-uint256-[`++keys++`]]
  2573. :Bytes32ToAddressMap: pass:normal[xref:#EnumerableMap-Bytes32ToAddressMap[`++Bytes32ToAddressMap++`]]
  2574. :set: pass:normal[xref:#EnumerableMap-set-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-address-[`++set++`]]
  2575. :remove: pass:normal[xref:#EnumerableMap-remove-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-[`++remove++`]]
  2576. :clear: pass:normal[xref:#EnumerableMap-clear-struct-EnumerableMap-Bytes32ToAddressMap-[`++clear++`]]
  2577. :contains: pass:normal[xref:#EnumerableMap-contains-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-[`++contains++`]]
  2578. :length: pass:normal[xref:#EnumerableMap-length-struct-EnumerableMap-Bytes32ToAddressMap-[`++length++`]]
  2579. :at: pass:normal[xref:#EnumerableMap-at-struct-EnumerableMap-Bytes32ToAddressMap-uint256-[`++at++`]]
  2580. :tryGet: pass:normal[xref:#EnumerableMap-tryGet-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-[`++tryGet++`]]
  2581. :get: pass:normal[xref:#EnumerableMap-get-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-[`++get++`]]
  2582. :keys: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-Bytes32ToAddressMap-[`++keys++`]]
  2583. :keys: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-Bytes32ToAddressMap-uint256-uint256-[`++keys++`]]
  2584. :EnumerableMapNonexistentBytesKey: pass:normal[xref:#EnumerableMap-EnumerableMapNonexistentBytesKey-bytes-[`++EnumerableMapNonexistentBytesKey++`]]
  2585. :BytesToBytesMap: pass:normal[xref:#EnumerableMap-BytesToBytesMap[`++BytesToBytesMap++`]]
  2586. :set: pass:normal[xref:#EnumerableMap-set-struct-EnumerableMap-BytesToBytesMap-bytes-bytes-[`++set++`]]
  2587. :remove: pass:normal[xref:#EnumerableMap-remove-struct-EnumerableMap-BytesToBytesMap-bytes-[`++remove++`]]
  2588. :clear: pass:normal[xref:#EnumerableMap-clear-struct-EnumerableMap-BytesToBytesMap-[`++clear++`]]
  2589. :contains: pass:normal[xref:#EnumerableMap-contains-struct-EnumerableMap-BytesToBytesMap-bytes-[`++contains++`]]
  2590. :length: pass:normal[xref:#EnumerableMap-length-struct-EnumerableMap-BytesToBytesMap-[`++length++`]]
  2591. :at: pass:normal[xref:#EnumerableMap-at-struct-EnumerableMap-BytesToBytesMap-uint256-[`++at++`]]
  2592. :tryGet: pass:normal[xref:#EnumerableMap-tryGet-struct-EnumerableMap-BytesToBytesMap-bytes-[`++tryGet++`]]
  2593. :get: pass:normal[xref:#EnumerableMap-get-struct-EnumerableMap-BytesToBytesMap-bytes-[`++get++`]]
  2594. :keys: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-BytesToBytesMap-[`++keys++`]]
  2595. :keys: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-BytesToBytesMap-uint256-uint256-[`++keys++`]]
  2596. :set-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-bytes32: pass:normal[xref:#EnumerableMap-set-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-bytes32-[`++set++`]]
  2597. :remove-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32: pass:normal[xref:#EnumerableMap-remove-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-[`++remove++`]]
  2598. :clear-struct-EnumerableMap-Bytes32ToBytes32Map: pass:normal[xref:#EnumerableMap-clear-struct-EnumerableMap-Bytes32ToBytes32Map-[`++clear++`]]
  2599. :contains-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32: pass:normal[xref:#EnumerableMap-contains-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-[`++contains++`]]
  2600. :length-struct-EnumerableMap-Bytes32ToBytes32Map: pass:normal[xref:#EnumerableMap-length-struct-EnumerableMap-Bytes32ToBytes32Map-[`++length++`]]
  2601. :at-struct-EnumerableMap-Bytes32ToBytes32Map-uint256: pass:normal[xref:#EnumerableMap-at-struct-EnumerableMap-Bytes32ToBytes32Map-uint256-[`++at++`]]
  2602. :tryGet-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32: pass:normal[xref:#EnumerableMap-tryGet-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-[`++tryGet++`]]
  2603. :get-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32: pass:normal[xref:#EnumerableMap-get-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-[`++get++`]]
  2604. :keys-struct-EnumerableMap-Bytes32ToBytes32Map: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-Bytes32ToBytes32Map-[`++keys++`]]
  2605. :keys-struct-EnumerableMap-Bytes32ToBytes32Map-uint256-uint256: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-Bytes32ToBytes32Map-uint256-uint256-[`++keys++`]]
  2606. :set-struct-EnumerableMap-UintToUintMap-uint256-uint256: pass:normal[xref:#EnumerableMap-set-struct-EnumerableMap-UintToUintMap-uint256-uint256-[`++set++`]]
  2607. :remove-struct-EnumerableMap-UintToUintMap-uint256: pass:normal[xref:#EnumerableMap-remove-struct-EnumerableMap-UintToUintMap-uint256-[`++remove++`]]
  2608. :clear-struct-EnumerableMap-UintToUintMap: pass:normal[xref:#EnumerableMap-clear-struct-EnumerableMap-UintToUintMap-[`++clear++`]]
  2609. :contains-struct-EnumerableMap-UintToUintMap-uint256: pass:normal[xref:#EnumerableMap-contains-struct-EnumerableMap-UintToUintMap-uint256-[`++contains++`]]
  2610. :length-struct-EnumerableMap-UintToUintMap: pass:normal[xref:#EnumerableMap-length-struct-EnumerableMap-UintToUintMap-[`++length++`]]
  2611. :at-struct-EnumerableMap-UintToUintMap-uint256: pass:normal[xref:#EnumerableMap-at-struct-EnumerableMap-UintToUintMap-uint256-[`++at++`]]
  2612. :tryGet-struct-EnumerableMap-UintToUintMap-uint256: pass:normal[xref:#EnumerableMap-tryGet-struct-EnumerableMap-UintToUintMap-uint256-[`++tryGet++`]]
  2613. :get-struct-EnumerableMap-UintToUintMap-uint256: pass:normal[xref:#EnumerableMap-get-struct-EnumerableMap-UintToUintMap-uint256-[`++get++`]]
  2614. :keys-struct-EnumerableMap-UintToUintMap: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-UintToUintMap-[`++keys++`]]
  2615. :keys-struct-EnumerableMap-UintToUintMap-uint256-uint256: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-UintToUintMap-uint256-uint256-[`++keys++`]]
  2616. :set-struct-EnumerableMap-UintToAddressMap-uint256-address: pass:normal[xref:#EnumerableMap-set-struct-EnumerableMap-UintToAddressMap-uint256-address-[`++set++`]]
  2617. :remove-struct-EnumerableMap-UintToAddressMap-uint256: pass:normal[xref:#EnumerableMap-remove-struct-EnumerableMap-UintToAddressMap-uint256-[`++remove++`]]
  2618. :clear-struct-EnumerableMap-UintToAddressMap: pass:normal[xref:#EnumerableMap-clear-struct-EnumerableMap-UintToAddressMap-[`++clear++`]]
  2619. :contains-struct-EnumerableMap-UintToAddressMap-uint256: pass:normal[xref:#EnumerableMap-contains-struct-EnumerableMap-UintToAddressMap-uint256-[`++contains++`]]
  2620. :length-struct-EnumerableMap-UintToAddressMap: pass:normal[xref:#EnumerableMap-length-struct-EnumerableMap-UintToAddressMap-[`++length++`]]
  2621. :at-struct-EnumerableMap-UintToAddressMap-uint256: pass:normal[xref:#EnumerableMap-at-struct-EnumerableMap-UintToAddressMap-uint256-[`++at++`]]
  2622. :tryGet-struct-EnumerableMap-UintToAddressMap-uint256: pass:normal[xref:#EnumerableMap-tryGet-struct-EnumerableMap-UintToAddressMap-uint256-[`++tryGet++`]]
  2623. :get-struct-EnumerableMap-UintToAddressMap-uint256: pass:normal[xref:#EnumerableMap-get-struct-EnumerableMap-UintToAddressMap-uint256-[`++get++`]]
  2624. :keys-struct-EnumerableMap-UintToAddressMap: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-UintToAddressMap-[`++keys++`]]
  2625. :keys-struct-EnumerableMap-UintToAddressMap-uint256-uint256: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-UintToAddressMap-uint256-uint256-[`++keys++`]]
  2626. :set-struct-EnumerableMap-UintToBytes32Map-uint256-bytes32: pass:normal[xref:#EnumerableMap-set-struct-EnumerableMap-UintToBytes32Map-uint256-bytes32-[`++set++`]]
  2627. :remove-struct-EnumerableMap-UintToBytes32Map-uint256: pass:normal[xref:#EnumerableMap-remove-struct-EnumerableMap-UintToBytes32Map-uint256-[`++remove++`]]
  2628. :clear-struct-EnumerableMap-UintToBytes32Map: pass:normal[xref:#EnumerableMap-clear-struct-EnumerableMap-UintToBytes32Map-[`++clear++`]]
  2629. :contains-struct-EnumerableMap-UintToBytes32Map-uint256: pass:normal[xref:#EnumerableMap-contains-struct-EnumerableMap-UintToBytes32Map-uint256-[`++contains++`]]
  2630. :length-struct-EnumerableMap-UintToBytes32Map: pass:normal[xref:#EnumerableMap-length-struct-EnumerableMap-UintToBytes32Map-[`++length++`]]
  2631. :at-struct-EnumerableMap-UintToBytes32Map-uint256: pass:normal[xref:#EnumerableMap-at-struct-EnumerableMap-UintToBytes32Map-uint256-[`++at++`]]
  2632. :tryGet-struct-EnumerableMap-UintToBytes32Map-uint256: pass:normal[xref:#EnumerableMap-tryGet-struct-EnumerableMap-UintToBytes32Map-uint256-[`++tryGet++`]]
  2633. :get-struct-EnumerableMap-UintToBytes32Map-uint256: pass:normal[xref:#EnumerableMap-get-struct-EnumerableMap-UintToBytes32Map-uint256-[`++get++`]]
  2634. :keys-struct-EnumerableMap-UintToBytes32Map: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-UintToBytes32Map-[`++keys++`]]
  2635. :keys-struct-EnumerableMap-UintToBytes32Map-uint256-uint256: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-UintToBytes32Map-uint256-uint256-[`++keys++`]]
  2636. :set-struct-EnumerableMap-AddressToUintMap-address-uint256: pass:normal[xref:#EnumerableMap-set-struct-EnumerableMap-AddressToUintMap-address-uint256-[`++set++`]]
  2637. :remove-struct-EnumerableMap-AddressToUintMap-address: pass:normal[xref:#EnumerableMap-remove-struct-EnumerableMap-AddressToUintMap-address-[`++remove++`]]
  2638. :clear-struct-EnumerableMap-AddressToUintMap: pass:normal[xref:#EnumerableMap-clear-struct-EnumerableMap-AddressToUintMap-[`++clear++`]]
  2639. :contains-struct-EnumerableMap-AddressToUintMap-address: pass:normal[xref:#EnumerableMap-contains-struct-EnumerableMap-AddressToUintMap-address-[`++contains++`]]
  2640. :length-struct-EnumerableMap-AddressToUintMap: pass:normal[xref:#EnumerableMap-length-struct-EnumerableMap-AddressToUintMap-[`++length++`]]
  2641. :at-struct-EnumerableMap-AddressToUintMap-uint256: pass:normal[xref:#EnumerableMap-at-struct-EnumerableMap-AddressToUintMap-uint256-[`++at++`]]
  2642. :tryGet-struct-EnumerableMap-AddressToUintMap-address: pass:normal[xref:#EnumerableMap-tryGet-struct-EnumerableMap-AddressToUintMap-address-[`++tryGet++`]]
  2643. :get-struct-EnumerableMap-AddressToUintMap-address: pass:normal[xref:#EnumerableMap-get-struct-EnumerableMap-AddressToUintMap-address-[`++get++`]]
  2644. :keys-struct-EnumerableMap-AddressToUintMap: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-AddressToUintMap-[`++keys++`]]
  2645. :keys-struct-EnumerableMap-AddressToUintMap-uint256-uint256: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-AddressToUintMap-uint256-uint256-[`++keys++`]]
  2646. :set-struct-EnumerableMap-AddressToAddressMap-address-address: pass:normal[xref:#EnumerableMap-set-struct-EnumerableMap-AddressToAddressMap-address-address-[`++set++`]]
  2647. :remove-struct-EnumerableMap-AddressToAddressMap-address: pass:normal[xref:#EnumerableMap-remove-struct-EnumerableMap-AddressToAddressMap-address-[`++remove++`]]
  2648. :clear-struct-EnumerableMap-AddressToAddressMap: pass:normal[xref:#EnumerableMap-clear-struct-EnumerableMap-AddressToAddressMap-[`++clear++`]]
  2649. :contains-struct-EnumerableMap-AddressToAddressMap-address: pass:normal[xref:#EnumerableMap-contains-struct-EnumerableMap-AddressToAddressMap-address-[`++contains++`]]
  2650. :length-struct-EnumerableMap-AddressToAddressMap: pass:normal[xref:#EnumerableMap-length-struct-EnumerableMap-AddressToAddressMap-[`++length++`]]
  2651. :at-struct-EnumerableMap-AddressToAddressMap-uint256: pass:normal[xref:#EnumerableMap-at-struct-EnumerableMap-AddressToAddressMap-uint256-[`++at++`]]
  2652. :tryGet-struct-EnumerableMap-AddressToAddressMap-address: pass:normal[xref:#EnumerableMap-tryGet-struct-EnumerableMap-AddressToAddressMap-address-[`++tryGet++`]]
  2653. :get-struct-EnumerableMap-AddressToAddressMap-address: pass:normal[xref:#EnumerableMap-get-struct-EnumerableMap-AddressToAddressMap-address-[`++get++`]]
  2654. :keys-struct-EnumerableMap-AddressToAddressMap: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-AddressToAddressMap-[`++keys++`]]
  2655. :keys-struct-EnumerableMap-AddressToAddressMap-uint256-uint256: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-AddressToAddressMap-uint256-uint256-[`++keys++`]]
  2656. :set-struct-EnumerableMap-AddressToBytes32Map-address-bytes32: pass:normal[xref:#EnumerableMap-set-struct-EnumerableMap-AddressToBytes32Map-address-bytes32-[`++set++`]]
  2657. :remove-struct-EnumerableMap-AddressToBytes32Map-address: pass:normal[xref:#EnumerableMap-remove-struct-EnumerableMap-AddressToBytes32Map-address-[`++remove++`]]
  2658. :clear-struct-EnumerableMap-AddressToBytes32Map: pass:normal[xref:#EnumerableMap-clear-struct-EnumerableMap-AddressToBytes32Map-[`++clear++`]]
  2659. :contains-struct-EnumerableMap-AddressToBytes32Map-address: pass:normal[xref:#EnumerableMap-contains-struct-EnumerableMap-AddressToBytes32Map-address-[`++contains++`]]
  2660. :length-struct-EnumerableMap-AddressToBytes32Map: pass:normal[xref:#EnumerableMap-length-struct-EnumerableMap-AddressToBytes32Map-[`++length++`]]
  2661. :at-struct-EnumerableMap-AddressToBytes32Map-uint256: pass:normal[xref:#EnumerableMap-at-struct-EnumerableMap-AddressToBytes32Map-uint256-[`++at++`]]
  2662. :tryGet-struct-EnumerableMap-AddressToBytes32Map-address: pass:normal[xref:#EnumerableMap-tryGet-struct-EnumerableMap-AddressToBytes32Map-address-[`++tryGet++`]]
  2663. :get-struct-EnumerableMap-AddressToBytes32Map-address: pass:normal[xref:#EnumerableMap-get-struct-EnumerableMap-AddressToBytes32Map-address-[`++get++`]]
  2664. :keys-struct-EnumerableMap-AddressToBytes32Map: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-AddressToBytes32Map-[`++keys++`]]
  2665. :keys-struct-EnumerableMap-AddressToBytes32Map-uint256-uint256: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-AddressToBytes32Map-uint256-uint256-[`++keys++`]]
  2666. :set-struct-EnumerableMap-Bytes32ToUintMap-bytes32-uint256: pass:normal[xref:#EnumerableMap-set-struct-EnumerableMap-Bytes32ToUintMap-bytes32-uint256-[`++set++`]]
  2667. :remove-struct-EnumerableMap-Bytes32ToUintMap-bytes32: pass:normal[xref:#EnumerableMap-remove-struct-EnumerableMap-Bytes32ToUintMap-bytes32-[`++remove++`]]
  2668. :clear-struct-EnumerableMap-Bytes32ToUintMap: pass:normal[xref:#EnumerableMap-clear-struct-EnumerableMap-Bytes32ToUintMap-[`++clear++`]]
  2669. :contains-struct-EnumerableMap-Bytes32ToUintMap-bytes32: pass:normal[xref:#EnumerableMap-contains-struct-EnumerableMap-Bytes32ToUintMap-bytes32-[`++contains++`]]
  2670. :length-struct-EnumerableMap-Bytes32ToUintMap: pass:normal[xref:#EnumerableMap-length-struct-EnumerableMap-Bytes32ToUintMap-[`++length++`]]
  2671. :at-struct-EnumerableMap-Bytes32ToUintMap-uint256: pass:normal[xref:#EnumerableMap-at-struct-EnumerableMap-Bytes32ToUintMap-uint256-[`++at++`]]
  2672. :tryGet-struct-EnumerableMap-Bytes32ToUintMap-bytes32: pass:normal[xref:#EnumerableMap-tryGet-struct-EnumerableMap-Bytes32ToUintMap-bytes32-[`++tryGet++`]]
  2673. :get-struct-EnumerableMap-Bytes32ToUintMap-bytes32: pass:normal[xref:#EnumerableMap-get-struct-EnumerableMap-Bytes32ToUintMap-bytes32-[`++get++`]]
  2674. :keys-struct-EnumerableMap-Bytes32ToUintMap: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-Bytes32ToUintMap-[`++keys++`]]
  2675. :keys-struct-EnumerableMap-Bytes32ToUintMap-uint256-uint256: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-Bytes32ToUintMap-uint256-uint256-[`++keys++`]]
  2676. :set-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-address: pass:normal[xref:#EnumerableMap-set-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-address-[`++set++`]]
  2677. :remove-struct-EnumerableMap-Bytes32ToAddressMap-bytes32: pass:normal[xref:#EnumerableMap-remove-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-[`++remove++`]]
  2678. :clear-struct-EnumerableMap-Bytes32ToAddressMap: pass:normal[xref:#EnumerableMap-clear-struct-EnumerableMap-Bytes32ToAddressMap-[`++clear++`]]
  2679. :contains-struct-EnumerableMap-Bytes32ToAddressMap-bytes32: pass:normal[xref:#EnumerableMap-contains-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-[`++contains++`]]
  2680. :length-struct-EnumerableMap-Bytes32ToAddressMap: pass:normal[xref:#EnumerableMap-length-struct-EnumerableMap-Bytes32ToAddressMap-[`++length++`]]
  2681. :at-struct-EnumerableMap-Bytes32ToAddressMap-uint256: pass:normal[xref:#EnumerableMap-at-struct-EnumerableMap-Bytes32ToAddressMap-uint256-[`++at++`]]
  2682. :tryGet-struct-EnumerableMap-Bytes32ToAddressMap-bytes32: pass:normal[xref:#EnumerableMap-tryGet-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-[`++tryGet++`]]
  2683. :get-struct-EnumerableMap-Bytes32ToAddressMap-bytes32: pass:normal[xref:#EnumerableMap-get-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-[`++get++`]]
  2684. :keys-struct-EnumerableMap-Bytes32ToAddressMap: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-Bytes32ToAddressMap-[`++keys++`]]
  2685. :keys-struct-EnumerableMap-Bytes32ToAddressMap-uint256-uint256: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-Bytes32ToAddressMap-uint256-uint256-[`++keys++`]]
  2686. :set-struct-EnumerableMap-BytesToBytesMap-bytes-bytes: pass:normal[xref:#EnumerableMap-set-struct-EnumerableMap-BytesToBytesMap-bytes-bytes-[`++set++`]]
  2687. :remove-struct-EnumerableMap-BytesToBytesMap-bytes: pass:normal[xref:#EnumerableMap-remove-struct-EnumerableMap-BytesToBytesMap-bytes-[`++remove++`]]
  2688. :clear-struct-EnumerableMap-BytesToBytesMap: pass:normal[xref:#EnumerableMap-clear-struct-EnumerableMap-BytesToBytesMap-[`++clear++`]]
  2689. :contains-struct-EnumerableMap-BytesToBytesMap-bytes: pass:normal[xref:#EnumerableMap-contains-struct-EnumerableMap-BytesToBytesMap-bytes-[`++contains++`]]
  2690. :length-struct-EnumerableMap-BytesToBytesMap: pass:normal[xref:#EnumerableMap-length-struct-EnumerableMap-BytesToBytesMap-[`++length++`]]
  2691. :at-struct-EnumerableMap-BytesToBytesMap-uint256: pass:normal[xref:#EnumerableMap-at-struct-EnumerableMap-BytesToBytesMap-uint256-[`++at++`]]
  2692. :tryGet-struct-EnumerableMap-BytesToBytesMap-bytes: pass:normal[xref:#EnumerableMap-tryGet-struct-EnumerableMap-BytesToBytesMap-bytes-[`++tryGet++`]]
  2693. :get-struct-EnumerableMap-BytesToBytesMap-bytes: pass:normal[xref:#EnumerableMap-get-struct-EnumerableMap-BytesToBytesMap-bytes-[`++get++`]]
  2694. :keys-struct-EnumerableMap-BytesToBytesMap: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-BytesToBytesMap-[`++keys++`]]
  2695. :keys-struct-EnumerableMap-BytesToBytesMap-uint256-uint256: pass:normal[xref:#EnumerableMap-keys-struct-EnumerableMap-BytesToBytesMap-uint256-uint256-[`++keys++`]]
  2696. [.contract]
  2697. [[EnumerableMap]]
  2698. === `++EnumerableMap++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/structs/EnumerableMap.sol[{github-icon},role=heading-link]
  2699. [.hljs-theme-light.nopadding]
  2700. ```solidity
  2701. import "@openzeppelin/contracts/utils/structs/EnumerableMap.sol";
  2702. ```
  2703. Library for managing an enumerable variant of Solidity's
  2704. https://solidity.readthedocs.io/en/latest/types.html#mapping-types[`mapping`]
  2705. type.
  2706. Maps have the following properties:
  2707. - Entries are added, removed, and checked for existence in constant time
  2708. (O(1)).
  2709. - Entries are enumerated in O(n). No guarantees are made on the ordering.
  2710. - Map can be cleared (all entries removed) in O(n).
  2711. ```solidity
  2712. contract Example {
  2713. // Add the library methods
  2714. using EnumerableMap for EnumerableMap.UintToAddressMap;
  2715. // Declare a set state variable
  2716. EnumerableMap.UintToAddressMap private myMap;
  2717. }
  2718. ```
  2719. The following map types are supported:
  2720. - `uint256 -> address` (`UintToAddressMap`) since v3.0.0
  2721. - `address -> uint256` (`AddressToUintMap`) since v4.6.0
  2722. - `bytes32 -> bytes32` (`Bytes32ToBytes32Map`) since v4.6.0
  2723. - `uint256 -> uint256` (`UintToUintMap`) since v4.7.0
  2724. - `bytes32 -> uint256` (`Bytes32ToUintMap`) since v4.7.0
  2725. - `uint256 -> bytes32` (`UintToBytes32Map`) since v5.1.0
  2726. - `address -> address` (`AddressToAddressMap`) since v5.1.0
  2727. - `address -> bytes32` (`AddressToBytes32Map`) since v5.1.0
  2728. - `bytes32 -> address` (`Bytes32ToAddressMap`) since v5.1.0
  2729. - `bytes -> bytes` (`BytesToBytesMap`) since v5.4.0
  2730. [WARNING]
  2731. ====
  2732. Trying to delete such a structure from storage will likely result in data corruption, rendering the structure
  2733. unusable.
  2734. See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.
  2735. In order to clean an EnumerableMap, you can either remove all elements one by one or create a fresh instance using an
  2736. array of EnumerableMap.
  2737. ====
  2738. [.contract-index]
  2739. .Functions
  2740. --
  2741. * {xref-EnumerableMap-set-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-bytes32-}[`++set(map, key, value)++`]
  2742. * {xref-EnumerableMap-remove-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-}[`++remove(map, key)++`]
  2743. * {xref-EnumerableMap-clear-struct-EnumerableMap-Bytes32ToBytes32Map-}[`++clear(map)++`]
  2744. * {xref-EnumerableMap-contains-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-}[`++contains(map, key)++`]
  2745. * {xref-EnumerableMap-length-struct-EnumerableMap-Bytes32ToBytes32Map-}[`++length(map)++`]
  2746. * {xref-EnumerableMap-at-struct-EnumerableMap-Bytes32ToBytes32Map-uint256-}[`++at(map, index)++`]
  2747. * {xref-EnumerableMap-tryGet-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-}[`++tryGet(map, key)++`]
  2748. * {xref-EnumerableMap-get-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-}[`++get(map, key)++`]
  2749. * {xref-EnumerableMap-keys-struct-EnumerableMap-Bytes32ToBytes32Map-}[`++keys(map)++`]
  2750. * {xref-EnumerableMap-keys-struct-EnumerableMap-Bytes32ToBytes32Map-uint256-uint256-}[`++keys(map, start, end)++`]
  2751. * {xref-EnumerableMap-set-struct-EnumerableMap-UintToUintMap-uint256-uint256-}[`++set(map, key, value)++`]
  2752. * {xref-EnumerableMap-remove-struct-EnumerableMap-UintToUintMap-uint256-}[`++remove(map, key)++`]
  2753. * {xref-EnumerableMap-clear-struct-EnumerableMap-UintToUintMap-}[`++clear(map)++`]
  2754. * {xref-EnumerableMap-contains-struct-EnumerableMap-UintToUintMap-uint256-}[`++contains(map, key)++`]
  2755. * {xref-EnumerableMap-length-struct-EnumerableMap-UintToUintMap-}[`++length(map)++`]
  2756. * {xref-EnumerableMap-at-struct-EnumerableMap-UintToUintMap-uint256-}[`++at(map, index)++`]
  2757. * {xref-EnumerableMap-tryGet-struct-EnumerableMap-UintToUintMap-uint256-}[`++tryGet(map, key)++`]
  2758. * {xref-EnumerableMap-get-struct-EnumerableMap-UintToUintMap-uint256-}[`++get(map, key)++`]
  2759. * {xref-EnumerableMap-keys-struct-EnumerableMap-UintToUintMap-}[`++keys(map)++`]
  2760. * {xref-EnumerableMap-keys-struct-EnumerableMap-UintToUintMap-uint256-uint256-}[`++keys(map, start, end)++`]
  2761. * {xref-EnumerableMap-set-struct-EnumerableMap-UintToAddressMap-uint256-address-}[`++set(map, key, value)++`]
  2762. * {xref-EnumerableMap-remove-struct-EnumerableMap-UintToAddressMap-uint256-}[`++remove(map, key)++`]
  2763. * {xref-EnumerableMap-clear-struct-EnumerableMap-UintToAddressMap-}[`++clear(map)++`]
  2764. * {xref-EnumerableMap-contains-struct-EnumerableMap-UintToAddressMap-uint256-}[`++contains(map, key)++`]
  2765. * {xref-EnumerableMap-length-struct-EnumerableMap-UintToAddressMap-}[`++length(map)++`]
  2766. * {xref-EnumerableMap-at-struct-EnumerableMap-UintToAddressMap-uint256-}[`++at(map, index)++`]
  2767. * {xref-EnumerableMap-tryGet-struct-EnumerableMap-UintToAddressMap-uint256-}[`++tryGet(map, key)++`]
  2768. * {xref-EnumerableMap-get-struct-EnumerableMap-UintToAddressMap-uint256-}[`++get(map, key)++`]
  2769. * {xref-EnumerableMap-keys-struct-EnumerableMap-UintToAddressMap-}[`++keys(map)++`]
  2770. * {xref-EnumerableMap-keys-struct-EnumerableMap-UintToAddressMap-uint256-uint256-}[`++keys(map, start, end)++`]
  2771. * {xref-EnumerableMap-set-struct-EnumerableMap-UintToBytes32Map-uint256-bytes32-}[`++set(map, key, value)++`]
  2772. * {xref-EnumerableMap-remove-struct-EnumerableMap-UintToBytes32Map-uint256-}[`++remove(map, key)++`]
  2773. * {xref-EnumerableMap-clear-struct-EnumerableMap-UintToBytes32Map-}[`++clear(map)++`]
  2774. * {xref-EnumerableMap-contains-struct-EnumerableMap-UintToBytes32Map-uint256-}[`++contains(map, key)++`]
  2775. * {xref-EnumerableMap-length-struct-EnumerableMap-UintToBytes32Map-}[`++length(map)++`]
  2776. * {xref-EnumerableMap-at-struct-EnumerableMap-UintToBytes32Map-uint256-}[`++at(map, index)++`]
  2777. * {xref-EnumerableMap-tryGet-struct-EnumerableMap-UintToBytes32Map-uint256-}[`++tryGet(map, key)++`]
  2778. * {xref-EnumerableMap-get-struct-EnumerableMap-UintToBytes32Map-uint256-}[`++get(map, key)++`]
  2779. * {xref-EnumerableMap-keys-struct-EnumerableMap-UintToBytes32Map-}[`++keys(map)++`]
  2780. * {xref-EnumerableMap-keys-struct-EnumerableMap-UintToBytes32Map-uint256-uint256-}[`++keys(map, start, end)++`]
  2781. * {xref-EnumerableMap-set-struct-EnumerableMap-AddressToUintMap-address-uint256-}[`++set(map, key, value)++`]
  2782. * {xref-EnumerableMap-remove-struct-EnumerableMap-AddressToUintMap-address-}[`++remove(map, key)++`]
  2783. * {xref-EnumerableMap-clear-struct-EnumerableMap-AddressToUintMap-}[`++clear(map)++`]
  2784. * {xref-EnumerableMap-contains-struct-EnumerableMap-AddressToUintMap-address-}[`++contains(map, key)++`]
  2785. * {xref-EnumerableMap-length-struct-EnumerableMap-AddressToUintMap-}[`++length(map)++`]
  2786. * {xref-EnumerableMap-at-struct-EnumerableMap-AddressToUintMap-uint256-}[`++at(map, index)++`]
  2787. * {xref-EnumerableMap-tryGet-struct-EnumerableMap-AddressToUintMap-address-}[`++tryGet(map, key)++`]
  2788. * {xref-EnumerableMap-get-struct-EnumerableMap-AddressToUintMap-address-}[`++get(map, key)++`]
  2789. * {xref-EnumerableMap-keys-struct-EnumerableMap-AddressToUintMap-}[`++keys(map)++`]
  2790. * {xref-EnumerableMap-keys-struct-EnumerableMap-AddressToUintMap-uint256-uint256-}[`++keys(map, start, end)++`]
  2791. * {xref-EnumerableMap-set-struct-EnumerableMap-AddressToAddressMap-address-address-}[`++set(map, key, value)++`]
  2792. * {xref-EnumerableMap-remove-struct-EnumerableMap-AddressToAddressMap-address-}[`++remove(map, key)++`]
  2793. * {xref-EnumerableMap-clear-struct-EnumerableMap-AddressToAddressMap-}[`++clear(map)++`]
  2794. * {xref-EnumerableMap-contains-struct-EnumerableMap-AddressToAddressMap-address-}[`++contains(map, key)++`]
  2795. * {xref-EnumerableMap-length-struct-EnumerableMap-AddressToAddressMap-}[`++length(map)++`]
  2796. * {xref-EnumerableMap-at-struct-EnumerableMap-AddressToAddressMap-uint256-}[`++at(map, index)++`]
  2797. * {xref-EnumerableMap-tryGet-struct-EnumerableMap-AddressToAddressMap-address-}[`++tryGet(map, key)++`]
  2798. * {xref-EnumerableMap-get-struct-EnumerableMap-AddressToAddressMap-address-}[`++get(map, key)++`]
  2799. * {xref-EnumerableMap-keys-struct-EnumerableMap-AddressToAddressMap-}[`++keys(map)++`]
  2800. * {xref-EnumerableMap-keys-struct-EnumerableMap-AddressToAddressMap-uint256-uint256-}[`++keys(map, start, end)++`]
  2801. * {xref-EnumerableMap-set-struct-EnumerableMap-AddressToBytes32Map-address-bytes32-}[`++set(map, key, value)++`]
  2802. * {xref-EnumerableMap-remove-struct-EnumerableMap-AddressToBytes32Map-address-}[`++remove(map, key)++`]
  2803. * {xref-EnumerableMap-clear-struct-EnumerableMap-AddressToBytes32Map-}[`++clear(map)++`]
  2804. * {xref-EnumerableMap-contains-struct-EnumerableMap-AddressToBytes32Map-address-}[`++contains(map, key)++`]
  2805. * {xref-EnumerableMap-length-struct-EnumerableMap-AddressToBytes32Map-}[`++length(map)++`]
  2806. * {xref-EnumerableMap-at-struct-EnumerableMap-AddressToBytes32Map-uint256-}[`++at(map, index)++`]
  2807. * {xref-EnumerableMap-tryGet-struct-EnumerableMap-AddressToBytes32Map-address-}[`++tryGet(map, key)++`]
  2808. * {xref-EnumerableMap-get-struct-EnumerableMap-AddressToBytes32Map-address-}[`++get(map, key)++`]
  2809. * {xref-EnumerableMap-keys-struct-EnumerableMap-AddressToBytes32Map-}[`++keys(map)++`]
  2810. * {xref-EnumerableMap-keys-struct-EnumerableMap-AddressToBytes32Map-uint256-uint256-}[`++keys(map, start, end)++`]
  2811. * {xref-EnumerableMap-set-struct-EnumerableMap-Bytes32ToUintMap-bytes32-uint256-}[`++set(map, key, value)++`]
  2812. * {xref-EnumerableMap-remove-struct-EnumerableMap-Bytes32ToUintMap-bytes32-}[`++remove(map, key)++`]
  2813. * {xref-EnumerableMap-clear-struct-EnumerableMap-Bytes32ToUintMap-}[`++clear(map)++`]
  2814. * {xref-EnumerableMap-contains-struct-EnumerableMap-Bytes32ToUintMap-bytes32-}[`++contains(map, key)++`]
  2815. * {xref-EnumerableMap-length-struct-EnumerableMap-Bytes32ToUintMap-}[`++length(map)++`]
  2816. * {xref-EnumerableMap-at-struct-EnumerableMap-Bytes32ToUintMap-uint256-}[`++at(map, index)++`]
  2817. * {xref-EnumerableMap-tryGet-struct-EnumerableMap-Bytes32ToUintMap-bytes32-}[`++tryGet(map, key)++`]
  2818. * {xref-EnumerableMap-get-struct-EnumerableMap-Bytes32ToUintMap-bytes32-}[`++get(map, key)++`]
  2819. * {xref-EnumerableMap-keys-struct-EnumerableMap-Bytes32ToUintMap-}[`++keys(map)++`]
  2820. * {xref-EnumerableMap-keys-struct-EnumerableMap-Bytes32ToUintMap-uint256-uint256-}[`++keys(map, start, end)++`]
  2821. * {xref-EnumerableMap-set-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-address-}[`++set(map, key, value)++`]
  2822. * {xref-EnumerableMap-remove-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-}[`++remove(map, key)++`]
  2823. * {xref-EnumerableMap-clear-struct-EnumerableMap-Bytes32ToAddressMap-}[`++clear(map)++`]
  2824. * {xref-EnumerableMap-contains-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-}[`++contains(map, key)++`]
  2825. * {xref-EnumerableMap-length-struct-EnumerableMap-Bytes32ToAddressMap-}[`++length(map)++`]
  2826. * {xref-EnumerableMap-at-struct-EnumerableMap-Bytes32ToAddressMap-uint256-}[`++at(map, index)++`]
  2827. * {xref-EnumerableMap-tryGet-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-}[`++tryGet(map, key)++`]
  2828. * {xref-EnumerableMap-get-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-}[`++get(map, key)++`]
  2829. * {xref-EnumerableMap-keys-struct-EnumerableMap-Bytes32ToAddressMap-}[`++keys(map)++`]
  2830. * {xref-EnumerableMap-keys-struct-EnumerableMap-Bytes32ToAddressMap-uint256-uint256-}[`++keys(map, start, end)++`]
  2831. * {xref-EnumerableMap-set-struct-EnumerableMap-BytesToBytesMap-bytes-bytes-}[`++set(map, key, value)++`]
  2832. * {xref-EnumerableMap-remove-struct-EnumerableMap-BytesToBytesMap-bytes-}[`++remove(map, key)++`]
  2833. * {xref-EnumerableMap-clear-struct-EnumerableMap-BytesToBytesMap-}[`++clear(map)++`]
  2834. * {xref-EnumerableMap-contains-struct-EnumerableMap-BytesToBytesMap-bytes-}[`++contains(map, key)++`]
  2835. * {xref-EnumerableMap-length-struct-EnumerableMap-BytesToBytesMap-}[`++length(map)++`]
  2836. * {xref-EnumerableMap-at-struct-EnumerableMap-BytesToBytesMap-uint256-}[`++at(map, index)++`]
  2837. * {xref-EnumerableMap-tryGet-struct-EnumerableMap-BytesToBytesMap-bytes-}[`++tryGet(map, key)++`]
  2838. * {xref-EnumerableMap-get-struct-EnumerableMap-BytesToBytesMap-bytes-}[`++get(map, key)++`]
  2839. * {xref-EnumerableMap-keys-struct-EnumerableMap-BytesToBytesMap-}[`++keys(map)++`]
  2840. * {xref-EnumerableMap-keys-struct-EnumerableMap-BytesToBytesMap-uint256-uint256-}[`++keys(map, start, end)++`]
  2841. --
  2842. [.contract-index]
  2843. .Errors
  2844. --
  2845. * {xref-EnumerableMap-EnumerableMapNonexistentKey-bytes32-}[`++EnumerableMapNonexistentKey(key)++`]
  2846. * {xref-EnumerableMap-EnumerableMapNonexistentBytesKey-bytes-}[`++EnumerableMapNonexistentBytesKey(key)++`]
  2847. --
  2848. [.contract-item]
  2849. [[EnumerableMap-set-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-bytes32-]]
  2850. ==== `[.contract-item-name]#++set++#++(struct EnumerableMap.Bytes32ToBytes32Map map, bytes32 key, bytes32 value) โ†’ bool++` [.item-kind]#internal#
  2851. Adds a key-value pair to a map, or updates the value for an existing
  2852. key. O(1).
  2853. Returns true if the key was added to the map, that is if it was not
  2854. already present.
  2855. [.contract-item]
  2856. [[EnumerableMap-remove-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-]]
  2857. ==== `[.contract-item-name]#++remove++#++(struct EnumerableMap.Bytes32ToBytes32Map map, bytes32 key) โ†’ bool++` [.item-kind]#internal#
  2858. Removes a key-value pair from a map. O(1).
  2859. Returns true if the key was removed from the map, that is if it was present.
  2860. [.contract-item]
  2861. [[EnumerableMap-clear-struct-EnumerableMap-Bytes32ToBytes32Map-]]
  2862. ==== `[.contract-item-name]#++clear++#++(struct EnumerableMap.Bytes32ToBytes32Map map)++` [.item-kind]#internal#
  2863. Removes all the entries from a map. O(n).
  2864. WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the
  2865. function uncallable if the map grows to the point where clearing it consumes too much gas to fit in a block.
  2866. [.contract-item]
  2867. [[EnumerableMap-contains-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-]]
  2868. ==== `[.contract-item-name]#++contains++#++(struct EnumerableMap.Bytes32ToBytes32Map map, bytes32 key) โ†’ bool++` [.item-kind]#internal#
  2869. Returns true if the key is in the map. O(1).
  2870. [.contract-item]
  2871. [[EnumerableMap-length-struct-EnumerableMap-Bytes32ToBytes32Map-]]
  2872. ==== `[.contract-item-name]#++length++#++(struct EnumerableMap.Bytes32ToBytes32Map map) โ†’ uint256++` [.item-kind]#internal#
  2873. Returns the number of key-value pairs in the map. O(1).
  2874. [.contract-item]
  2875. [[EnumerableMap-at-struct-EnumerableMap-Bytes32ToBytes32Map-uint256-]]
  2876. ==== `[.contract-item-name]#++at++#++(struct EnumerableMap.Bytes32ToBytes32Map map, uint256 index) โ†’ bytes32 key, bytes32 value++` [.item-kind]#internal#
  2877. Returns the key-value pair stored at position `index` in the map. O(1).
  2878. Note that there are no guarantees on the ordering of entries inside the
  2879. array, and it may change when more entries are added or removed.
  2880. Requirements:
  2881. - `index` must be strictly less than {length}.
  2882. [.contract-item]
  2883. [[EnumerableMap-tryGet-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-]]
  2884. ==== `[.contract-item-name]#++tryGet++#++(struct EnumerableMap.Bytes32ToBytes32Map map, bytes32 key) โ†’ bool exists, bytes32 value++` [.item-kind]#internal#
  2885. Tries to return the value associated with `key`. O(1).
  2886. Does not revert if `key` is not in the map.
  2887. [.contract-item]
  2888. [[EnumerableMap-get-struct-EnumerableMap-Bytes32ToBytes32Map-bytes32-]]
  2889. ==== `[.contract-item-name]#++get++#++(struct EnumerableMap.Bytes32ToBytes32Map map, bytes32 key) โ†’ bytes32++` [.item-kind]#internal#
  2890. Returns the value associated with `key`. O(1).
  2891. Requirements:
  2892. - `key` must be in the map.
  2893. [.contract-item]
  2894. [[EnumerableMap-keys-struct-EnumerableMap-Bytes32ToBytes32Map-]]
  2895. ==== `[.contract-item-name]#++keys++#++(struct EnumerableMap.Bytes32ToBytes32Map map) โ†’ bytes32[]++` [.item-kind]#internal#
  2896. Returns an array containing all the keys
  2897. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  2898. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  2899. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  2900. uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block.
  2901. [.contract-item]
  2902. [[EnumerableMap-keys-struct-EnumerableMap-Bytes32ToBytes32Map-uint256-uint256-]]
  2903. ==== `[.contract-item-name]#++keys++#++(struct EnumerableMap.Bytes32ToBytes32Map map, uint256 start, uint256 end) โ†’ bytes32[]++` [.item-kind]#internal#
  2904. Returns an array containing a slice of the keys
  2905. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  2906. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  2907. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  2908. uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block.
  2909. [.contract-item]
  2910. [[EnumerableMap-set-struct-EnumerableMap-UintToUintMap-uint256-uint256-]]
  2911. ==== `[.contract-item-name]#++set++#++(struct EnumerableMap.UintToUintMap map, uint256 key, uint256 value) โ†’ bool++` [.item-kind]#internal#
  2912. Adds a key-value pair to a map, or updates the value for an existing
  2913. key. O(1).
  2914. Returns true if the key was added to the map, that is if it was not
  2915. already present.
  2916. [.contract-item]
  2917. [[EnumerableMap-remove-struct-EnumerableMap-UintToUintMap-uint256-]]
  2918. ==== `[.contract-item-name]#++remove++#++(struct EnumerableMap.UintToUintMap map, uint256 key) โ†’ bool++` [.item-kind]#internal#
  2919. Removes a value from a map. O(1).
  2920. Returns true if the key was removed from the map, that is if it was present.
  2921. [.contract-item]
  2922. [[EnumerableMap-clear-struct-EnumerableMap-UintToUintMap-]]
  2923. ==== `[.contract-item-name]#++clear++#++(struct EnumerableMap.UintToUintMap map)++` [.item-kind]#internal#
  2924. Removes all the entries from a map. O(n).
  2925. WARNING: This function has an unbounded cost that scales with map size. Developers should keep in mind that
  2926. using it may render the function uncallable if the map grows to the point where clearing it consumes too much
  2927. gas to fit in a block.
  2928. [.contract-item]
  2929. [[EnumerableMap-contains-struct-EnumerableMap-UintToUintMap-uint256-]]
  2930. ==== `[.contract-item-name]#++contains++#++(struct EnumerableMap.UintToUintMap map, uint256 key) โ†’ bool++` [.item-kind]#internal#
  2931. Returns true if the key is in the map. O(1).
  2932. [.contract-item]
  2933. [[EnumerableMap-length-struct-EnumerableMap-UintToUintMap-]]
  2934. ==== `[.contract-item-name]#++length++#++(struct EnumerableMap.UintToUintMap map) โ†’ uint256++` [.item-kind]#internal#
  2935. Returns the number of elements in the map. O(1).
  2936. [.contract-item]
  2937. [[EnumerableMap-at-struct-EnumerableMap-UintToUintMap-uint256-]]
  2938. ==== `[.contract-item-name]#++at++#++(struct EnumerableMap.UintToUintMap map, uint256 index) โ†’ uint256 key, uint256 value++` [.item-kind]#internal#
  2939. Returns the element stored at position `index` in the map. O(1).
  2940. Note that there are no guarantees on the ordering of values inside the
  2941. array, and it may change when more values are added or removed.
  2942. Requirements:
  2943. - `index` must be strictly less than {length}.
  2944. [.contract-item]
  2945. [[EnumerableMap-tryGet-struct-EnumerableMap-UintToUintMap-uint256-]]
  2946. ==== `[.contract-item-name]#++tryGet++#++(struct EnumerableMap.UintToUintMap map, uint256 key) โ†’ bool exists, uint256 value++` [.item-kind]#internal#
  2947. Tries to return the value associated with `key`. O(1).
  2948. Does not revert if `key` is not in the map.
  2949. [.contract-item]
  2950. [[EnumerableMap-get-struct-EnumerableMap-UintToUintMap-uint256-]]
  2951. ==== `[.contract-item-name]#++get++#++(struct EnumerableMap.UintToUintMap map, uint256 key) โ†’ uint256++` [.item-kind]#internal#
  2952. Returns the value associated with `key`. O(1).
  2953. Requirements:
  2954. - `key` must be in the map.
  2955. [.contract-item]
  2956. [[EnumerableMap-keys-struct-EnumerableMap-UintToUintMap-]]
  2957. ==== `[.contract-item-name]#++keys++#++(struct EnumerableMap.UintToUintMap map) โ†’ uint256[]++` [.item-kind]#internal#
  2958. Returns an array containing all the keys
  2959. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  2960. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  2961. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  2962. uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block.
  2963. [.contract-item]
  2964. [[EnumerableMap-keys-struct-EnumerableMap-UintToUintMap-uint256-uint256-]]
  2965. ==== `[.contract-item-name]#++keys++#++(struct EnumerableMap.UintToUintMap map, uint256 start, uint256 end) โ†’ uint256[]++` [.item-kind]#internal#
  2966. Returns an array containing a slice of the keys
  2967. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  2968. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  2969. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  2970. uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block.
  2971. [.contract-item]
  2972. [[EnumerableMap-set-struct-EnumerableMap-UintToAddressMap-uint256-address-]]
  2973. ==== `[.contract-item-name]#++set++#++(struct EnumerableMap.UintToAddressMap map, uint256 key, address value) โ†’ bool++` [.item-kind]#internal#
  2974. Adds a key-value pair to a map, or updates the value for an existing
  2975. key. O(1).
  2976. Returns true if the key was added to the map, that is if it was not
  2977. already present.
  2978. [.contract-item]
  2979. [[EnumerableMap-remove-struct-EnumerableMap-UintToAddressMap-uint256-]]
  2980. ==== `[.contract-item-name]#++remove++#++(struct EnumerableMap.UintToAddressMap map, uint256 key) โ†’ bool++` [.item-kind]#internal#
  2981. Removes a value from a map. O(1).
  2982. Returns true if the key was removed from the map, that is if it was present.
  2983. [.contract-item]
  2984. [[EnumerableMap-clear-struct-EnumerableMap-UintToAddressMap-]]
  2985. ==== `[.contract-item-name]#++clear++#++(struct EnumerableMap.UintToAddressMap map)++` [.item-kind]#internal#
  2986. Removes all the entries from a map. O(n).
  2987. WARNING: This function has an unbounded cost that scales with map size. Developers should keep in mind that
  2988. using it may render the function uncallable if the map grows to the point where clearing it consumes too much
  2989. gas to fit in a block.
  2990. [.contract-item]
  2991. [[EnumerableMap-contains-struct-EnumerableMap-UintToAddressMap-uint256-]]
  2992. ==== `[.contract-item-name]#++contains++#++(struct EnumerableMap.UintToAddressMap map, uint256 key) โ†’ bool++` [.item-kind]#internal#
  2993. Returns true if the key is in the map. O(1).
  2994. [.contract-item]
  2995. [[EnumerableMap-length-struct-EnumerableMap-UintToAddressMap-]]
  2996. ==== `[.contract-item-name]#++length++#++(struct EnumerableMap.UintToAddressMap map) โ†’ uint256++` [.item-kind]#internal#
  2997. Returns the number of elements in the map. O(1).
  2998. [.contract-item]
  2999. [[EnumerableMap-at-struct-EnumerableMap-UintToAddressMap-uint256-]]
  3000. ==== `[.contract-item-name]#++at++#++(struct EnumerableMap.UintToAddressMap map, uint256 index) โ†’ uint256 key, address value++` [.item-kind]#internal#
  3001. Returns the element stored at position `index` in the map. O(1).
  3002. Note that there are no guarantees on the ordering of values inside the
  3003. array, and it may change when more values are added or removed.
  3004. Requirements:
  3005. - `index` must be strictly less than {length}.
  3006. [.contract-item]
  3007. [[EnumerableMap-tryGet-struct-EnumerableMap-UintToAddressMap-uint256-]]
  3008. ==== `[.contract-item-name]#++tryGet++#++(struct EnumerableMap.UintToAddressMap map, uint256 key) โ†’ bool exists, address value++` [.item-kind]#internal#
  3009. Tries to return the value associated with `key`. O(1).
  3010. Does not revert if `key` is not in the map.
  3011. [.contract-item]
  3012. [[EnumerableMap-get-struct-EnumerableMap-UintToAddressMap-uint256-]]
  3013. ==== `[.contract-item-name]#++get++#++(struct EnumerableMap.UintToAddressMap map, uint256 key) โ†’ address++` [.item-kind]#internal#
  3014. Returns the value associated with `key`. O(1).
  3015. Requirements:
  3016. - `key` must be in the map.
  3017. [.contract-item]
  3018. [[EnumerableMap-keys-struct-EnumerableMap-UintToAddressMap-]]
  3019. ==== `[.contract-item-name]#++keys++#++(struct EnumerableMap.UintToAddressMap map) โ†’ uint256[]++` [.item-kind]#internal#
  3020. Returns an array containing all the keys
  3021. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  3022. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  3023. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  3024. uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block.
  3025. [.contract-item]
  3026. [[EnumerableMap-keys-struct-EnumerableMap-UintToAddressMap-uint256-uint256-]]
  3027. ==== `[.contract-item-name]#++keys++#++(struct EnumerableMap.UintToAddressMap map, uint256 start, uint256 end) โ†’ uint256[]++` [.item-kind]#internal#
  3028. Returns an array containing a slice of the keys
  3029. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  3030. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  3031. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  3032. uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block.
  3033. [.contract-item]
  3034. [[EnumerableMap-set-struct-EnumerableMap-UintToBytes32Map-uint256-bytes32-]]
  3035. ==== `[.contract-item-name]#++set++#++(struct EnumerableMap.UintToBytes32Map map, uint256 key, bytes32 value) โ†’ bool++` [.item-kind]#internal#
  3036. Adds a key-value pair to a map, or updates the value for an existing
  3037. key. O(1).
  3038. Returns true if the key was added to the map, that is if it was not
  3039. already present.
  3040. [.contract-item]
  3041. [[EnumerableMap-remove-struct-EnumerableMap-UintToBytes32Map-uint256-]]
  3042. ==== `[.contract-item-name]#++remove++#++(struct EnumerableMap.UintToBytes32Map map, uint256 key) โ†’ bool++` [.item-kind]#internal#
  3043. Removes a value from a map. O(1).
  3044. Returns true if the key was removed from the map, that is if it was present.
  3045. [.contract-item]
  3046. [[EnumerableMap-clear-struct-EnumerableMap-UintToBytes32Map-]]
  3047. ==== `[.contract-item-name]#++clear++#++(struct EnumerableMap.UintToBytes32Map map)++` [.item-kind]#internal#
  3048. Removes all the entries from a map. O(n).
  3049. WARNING: This function has an unbounded cost that scales with map size. Developers should keep in mind that
  3050. using it may render the function uncallable if the map grows to the point where clearing it consumes too much
  3051. gas to fit in a block.
  3052. [.contract-item]
  3053. [[EnumerableMap-contains-struct-EnumerableMap-UintToBytes32Map-uint256-]]
  3054. ==== `[.contract-item-name]#++contains++#++(struct EnumerableMap.UintToBytes32Map map, uint256 key) โ†’ bool++` [.item-kind]#internal#
  3055. Returns true if the key is in the map. O(1).
  3056. [.contract-item]
  3057. [[EnumerableMap-length-struct-EnumerableMap-UintToBytes32Map-]]
  3058. ==== `[.contract-item-name]#++length++#++(struct EnumerableMap.UintToBytes32Map map) โ†’ uint256++` [.item-kind]#internal#
  3059. Returns the number of elements in the map. O(1).
  3060. [.contract-item]
  3061. [[EnumerableMap-at-struct-EnumerableMap-UintToBytes32Map-uint256-]]
  3062. ==== `[.contract-item-name]#++at++#++(struct EnumerableMap.UintToBytes32Map map, uint256 index) โ†’ uint256 key, bytes32 value++` [.item-kind]#internal#
  3063. Returns the element stored at position `index` in the map. O(1).
  3064. Note that there are no guarantees on the ordering of values inside the
  3065. array, and it may change when more values are added or removed.
  3066. Requirements:
  3067. - `index` must be strictly less than {length}.
  3068. [.contract-item]
  3069. [[EnumerableMap-tryGet-struct-EnumerableMap-UintToBytes32Map-uint256-]]
  3070. ==== `[.contract-item-name]#++tryGet++#++(struct EnumerableMap.UintToBytes32Map map, uint256 key) โ†’ bool exists, bytes32 value++` [.item-kind]#internal#
  3071. Tries to return the value associated with `key`. O(1).
  3072. Does not revert if `key` is not in the map.
  3073. [.contract-item]
  3074. [[EnumerableMap-get-struct-EnumerableMap-UintToBytes32Map-uint256-]]
  3075. ==== `[.contract-item-name]#++get++#++(struct EnumerableMap.UintToBytes32Map map, uint256 key) โ†’ bytes32++` [.item-kind]#internal#
  3076. Returns the value associated with `key`. O(1).
  3077. Requirements:
  3078. - `key` must be in the map.
  3079. [.contract-item]
  3080. [[EnumerableMap-keys-struct-EnumerableMap-UintToBytes32Map-]]
  3081. ==== `[.contract-item-name]#++keys++#++(struct EnumerableMap.UintToBytes32Map map) โ†’ uint256[]++` [.item-kind]#internal#
  3082. Returns an array containing all the keys
  3083. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  3084. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  3085. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  3086. uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block.
  3087. [.contract-item]
  3088. [[EnumerableMap-keys-struct-EnumerableMap-UintToBytes32Map-uint256-uint256-]]
  3089. ==== `[.contract-item-name]#++keys++#++(struct EnumerableMap.UintToBytes32Map map, uint256 start, uint256 end) โ†’ uint256[]++` [.item-kind]#internal#
  3090. Returns an array containing a slice of the keys
  3091. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  3092. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  3093. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  3094. uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block.
  3095. [.contract-item]
  3096. [[EnumerableMap-set-struct-EnumerableMap-AddressToUintMap-address-uint256-]]
  3097. ==== `[.contract-item-name]#++set++#++(struct EnumerableMap.AddressToUintMap map, address key, uint256 value) โ†’ bool++` [.item-kind]#internal#
  3098. Adds a key-value pair to a map, or updates the value for an existing
  3099. key. O(1).
  3100. Returns true if the key was added to the map, that is if it was not
  3101. already present.
  3102. [.contract-item]
  3103. [[EnumerableMap-remove-struct-EnumerableMap-AddressToUintMap-address-]]
  3104. ==== `[.contract-item-name]#++remove++#++(struct EnumerableMap.AddressToUintMap map, address key) โ†’ bool++` [.item-kind]#internal#
  3105. Removes a value from a map. O(1).
  3106. Returns true if the key was removed from the map, that is if it was present.
  3107. [.contract-item]
  3108. [[EnumerableMap-clear-struct-EnumerableMap-AddressToUintMap-]]
  3109. ==== `[.contract-item-name]#++clear++#++(struct EnumerableMap.AddressToUintMap map)++` [.item-kind]#internal#
  3110. Removes all the entries from a map. O(n).
  3111. WARNING: This function has an unbounded cost that scales with map size. Developers should keep in mind that
  3112. using it may render the function uncallable if the map grows to the point where clearing it consumes too much
  3113. gas to fit in a block.
  3114. [.contract-item]
  3115. [[EnumerableMap-contains-struct-EnumerableMap-AddressToUintMap-address-]]
  3116. ==== `[.contract-item-name]#++contains++#++(struct EnumerableMap.AddressToUintMap map, address key) โ†’ bool++` [.item-kind]#internal#
  3117. Returns true if the key is in the map. O(1).
  3118. [.contract-item]
  3119. [[EnumerableMap-length-struct-EnumerableMap-AddressToUintMap-]]
  3120. ==== `[.contract-item-name]#++length++#++(struct EnumerableMap.AddressToUintMap map) โ†’ uint256++` [.item-kind]#internal#
  3121. Returns the number of elements in the map. O(1).
  3122. [.contract-item]
  3123. [[EnumerableMap-at-struct-EnumerableMap-AddressToUintMap-uint256-]]
  3124. ==== `[.contract-item-name]#++at++#++(struct EnumerableMap.AddressToUintMap map, uint256 index) โ†’ address key, uint256 value++` [.item-kind]#internal#
  3125. Returns the element stored at position `index` in the map. O(1).
  3126. Note that there are no guarantees on the ordering of values inside the
  3127. array, and it may change when more values are added or removed.
  3128. Requirements:
  3129. - `index` must be strictly less than {length}.
  3130. [.contract-item]
  3131. [[EnumerableMap-tryGet-struct-EnumerableMap-AddressToUintMap-address-]]
  3132. ==== `[.contract-item-name]#++tryGet++#++(struct EnumerableMap.AddressToUintMap map, address key) โ†’ bool exists, uint256 value++` [.item-kind]#internal#
  3133. Tries to return the value associated with `key`. O(1).
  3134. Does not revert if `key` is not in the map.
  3135. [.contract-item]
  3136. [[EnumerableMap-get-struct-EnumerableMap-AddressToUintMap-address-]]
  3137. ==== `[.contract-item-name]#++get++#++(struct EnumerableMap.AddressToUintMap map, address key) โ†’ uint256++` [.item-kind]#internal#
  3138. Returns the value associated with `key`. O(1).
  3139. Requirements:
  3140. - `key` must be in the map.
  3141. [.contract-item]
  3142. [[EnumerableMap-keys-struct-EnumerableMap-AddressToUintMap-]]
  3143. ==== `[.contract-item-name]#++keys++#++(struct EnumerableMap.AddressToUintMap map) โ†’ address[]++` [.item-kind]#internal#
  3144. Returns an array containing all the keys
  3145. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  3146. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  3147. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  3148. uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block.
  3149. [.contract-item]
  3150. [[EnumerableMap-keys-struct-EnumerableMap-AddressToUintMap-uint256-uint256-]]
  3151. ==== `[.contract-item-name]#++keys++#++(struct EnumerableMap.AddressToUintMap map, uint256 start, uint256 end) โ†’ address[]++` [.item-kind]#internal#
  3152. Returns an array containing a slice of the keys
  3153. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  3154. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  3155. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  3156. uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block.
  3157. [.contract-item]
  3158. [[EnumerableMap-set-struct-EnumerableMap-AddressToAddressMap-address-address-]]
  3159. ==== `[.contract-item-name]#++set++#++(struct EnumerableMap.AddressToAddressMap map, address key, address value) โ†’ bool++` [.item-kind]#internal#
  3160. Adds a key-value pair to a map, or updates the value for an existing
  3161. key. O(1).
  3162. Returns true if the key was added to the map, that is if it was not
  3163. already present.
  3164. [.contract-item]
  3165. [[EnumerableMap-remove-struct-EnumerableMap-AddressToAddressMap-address-]]
  3166. ==== `[.contract-item-name]#++remove++#++(struct EnumerableMap.AddressToAddressMap map, address key) โ†’ bool++` [.item-kind]#internal#
  3167. Removes a value from a map. O(1).
  3168. Returns true if the key was removed from the map, that is if it was present.
  3169. [.contract-item]
  3170. [[EnumerableMap-clear-struct-EnumerableMap-AddressToAddressMap-]]
  3171. ==== `[.contract-item-name]#++clear++#++(struct EnumerableMap.AddressToAddressMap map)++` [.item-kind]#internal#
  3172. Removes all the entries from a map. O(n).
  3173. WARNING: This function has an unbounded cost that scales with map size. Developers should keep in mind that
  3174. using it may render the function uncallable if the map grows to the point where clearing it consumes too much
  3175. gas to fit in a block.
  3176. [.contract-item]
  3177. [[EnumerableMap-contains-struct-EnumerableMap-AddressToAddressMap-address-]]
  3178. ==== `[.contract-item-name]#++contains++#++(struct EnumerableMap.AddressToAddressMap map, address key) โ†’ bool++` [.item-kind]#internal#
  3179. Returns true if the key is in the map. O(1).
  3180. [.contract-item]
  3181. [[EnumerableMap-length-struct-EnumerableMap-AddressToAddressMap-]]
  3182. ==== `[.contract-item-name]#++length++#++(struct EnumerableMap.AddressToAddressMap map) โ†’ uint256++` [.item-kind]#internal#
  3183. Returns the number of elements in the map. O(1).
  3184. [.contract-item]
  3185. [[EnumerableMap-at-struct-EnumerableMap-AddressToAddressMap-uint256-]]
  3186. ==== `[.contract-item-name]#++at++#++(struct EnumerableMap.AddressToAddressMap map, uint256 index) โ†’ address key, address value++` [.item-kind]#internal#
  3187. Returns the element stored at position `index` in the map. O(1).
  3188. Note that there are no guarantees on the ordering of values inside the
  3189. array, and it may change when more values are added or removed.
  3190. Requirements:
  3191. - `index` must be strictly less than {length}.
  3192. [.contract-item]
  3193. [[EnumerableMap-tryGet-struct-EnumerableMap-AddressToAddressMap-address-]]
  3194. ==== `[.contract-item-name]#++tryGet++#++(struct EnumerableMap.AddressToAddressMap map, address key) โ†’ bool exists, address value++` [.item-kind]#internal#
  3195. Tries to return the value associated with `key`. O(1).
  3196. Does not revert if `key` is not in the map.
  3197. [.contract-item]
  3198. [[EnumerableMap-get-struct-EnumerableMap-AddressToAddressMap-address-]]
  3199. ==== `[.contract-item-name]#++get++#++(struct EnumerableMap.AddressToAddressMap map, address key) โ†’ address++` [.item-kind]#internal#
  3200. Returns the value associated with `key`. O(1).
  3201. Requirements:
  3202. - `key` must be in the map.
  3203. [.contract-item]
  3204. [[EnumerableMap-keys-struct-EnumerableMap-AddressToAddressMap-]]
  3205. ==== `[.contract-item-name]#++keys++#++(struct EnumerableMap.AddressToAddressMap map) โ†’ address[]++` [.item-kind]#internal#
  3206. Returns an array containing all the keys
  3207. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  3208. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  3209. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  3210. uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block.
  3211. [.contract-item]
  3212. [[EnumerableMap-keys-struct-EnumerableMap-AddressToAddressMap-uint256-uint256-]]
  3213. ==== `[.contract-item-name]#++keys++#++(struct EnumerableMap.AddressToAddressMap map, uint256 start, uint256 end) โ†’ address[]++` [.item-kind]#internal#
  3214. Returns an array containing a slice of the keys
  3215. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  3216. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  3217. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  3218. uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block.
  3219. [.contract-item]
  3220. [[EnumerableMap-set-struct-EnumerableMap-AddressToBytes32Map-address-bytes32-]]
  3221. ==== `[.contract-item-name]#++set++#++(struct EnumerableMap.AddressToBytes32Map map, address key, bytes32 value) โ†’ bool++` [.item-kind]#internal#
  3222. Adds a key-value pair to a map, or updates the value for an existing
  3223. key. O(1).
  3224. Returns true if the key was added to the map, that is if it was not
  3225. already present.
  3226. [.contract-item]
  3227. [[EnumerableMap-remove-struct-EnumerableMap-AddressToBytes32Map-address-]]
  3228. ==== `[.contract-item-name]#++remove++#++(struct EnumerableMap.AddressToBytes32Map map, address key) โ†’ bool++` [.item-kind]#internal#
  3229. Removes a value from a map. O(1).
  3230. Returns true if the key was removed from the map, that is if it was present.
  3231. [.contract-item]
  3232. [[EnumerableMap-clear-struct-EnumerableMap-AddressToBytes32Map-]]
  3233. ==== `[.contract-item-name]#++clear++#++(struct EnumerableMap.AddressToBytes32Map map)++` [.item-kind]#internal#
  3234. Removes all the entries from a map. O(n).
  3235. WARNING: This function has an unbounded cost that scales with map size. Developers should keep in mind that
  3236. using it may render the function uncallable if the map grows to the point where clearing it consumes too much
  3237. gas to fit in a block.
  3238. [.contract-item]
  3239. [[EnumerableMap-contains-struct-EnumerableMap-AddressToBytes32Map-address-]]
  3240. ==== `[.contract-item-name]#++contains++#++(struct EnumerableMap.AddressToBytes32Map map, address key) โ†’ bool++` [.item-kind]#internal#
  3241. Returns true if the key is in the map. O(1).
  3242. [.contract-item]
  3243. [[EnumerableMap-length-struct-EnumerableMap-AddressToBytes32Map-]]
  3244. ==== `[.contract-item-name]#++length++#++(struct EnumerableMap.AddressToBytes32Map map) โ†’ uint256++` [.item-kind]#internal#
  3245. Returns the number of elements in the map. O(1).
  3246. [.contract-item]
  3247. [[EnumerableMap-at-struct-EnumerableMap-AddressToBytes32Map-uint256-]]
  3248. ==== `[.contract-item-name]#++at++#++(struct EnumerableMap.AddressToBytes32Map map, uint256 index) โ†’ address key, bytes32 value++` [.item-kind]#internal#
  3249. Returns the element stored at position `index` in the map. O(1).
  3250. Note that there are no guarantees on the ordering of values inside the
  3251. array, and it may change when more values are added or removed.
  3252. Requirements:
  3253. - `index` must be strictly less than {length}.
  3254. [.contract-item]
  3255. [[EnumerableMap-tryGet-struct-EnumerableMap-AddressToBytes32Map-address-]]
  3256. ==== `[.contract-item-name]#++tryGet++#++(struct EnumerableMap.AddressToBytes32Map map, address key) โ†’ bool exists, bytes32 value++` [.item-kind]#internal#
  3257. Tries to return the value associated with `key`. O(1).
  3258. Does not revert if `key` is not in the map.
  3259. [.contract-item]
  3260. [[EnumerableMap-get-struct-EnumerableMap-AddressToBytes32Map-address-]]
  3261. ==== `[.contract-item-name]#++get++#++(struct EnumerableMap.AddressToBytes32Map map, address key) โ†’ bytes32++` [.item-kind]#internal#
  3262. Returns the value associated with `key`. O(1).
  3263. Requirements:
  3264. - `key` must be in the map.
  3265. [.contract-item]
  3266. [[EnumerableMap-keys-struct-EnumerableMap-AddressToBytes32Map-]]
  3267. ==== `[.contract-item-name]#++keys++#++(struct EnumerableMap.AddressToBytes32Map map) โ†’ address[]++` [.item-kind]#internal#
  3268. Returns an array containing all the keys
  3269. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  3270. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  3271. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  3272. uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block.
  3273. [.contract-item]
  3274. [[EnumerableMap-keys-struct-EnumerableMap-AddressToBytes32Map-uint256-uint256-]]
  3275. ==== `[.contract-item-name]#++keys++#++(struct EnumerableMap.AddressToBytes32Map map, uint256 start, uint256 end) โ†’ address[]++` [.item-kind]#internal#
  3276. Returns an array containing a slice of the keys
  3277. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  3278. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  3279. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  3280. uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block.
  3281. [.contract-item]
  3282. [[EnumerableMap-set-struct-EnumerableMap-Bytes32ToUintMap-bytes32-uint256-]]
  3283. ==== `[.contract-item-name]#++set++#++(struct EnumerableMap.Bytes32ToUintMap map, bytes32 key, uint256 value) โ†’ bool++` [.item-kind]#internal#
  3284. Adds a key-value pair to a map, or updates the value for an existing
  3285. key. O(1).
  3286. Returns true if the key was added to the map, that is if it was not
  3287. already present.
  3288. [.contract-item]
  3289. [[EnumerableMap-remove-struct-EnumerableMap-Bytes32ToUintMap-bytes32-]]
  3290. ==== `[.contract-item-name]#++remove++#++(struct EnumerableMap.Bytes32ToUintMap map, bytes32 key) โ†’ bool++` [.item-kind]#internal#
  3291. Removes a value from a map. O(1).
  3292. Returns true if the key was removed from the map, that is if it was present.
  3293. [.contract-item]
  3294. [[EnumerableMap-clear-struct-EnumerableMap-Bytes32ToUintMap-]]
  3295. ==== `[.contract-item-name]#++clear++#++(struct EnumerableMap.Bytes32ToUintMap map)++` [.item-kind]#internal#
  3296. Removes all the entries from a map. O(n).
  3297. WARNING: This function has an unbounded cost that scales with map size. Developers should keep in mind that
  3298. using it may render the function uncallable if the map grows to the point where clearing it consumes too much
  3299. gas to fit in a block.
  3300. [.contract-item]
  3301. [[EnumerableMap-contains-struct-EnumerableMap-Bytes32ToUintMap-bytes32-]]
  3302. ==== `[.contract-item-name]#++contains++#++(struct EnumerableMap.Bytes32ToUintMap map, bytes32 key) โ†’ bool++` [.item-kind]#internal#
  3303. Returns true if the key is in the map. O(1).
  3304. [.contract-item]
  3305. [[EnumerableMap-length-struct-EnumerableMap-Bytes32ToUintMap-]]
  3306. ==== `[.contract-item-name]#++length++#++(struct EnumerableMap.Bytes32ToUintMap map) โ†’ uint256++` [.item-kind]#internal#
  3307. Returns the number of elements in the map. O(1).
  3308. [.contract-item]
  3309. [[EnumerableMap-at-struct-EnumerableMap-Bytes32ToUintMap-uint256-]]
  3310. ==== `[.contract-item-name]#++at++#++(struct EnumerableMap.Bytes32ToUintMap map, uint256 index) โ†’ bytes32 key, uint256 value++` [.item-kind]#internal#
  3311. Returns the element stored at position `index` in the map. O(1).
  3312. Note that there are no guarantees on the ordering of values inside the
  3313. array, and it may change when more values are added or removed.
  3314. Requirements:
  3315. - `index` must be strictly less than {length}.
  3316. [.contract-item]
  3317. [[EnumerableMap-tryGet-struct-EnumerableMap-Bytes32ToUintMap-bytes32-]]
  3318. ==== `[.contract-item-name]#++tryGet++#++(struct EnumerableMap.Bytes32ToUintMap map, bytes32 key) โ†’ bool exists, uint256 value++` [.item-kind]#internal#
  3319. Tries to return the value associated with `key`. O(1).
  3320. Does not revert if `key` is not in the map.
  3321. [.contract-item]
  3322. [[EnumerableMap-get-struct-EnumerableMap-Bytes32ToUintMap-bytes32-]]
  3323. ==== `[.contract-item-name]#++get++#++(struct EnumerableMap.Bytes32ToUintMap map, bytes32 key) โ†’ uint256++` [.item-kind]#internal#
  3324. Returns the value associated with `key`. O(1).
  3325. Requirements:
  3326. - `key` must be in the map.
  3327. [.contract-item]
  3328. [[EnumerableMap-keys-struct-EnumerableMap-Bytes32ToUintMap-]]
  3329. ==== `[.contract-item-name]#++keys++#++(struct EnumerableMap.Bytes32ToUintMap map) โ†’ bytes32[]++` [.item-kind]#internal#
  3330. Returns an array containing all the keys
  3331. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  3332. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  3333. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  3334. uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block.
  3335. [.contract-item]
  3336. [[EnumerableMap-keys-struct-EnumerableMap-Bytes32ToUintMap-uint256-uint256-]]
  3337. ==== `[.contract-item-name]#++keys++#++(struct EnumerableMap.Bytes32ToUintMap map, uint256 start, uint256 end) โ†’ bytes32[]++` [.item-kind]#internal#
  3338. Returns an array containing a slice of the keys
  3339. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  3340. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  3341. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  3342. uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block.
  3343. [.contract-item]
  3344. [[EnumerableMap-set-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-address-]]
  3345. ==== `[.contract-item-name]#++set++#++(struct EnumerableMap.Bytes32ToAddressMap map, bytes32 key, address value) โ†’ bool++` [.item-kind]#internal#
  3346. Adds a key-value pair to a map, or updates the value for an existing
  3347. key. O(1).
  3348. Returns true if the key was added to the map, that is if it was not
  3349. already present.
  3350. [.contract-item]
  3351. [[EnumerableMap-remove-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-]]
  3352. ==== `[.contract-item-name]#++remove++#++(struct EnumerableMap.Bytes32ToAddressMap map, bytes32 key) โ†’ bool++` [.item-kind]#internal#
  3353. Removes a value from a map. O(1).
  3354. Returns true if the key was removed from the map, that is if it was present.
  3355. [.contract-item]
  3356. [[EnumerableMap-clear-struct-EnumerableMap-Bytes32ToAddressMap-]]
  3357. ==== `[.contract-item-name]#++clear++#++(struct EnumerableMap.Bytes32ToAddressMap map)++` [.item-kind]#internal#
  3358. Removes all the entries from a map. O(n).
  3359. WARNING: This function has an unbounded cost that scales with map size. Developers should keep in mind that
  3360. using it may render the function uncallable if the map grows to the point where clearing it consumes too much
  3361. gas to fit in a block.
  3362. [.contract-item]
  3363. [[EnumerableMap-contains-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-]]
  3364. ==== `[.contract-item-name]#++contains++#++(struct EnumerableMap.Bytes32ToAddressMap map, bytes32 key) โ†’ bool++` [.item-kind]#internal#
  3365. Returns true if the key is in the map. O(1).
  3366. [.contract-item]
  3367. [[EnumerableMap-length-struct-EnumerableMap-Bytes32ToAddressMap-]]
  3368. ==== `[.contract-item-name]#++length++#++(struct EnumerableMap.Bytes32ToAddressMap map) โ†’ uint256++` [.item-kind]#internal#
  3369. Returns the number of elements in the map. O(1).
  3370. [.contract-item]
  3371. [[EnumerableMap-at-struct-EnumerableMap-Bytes32ToAddressMap-uint256-]]
  3372. ==== `[.contract-item-name]#++at++#++(struct EnumerableMap.Bytes32ToAddressMap map, uint256 index) โ†’ bytes32 key, address value++` [.item-kind]#internal#
  3373. Returns the element stored at position `index` in the map. O(1).
  3374. Note that there are no guarantees on the ordering of values inside the
  3375. array, and it may change when more values are added or removed.
  3376. Requirements:
  3377. - `index` must be strictly less than {length}.
  3378. [.contract-item]
  3379. [[EnumerableMap-tryGet-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-]]
  3380. ==== `[.contract-item-name]#++tryGet++#++(struct EnumerableMap.Bytes32ToAddressMap map, bytes32 key) โ†’ bool exists, address value++` [.item-kind]#internal#
  3381. Tries to return the value associated with `key`. O(1).
  3382. Does not revert if `key` is not in the map.
  3383. [.contract-item]
  3384. [[EnumerableMap-get-struct-EnumerableMap-Bytes32ToAddressMap-bytes32-]]
  3385. ==== `[.contract-item-name]#++get++#++(struct EnumerableMap.Bytes32ToAddressMap map, bytes32 key) โ†’ address++` [.item-kind]#internal#
  3386. Returns the value associated with `key`. O(1).
  3387. Requirements:
  3388. - `key` must be in the map.
  3389. [.contract-item]
  3390. [[EnumerableMap-keys-struct-EnumerableMap-Bytes32ToAddressMap-]]
  3391. ==== `[.contract-item-name]#++keys++#++(struct EnumerableMap.Bytes32ToAddressMap map) โ†’ bytes32[]++` [.item-kind]#internal#
  3392. Returns an array containing all the keys
  3393. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  3394. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  3395. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  3396. uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block.
  3397. [.contract-item]
  3398. [[EnumerableMap-keys-struct-EnumerableMap-Bytes32ToAddressMap-uint256-uint256-]]
  3399. ==== `[.contract-item-name]#++keys++#++(struct EnumerableMap.Bytes32ToAddressMap map, uint256 start, uint256 end) โ†’ bytes32[]++` [.item-kind]#internal#
  3400. Returns an array containing a slice of the keys
  3401. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  3402. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  3403. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  3404. uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block.
  3405. [.contract-item]
  3406. [[EnumerableMap-set-struct-EnumerableMap-BytesToBytesMap-bytes-bytes-]]
  3407. ==== `[.contract-item-name]#++set++#++(struct EnumerableMap.BytesToBytesMap map, bytes key, bytes value) โ†’ bool++` [.item-kind]#internal#
  3408. Adds a key-value pair to a map, or updates the value for an existing
  3409. key. O(1).
  3410. Returns true if the key was added to the map, that is if it was not
  3411. already present.
  3412. [.contract-item]
  3413. [[EnumerableMap-remove-struct-EnumerableMap-BytesToBytesMap-bytes-]]
  3414. ==== `[.contract-item-name]#++remove++#++(struct EnumerableMap.BytesToBytesMap map, bytes key) โ†’ bool++` [.item-kind]#internal#
  3415. Removes a key-value pair from a map. O(1).
  3416. Returns true if the key was removed from the map, that is if it was present.
  3417. [.contract-item]
  3418. [[EnumerableMap-clear-struct-EnumerableMap-BytesToBytesMap-]]
  3419. ==== `[.contract-item-name]#++clear++#++(struct EnumerableMap.BytesToBytesMap map)++` [.item-kind]#internal#
  3420. Removes all the entries from a map. O(n).
  3421. WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the
  3422. function uncallable if the map grows to the point where clearing it consumes too much gas to fit in a block.
  3423. [.contract-item]
  3424. [[EnumerableMap-contains-struct-EnumerableMap-BytesToBytesMap-bytes-]]
  3425. ==== `[.contract-item-name]#++contains++#++(struct EnumerableMap.BytesToBytesMap map, bytes key) โ†’ bool++` [.item-kind]#internal#
  3426. Returns true if the key is in the map. O(1).
  3427. [.contract-item]
  3428. [[EnumerableMap-length-struct-EnumerableMap-BytesToBytesMap-]]
  3429. ==== `[.contract-item-name]#++length++#++(struct EnumerableMap.BytesToBytesMap map) โ†’ uint256++` [.item-kind]#internal#
  3430. Returns the number of key-value pairs in the map. O(1).
  3431. [.contract-item]
  3432. [[EnumerableMap-at-struct-EnumerableMap-BytesToBytesMap-uint256-]]
  3433. ==== `[.contract-item-name]#++at++#++(struct EnumerableMap.BytesToBytesMap map, uint256 index) โ†’ bytes key, bytes value++` [.item-kind]#internal#
  3434. Returns the key-value pair stored at position `index` in the map. O(1).
  3435. Note that there are no guarantees on the ordering of entries inside the
  3436. array, and it may change when more entries are added or removed.
  3437. Requirements:
  3438. - `index` must be strictly less than {length}.
  3439. [.contract-item]
  3440. [[EnumerableMap-tryGet-struct-EnumerableMap-BytesToBytesMap-bytes-]]
  3441. ==== `[.contract-item-name]#++tryGet++#++(struct EnumerableMap.BytesToBytesMap map, bytes key) โ†’ bool exists, bytes value++` [.item-kind]#internal#
  3442. Tries to return the value associated with `key`. O(1).
  3443. Does not revert if `key` is not in the map.
  3444. [.contract-item]
  3445. [[EnumerableMap-get-struct-EnumerableMap-BytesToBytesMap-bytes-]]
  3446. ==== `[.contract-item-name]#++get++#++(struct EnumerableMap.BytesToBytesMap map, bytes key) โ†’ bytes value++` [.item-kind]#internal#
  3447. Returns the value associated with `key`. O(1).
  3448. Requirements:
  3449. - `key` must be in the map.
  3450. [.contract-item]
  3451. [[EnumerableMap-keys-struct-EnumerableMap-BytesToBytesMap-]]
  3452. ==== `[.contract-item-name]#++keys++#++(struct EnumerableMap.BytesToBytesMap map) โ†’ bytes[]++` [.item-kind]#internal#
  3453. Returns an array containing all the keys
  3454. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  3455. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  3456. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  3457. uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block.
  3458. [.contract-item]
  3459. [[EnumerableMap-keys-struct-EnumerableMap-BytesToBytesMap-uint256-uint256-]]
  3460. ==== `[.contract-item-name]#++keys++#++(struct EnumerableMap.BytesToBytesMap map, uint256 start, uint256 end) โ†’ bytes[]++` [.item-kind]#internal#
  3461. Returns an array containing a slice of the keys
  3462. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  3463. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  3464. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  3465. uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block.
  3466. [.contract-item]
  3467. [[EnumerableMap-EnumerableMapNonexistentKey-bytes32-]]
  3468. ==== `[.contract-item-name]#++EnumerableMapNonexistentKey++#++(bytes32 key)++` [.item-kind]#error#
  3469. Query for a nonexistent map key.
  3470. [.contract-item]
  3471. [[EnumerableMap-EnumerableMapNonexistentBytesKey-bytes-]]
  3472. ==== `[.contract-item-name]#++EnumerableMapNonexistentBytesKey++#++(bytes key)++` [.item-kind]#error#
  3473. Query for a nonexistent map key.
  3474. :Set: pass:normal[xref:#EnumerableSet-Set[`++Set++`]]
  3475. :Bytes32Set: pass:normal[xref:#EnumerableSet-Bytes32Set[`++Bytes32Set++`]]
  3476. :add: pass:normal[xref:#EnumerableSet-add-struct-EnumerableSet-Bytes32Set-bytes32-[`++add++`]]
  3477. :remove: pass:normal[xref:#EnumerableSet-remove-struct-EnumerableSet-Bytes32Set-bytes32-[`++remove++`]]
  3478. :clear: pass:normal[xref:#EnumerableSet-clear-struct-EnumerableSet-Bytes32Set-[`++clear++`]]
  3479. :contains: pass:normal[xref:#EnumerableSet-contains-struct-EnumerableSet-Bytes32Set-bytes32-[`++contains++`]]
  3480. :length: pass:normal[xref:#EnumerableSet-length-struct-EnumerableSet-Bytes32Set-[`++length++`]]
  3481. :at: pass:normal[xref:#EnumerableSet-at-struct-EnumerableSet-Bytes32Set-uint256-[`++at++`]]
  3482. :values: pass:normal[xref:#EnumerableSet-values-struct-EnumerableSet-Bytes32Set-[`++values++`]]
  3483. :values: pass:normal[xref:#EnumerableSet-values-struct-EnumerableSet-Bytes32Set-uint256-uint256-[`++values++`]]
  3484. :AddressSet: pass:normal[xref:#EnumerableSet-AddressSet[`++AddressSet++`]]
  3485. :add: pass:normal[xref:#EnumerableSet-add-struct-EnumerableSet-AddressSet-address-[`++add++`]]
  3486. :remove: pass:normal[xref:#EnumerableSet-remove-struct-EnumerableSet-AddressSet-address-[`++remove++`]]
  3487. :clear: pass:normal[xref:#EnumerableSet-clear-struct-EnumerableSet-AddressSet-[`++clear++`]]
  3488. :contains: pass:normal[xref:#EnumerableSet-contains-struct-EnumerableSet-AddressSet-address-[`++contains++`]]
  3489. :length: pass:normal[xref:#EnumerableSet-length-struct-EnumerableSet-AddressSet-[`++length++`]]
  3490. :at: pass:normal[xref:#EnumerableSet-at-struct-EnumerableSet-AddressSet-uint256-[`++at++`]]
  3491. :values: pass:normal[xref:#EnumerableSet-values-struct-EnumerableSet-AddressSet-[`++values++`]]
  3492. :values: pass:normal[xref:#EnumerableSet-values-struct-EnumerableSet-AddressSet-uint256-uint256-[`++values++`]]
  3493. :UintSet: pass:normal[xref:#EnumerableSet-UintSet[`++UintSet++`]]
  3494. :add: pass:normal[xref:#EnumerableSet-add-struct-EnumerableSet-UintSet-uint256-[`++add++`]]
  3495. :remove: pass:normal[xref:#EnumerableSet-remove-struct-EnumerableSet-UintSet-uint256-[`++remove++`]]
  3496. :clear: pass:normal[xref:#EnumerableSet-clear-struct-EnumerableSet-UintSet-[`++clear++`]]
  3497. :contains: pass:normal[xref:#EnumerableSet-contains-struct-EnumerableSet-UintSet-uint256-[`++contains++`]]
  3498. :length: pass:normal[xref:#EnumerableSet-length-struct-EnumerableSet-UintSet-[`++length++`]]
  3499. :at: pass:normal[xref:#EnumerableSet-at-struct-EnumerableSet-UintSet-uint256-[`++at++`]]
  3500. :values: pass:normal[xref:#EnumerableSet-values-struct-EnumerableSet-UintSet-[`++values++`]]
  3501. :values: pass:normal[xref:#EnumerableSet-values-struct-EnumerableSet-UintSet-uint256-uint256-[`++values++`]]
  3502. :StringSet: pass:normal[xref:#EnumerableSet-StringSet[`++StringSet++`]]
  3503. :add: pass:normal[xref:#EnumerableSet-add-struct-EnumerableSet-StringSet-string-[`++add++`]]
  3504. :remove: pass:normal[xref:#EnumerableSet-remove-struct-EnumerableSet-StringSet-string-[`++remove++`]]
  3505. :clear: pass:normal[xref:#EnumerableSet-clear-struct-EnumerableSet-StringSet-[`++clear++`]]
  3506. :contains: pass:normal[xref:#EnumerableSet-contains-struct-EnumerableSet-StringSet-string-[`++contains++`]]
  3507. :length: pass:normal[xref:#EnumerableSet-length-struct-EnumerableSet-StringSet-[`++length++`]]
  3508. :at: pass:normal[xref:#EnumerableSet-at-struct-EnumerableSet-StringSet-uint256-[`++at++`]]
  3509. :values: pass:normal[xref:#EnumerableSet-values-struct-EnumerableSet-StringSet-[`++values++`]]
  3510. :values: pass:normal[xref:#EnumerableSet-values-struct-EnumerableSet-StringSet-uint256-uint256-[`++values++`]]
  3511. :BytesSet: pass:normal[xref:#EnumerableSet-BytesSet[`++BytesSet++`]]
  3512. :add: pass:normal[xref:#EnumerableSet-add-struct-EnumerableSet-BytesSet-bytes-[`++add++`]]
  3513. :remove: pass:normal[xref:#EnumerableSet-remove-struct-EnumerableSet-BytesSet-bytes-[`++remove++`]]
  3514. :clear: pass:normal[xref:#EnumerableSet-clear-struct-EnumerableSet-BytesSet-[`++clear++`]]
  3515. :contains: pass:normal[xref:#EnumerableSet-contains-struct-EnumerableSet-BytesSet-bytes-[`++contains++`]]
  3516. :length: pass:normal[xref:#EnumerableSet-length-struct-EnumerableSet-BytesSet-[`++length++`]]
  3517. :at: pass:normal[xref:#EnumerableSet-at-struct-EnumerableSet-BytesSet-uint256-[`++at++`]]
  3518. :values: pass:normal[xref:#EnumerableSet-values-struct-EnumerableSet-BytesSet-[`++values++`]]
  3519. :values: pass:normal[xref:#EnumerableSet-values-struct-EnumerableSet-BytesSet-uint256-uint256-[`++values++`]]
  3520. :add-struct-EnumerableSet-Bytes32Set-bytes32: pass:normal[xref:#EnumerableSet-add-struct-EnumerableSet-Bytes32Set-bytes32-[`++add++`]]
  3521. :remove-struct-EnumerableSet-Bytes32Set-bytes32: pass:normal[xref:#EnumerableSet-remove-struct-EnumerableSet-Bytes32Set-bytes32-[`++remove++`]]
  3522. :clear-struct-EnumerableSet-Bytes32Set: pass:normal[xref:#EnumerableSet-clear-struct-EnumerableSet-Bytes32Set-[`++clear++`]]
  3523. :contains-struct-EnumerableSet-Bytes32Set-bytes32: pass:normal[xref:#EnumerableSet-contains-struct-EnumerableSet-Bytes32Set-bytes32-[`++contains++`]]
  3524. :length-struct-EnumerableSet-Bytes32Set: pass:normal[xref:#EnumerableSet-length-struct-EnumerableSet-Bytes32Set-[`++length++`]]
  3525. :at-struct-EnumerableSet-Bytes32Set-uint256: pass:normal[xref:#EnumerableSet-at-struct-EnumerableSet-Bytes32Set-uint256-[`++at++`]]
  3526. :values-struct-EnumerableSet-Bytes32Set: pass:normal[xref:#EnumerableSet-values-struct-EnumerableSet-Bytes32Set-[`++values++`]]
  3527. :values-struct-EnumerableSet-Bytes32Set-uint256-uint256: pass:normal[xref:#EnumerableSet-values-struct-EnumerableSet-Bytes32Set-uint256-uint256-[`++values++`]]
  3528. :add-struct-EnumerableSet-AddressSet-address: pass:normal[xref:#EnumerableSet-add-struct-EnumerableSet-AddressSet-address-[`++add++`]]
  3529. :remove-struct-EnumerableSet-AddressSet-address: pass:normal[xref:#EnumerableSet-remove-struct-EnumerableSet-AddressSet-address-[`++remove++`]]
  3530. :clear-struct-EnumerableSet-AddressSet: pass:normal[xref:#EnumerableSet-clear-struct-EnumerableSet-AddressSet-[`++clear++`]]
  3531. :contains-struct-EnumerableSet-AddressSet-address: pass:normal[xref:#EnumerableSet-contains-struct-EnumerableSet-AddressSet-address-[`++contains++`]]
  3532. :length-struct-EnumerableSet-AddressSet: pass:normal[xref:#EnumerableSet-length-struct-EnumerableSet-AddressSet-[`++length++`]]
  3533. :at-struct-EnumerableSet-AddressSet-uint256: pass:normal[xref:#EnumerableSet-at-struct-EnumerableSet-AddressSet-uint256-[`++at++`]]
  3534. :values-struct-EnumerableSet-AddressSet: pass:normal[xref:#EnumerableSet-values-struct-EnumerableSet-AddressSet-[`++values++`]]
  3535. :values-struct-EnumerableSet-AddressSet-uint256-uint256: pass:normal[xref:#EnumerableSet-values-struct-EnumerableSet-AddressSet-uint256-uint256-[`++values++`]]
  3536. :add-struct-EnumerableSet-UintSet-uint256: pass:normal[xref:#EnumerableSet-add-struct-EnumerableSet-UintSet-uint256-[`++add++`]]
  3537. :remove-struct-EnumerableSet-UintSet-uint256: pass:normal[xref:#EnumerableSet-remove-struct-EnumerableSet-UintSet-uint256-[`++remove++`]]
  3538. :clear-struct-EnumerableSet-UintSet: pass:normal[xref:#EnumerableSet-clear-struct-EnumerableSet-UintSet-[`++clear++`]]
  3539. :contains-struct-EnumerableSet-UintSet-uint256: pass:normal[xref:#EnumerableSet-contains-struct-EnumerableSet-UintSet-uint256-[`++contains++`]]
  3540. :length-struct-EnumerableSet-UintSet: pass:normal[xref:#EnumerableSet-length-struct-EnumerableSet-UintSet-[`++length++`]]
  3541. :at-struct-EnumerableSet-UintSet-uint256: pass:normal[xref:#EnumerableSet-at-struct-EnumerableSet-UintSet-uint256-[`++at++`]]
  3542. :values-struct-EnumerableSet-UintSet: pass:normal[xref:#EnumerableSet-values-struct-EnumerableSet-UintSet-[`++values++`]]
  3543. :values-struct-EnumerableSet-UintSet-uint256-uint256: pass:normal[xref:#EnumerableSet-values-struct-EnumerableSet-UintSet-uint256-uint256-[`++values++`]]
  3544. :add-struct-EnumerableSet-StringSet-string: pass:normal[xref:#EnumerableSet-add-struct-EnumerableSet-StringSet-string-[`++add++`]]
  3545. :remove-struct-EnumerableSet-StringSet-string: pass:normal[xref:#EnumerableSet-remove-struct-EnumerableSet-StringSet-string-[`++remove++`]]
  3546. :clear-struct-EnumerableSet-StringSet: pass:normal[xref:#EnumerableSet-clear-struct-EnumerableSet-StringSet-[`++clear++`]]
  3547. :contains-struct-EnumerableSet-StringSet-string: pass:normal[xref:#EnumerableSet-contains-struct-EnumerableSet-StringSet-string-[`++contains++`]]
  3548. :length-struct-EnumerableSet-StringSet: pass:normal[xref:#EnumerableSet-length-struct-EnumerableSet-StringSet-[`++length++`]]
  3549. :at-struct-EnumerableSet-StringSet-uint256: pass:normal[xref:#EnumerableSet-at-struct-EnumerableSet-StringSet-uint256-[`++at++`]]
  3550. :values-struct-EnumerableSet-StringSet: pass:normal[xref:#EnumerableSet-values-struct-EnumerableSet-StringSet-[`++values++`]]
  3551. :values-struct-EnumerableSet-StringSet-uint256-uint256: pass:normal[xref:#EnumerableSet-values-struct-EnumerableSet-StringSet-uint256-uint256-[`++values++`]]
  3552. :add-struct-EnumerableSet-BytesSet-bytes: pass:normal[xref:#EnumerableSet-add-struct-EnumerableSet-BytesSet-bytes-[`++add++`]]
  3553. :remove-struct-EnumerableSet-BytesSet-bytes: pass:normal[xref:#EnumerableSet-remove-struct-EnumerableSet-BytesSet-bytes-[`++remove++`]]
  3554. :clear-struct-EnumerableSet-BytesSet: pass:normal[xref:#EnumerableSet-clear-struct-EnumerableSet-BytesSet-[`++clear++`]]
  3555. :contains-struct-EnumerableSet-BytesSet-bytes: pass:normal[xref:#EnumerableSet-contains-struct-EnumerableSet-BytesSet-bytes-[`++contains++`]]
  3556. :length-struct-EnumerableSet-BytesSet: pass:normal[xref:#EnumerableSet-length-struct-EnumerableSet-BytesSet-[`++length++`]]
  3557. :at-struct-EnumerableSet-BytesSet-uint256: pass:normal[xref:#EnumerableSet-at-struct-EnumerableSet-BytesSet-uint256-[`++at++`]]
  3558. :values-struct-EnumerableSet-BytesSet: pass:normal[xref:#EnumerableSet-values-struct-EnumerableSet-BytesSet-[`++values++`]]
  3559. :values-struct-EnumerableSet-BytesSet-uint256-uint256: pass:normal[xref:#EnumerableSet-values-struct-EnumerableSet-BytesSet-uint256-uint256-[`++values++`]]
  3560. [.contract]
  3561. [[EnumerableSet]]
  3562. === `++EnumerableSet++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/structs/EnumerableSet.sol[{github-icon},role=heading-link]
  3563. [.hljs-theme-light.nopadding]
  3564. ```solidity
  3565. import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
  3566. ```
  3567. Library for managing
  3568. https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
  3569. types.
  3570. Sets have the following properties:
  3571. - Elements are added, removed, and checked for existence in constant time
  3572. (O(1)).
  3573. - Elements are enumerated in O(n). No guarantees are made on the ordering.
  3574. - Set can be cleared (all elements removed) in O(n).
  3575. ```solidity
  3576. contract Example {
  3577. // Add the library methods
  3578. using EnumerableSet for EnumerableSet.AddressSet;
  3579. // Declare a set state variable
  3580. EnumerableSet.AddressSet private mySet;
  3581. }
  3582. ```
  3583. The following types are supported:
  3584. - `bytes32` (`Bytes32Set`) since v3.3.0
  3585. - `address` (`AddressSet`) since v3.3.0
  3586. - `uint256` (`UintSet`) since v3.3.0
  3587. - `string` (`StringSet`) since v5.4.0
  3588. - `bytes` (`BytesSet`) since v5.4.0
  3589. [WARNING]
  3590. ====
  3591. Trying to delete such a structure from storage will likely result in data corruption, rendering the structure
  3592. unusable.
  3593. See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.
  3594. In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an
  3595. array of EnumerableSet.
  3596. ====
  3597. [.contract-index]
  3598. .Functions
  3599. --
  3600. * {xref-EnumerableSet-add-struct-EnumerableSet-Bytes32Set-bytes32-}[`++add(set, value)++`]
  3601. * {xref-EnumerableSet-remove-struct-EnumerableSet-Bytes32Set-bytes32-}[`++remove(set, value)++`]
  3602. * {xref-EnumerableSet-clear-struct-EnumerableSet-Bytes32Set-}[`++clear(set)++`]
  3603. * {xref-EnumerableSet-contains-struct-EnumerableSet-Bytes32Set-bytes32-}[`++contains(set, value)++`]
  3604. * {xref-EnumerableSet-length-struct-EnumerableSet-Bytes32Set-}[`++length(set)++`]
  3605. * {xref-EnumerableSet-at-struct-EnumerableSet-Bytes32Set-uint256-}[`++at(set, index)++`]
  3606. * {xref-EnumerableSet-values-struct-EnumerableSet-Bytes32Set-}[`++values(set)++`]
  3607. * {xref-EnumerableSet-values-struct-EnumerableSet-Bytes32Set-uint256-uint256-}[`++values(set, start, end)++`]
  3608. * {xref-EnumerableSet-add-struct-EnumerableSet-AddressSet-address-}[`++add(set, value)++`]
  3609. * {xref-EnumerableSet-remove-struct-EnumerableSet-AddressSet-address-}[`++remove(set, value)++`]
  3610. * {xref-EnumerableSet-clear-struct-EnumerableSet-AddressSet-}[`++clear(set)++`]
  3611. * {xref-EnumerableSet-contains-struct-EnumerableSet-AddressSet-address-}[`++contains(set, value)++`]
  3612. * {xref-EnumerableSet-length-struct-EnumerableSet-AddressSet-}[`++length(set)++`]
  3613. * {xref-EnumerableSet-at-struct-EnumerableSet-AddressSet-uint256-}[`++at(set, index)++`]
  3614. * {xref-EnumerableSet-values-struct-EnumerableSet-AddressSet-}[`++values(set)++`]
  3615. * {xref-EnumerableSet-values-struct-EnumerableSet-AddressSet-uint256-uint256-}[`++values(set, start, end)++`]
  3616. * {xref-EnumerableSet-add-struct-EnumerableSet-UintSet-uint256-}[`++add(set, value)++`]
  3617. * {xref-EnumerableSet-remove-struct-EnumerableSet-UintSet-uint256-}[`++remove(set, value)++`]
  3618. * {xref-EnumerableSet-clear-struct-EnumerableSet-UintSet-}[`++clear(set)++`]
  3619. * {xref-EnumerableSet-contains-struct-EnumerableSet-UintSet-uint256-}[`++contains(set, value)++`]
  3620. * {xref-EnumerableSet-length-struct-EnumerableSet-UintSet-}[`++length(set)++`]
  3621. * {xref-EnumerableSet-at-struct-EnumerableSet-UintSet-uint256-}[`++at(set, index)++`]
  3622. * {xref-EnumerableSet-values-struct-EnumerableSet-UintSet-}[`++values(set)++`]
  3623. * {xref-EnumerableSet-values-struct-EnumerableSet-UintSet-uint256-uint256-}[`++values(set, start, end)++`]
  3624. * {xref-EnumerableSet-add-struct-EnumerableSet-StringSet-string-}[`++add(set, value)++`]
  3625. * {xref-EnumerableSet-remove-struct-EnumerableSet-StringSet-string-}[`++remove(set, value)++`]
  3626. * {xref-EnumerableSet-clear-struct-EnumerableSet-StringSet-}[`++clear(set)++`]
  3627. * {xref-EnumerableSet-contains-struct-EnumerableSet-StringSet-string-}[`++contains(set, value)++`]
  3628. * {xref-EnumerableSet-length-struct-EnumerableSet-StringSet-}[`++length(set)++`]
  3629. * {xref-EnumerableSet-at-struct-EnumerableSet-StringSet-uint256-}[`++at(set, index)++`]
  3630. * {xref-EnumerableSet-values-struct-EnumerableSet-StringSet-}[`++values(set)++`]
  3631. * {xref-EnumerableSet-values-struct-EnumerableSet-StringSet-uint256-uint256-}[`++values(set, start, end)++`]
  3632. * {xref-EnumerableSet-add-struct-EnumerableSet-BytesSet-bytes-}[`++add(set, value)++`]
  3633. * {xref-EnumerableSet-remove-struct-EnumerableSet-BytesSet-bytes-}[`++remove(set, value)++`]
  3634. * {xref-EnumerableSet-clear-struct-EnumerableSet-BytesSet-}[`++clear(set)++`]
  3635. * {xref-EnumerableSet-contains-struct-EnumerableSet-BytesSet-bytes-}[`++contains(set, value)++`]
  3636. * {xref-EnumerableSet-length-struct-EnumerableSet-BytesSet-}[`++length(set)++`]
  3637. * {xref-EnumerableSet-at-struct-EnumerableSet-BytesSet-uint256-}[`++at(set, index)++`]
  3638. * {xref-EnumerableSet-values-struct-EnumerableSet-BytesSet-}[`++values(set)++`]
  3639. * {xref-EnumerableSet-values-struct-EnumerableSet-BytesSet-uint256-uint256-}[`++values(set, start, end)++`]
  3640. --
  3641. [.contract-item]
  3642. [[EnumerableSet-add-struct-EnumerableSet-Bytes32Set-bytes32-]]
  3643. ==== `[.contract-item-name]#++add++#++(struct EnumerableSet.Bytes32Set set, bytes32 value) โ†’ bool++` [.item-kind]#internal#
  3644. Add a value to a set. O(1).
  3645. Returns true if the value was added to the set, that is if it was not
  3646. already present.
  3647. [.contract-item]
  3648. [[EnumerableSet-remove-struct-EnumerableSet-Bytes32Set-bytes32-]]
  3649. ==== `[.contract-item-name]#++remove++#++(struct EnumerableSet.Bytes32Set set, bytes32 value) โ†’ bool++` [.item-kind]#internal#
  3650. Removes a value from a set. O(1).
  3651. Returns true if the value was removed from the set, that is if it was
  3652. present.
  3653. [.contract-item]
  3654. [[EnumerableSet-clear-struct-EnumerableSet-Bytes32Set-]]
  3655. ==== `[.contract-item-name]#++clear++#++(struct EnumerableSet.Bytes32Set set)++` [.item-kind]#internal#
  3656. Removes all the values from a set. O(n).
  3657. WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the
  3658. function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block.
  3659. [.contract-item]
  3660. [[EnumerableSet-contains-struct-EnumerableSet-Bytes32Set-bytes32-]]
  3661. ==== `[.contract-item-name]#++contains++#++(struct EnumerableSet.Bytes32Set set, bytes32 value) โ†’ bool++` [.item-kind]#internal#
  3662. Returns true if the value is in the set. O(1).
  3663. [.contract-item]
  3664. [[EnumerableSet-length-struct-EnumerableSet-Bytes32Set-]]
  3665. ==== `[.contract-item-name]#++length++#++(struct EnumerableSet.Bytes32Set set) โ†’ uint256++` [.item-kind]#internal#
  3666. Returns the number of values in the set. O(1).
  3667. [.contract-item]
  3668. [[EnumerableSet-at-struct-EnumerableSet-Bytes32Set-uint256-]]
  3669. ==== `[.contract-item-name]#++at++#++(struct EnumerableSet.Bytes32Set set, uint256 index) โ†’ bytes32++` [.item-kind]#internal#
  3670. Returns the value stored at position `index` in the set. O(1).
  3671. Note that there are no guarantees on the ordering of values inside the
  3672. array, and it may change when more values are added or removed.
  3673. Requirements:
  3674. - `index` must be strictly less than {length}.
  3675. [.contract-item]
  3676. [[EnumerableSet-values-struct-EnumerableSet-Bytes32Set-]]
  3677. ==== `[.contract-item-name]#++values++#++(struct EnumerableSet.Bytes32Set set) โ†’ bytes32[]++` [.item-kind]#internal#
  3678. Return the entire set in an array
  3679. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  3680. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  3681. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  3682. uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
  3683. [.contract-item]
  3684. [[EnumerableSet-values-struct-EnumerableSet-Bytes32Set-uint256-uint256-]]
  3685. ==== `[.contract-item-name]#++values++#++(struct EnumerableSet.Bytes32Set set, uint256 start, uint256 end) โ†’ bytes32[]++` [.item-kind]#internal#
  3686. Return a slice of the set in an array
  3687. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  3688. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  3689. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  3690. uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
  3691. [.contract-item]
  3692. [[EnumerableSet-add-struct-EnumerableSet-AddressSet-address-]]
  3693. ==== `[.contract-item-name]#++add++#++(struct EnumerableSet.AddressSet set, address value) โ†’ bool++` [.item-kind]#internal#
  3694. Add a value to a set. O(1).
  3695. Returns true if the value was added to the set, that is if it was not
  3696. already present.
  3697. [.contract-item]
  3698. [[EnumerableSet-remove-struct-EnumerableSet-AddressSet-address-]]
  3699. ==== `[.contract-item-name]#++remove++#++(struct EnumerableSet.AddressSet set, address value) โ†’ bool++` [.item-kind]#internal#
  3700. Removes a value from a set. O(1).
  3701. Returns true if the value was removed from the set, that is if it was
  3702. present.
  3703. [.contract-item]
  3704. [[EnumerableSet-clear-struct-EnumerableSet-AddressSet-]]
  3705. ==== `[.contract-item-name]#++clear++#++(struct EnumerableSet.AddressSet set)++` [.item-kind]#internal#
  3706. Removes all the values from a set. O(n).
  3707. WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the
  3708. function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block.
  3709. [.contract-item]
  3710. [[EnumerableSet-contains-struct-EnumerableSet-AddressSet-address-]]
  3711. ==== `[.contract-item-name]#++contains++#++(struct EnumerableSet.AddressSet set, address value) โ†’ bool++` [.item-kind]#internal#
  3712. Returns true if the value is in the set. O(1).
  3713. [.contract-item]
  3714. [[EnumerableSet-length-struct-EnumerableSet-AddressSet-]]
  3715. ==== `[.contract-item-name]#++length++#++(struct EnumerableSet.AddressSet set) โ†’ uint256++` [.item-kind]#internal#
  3716. Returns the number of values in the set. O(1).
  3717. [.contract-item]
  3718. [[EnumerableSet-at-struct-EnumerableSet-AddressSet-uint256-]]
  3719. ==== `[.contract-item-name]#++at++#++(struct EnumerableSet.AddressSet set, uint256 index) โ†’ address++` [.item-kind]#internal#
  3720. Returns the value stored at position `index` in the set. O(1).
  3721. Note that there are no guarantees on the ordering of values inside the
  3722. array, and it may change when more values are added or removed.
  3723. Requirements:
  3724. - `index` must be strictly less than {length}.
  3725. [.contract-item]
  3726. [[EnumerableSet-values-struct-EnumerableSet-AddressSet-]]
  3727. ==== `[.contract-item-name]#++values++#++(struct EnumerableSet.AddressSet set) โ†’ address[]++` [.item-kind]#internal#
  3728. Return the entire set in an array
  3729. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  3730. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  3731. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  3732. uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
  3733. [.contract-item]
  3734. [[EnumerableSet-values-struct-EnumerableSet-AddressSet-uint256-uint256-]]
  3735. ==== `[.contract-item-name]#++values++#++(struct EnumerableSet.AddressSet set, uint256 start, uint256 end) โ†’ address[]++` [.item-kind]#internal#
  3736. Return a slice of the set in an array
  3737. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  3738. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  3739. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  3740. uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
  3741. [.contract-item]
  3742. [[EnumerableSet-add-struct-EnumerableSet-UintSet-uint256-]]
  3743. ==== `[.contract-item-name]#++add++#++(struct EnumerableSet.UintSet set, uint256 value) โ†’ bool++` [.item-kind]#internal#
  3744. Add a value to a set. O(1).
  3745. Returns true if the value was added to the set, that is if it was not
  3746. already present.
  3747. [.contract-item]
  3748. [[EnumerableSet-remove-struct-EnumerableSet-UintSet-uint256-]]
  3749. ==== `[.contract-item-name]#++remove++#++(struct EnumerableSet.UintSet set, uint256 value) โ†’ bool++` [.item-kind]#internal#
  3750. Removes a value from a set. O(1).
  3751. Returns true if the value was removed from the set, that is if it was
  3752. present.
  3753. [.contract-item]
  3754. [[EnumerableSet-clear-struct-EnumerableSet-UintSet-]]
  3755. ==== `[.contract-item-name]#++clear++#++(struct EnumerableSet.UintSet set)++` [.item-kind]#internal#
  3756. Removes all the values from a set. O(n).
  3757. WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the
  3758. function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block.
  3759. [.contract-item]
  3760. [[EnumerableSet-contains-struct-EnumerableSet-UintSet-uint256-]]
  3761. ==== `[.contract-item-name]#++contains++#++(struct EnumerableSet.UintSet set, uint256 value) โ†’ bool++` [.item-kind]#internal#
  3762. Returns true if the value is in the set. O(1).
  3763. [.contract-item]
  3764. [[EnumerableSet-length-struct-EnumerableSet-UintSet-]]
  3765. ==== `[.contract-item-name]#++length++#++(struct EnumerableSet.UintSet set) โ†’ uint256++` [.item-kind]#internal#
  3766. Returns the number of values in the set. O(1).
  3767. [.contract-item]
  3768. [[EnumerableSet-at-struct-EnumerableSet-UintSet-uint256-]]
  3769. ==== `[.contract-item-name]#++at++#++(struct EnumerableSet.UintSet set, uint256 index) โ†’ uint256++` [.item-kind]#internal#
  3770. Returns the value stored at position `index` in the set. O(1).
  3771. Note that there are no guarantees on the ordering of values inside the
  3772. array, and it may change when more values are added or removed.
  3773. Requirements:
  3774. - `index` must be strictly less than {length}.
  3775. [.contract-item]
  3776. [[EnumerableSet-values-struct-EnumerableSet-UintSet-]]
  3777. ==== `[.contract-item-name]#++values++#++(struct EnumerableSet.UintSet set) โ†’ uint256[]++` [.item-kind]#internal#
  3778. Return the entire set in an array
  3779. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  3780. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  3781. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  3782. uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
  3783. [.contract-item]
  3784. [[EnumerableSet-values-struct-EnumerableSet-UintSet-uint256-uint256-]]
  3785. ==== `[.contract-item-name]#++values++#++(struct EnumerableSet.UintSet set, uint256 start, uint256 end) โ†’ uint256[]++` [.item-kind]#internal#
  3786. Return a slice of the set in an array
  3787. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  3788. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  3789. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  3790. uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
  3791. [.contract-item]
  3792. [[EnumerableSet-add-struct-EnumerableSet-StringSet-string-]]
  3793. ==== `[.contract-item-name]#++add++#++(struct EnumerableSet.StringSet set, string value) โ†’ bool++` [.item-kind]#internal#
  3794. Add a value to a set. O(1).
  3795. Returns true if the value was added to the set, that is if it was not
  3796. already present.
  3797. [.contract-item]
  3798. [[EnumerableSet-remove-struct-EnumerableSet-StringSet-string-]]
  3799. ==== `[.contract-item-name]#++remove++#++(struct EnumerableSet.StringSet set, string value) โ†’ bool++` [.item-kind]#internal#
  3800. Removes a value from a set. O(1).
  3801. Returns true if the value was removed from the set, that is if it was
  3802. present.
  3803. [.contract-item]
  3804. [[EnumerableSet-clear-struct-EnumerableSet-StringSet-]]
  3805. ==== `[.contract-item-name]#++clear++#++(struct EnumerableSet.StringSet set)++` [.item-kind]#internal#
  3806. Removes all the values from a set. O(n).
  3807. WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the
  3808. function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block.
  3809. [.contract-item]
  3810. [[EnumerableSet-contains-struct-EnumerableSet-StringSet-string-]]
  3811. ==== `[.contract-item-name]#++contains++#++(struct EnumerableSet.StringSet set, string value) โ†’ bool++` [.item-kind]#internal#
  3812. Returns true if the value is in the set. O(1).
  3813. [.contract-item]
  3814. [[EnumerableSet-length-struct-EnumerableSet-StringSet-]]
  3815. ==== `[.contract-item-name]#++length++#++(struct EnumerableSet.StringSet set) โ†’ uint256++` [.item-kind]#internal#
  3816. Returns the number of values on the set. O(1).
  3817. [.contract-item]
  3818. [[EnumerableSet-at-struct-EnumerableSet-StringSet-uint256-]]
  3819. ==== `[.contract-item-name]#++at++#++(struct EnumerableSet.StringSet set, uint256 index) โ†’ string++` [.item-kind]#internal#
  3820. Returns the value stored at position `index` in the set. O(1).
  3821. Note that there are no guarantees on the ordering of values inside the
  3822. array, and it may change when more values are added or removed.
  3823. Requirements:
  3824. - `index` must be strictly less than {length}.
  3825. [.contract-item]
  3826. [[EnumerableSet-values-struct-EnumerableSet-StringSet-]]
  3827. ==== `[.contract-item-name]#++values++#++(struct EnumerableSet.StringSet set) โ†’ string[]++` [.item-kind]#internal#
  3828. Return the entire set in an array
  3829. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  3830. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  3831. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  3832. uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
  3833. [.contract-item]
  3834. [[EnumerableSet-values-struct-EnumerableSet-StringSet-uint256-uint256-]]
  3835. ==== `[.contract-item-name]#++values++#++(struct EnumerableSet.StringSet set, uint256 start, uint256 end) โ†’ string[]++` [.item-kind]#internal#
  3836. Return a slice of the set in an array
  3837. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  3838. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  3839. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  3840. uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
  3841. [.contract-item]
  3842. [[EnumerableSet-add-struct-EnumerableSet-BytesSet-bytes-]]
  3843. ==== `[.contract-item-name]#++add++#++(struct EnumerableSet.BytesSet set, bytes value) โ†’ bool++` [.item-kind]#internal#
  3844. Add a value to a set. O(1).
  3845. Returns true if the value was added to the set, that is if it was not
  3846. already present.
  3847. [.contract-item]
  3848. [[EnumerableSet-remove-struct-EnumerableSet-BytesSet-bytes-]]
  3849. ==== `[.contract-item-name]#++remove++#++(struct EnumerableSet.BytesSet set, bytes value) โ†’ bool++` [.item-kind]#internal#
  3850. Removes a value from a set. O(1).
  3851. Returns true if the value was removed from the set, that is if it was
  3852. present.
  3853. [.contract-item]
  3854. [[EnumerableSet-clear-struct-EnumerableSet-BytesSet-]]
  3855. ==== `[.contract-item-name]#++clear++#++(struct EnumerableSet.BytesSet set)++` [.item-kind]#internal#
  3856. Removes all the values from a set. O(n).
  3857. WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the
  3858. function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block.
  3859. [.contract-item]
  3860. [[EnumerableSet-contains-struct-EnumerableSet-BytesSet-bytes-]]
  3861. ==== `[.contract-item-name]#++contains++#++(struct EnumerableSet.BytesSet set, bytes value) โ†’ bool++` [.item-kind]#internal#
  3862. Returns true if the value is in the set. O(1).
  3863. [.contract-item]
  3864. [[EnumerableSet-length-struct-EnumerableSet-BytesSet-]]
  3865. ==== `[.contract-item-name]#++length++#++(struct EnumerableSet.BytesSet set) โ†’ uint256++` [.item-kind]#internal#
  3866. Returns the number of values on the set. O(1).
  3867. [.contract-item]
  3868. [[EnumerableSet-at-struct-EnumerableSet-BytesSet-uint256-]]
  3869. ==== `[.contract-item-name]#++at++#++(struct EnumerableSet.BytesSet set, uint256 index) โ†’ bytes++` [.item-kind]#internal#
  3870. Returns the value stored at position `index` in the set. O(1).
  3871. Note that there are no guarantees on the ordering of values inside the
  3872. array, and it may change when more values are added or removed.
  3873. Requirements:
  3874. - `index` must be strictly less than {length}.
  3875. [.contract-item]
  3876. [[EnumerableSet-values-struct-EnumerableSet-BytesSet-]]
  3877. ==== `[.contract-item-name]#++values++#++(struct EnumerableSet.BytesSet set) โ†’ bytes[]++` [.item-kind]#internal#
  3878. Return the entire set in an array
  3879. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  3880. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  3881. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  3882. uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
  3883. [.contract-item]
  3884. [[EnumerableSet-values-struct-EnumerableSet-BytesSet-uint256-uint256-]]
  3885. ==== `[.contract-item-name]#++values++#++(struct EnumerableSet.BytesSet set, uint256 start, uint256 end) โ†’ bytes[]++` [.item-kind]#internal#
  3886. Return a slice of the set in an array
  3887. WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
  3888. to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
  3889. this function has an unbounded cost, and using it as part of a state-changing function may render the function
  3890. uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
  3891. :Bytes32Deque: pass:normal[xref:#DoubleEndedQueue-Bytes32Deque[`++Bytes32Deque++`]]
  3892. :pushBack: pass:normal[xref:#DoubleEndedQueue-pushBack-struct-DoubleEndedQueue-Bytes32Deque-bytes32-[`++pushBack++`]]
  3893. :popBack: pass:normal[xref:#DoubleEndedQueue-popBack-struct-DoubleEndedQueue-Bytes32Deque-[`++popBack++`]]
  3894. :pushFront: pass:normal[xref:#DoubleEndedQueue-pushFront-struct-DoubleEndedQueue-Bytes32Deque-bytes32-[`++pushFront++`]]
  3895. :popFront: pass:normal[xref:#DoubleEndedQueue-popFront-struct-DoubleEndedQueue-Bytes32Deque-[`++popFront++`]]
  3896. :front: pass:normal[xref:#DoubleEndedQueue-front-struct-DoubleEndedQueue-Bytes32Deque-[`++front++`]]
  3897. :back: pass:normal[xref:#DoubleEndedQueue-back-struct-DoubleEndedQueue-Bytes32Deque-[`++back++`]]
  3898. :at: pass:normal[xref:#DoubleEndedQueue-at-struct-DoubleEndedQueue-Bytes32Deque-uint256-[`++at++`]]
  3899. :clear: pass:normal[xref:#DoubleEndedQueue-clear-struct-DoubleEndedQueue-Bytes32Deque-[`++clear++`]]
  3900. :length: pass:normal[xref:#DoubleEndedQueue-length-struct-DoubleEndedQueue-Bytes32Deque-[`++length++`]]
  3901. :empty: pass:normal[xref:#DoubleEndedQueue-empty-struct-DoubleEndedQueue-Bytes32Deque-[`++empty++`]]
  3902. :pushBack-struct-DoubleEndedQueue-Bytes32Deque-bytes32: pass:normal[xref:#DoubleEndedQueue-pushBack-struct-DoubleEndedQueue-Bytes32Deque-bytes32-[`++pushBack++`]]
  3903. :popBack-struct-DoubleEndedQueue-Bytes32Deque: pass:normal[xref:#DoubleEndedQueue-popBack-struct-DoubleEndedQueue-Bytes32Deque-[`++popBack++`]]
  3904. :pushFront-struct-DoubleEndedQueue-Bytes32Deque-bytes32: pass:normal[xref:#DoubleEndedQueue-pushFront-struct-DoubleEndedQueue-Bytes32Deque-bytes32-[`++pushFront++`]]
  3905. :popFront-struct-DoubleEndedQueue-Bytes32Deque: pass:normal[xref:#DoubleEndedQueue-popFront-struct-DoubleEndedQueue-Bytes32Deque-[`++popFront++`]]
  3906. :front-struct-DoubleEndedQueue-Bytes32Deque: pass:normal[xref:#DoubleEndedQueue-front-struct-DoubleEndedQueue-Bytes32Deque-[`++front++`]]
  3907. :back-struct-DoubleEndedQueue-Bytes32Deque: pass:normal[xref:#DoubleEndedQueue-back-struct-DoubleEndedQueue-Bytes32Deque-[`++back++`]]
  3908. :at-struct-DoubleEndedQueue-Bytes32Deque-uint256: pass:normal[xref:#DoubleEndedQueue-at-struct-DoubleEndedQueue-Bytes32Deque-uint256-[`++at++`]]
  3909. :clear-struct-DoubleEndedQueue-Bytes32Deque: pass:normal[xref:#DoubleEndedQueue-clear-struct-DoubleEndedQueue-Bytes32Deque-[`++clear++`]]
  3910. :length-struct-DoubleEndedQueue-Bytes32Deque: pass:normal[xref:#DoubleEndedQueue-length-struct-DoubleEndedQueue-Bytes32Deque-[`++length++`]]
  3911. :empty-struct-DoubleEndedQueue-Bytes32Deque: pass:normal[xref:#DoubleEndedQueue-empty-struct-DoubleEndedQueue-Bytes32Deque-[`++empty++`]]
  3912. [.contract]
  3913. [[DoubleEndedQueue]]
  3914. === `++DoubleEndedQueue++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/structs/DoubleEndedQueue.sol[{github-icon},role=heading-link]
  3915. [.hljs-theme-light.nopadding]
  3916. ```solidity
  3917. import "@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol";
  3918. ```
  3919. A sequence of items with the ability to efficiently push and pop items (i.e. insert and remove) on both ends of
  3920. the sequence (called front and back). Among other access patterns, it can be used to implement efficient LIFO and
  3921. FIFO queues. Storage use is optimized, and all operations are O(1) constant time. This includes {clear}, given that
  3922. the existing queue contents are left in storage.
  3923. The struct is called `Bytes32Deque`. Other types can be cast to and from `bytes32`. This data structure can only be
  3924. used in storage, and not in memory.
  3925. ```solidity
  3926. DoubleEndedQueue.Bytes32Deque queue;
  3927. ```
  3928. [.contract-index]
  3929. .Functions
  3930. --
  3931. * {xref-DoubleEndedQueue-pushBack-struct-DoubleEndedQueue-Bytes32Deque-bytes32-}[`++pushBack(deque, value)++`]
  3932. * {xref-DoubleEndedQueue-popBack-struct-DoubleEndedQueue-Bytes32Deque-}[`++popBack(deque)++`]
  3933. * {xref-DoubleEndedQueue-pushFront-struct-DoubleEndedQueue-Bytes32Deque-bytes32-}[`++pushFront(deque, value)++`]
  3934. * {xref-DoubleEndedQueue-popFront-struct-DoubleEndedQueue-Bytes32Deque-}[`++popFront(deque)++`]
  3935. * {xref-DoubleEndedQueue-front-struct-DoubleEndedQueue-Bytes32Deque-}[`++front(deque)++`]
  3936. * {xref-DoubleEndedQueue-back-struct-DoubleEndedQueue-Bytes32Deque-}[`++back(deque)++`]
  3937. * {xref-DoubleEndedQueue-at-struct-DoubleEndedQueue-Bytes32Deque-uint256-}[`++at(deque, index)++`]
  3938. * {xref-DoubleEndedQueue-clear-struct-DoubleEndedQueue-Bytes32Deque-}[`++clear(deque)++`]
  3939. * {xref-DoubleEndedQueue-length-struct-DoubleEndedQueue-Bytes32Deque-}[`++length(deque)++`]
  3940. * {xref-DoubleEndedQueue-empty-struct-DoubleEndedQueue-Bytes32Deque-}[`++empty(deque)++`]
  3941. --
  3942. [.contract-item]
  3943. [[DoubleEndedQueue-pushBack-struct-DoubleEndedQueue-Bytes32Deque-bytes32-]]
  3944. ==== `[.contract-item-name]#++pushBack++#++(struct DoubleEndedQueue.Bytes32Deque deque, bytes32 value)++` [.item-kind]#internal#
  3945. Inserts an item at the end of the queue.
  3946. Reverts with {Panic-RESOURCE_ERROR} if the queue is full.
  3947. [.contract-item]
  3948. [[DoubleEndedQueue-popBack-struct-DoubleEndedQueue-Bytes32Deque-]]
  3949. ==== `[.contract-item-name]#++popBack++#++(struct DoubleEndedQueue.Bytes32Deque deque) โ†’ bytes32 value++` [.item-kind]#internal#
  3950. Removes the item at the end of the queue and returns it.
  3951. Reverts with {Panic-EMPTY_ARRAY_POP} if the queue is empty.
  3952. [.contract-item]
  3953. [[DoubleEndedQueue-pushFront-struct-DoubleEndedQueue-Bytes32Deque-bytes32-]]
  3954. ==== `[.contract-item-name]#++pushFront++#++(struct DoubleEndedQueue.Bytes32Deque deque, bytes32 value)++` [.item-kind]#internal#
  3955. Inserts an item at the beginning of the queue.
  3956. Reverts with {Panic-RESOURCE_ERROR} if the queue is full.
  3957. [.contract-item]
  3958. [[DoubleEndedQueue-popFront-struct-DoubleEndedQueue-Bytes32Deque-]]
  3959. ==== `[.contract-item-name]#++popFront++#++(struct DoubleEndedQueue.Bytes32Deque deque) โ†’ bytes32 value++` [.item-kind]#internal#
  3960. Removes the item at the beginning of the queue and returns it.
  3961. Reverts with {Panic-EMPTY_ARRAY_POP} if the queue is empty.
  3962. [.contract-item]
  3963. [[DoubleEndedQueue-front-struct-DoubleEndedQueue-Bytes32Deque-]]
  3964. ==== `[.contract-item-name]#++front++#++(struct DoubleEndedQueue.Bytes32Deque deque) โ†’ bytes32 value++` [.item-kind]#internal#
  3965. Returns the item at the beginning of the queue.
  3966. Reverts with {Panic-ARRAY_OUT_OF_BOUNDS} if the queue is empty.
  3967. [.contract-item]
  3968. [[DoubleEndedQueue-back-struct-DoubleEndedQueue-Bytes32Deque-]]
  3969. ==== `[.contract-item-name]#++back++#++(struct DoubleEndedQueue.Bytes32Deque deque) โ†’ bytes32 value++` [.item-kind]#internal#
  3970. Returns the item at the end of the queue.
  3971. Reverts with {Panic-ARRAY_OUT_OF_BOUNDS} if the queue is empty.
  3972. [.contract-item]
  3973. [[DoubleEndedQueue-at-struct-DoubleEndedQueue-Bytes32Deque-uint256-]]
  3974. ==== `[.contract-item-name]#++at++#++(struct DoubleEndedQueue.Bytes32Deque deque, uint256 index) โ†’ bytes32 value++` [.item-kind]#internal#
  3975. Return the item at a position in the queue given by `index`, with the first item at 0 and last item at
  3976. `length(deque) - 1`.
  3977. Reverts with {Panic-ARRAY_OUT_OF_BOUNDS} if the index is out of bounds.
  3978. [.contract-item]
  3979. [[DoubleEndedQueue-clear-struct-DoubleEndedQueue-Bytes32Deque-]]
  3980. ==== `[.contract-item-name]#++clear++#++(struct DoubleEndedQueue.Bytes32Deque deque)++` [.item-kind]#internal#
  3981. Resets the queue back to being empty.
  3982. NOTE: The current items are left behind in storage. This does not affect the functioning of the queue, but misses
  3983. out on potential gas refunds.
  3984. [.contract-item]
  3985. [[DoubleEndedQueue-length-struct-DoubleEndedQueue-Bytes32Deque-]]
  3986. ==== `[.contract-item-name]#++length++#++(struct DoubleEndedQueue.Bytes32Deque deque) โ†’ uint256++` [.item-kind]#internal#
  3987. Returns the number of items in the queue.
  3988. [.contract-item]
  3989. [[DoubleEndedQueue-empty-struct-DoubleEndedQueue-Bytes32Deque-]]
  3990. ==== `[.contract-item-name]#++empty++#++(struct DoubleEndedQueue.Bytes32Deque deque) โ†’ bool++` [.item-kind]#internal#
  3991. Returns true if the queue is empty.
  3992. :InvalidBufferSize: pass:normal[xref:#CircularBuffer-InvalidBufferSize--[`++InvalidBufferSize++`]]
  3993. :Bytes32CircularBuffer: pass:normal[xref:#CircularBuffer-Bytes32CircularBuffer[`++Bytes32CircularBuffer++`]]
  3994. :setup: pass:normal[xref:#CircularBuffer-setup-struct-CircularBuffer-Bytes32CircularBuffer-uint256-[`++setup++`]]
  3995. :clear: pass:normal[xref:#CircularBuffer-clear-struct-CircularBuffer-Bytes32CircularBuffer-[`++clear++`]]
  3996. :push: pass:normal[xref:#CircularBuffer-push-struct-CircularBuffer-Bytes32CircularBuffer-bytes32-[`++push++`]]
  3997. :count: pass:normal[xref:#CircularBuffer-count-struct-CircularBuffer-Bytes32CircularBuffer-[`++count++`]]
  3998. :length: pass:normal[xref:#CircularBuffer-length-struct-CircularBuffer-Bytes32CircularBuffer-[`++length++`]]
  3999. :last: pass:normal[xref:#CircularBuffer-last-struct-CircularBuffer-Bytes32CircularBuffer-uint256-[`++last++`]]
  4000. :includes: pass:normal[xref:#CircularBuffer-includes-struct-CircularBuffer-Bytes32CircularBuffer-bytes32-[`++includes++`]]
  4001. :setup-struct-CircularBuffer-Bytes32CircularBuffer-uint256: pass:normal[xref:#CircularBuffer-setup-struct-CircularBuffer-Bytes32CircularBuffer-uint256-[`++setup++`]]
  4002. :clear-struct-CircularBuffer-Bytes32CircularBuffer: pass:normal[xref:#CircularBuffer-clear-struct-CircularBuffer-Bytes32CircularBuffer-[`++clear++`]]
  4003. :push-struct-CircularBuffer-Bytes32CircularBuffer-bytes32: pass:normal[xref:#CircularBuffer-push-struct-CircularBuffer-Bytes32CircularBuffer-bytes32-[`++push++`]]
  4004. :count-struct-CircularBuffer-Bytes32CircularBuffer: pass:normal[xref:#CircularBuffer-count-struct-CircularBuffer-Bytes32CircularBuffer-[`++count++`]]
  4005. :length-struct-CircularBuffer-Bytes32CircularBuffer: pass:normal[xref:#CircularBuffer-length-struct-CircularBuffer-Bytes32CircularBuffer-[`++length++`]]
  4006. :last-struct-CircularBuffer-Bytes32CircularBuffer-uint256: pass:normal[xref:#CircularBuffer-last-struct-CircularBuffer-Bytes32CircularBuffer-uint256-[`++last++`]]
  4007. :includes-struct-CircularBuffer-Bytes32CircularBuffer-bytes32: pass:normal[xref:#CircularBuffer-includes-struct-CircularBuffer-Bytes32CircularBuffer-bytes32-[`++includes++`]]
  4008. [.contract]
  4009. [[CircularBuffer]]
  4010. === `++CircularBuffer++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/structs/CircularBuffer.sol[{github-icon},role=heading-link]
  4011. [.hljs-theme-light.nopadding]
  4012. ```solidity
  4013. import "@openzeppelin/contracts/utils/structs/CircularBuffer.sol";
  4014. ```
  4015. A fixed-size buffer for keeping `bytes32` items in storage.
  4016. This data structure allows for pushing elements to it, and when its length exceeds the specified fixed size,
  4017. new items take the place of the oldest element in the buffer, keeping at most `N` elements in the
  4018. structure.
  4019. Elements can't be removed but the data structure can be cleared. See {clear}.
  4020. Complexity:
  4021. - insertion ({push}): O(1)
  4022. - lookup ({last}): O(1)
  4023. - inclusion ({includes}): O(N) (worst case)
  4024. - reset ({clear}): O(1)
  4025. * The struct is called `Bytes32CircularBuffer`. Other types can be cast to and from `bytes32`. This data structure
  4026. can only be used in storage, and not in memory.
  4027. Example usage:
  4028. ```solidity
  4029. contract Example {
  4030. // Add the library methods
  4031. using CircularBuffer for CircularBuffer.Bytes32CircularBuffer;
  4032. // Declare a buffer storage variable
  4033. CircularBuffer.Bytes32CircularBuffer private myBuffer;
  4034. }
  4035. ```
  4036. _Available since v5.1._
  4037. [.contract-index]
  4038. .Functions
  4039. --
  4040. * {xref-CircularBuffer-setup-struct-CircularBuffer-Bytes32CircularBuffer-uint256-}[`++setup(self, size)++`]
  4041. * {xref-CircularBuffer-clear-struct-CircularBuffer-Bytes32CircularBuffer-}[`++clear(self)++`]
  4042. * {xref-CircularBuffer-push-struct-CircularBuffer-Bytes32CircularBuffer-bytes32-}[`++push(self, value)++`]
  4043. * {xref-CircularBuffer-count-struct-CircularBuffer-Bytes32CircularBuffer-}[`++count(self)++`]
  4044. * {xref-CircularBuffer-length-struct-CircularBuffer-Bytes32CircularBuffer-}[`++length(self)++`]
  4045. * {xref-CircularBuffer-last-struct-CircularBuffer-Bytes32CircularBuffer-uint256-}[`++last(self, i)++`]
  4046. * {xref-CircularBuffer-includes-struct-CircularBuffer-Bytes32CircularBuffer-bytes32-}[`++includes(self, value)++`]
  4047. --
  4048. [.contract-index]
  4049. .Errors
  4050. --
  4051. * {xref-CircularBuffer-InvalidBufferSize--}[`++InvalidBufferSize()++`]
  4052. --
  4053. [.contract-item]
  4054. [[CircularBuffer-setup-struct-CircularBuffer-Bytes32CircularBuffer-uint256-]]
  4055. ==== `[.contract-item-name]#++setup++#++(struct CircularBuffer.Bytes32CircularBuffer self, uint256 size)++` [.item-kind]#internal#
  4056. Initialize a new CircularBuffer of a given size.
  4057. If the CircularBuffer was already setup and used, calling that function again will reset it to a blank state.
  4058. NOTE: The size of the buffer will affect the execution of {includes} function, as it has a complexity of O(N).
  4059. Consider a large buffer size may render the function unusable.
  4060. [.contract-item]
  4061. [[CircularBuffer-clear-struct-CircularBuffer-Bytes32CircularBuffer-]]
  4062. ==== `[.contract-item-name]#++clear++#++(struct CircularBuffer.Bytes32CircularBuffer self)++` [.item-kind]#internal#
  4063. Clear all data in the buffer without resetting memory, keeping the existing size.
  4064. [.contract-item]
  4065. [[CircularBuffer-push-struct-CircularBuffer-Bytes32CircularBuffer-bytes32-]]
  4066. ==== `[.contract-item-name]#++push++#++(struct CircularBuffer.Bytes32CircularBuffer self, bytes32 value)++` [.item-kind]#internal#
  4067. Push a new value to the buffer. If the buffer is already full, the new value replaces the oldest value in
  4068. the buffer.
  4069. [.contract-item]
  4070. [[CircularBuffer-count-struct-CircularBuffer-Bytes32CircularBuffer-]]
  4071. ==== `[.contract-item-name]#++count++#++(struct CircularBuffer.Bytes32CircularBuffer self) โ†’ uint256++` [.item-kind]#internal#
  4072. Number of values currently in the buffer. This value is 0 for an empty buffer, and cannot exceed the size of
  4073. the buffer.
  4074. [.contract-item]
  4075. [[CircularBuffer-length-struct-CircularBuffer-Bytes32CircularBuffer-]]
  4076. ==== `[.contract-item-name]#++length++#++(struct CircularBuffer.Bytes32CircularBuffer self) โ†’ uint256++` [.item-kind]#internal#
  4077. Length of the buffer. This is the maximum number of elements kept in the buffer.
  4078. [.contract-item]
  4079. [[CircularBuffer-last-struct-CircularBuffer-Bytes32CircularBuffer-uint256-]]
  4080. ==== `[.contract-item-name]#++last++#++(struct CircularBuffer.Bytes32CircularBuffer self, uint256 i) โ†’ bytes32++` [.item-kind]#internal#
  4081. Getter for the i-th value in the buffer, from the end.
  4082. Reverts with {Panic-ARRAY_OUT_OF_BOUNDS} if trying to access an element that was not pushed, or that was
  4083. dropped to make room for newer elements.
  4084. [.contract-item]
  4085. [[CircularBuffer-includes-struct-CircularBuffer-Bytes32CircularBuffer-bytes32-]]
  4086. ==== `[.contract-item-name]#++includes++#++(struct CircularBuffer.Bytes32CircularBuffer self, bytes32 value) โ†’ bool++` [.item-kind]#internal#
  4087. Check if a given value is in the buffer.
  4088. [.contract-item]
  4089. [[CircularBuffer-InvalidBufferSize--]]
  4090. ==== `[.contract-item-name]#++InvalidBufferSize++#++()++` [.item-kind]#error#
  4091. Error emitted when trying to setup a buffer with a size of 0.
  4092. :CheckpointUnorderedInsertion: pass:normal[xref:#Checkpoints-CheckpointUnorderedInsertion--[`++CheckpointUnorderedInsertion++`]]
  4093. :Trace224: pass:normal[xref:#Checkpoints-Trace224[`++Trace224++`]]
  4094. :Checkpoint224: pass:normal[xref:#Checkpoints-Checkpoint224[`++Checkpoint224++`]]
  4095. :push: pass:normal[xref:#Checkpoints-push-struct-Checkpoints-Trace224-uint32-uint224-[`++push++`]]
  4096. :lowerLookup: pass:normal[xref:#Checkpoints-lowerLookup-struct-Checkpoints-Trace224-uint32-[`++lowerLookup++`]]
  4097. :upperLookup: pass:normal[xref:#Checkpoints-upperLookup-struct-Checkpoints-Trace224-uint32-[`++upperLookup++`]]
  4098. :upperLookupRecent: pass:normal[xref:#Checkpoints-upperLookupRecent-struct-Checkpoints-Trace224-uint32-[`++upperLookupRecent++`]]
  4099. :latest: pass:normal[xref:#Checkpoints-latest-struct-Checkpoints-Trace224-[`++latest++`]]
  4100. :latestCheckpoint: pass:normal[xref:#Checkpoints-latestCheckpoint-struct-Checkpoints-Trace224-[`++latestCheckpoint++`]]
  4101. :length: pass:normal[xref:#Checkpoints-length-struct-Checkpoints-Trace224-[`++length++`]]
  4102. :at: pass:normal[xref:#Checkpoints-at-struct-Checkpoints-Trace224-uint32-[`++at++`]]
  4103. :Trace208: pass:normal[xref:#Checkpoints-Trace208[`++Trace208++`]]
  4104. :Checkpoint208: pass:normal[xref:#Checkpoints-Checkpoint208[`++Checkpoint208++`]]
  4105. :push: pass:normal[xref:#Checkpoints-push-struct-Checkpoints-Trace208-uint48-uint208-[`++push++`]]
  4106. :lowerLookup: pass:normal[xref:#Checkpoints-lowerLookup-struct-Checkpoints-Trace208-uint48-[`++lowerLookup++`]]
  4107. :upperLookup: pass:normal[xref:#Checkpoints-upperLookup-struct-Checkpoints-Trace208-uint48-[`++upperLookup++`]]
  4108. :upperLookupRecent: pass:normal[xref:#Checkpoints-upperLookupRecent-struct-Checkpoints-Trace208-uint48-[`++upperLookupRecent++`]]
  4109. :latest: pass:normal[xref:#Checkpoints-latest-struct-Checkpoints-Trace208-[`++latest++`]]
  4110. :latestCheckpoint: pass:normal[xref:#Checkpoints-latestCheckpoint-struct-Checkpoints-Trace208-[`++latestCheckpoint++`]]
  4111. :length: pass:normal[xref:#Checkpoints-length-struct-Checkpoints-Trace208-[`++length++`]]
  4112. :at: pass:normal[xref:#Checkpoints-at-struct-Checkpoints-Trace208-uint32-[`++at++`]]
  4113. :Trace160: pass:normal[xref:#Checkpoints-Trace160[`++Trace160++`]]
  4114. :Checkpoint160: pass:normal[xref:#Checkpoints-Checkpoint160[`++Checkpoint160++`]]
  4115. :push: pass:normal[xref:#Checkpoints-push-struct-Checkpoints-Trace160-uint96-uint160-[`++push++`]]
  4116. :lowerLookup: pass:normal[xref:#Checkpoints-lowerLookup-struct-Checkpoints-Trace160-uint96-[`++lowerLookup++`]]
  4117. :upperLookup: pass:normal[xref:#Checkpoints-upperLookup-struct-Checkpoints-Trace160-uint96-[`++upperLookup++`]]
  4118. :upperLookupRecent: pass:normal[xref:#Checkpoints-upperLookupRecent-struct-Checkpoints-Trace160-uint96-[`++upperLookupRecent++`]]
  4119. :latest: pass:normal[xref:#Checkpoints-latest-struct-Checkpoints-Trace160-[`++latest++`]]
  4120. :latestCheckpoint: pass:normal[xref:#Checkpoints-latestCheckpoint-struct-Checkpoints-Trace160-[`++latestCheckpoint++`]]
  4121. :length: pass:normal[xref:#Checkpoints-length-struct-Checkpoints-Trace160-[`++length++`]]
  4122. :at: pass:normal[xref:#Checkpoints-at-struct-Checkpoints-Trace160-uint32-[`++at++`]]
  4123. :push-struct-Checkpoints-Trace224-uint32-uint224: pass:normal[xref:#Checkpoints-push-struct-Checkpoints-Trace224-uint32-uint224-[`++push++`]]
  4124. :lowerLookup-struct-Checkpoints-Trace224-uint32: pass:normal[xref:#Checkpoints-lowerLookup-struct-Checkpoints-Trace224-uint32-[`++lowerLookup++`]]
  4125. :upperLookup-struct-Checkpoints-Trace224-uint32: pass:normal[xref:#Checkpoints-upperLookup-struct-Checkpoints-Trace224-uint32-[`++upperLookup++`]]
  4126. :upperLookupRecent-struct-Checkpoints-Trace224-uint32: pass:normal[xref:#Checkpoints-upperLookupRecent-struct-Checkpoints-Trace224-uint32-[`++upperLookupRecent++`]]
  4127. :latest-struct-Checkpoints-Trace224: pass:normal[xref:#Checkpoints-latest-struct-Checkpoints-Trace224-[`++latest++`]]
  4128. :latestCheckpoint-struct-Checkpoints-Trace224: pass:normal[xref:#Checkpoints-latestCheckpoint-struct-Checkpoints-Trace224-[`++latestCheckpoint++`]]
  4129. :length-struct-Checkpoints-Trace224: pass:normal[xref:#Checkpoints-length-struct-Checkpoints-Trace224-[`++length++`]]
  4130. :at-struct-Checkpoints-Trace224-uint32: pass:normal[xref:#Checkpoints-at-struct-Checkpoints-Trace224-uint32-[`++at++`]]
  4131. :push-struct-Checkpoints-Trace208-uint48-uint208: pass:normal[xref:#Checkpoints-push-struct-Checkpoints-Trace208-uint48-uint208-[`++push++`]]
  4132. :lowerLookup-struct-Checkpoints-Trace208-uint48: pass:normal[xref:#Checkpoints-lowerLookup-struct-Checkpoints-Trace208-uint48-[`++lowerLookup++`]]
  4133. :upperLookup-struct-Checkpoints-Trace208-uint48: pass:normal[xref:#Checkpoints-upperLookup-struct-Checkpoints-Trace208-uint48-[`++upperLookup++`]]
  4134. :upperLookupRecent-struct-Checkpoints-Trace208-uint48: pass:normal[xref:#Checkpoints-upperLookupRecent-struct-Checkpoints-Trace208-uint48-[`++upperLookupRecent++`]]
  4135. :latest-struct-Checkpoints-Trace208: pass:normal[xref:#Checkpoints-latest-struct-Checkpoints-Trace208-[`++latest++`]]
  4136. :latestCheckpoint-struct-Checkpoints-Trace208: pass:normal[xref:#Checkpoints-latestCheckpoint-struct-Checkpoints-Trace208-[`++latestCheckpoint++`]]
  4137. :length-struct-Checkpoints-Trace208: pass:normal[xref:#Checkpoints-length-struct-Checkpoints-Trace208-[`++length++`]]
  4138. :at-struct-Checkpoints-Trace208-uint32: pass:normal[xref:#Checkpoints-at-struct-Checkpoints-Trace208-uint32-[`++at++`]]
  4139. :push-struct-Checkpoints-Trace160-uint96-uint160: pass:normal[xref:#Checkpoints-push-struct-Checkpoints-Trace160-uint96-uint160-[`++push++`]]
  4140. :lowerLookup-struct-Checkpoints-Trace160-uint96: pass:normal[xref:#Checkpoints-lowerLookup-struct-Checkpoints-Trace160-uint96-[`++lowerLookup++`]]
  4141. :upperLookup-struct-Checkpoints-Trace160-uint96: pass:normal[xref:#Checkpoints-upperLookup-struct-Checkpoints-Trace160-uint96-[`++upperLookup++`]]
  4142. :upperLookupRecent-struct-Checkpoints-Trace160-uint96: pass:normal[xref:#Checkpoints-upperLookupRecent-struct-Checkpoints-Trace160-uint96-[`++upperLookupRecent++`]]
  4143. :latest-struct-Checkpoints-Trace160: pass:normal[xref:#Checkpoints-latest-struct-Checkpoints-Trace160-[`++latest++`]]
  4144. :latestCheckpoint-struct-Checkpoints-Trace160: pass:normal[xref:#Checkpoints-latestCheckpoint-struct-Checkpoints-Trace160-[`++latestCheckpoint++`]]
  4145. :length-struct-Checkpoints-Trace160: pass:normal[xref:#Checkpoints-length-struct-Checkpoints-Trace160-[`++length++`]]
  4146. :at-struct-Checkpoints-Trace160-uint32: pass:normal[xref:#Checkpoints-at-struct-Checkpoints-Trace160-uint32-[`++at++`]]
  4147. [.contract]
  4148. [[Checkpoints]]
  4149. === `++Checkpoints++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/structs/Checkpoints.sol[{github-icon},role=heading-link]
  4150. [.hljs-theme-light.nopadding]
  4151. ```solidity
  4152. import "@openzeppelin/contracts/utils/structs/Checkpoints.sol";
  4153. ```
  4154. This library defines the `Trace*` struct, for checkpointing values as they change at different points in
  4155. time, and later looking up past values by block number. See {Votes} as an example.
  4156. To create a history of checkpoints define a variable type `Checkpoints.Trace*` in your contract, and store a new
  4157. checkpoint for the current transaction block using the {push} function.
  4158. [.contract-index]
  4159. .Functions
  4160. --
  4161. * {xref-Checkpoints-push-struct-Checkpoints-Trace224-uint32-uint224-}[`++push(self, key, value)++`]
  4162. * {xref-Checkpoints-lowerLookup-struct-Checkpoints-Trace224-uint32-}[`++lowerLookup(self, key)++`]
  4163. * {xref-Checkpoints-upperLookup-struct-Checkpoints-Trace224-uint32-}[`++upperLookup(self, key)++`]
  4164. * {xref-Checkpoints-upperLookupRecent-struct-Checkpoints-Trace224-uint32-}[`++upperLookupRecent(self, key)++`]
  4165. * {xref-Checkpoints-latest-struct-Checkpoints-Trace224-}[`++latest(self)++`]
  4166. * {xref-Checkpoints-latestCheckpoint-struct-Checkpoints-Trace224-}[`++latestCheckpoint(self)++`]
  4167. * {xref-Checkpoints-length-struct-Checkpoints-Trace224-}[`++length(self)++`]
  4168. * {xref-Checkpoints-at-struct-Checkpoints-Trace224-uint32-}[`++at(self, pos)++`]
  4169. * {xref-Checkpoints-push-struct-Checkpoints-Trace208-uint48-uint208-}[`++push(self, key, value)++`]
  4170. * {xref-Checkpoints-lowerLookup-struct-Checkpoints-Trace208-uint48-}[`++lowerLookup(self, key)++`]
  4171. * {xref-Checkpoints-upperLookup-struct-Checkpoints-Trace208-uint48-}[`++upperLookup(self, key)++`]
  4172. * {xref-Checkpoints-upperLookupRecent-struct-Checkpoints-Trace208-uint48-}[`++upperLookupRecent(self, key)++`]
  4173. * {xref-Checkpoints-latest-struct-Checkpoints-Trace208-}[`++latest(self)++`]
  4174. * {xref-Checkpoints-latestCheckpoint-struct-Checkpoints-Trace208-}[`++latestCheckpoint(self)++`]
  4175. * {xref-Checkpoints-length-struct-Checkpoints-Trace208-}[`++length(self)++`]
  4176. * {xref-Checkpoints-at-struct-Checkpoints-Trace208-uint32-}[`++at(self, pos)++`]
  4177. * {xref-Checkpoints-push-struct-Checkpoints-Trace160-uint96-uint160-}[`++push(self, key, value)++`]
  4178. * {xref-Checkpoints-lowerLookup-struct-Checkpoints-Trace160-uint96-}[`++lowerLookup(self, key)++`]
  4179. * {xref-Checkpoints-upperLookup-struct-Checkpoints-Trace160-uint96-}[`++upperLookup(self, key)++`]
  4180. * {xref-Checkpoints-upperLookupRecent-struct-Checkpoints-Trace160-uint96-}[`++upperLookupRecent(self, key)++`]
  4181. * {xref-Checkpoints-latest-struct-Checkpoints-Trace160-}[`++latest(self)++`]
  4182. * {xref-Checkpoints-latestCheckpoint-struct-Checkpoints-Trace160-}[`++latestCheckpoint(self)++`]
  4183. * {xref-Checkpoints-length-struct-Checkpoints-Trace160-}[`++length(self)++`]
  4184. * {xref-Checkpoints-at-struct-Checkpoints-Trace160-uint32-}[`++at(self, pos)++`]
  4185. --
  4186. [.contract-index]
  4187. .Errors
  4188. --
  4189. * {xref-Checkpoints-CheckpointUnorderedInsertion--}[`++CheckpointUnorderedInsertion()++`]
  4190. --
  4191. [.contract-item]
  4192. [[Checkpoints-push-struct-Checkpoints-Trace224-uint32-uint224-]]
  4193. ==== `[.contract-item-name]#++push++#++(struct Checkpoints.Trace224 self, uint32 key, uint224 value) โ†’ uint224 oldValue, uint224 newValue++` [.item-kind]#internal#
  4194. Pushes a (`key`, `value`) pair into a Trace224 so that it is stored as the checkpoint.
  4195. Returns previous value and new value.
  4196. IMPORTANT: Never accept `key` as a user input, since an arbitrary `type(uint32).max` key set will disable the
  4197. library.
  4198. [.contract-item]
  4199. [[Checkpoints-lowerLookup-struct-Checkpoints-Trace224-uint32-]]
  4200. ==== `[.contract-item-name]#++lowerLookup++#++(struct Checkpoints.Trace224 self, uint32 key) โ†’ uint224++` [.item-kind]#internal#
  4201. Returns the value in the first (oldest) checkpoint with key greater or equal than the search key, or zero if
  4202. there is none.
  4203. [.contract-item]
  4204. [[Checkpoints-upperLookup-struct-Checkpoints-Trace224-uint32-]]
  4205. ==== `[.contract-item-name]#++upperLookup++#++(struct Checkpoints.Trace224 self, uint32 key) โ†’ uint224++` [.item-kind]#internal#
  4206. Returns the value in the last (most recent) checkpoint with key lower or equal than the search key, or zero
  4207. if there is none.
  4208. [.contract-item]
  4209. [[Checkpoints-upperLookupRecent-struct-Checkpoints-Trace224-uint32-]]
  4210. ==== `[.contract-item-name]#++upperLookupRecent++#++(struct Checkpoints.Trace224 self, uint32 key) โ†’ uint224++` [.item-kind]#internal#
  4211. Returns the value in the last (most recent) checkpoint with key lower or equal than the search key, or zero
  4212. if there is none.
  4213. NOTE: This is a variant of {upperLookup} that is optimized to find "recent" checkpoint (checkpoints with high
  4214. keys).
  4215. [.contract-item]
  4216. [[Checkpoints-latest-struct-Checkpoints-Trace224-]]
  4217. ==== `[.contract-item-name]#++latest++#++(struct Checkpoints.Trace224 self) โ†’ uint224++` [.item-kind]#internal#
  4218. Returns the value in the most recent checkpoint, or zero if there are no checkpoints.
  4219. [.contract-item]
  4220. [[Checkpoints-latestCheckpoint-struct-Checkpoints-Trace224-]]
  4221. ==== `[.contract-item-name]#++latestCheckpoint++#++(struct Checkpoints.Trace224 self) โ†’ bool exists, uint32 _key, uint224 _value++` [.item-kind]#internal#
  4222. Returns whether there is a checkpoint in the structure (i.e. it is not empty), and if so the key and value
  4223. in the most recent checkpoint.
  4224. [.contract-item]
  4225. [[Checkpoints-length-struct-Checkpoints-Trace224-]]
  4226. ==== `[.contract-item-name]#++length++#++(struct Checkpoints.Trace224 self) โ†’ uint256++` [.item-kind]#internal#
  4227. Returns the number of checkpoints.
  4228. [.contract-item]
  4229. [[Checkpoints-at-struct-Checkpoints-Trace224-uint32-]]
  4230. ==== `[.contract-item-name]#++at++#++(struct Checkpoints.Trace224 self, uint32 pos) โ†’ struct Checkpoints.Checkpoint224++` [.item-kind]#internal#
  4231. Returns checkpoint at given position.
  4232. [.contract-item]
  4233. [[Checkpoints-push-struct-Checkpoints-Trace208-uint48-uint208-]]
  4234. ==== `[.contract-item-name]#++push++#++(struct Checkpoints.Trace208 self, uint48 key, uint208 value) โ†’ uint208 oldValue, uint208 newValue++` [.item-kind]#internal#
  4235. Pushes a (`key`, `value`) pair into a Trace208 so that it is stored as the checkpoint.
  4236. Returns previous value and new value.
  4237. IMPORTANT: Never accept `key` as a user input, since an arbitrary `type(uint48).max` key set will disable the
  4238. library.
  4239. [.contract-item]
  4240. [[Checkpoints-lowerLookup-struct-Checkpoints-Trace208-uint48-]]
  4241. ==== `[.contract-item-name]#++lowerLookup++#++(struct Checkpoints.Trace208 self, uint48 key) โ†’ uint208++` [.item-kind]#internal#
  4242. Returns the value in the first (oldest) checkpoint with key greater or equal than the search key, or zero if
  4243. there is none.
  4244. [.contract-item]
  4245. [[Checkpoints-upperLookup-struct-Checkpoints-Trace208-uint48-]]
  4246. ==== `[.contract-item-name]#++upperLookup++#++(struct Checkpoints.Trace208 self, uint48 key) โ†’ uint208++` [.item-kind]#internal#
  4247. Returns the value in the last (most recent) checkpoint with key lower or equal than the search key, or zero
  4248. if there is none.
  4249. [.contract-item]
  4250. [[Checkpoints-upperLookupRecent-struct-Checkpoints-Trace208-uint48-]]
  4251. ==== `[.contract-item-name]#++upperLookupRecent++#++(struct Checkpoints.Trace208 self, uint48 key) โ†’ uint208++` [.item-kind]#internal#
  4252. Returns the value in the last (most recent) checkpoint with key lower or equal than the search key, or zero
  4253. if there is none.
  4254. NOTE: This is a variant of {upperLookup} that is optimized to find "recent" checkpoint (checkpoints with high
  4255. keys).
  4256. [.contract-item]
  4257. [[Checkpoints-latest-struct-Checkpoints-Trace208-]]
  4258. ==== `[.contract-item-name]#++latest++#++(struct Checkpoints.Trace208 self) โ†’ uint208++` [.item-kind]#internal#
  4259. Returns the value in the most recent checkpoint, or zero if there are no checkpoints.
  4260. [.contract-item]
  4261. [[Checkpoints-latestCheckpoint-struct-Checkpoints-Trace208-]]
  4262. ==== `[.contract-item-name]#++latestCheckpoint++#++(struct Checkpoints.Trace208 self) โ†’ bool exists, uint48 _key, uint208 _value++` [.item-kind]#internal#
  4263. Returns whether there is a checkpoint in the structure (i.e. it is not empty), and if so the key and value
  4264. in the most recent checkpoint.
  4265. [.contract-item]
  4266. [[Checkpoints-length-struct-Checkpoints-Trace208-]]
  4267. ==== `[.contract-item-name]#++length++#++(struct Checkpoints.Trace208 self) โ†’ uint256++` [.item-kind]#internal#
  4268. Returns the number of checkpoints.
  4269. [.contract-item]
  4270. [[Checkpoints-at-struct-Checkpoints-Trace208-uint32-]]
  4271. ==== `[.contract-item-name]#++at++#++(struct Checkpoints.Trace208 self, uint32 pos) โ†’ struct Checkpoints.Checkpoint208++` [.item-kind]#internal#
  4272. Returns checkpoint at given position.
  4273. [.contract-item]
  4274. [[Checkpoints-push-struct-Checkpoints-Trace160-uint96-uint160-]]
  4275. ==== `[.contract-item-name]#++push++#++(struct Checkpoints.Trace160 self, uint96 key, uint160 value) โ†’ uint160 oldValue, uint160 newValue++` [.item-kind]#internal#
  4276. Pushes a (`key`, `value`) pair into a Trace160 so that it is stored as the checkpoint.
  4277. Returns previous value and new value.
  4278. IMPORTANT: Never accept `key` as a user input, since an arbitrary `type(uint96).max` key set will disable the
  4279. library.
  4280. [.contract-item]
  4281. [[Checkpoints-lowerLookup-struct-Checkpoints-Trace160-uint96-]]
  4282. ==== `[.contract-item-name]#++lowerLookup++#++(struct Checkpoints.Trace160 self, uint96 key) โ†’ uint160++` [.item-kind]#internal#
  4283. Returns the value in the first (oldest) checkpoint with key greater or equal than the search key, or zero if
  4284. there is none.
  4285. [.contract-item]
  4286. [[Checkpoints-upperLookup-struct-Checkpoints-Trace160-uint96-]]
  4287. ==== `[.contract-item-name]#++upperLookup++#++(struct Checkpoints.Trace160 self, uint96 key) โ†’ uint160++` [.item-kind]#internal#
  4288. Returns the value in the last (most recent) checkpoint with key lower or equal than the search key, or zero
  4289. if there is none.
  4290. [.contract-item]
  4291. [[Checkpoints-upperLookupRecent-struct-Checkpoints-Trace160-uint96-]]
  4292. ==== `[.contract-item-name]#++upperLookupRecent++#++(struct Checkpoints.Trace160 self, uint96 key) โ†’ uint160++` [.item-kind]#internal#
  4293. Returns the value in the last (most recent) checkpoint with key lower or equal than the search key, or zero
  4294. if there is none.
  4295. NOTE: This is a variant of {upperLookup} that is optimized to find "recent" checkpoint (checkpoints with high
  4296. keys).
  4297. [.contract-item]
  4298. [[Checkpoints-latest-struct-Checkpoints-Trace160-]]
  4299. ==== `[.contract-item-name]#++latest++#++(struct Checkpoints.Trace160 self) โ†’ uint160++` [.item-kind]#internal#
  4300. Returns the value in the most recent checkpoint, or zero if there are no checkpoints.
  4301. [.contract-item]
  4302. [[Checkpoints-latestCheckpoint-struct-Checkpoints-Trace160-]]
  4303. ==== `[.contract-item-name]#++latestCheckpoint++#++(struct Checkpoints.Trace160 self) โ†’ bool exists, uint96 _key, uint160 _value++` [.item-kind]#internal#
  4304. Returns whether there is a checkpoint in the structure (i.e. it is not empty), and if so the key and value
  4305. in the most recent checkpoint.
  4306. [.contract-item]
  4307. [[Checkpoints-length-struct-Checkpoints-Trace160-]]
  4308. ==== `[.contract-item-name]#++length++#++(struct Checkpoints.Trace160 self) โ†’ uint256++` [.item-kind]#internal#
  4309. Returns the number of checkpoints.
  4310. [.contract-item]
  4311. [[Checkpoints-at-struct-Checkpoints-Trace160-uint32-]]
  4312. ==== `[.contract-item-name]#++at++#++(struct Checkpoints.Trace160 self, uint32 pos) โ†’ struct Checkpoints.Checkpoint160++` [.item-kind]#internal#
  4313. Returns checkpoint at given position.
  4314. [.contract-item]
  4315. [[Checkpoints-CheckpointUnorderedInsertion--]]
  4316. ==== `[.contract-item-name]#++CheckpointUnorderedInsertion++#++()++` [.item-kind]#error#
  4317. A value was attempted to be inserted on a past checkpoint.
  4318. :Uint256Heap: pass:normal[xref:#Heap-Uint256Heap[`++Uint256Heap++`]]
  4319. :peek: pass:normal[xref:#Heap-peek-struct-Heap-Uint256Heap-[`++peek++`]]
  4320. :pop: pass:normal[xref:#Heap-pop-struct-Heap-Uint256Heap-[`++pop++`]]
  4321. :pop: pass:normal[xref:#Heap-pop-struct-Heap-Uint256Heap-function--uint256-uint256--view-returns--bool--[`++pop++`]]
  4322. :insert: pass:normal[xref:#Heap-insert-struct-Heap-Uint256Heap-uint256-[`++insert++`]]
  4323. :insert: pass:normal[xref:#Heap-insert-struct-Heap-Uint256Heap-uint256-function--uint256-uint256--view-returns--bool--[`++insert++`]]
  4324. :replace: pass:normal[xref:#Heap-replace-struct-Heap-Uint256Heap-uint256-[`++replace++`]]
  4325. :replace: pass:normal[xref:#Heap-replace-struct-Heap-Uint256Heap-uint256-function--uint256-uint256--view-returns--bool--[`++replace++`]]
  4326. :length: pass:normal[xref:#Heap-length-struct-Heap-Uint256Heap-[`++length++`]]
  4327. :clear: pass:normal[xref:#Heap-clear-struct-Heap-Uint256Heap-[`++clear++`]]
  4328. :peek-struct-Heap-Uint256Heap: pass:normal[xref:#Heap-peek-struct-Heap-Uint256Heap-[`++peek++`]]
  4329. :pop-struct-Heap-Uint256Heap: pass:normal[xref:#Heap-pop-struct-Heap-Uint256Heap-[`++pop++`]]
  4330. :pop-struct-Heap-Uint256Heap-function--uint256-uint256--view-returns--bool-: pass:normal[xref:#Heap-pop-struct-Heap-Uint256Heap-function--uint256-uint256--view-returns--bool--[`++pop++`]]
  4331. :insert-struct-Heap-Uint256Heap-uint256: pass:normal[xref:#Heap-insert-struct-Heap-Uint256Heap-uint256-[`++insert++`]]
  4332. :insert-struct-Heap-Uint256Heap-uint256-function--uint256-uint256--view-returns--bool-: pass:normal[xref:#Heap-insert-struct-Heap-Uint256Heap-uint256-function--uint256-uint256--view-returns--bool--[`++insert++`]]
  4333. :replace-struct-Heap-Uint256Heap-uint256: pass:normal[xref:#Heap-replace-struct-Heap-Uint256Heap-uint256-[`++replace++`]]
  4334. :replace-struct-Heap-Uint256Heap-uint256-function--uint256-uint256--view-returns--bool-: pass:normal[xref:#Heap-replace-struct-Heap-Uint256Heap-uint256-function--uint256-uint256--view-returns--bool--[`++replace++`]]
  4335. :length-struct-Heap-Uint256Heap: pass:normal[xref:#Heap-length-struct-Heap-Uint256Heap-[`++length++`]]
  4336. :clear-struct-Heap-Uint256Heap: pass:normal[xref:#Heap-clear-struct-Heap-Uint256Heap-[`++clear++`]]
  4337. [.contract]
  4338. [[Heap]]
  4339. === `++Heap++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/structs/Heap.sol[{github-icon},role=heading-link]
  4340. [.hljs-theme-light.nopadding]
  4341. ```solidity
  4342. import "@openzeppelin/contracts/utils/structs/Heap.sol";
  4343. ```
  4344. Library for managing https://en.wikipedia.org/wiki/Binary_heap[binary heap] that can be used as
  4345. https://en.wikipedia.org/wiki/Priority_queue[priority queue].
  4346. Heaps are represented as a tree of values where the first element (index 0) is the root, and where the node at
  4347. index i is the child of the node at index (i-1)/2 and the parent of nodes at index 2*i+1 and 2*i+2. Each node
  4348. stores an element of the heap.
  4349. The structure is ordered so that each node is bigger than its parent. An immediate consequence is that the
  4350. highest priority value is the one at the root. This value can be looked up in constant time (O(1)) at
  4351. `heap.tree[0]`
  4352. The structure is designed to perform the following operations with the corresponding complexities:
  4353. * peek (get the highest priority value): O(1)
  4354. * insert (insert a value): O(log(n))
  4355. * pop (remove the highest priority value): O(log(n))
  4356. * replace (replace the highest priority value with a new value): O(log(n))
  4357. * length (get the number of elements): O(1)
  4358. * clear (remove all elements): O(1)
  4359. IMPORTANT: This library allows for the use of custom comparator functions. Given that manipulating
  4360. memory can lead to unexpected behavior. Consider verifying that the comparator does not manipulate
  4361. the Heap's state directly and that it follows the Solidity memory safety rules.
  4362. _Available since v5.1._
  4363. [.contract-index]
  4364. .Functions
  4365. --
  4366. * {xref-Heap-peek-struct-Heap-Uint256Heap-}[`++peek(self)++`]
  4367. * {xref-Heap-pop-struct-Heap-Uint256Heap-}[`++pop(self)++`]
  4368. * {xref-Heap-pop-struct-Heap-Uint256Heap-function--uint256-uint256--view-returns--bool--}[`++pop(self, comp)++`]
  4369. * {xref-Heap-insert-struct-Heap-Uint256Heap-uint256-}[`++insert(self, value)++`]
  4370. * {xref-Heap-insert-struct-Heap-Uint256Heap-uint256-function--uint256-uint256--view-returns--bool--}[`++insert(self, value, comp)++`]
  4371. * {xref-Heap-replace-struct-Heap-Uint256Heap-uint256-}[`++replace(self, newValue)++`]
  4372. * {xref-Heap-replace-struct-Heap-Uint256Heap-uint256-function--uint256-uint256--view-returns--bool--}[`++replace(self, newValue, comp)++`]
  4373. * {xref-Heap-length-struct-Heap-Uint256Heap-}[`++length(self)++`]
  4374. * {xref-Heap-clear-struct-Heap-Uint256Heap-}[`++clear(self)++`]
  4375. --
  4376. [.contract-item]
  4377. [[Heap-peek-struct-Heap-Uint256Heap-]]
  4378. ==== `[.contract-item-name]#++peek++#++(struct Heap.Uint256Heap self) โ†’ uint256++` [.item-kind]#internal#
  4379. Lookup the root element of the heap.
  4380. [.contract-item]
  4381. [[Heap-pop-struct-Heap-Uint256Heap-]]
  4382. ==== `[.contract-item-name]#++pop++#++(struct Heap.Uint256Heap self) โ†’ uint256++` [.item-kind]#internal#
  4383. Remove (and return) the root element for the heap using the default comparator.
  4384. NOTE: All inserting and removal from a heap should always be done using the same comparator. Mixing comparator
  4385. during the lifecycle of a heap will result in undefined behavior.
  4386. [.contract-item]
  4387. [[Heap-pop-struct-Heap-Uint256Heap-function--uint256-uint256--view-returns--bool--]]
  4388. ==== `[.contract-item-name]#++pop++#++(struct Heap.Uint256Heap self, function (uint256,uint256) view returns (bool) comp) โ†’ uint256++` [.item-kind]#internal#
  4389. Remove (and return) the root element for the heap using the provided comparator.
  4390. NOTE: All inserting and removal from a heap should always be done using the same comparator. Mixing comparator
  4391. during the lifecycle of a heap will result in undefined behavior.
  4392. [.contract-item]
  4393. [[Heap-insert-struct-Heap-Uint256Heap-uint256-]]
  4394. ==== `[.contract-item-name]#++insert++#++(struct Heap.Uint256Heap self, uint256 value)++` [.item-kind]#internal#
  4395. Insert a new element in the heap using the default comparator.
  4396. NOTE: All inserting and removal from a heap should always be done using the same comparator. Mixing comparator
  4397. during the lifecycle of a heap will result in undefined behavior.
  4398. [.contract-item]
  4399. [[Heap-insert-struct-Heap-Uint256Heap-uint256-function--uint256-uint256--view-returns--bool--]]
  4400. ==== `[.contract-item-name]#++insert++#++(struct Heap.Uint256Heap self, uint256 value, function (uint256,uint256) view returns (bool) comp)++` [.item-kind]#internal#
  4401. Insert a new element in the heap using the provided comparator.
  4402. NOTE: All inserting and removal from a heap should always be done using the same comparator. Mixing comparator
  4403. during the lifecycle of a heap will result in undefined behavior.
  4404. [.contract-item]
  4405. [[Heap-replace-struct-Heap-Uint256Heap-uint256-]]
  4406. ==== `[.contract-item-name]#++replace++#++(struct Heap.Uint256Heap self, uint256 newValue) โ†’ uint256++` [.item-kind]#internal#
  4407. Return the root element for the heap, and replace it with a new value, using the default comparator.
  4408. This is equivalent to using {pop} and {insert}, but requires only one rebalancing operation.
  4409. NOTE: All inserting and removal from a heap should always be done using the same comparator. Mixing comparator
  4410. during the lifecycle of a heap will result in undefined behavior.
  4411. [.contract-item]
  4412. [[Heap-replace-struct-Heap-Uint256Heap-uint256-function--uint256-uint256--view-returns--bool--]]
  4413. ==== `[.contract-item-name]#++replace++#++(struct Heap.Uint256Heap self, uint256 newValue, function (uint256,uint256) view returns (bool) comp) โ†’ uint256++` [.item-kind]#internal#
  4414. Return the root element for the heap, and replace it with a new value, using the provided comparator.
  4415. This is equivalent to using {pop} and {insert}, but requires only one rebalancing operation.
  4416. NOTE: All inserting and removal from a heap should always be done using the same comparator. Mixing comparator
  4417. during the lifecycle of a heap will result in undefined behavior.
  4418. [.contract-item]
  4419. [[Heap-length-struct-Heap-Uint256Heap-]]
  4420. ==== `[.contract-item-name]#++length++#++(struct Heap.Uint256Heap self) โ†’ uint256++` [.item-kind]#internal#
  4421. Returns the number of elements in the heap.
  4422. [.contract-item]
  4423. [[Heap-clear-struct-Heap-Uint256Heap-]]
  4424. ==== `[.contract-item-name]#++clear++#++(struct Heap.Uint256Heap self)++` [.item-kind]#internal#
  4425. Removes all elements in the heap.
  4426. :MerkleTreeUpdateInvalidIndex: pass:normal[xref:#MerkleTree-MerkleTreeUpdateInvalidIndex-uint256-uint256-[`++MerkleTreeUpdateInvalidIndex++`]]
  4427. :MerkleTreeUpdateInvalidProof: pass:normal[xref:#MerkleTree-MerkleTreeUpdateInvalidProof--[`++MerkleTreeUpdateInvalidProof++`]]
  4428. :Bytes32PushTree: pass:normal[xref:#MerkleTree-Bytes32PushTree[`++Bytes32PushTree++`]]
  4429. :setup: pass:normal[xref:#MerkleTree-setup-struct-MerkleTree-Bytes32PushTree-uint8-bytes32-[`++setup++`]]
  4430. :setup: pass:normal[xref:#MerkleTree-setup-struct-MerkleTree-Bytes32PushTree-uint8-bytes32-function--bytes32-bytes32--view-returns--bytes32--[`++setup++`]]
  4431. :push: pass:normal[xref:#MerkleTree-push-struct-MerkleTree-Bytes32PushTree-bytes32-[`++push++`]]
  4432. :push: pass:normal[xref:#MerkleTree-push-struct-MerkleTree-Bytes32PushTree-bytes32-function--bytes32-bytes32--view-returns--bytes32--[`++push++`]]
  4433. :update: pass:normal[xref:#MerkleTree-update-struct-MerkleTree-Bytes32PushTree-uint256-bytes32-bytes32-bytes32---[`++update++`]]
  4434. :update: pass:normal[xref:#MerkleTree-update-struct-MerkleTree-Bytes32PushTree-uint256-bytes32-bytes32-bytes32---function--bytes32-bytes32--view-returns--bytes32--[`++update++`]]
  4435. :depth: pass:normal[xref:#MerkleTree-depth-struct-MerkleTree-Bytes32PushTree-[`++depth++`]]
  4436. :setup-struct-MerkleTree-Bytes32PushTree-uint8-bytes32: pass:normal[xref:#MerkleTree-setup-struct-MerkleTree-Bytes32PushTree-uint8-bytes32-[`++setup++`]]
  4437. :setup-struct-MerkleTree-Bytes32PushTree-uint8-bytes32-function--bytes32-bytes32--view-returns--bytes32-: pass:normal[xref:#MerkleTree-setup-struct-MerkleTree-Bytes32PushTree-uint8-bytes32-function--bytes32-bytes32--view-returns--bytes32--[`++setup++`]]
  4438. :push-struct-MerkleTree-Bytes32PushTree-bytes32: pass:normal[xref:#MerkleTree-push-struct-MerkleTree-Bytes32PushTree-bytes32-[`++push++`]]
  4439. :push-struct-MerkleTree-Bytes32PushTree-bytes32-function--bytes32-bytes32--view-returns--bytes32-: pass:normal[xref:#MerkleTree-push-struct-MerkleTree-Bytes32PushTree-bytes32-function--bytes32-bytes32--view-returns--bytes32--[`++push++`]]
  4440. :update-struct-MerkleTree-Bytes32PushTree-uint256-bytes32-bytes32-bytes32--: pass:normal[xref:#MerkleTree-update-struct-MerkleTree-Bytes32PushTree-uint256-bytes32-bytes32-bytes32---[`++update++`]]
  4441. :update-struct-MerkleTree-Bytes32PushTree-uint256-bytes32-bytes32-bytes32---function--bytes32-bytes32--view-returns--bytes32-: pass:normal[xref:#MerkleTree-update-struct-MerkleTree-Bytes32PushTree-uint256-bytes32-bytes32-bytes32---function--bytes32-bytes32--view-returns--bytes32--[`++update++`]]
  4442. :depth-struct-MerkleTree-Bytes32PushTree: pass:normal[xref:#MerkleTree-depth-struct-MerkleTree-Bytes32PushTree-[`++depth++`]]
  4443. [.contract]
  4444. [[MerkleTree]]
  4445. === `++MerkleTree++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/structs/MerkleTree.sol[{github-icon},role=heading-link]
  4446. [.hljs-theme-light.nopadding]
  4447. ```solidity
  4448. import "@openzeppelin/contracts/utils/structs/MerkleTree.sol";
  4449. ```
  4450. Library for managing https://wikipedia.org/wiki/Merkle_Tree[Merkle Tree] data structures.
  4451. Each tree is a complete binary tree with the ability to sequentially insert leaves, changing them from a zero to a
  4452. non-zero value and updating its root. This structure allows inserting commitments (or other entries) that are not
  4453. stored, but can be proven to be part of the tree at a later time if the root is kept. See {MerkleProof}.
  4454. A tree is defined by the following parameters:
  4455. * Depth: The number of levels in the tree, it also defines the maximum number of leaves as 2**depth.
  4456. * Zero value: The value that represents an empty leaf. Used to avoid regular zero values to be part of the tree.
  4457. * Hashing function: A cryptographic hash function used to produce internal nodes. Defaults to {Hashes-commutativeKeccak256}.
  4458. NOTE: Building trees using non-commutative hashing functions (i.e. `H(a, b) != H(b, a)`) is supported. However,
  4459. proving the inclusion of a leaf in such trees is not possible with the {MerkleProof} library since it only supports
  4460. _commutative_ hashing functions.
  4461. _Available since v5.1._
  4462. [.contract-index]
  4463. .Functions
  4464. --
  4465. * {xref-MerkleTree-setup-struct-MerkleTree-Bytes32PushTree-uint8-bytes32-}[`++setup(self, treeDepth, zero)++`]
  4466. * {xref-MerkleTree-setup-struct-MerkleTree-Bytes32PushTree-uint8-bytes32-function--bytes32-bytes32--view-returns--bytes32--}[`++setup(self, treeDepth, zero, fnHash)++`]
  4467. * {xref-MerkleTree-push-struct-MerkleTree-Bytes32PushTree-bytes32-}[`++push(self, leaf)++`]
  4468. * {xref-MerkleTree-push-struct-MerkleTree-Bytes32PushTree-bytes32-function--bytes32-bytes32--view-returns--bytes32--}[`++push(self, leaf, fnHash)++`]
  4469. * {xref-MerkleTree-update-struct-MerkleTree-Bytes32PushTree-uint256-bytes32-bytes32-bytes32---}[`++update(self, index, oldValue, newValue, proof)++`]
  4470. * {xref-MerkleTree-update-struct-MerkleTree-Bytes32PushTree-uint256-bytes32-bytes32-bytes32---function--bytes32-bytes32--view-returns--bytes32--}[`++update(self, index, oldValue, newValue, proof, fnHash)++`]
  4471. * {xref-MerkleTree-depth-struct-MerkleTree-Bytes32PushTree-}[`++depth(self)++`]
  4472. --
  4473. [.contract-index]
  4474. .Errors
  4475. --
  4476. * {xref-MerkleTree-MerkleTreeUpdateInvalidIndex-uint256-uint256-}[`++MerkleTreeUpdateInvalidIndex(index, length)++`]
  4477. * {xref-MerkleTree-MerkleTreeUpdateInvalidProof--}[`++MerkleTreeUpdateInvalidProof()++`]
  4478. --
  4479. [.contract-item]
  4480. [[MerkleTree-setup-struct-MerkleTree-Bytes32PushTree-uint8-bytes32-]]
  4481. ==== `[.contract-item-name]#++setup++#++(struct MerkleTree.Bytes32PushTree self, uint8 treeDepth, bytes32 zero) โ†’ bytes32 initialRoot++` [.item-kind]#internal#
  4482. Initialize a {Bytes32PushTree} using {Hashes-commutativeKeccak256} to hash internal nodes.
  4483. The capacity of the tree (i.e. number of leaves) is set to `2**treeDepth`.
  4484. Calling this function on MerkleTree that was already setup and used will reset it to a blank state.
  4485. Once a tree is setup, any push to it must use the same hashing function. This means that values
  4486. should be pushed to it using the default {xref-MerkleTree-push-struct-MerkleTree-Bytes32PushTree-bytes32-}[push] function.
  4487. IMPORTANT: The zero value should be carefully chosen since it will be stored in the tree representing
  4488. empty leaves. It should be a value that is not expected to be part of the tree.
  4489. [.contract-item]
  4490. [[MerkleTree-setup-struct-MerkleTree-Bytes32PushTree-uint8-bytes32-function--bytes32-bytes32--view-returns--bytes32--]]
  4491. ==== `[.contract-item-name]#++setup++#++(struct MerkleTree.Bytes32PushTree self, uint8 treeDepth, bytes32 zero, function (bytes32,bytes32) view returns (bytes32) fnHash) โ†’ bytes32 initialRoot++` [.item-kind]#internal#
  4492. Same as {xref-MerkleTree-setup-struct-MerkleTree-Bytes32PushTree-uint8-bytes32-}[setup], but allows to specify a custom hashing function.
  4493. Once a tree is setup, any push to it must use the same hashing function. This means that values
  4494. should be pushed to it using the custom push function, which should be the same one as used during the setup.
  4495. IMPORTANT: Providing a custom hashing function is a security-sensitive operation since it may
  4496. compromise the soundness of the tree.
  4497. NOTE: Consider verifying that the hashing function does not manipulate the memory state directly and that it
  4498. follows the Solidity memory safety rules. Otherwise, it may lead to unexpected behavior.
  4499. [.contract-item]
  4500. [[MerkleTree-push-struct-MerkleTree-Bytes32PushTree-bytes32-]]
  4501. ==== `[.contract-item-name]#++push++#++(struct MerkleTree.Bytes32PushTree self, bytes32 leaf) โ†’ uint256 index, bytes32 newRoot++` [.item-kind]#internal#
  4502. Insert a new leaf in the tree, and compute the new root. Returns the position of the inserted leaf in the
  4503. tree, and the resulting root.
  4504. Hashing the leaf before calling this function is recommended as a protection against
  4505. second pre-image attacks.
  4506. This variant uses {Hashes-commutativeKeccak256} to hash internal nodes. It should only be used on merkle trees
  4507. that were setup using the same (default) hashing function (i.e. by calling
  4508. {xref-MerkleTree-setup-struct-MerkleTree-Bytes32PushTree-uint8-bytes32-}[the default setup] function).
  4509. [.contract-item]
  4510. [[MerkleTree-push-struct-MerkleTree-Bytes32PushTree-bytes32-function--bytes32-bytes32--view-returns--bytes32--]]
  4511. ==== `[.contract-item-name]#++push++#++(struct MerkleTree.Bytes32PushTree self, bytes32 leaf, function (bytes32,bytes32) view returns (bytes32) fnHash) โ†’ uint256 index, bytes32 newRoot++` [.item-kind]#internal#
  4512. Insert a new leaf in the tree, and compute the new root. Returns the position of the inserted leaf in the
  4513. tree, and the resulting root.
  4514. Hashing the leaf before calling this function is recommended as a protection against
  4515. second pre-image attacks.
  4516. This variant uses a custom hashing function to hash internal nodes. It should only be called with the same
  4517. function as the one used during the initial setup of the merkle tree.
  4518. [.contract-item]
  4519. [[MerkleTree-update-struct-MerkleTree-Bytes32PushTree-uint256-bytes32-bytes32-bytes32---]]
  4520. ==== `[.contract-item-name]#++update++#++(struct MerkleTree.Bytes32PushTree self, uint256 index, bytes32 oldValue, bytes32 newValue, bytes32[] proof) โ†’ bytes32 oldRoot, bytes32 newRoot++` [.item-kind]#internal#
  4521. Change the value of the leaf at position `index` from `oldValue` to `newValue`. Returns the recomputed "old"
  4522. root (before the update) and "new" root (after the update). The caller must verify that the reconstructed old
  4523. root is the last known one.
  4524. The `proof` must be an up-to-date inclusion proof for the leaf being updated. This means that this function is
  4525. vulnerable to front-running. Any {push} or {update} operation (that changes the root of the tree) would render
  4526. all "in flight" updates invalid.
  4527. This variant uses {Hashes-commutativeKeccak256} to hash internal nodes. It should only be used on merkle trees
  4528. that were setup using the same (default) hashing function (i.e. by calling
  4529. {xref-MerkleTree-setup-struct-MerkleTree-Bytes32PushTree-uint8-bytes32-}[the default setup] function).
  4530. [.contract-item]
  4531. [[MerkleTree-update-struct-MerkleTree-Bytes32PushTree-uint256-bytes32-bytes32-bytes32---function--bytes32-bytes32--view-returns--bytes32--]]
  4532. ==== `[.contract-item-name]#++update++#++(struct MerkleTree.Bytes32PushTree self, uint256 index, bytes32 oldValue, bytes32 newValue, bytes32[] proof, function (bytes32,bytes32) view returns (bytes32) fnHash) โ†’ bytes32 oldRoot, bytes32 newRoot++` [.item-kind]#internal#
  4533. Change the value of the leaf at position `index` from `oldValue` to `newValue`. Returns the recomputed "old"
  4534. root (before the update) and "new" root (after the update). The caller must verify that the reconstructed old
  4535. root is the last known one.
  4536. The `proof` must be an up-to-date inclusion proof for the leaf being update. This means that this function is
  4537. vulnerable to front-running. Any {push} or {update} operation (that changes the root of the tree) would render
  4538. all "in flight" updates invalid.
  4539. This variant uses a custom hashing function to hash internal nodes. It should only be called with the same
  4540. function as the one used during the initial setup of the merkle tree.
  4541. [.contract-item]
  4542. [[MerkleTree-depth-struct-MerkleTree-Bytes32PushTree-]]
  4543. ==== `[.contract-item-name]#++depth++#++(struct MerkleTree.Bytes32PushTree self) โ†’ uint256++` [.item-kind]#internal#
  4544. Tree's depth (set at initialization)
  4545. [.contract-item]
  4546. [[MerkleTree-MerkleTreeUpdateInvalidIndex-uint256-uint256-]]
  4547. ==== `[.contract-item-name]#++MerkleTreeUpdateInvalidIndex++#++(uint256 index, uint256 length)++` [.item-kind]#error#
  4548. Error emitted when trying to update a leaf that was not previously pushed.
  4549. [.contract-item]
  4550. [[MerkleTree-MerkleTreeUpdateInvalidProof--]]
  4551. ==== `[.contract-item-name]#++MerkleTreeUpdateInvalidProof++#++()++` [.item-kind]#error#
  4552. Error emitted when the proof used during an update is invalid (could not reproduce the side).
  4553. == Libraries
  4554. :Create2EmptyBytecode: pass:normal[xref:#Create2-Create2EmptyBytecode--[`++Create2EmptyBytecode++`]]
  4555. :deploy: pass:normal[xref:#Create2-deploy-uint256-bytes32-bytes-[`++deploy++`]]
  4556. :computeAddress: pass:normal[xref:#Create2-computeAddress-bytes32-bytes32-[`++computeAddress++`]]
  4557. :computeAddress: pass:normal[xref:#Create2-computeAddress-bytes32-bytes32-address-[`++computeAddress++`]]
  4558. :deploy-uint256-bytes32-bytes: pass:normal[xref:#Create2-deploy-uint256-bytes32-bytes-[`++deploy++`]]
  4559. :computeAddress-bytes32-bytes32: pass:normal[xref:#Create2-computeAddress-bytes32-bytes32-[`++computeAddress++`]]
  4560. :computeAddress-bytes32-bytes32-address: pass:normal[xref:#Create2-computeAddress-bytes32-bytes32-address-[`++computeAddress++`]]
  4561. [.contract]
  4562. [[Create2]]
  4563. === `++Create2++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/Create2.sol[{github-icon},role=heading-link]
  4564. [.hljs-theme-light.nopadding]
  4565. ```solidity
  4566. import "@openzeppelin/contracts/utils/Create2.sol";
  4567. ```
  4568. Helper to make usage of the `CREATE2` EVM opcode easier and safer.
  4569. `CREATE2` can be used to compute in advance the address where a smart
  4570. contract will be deployed, which allows for interesting new mechanisms known
  4571. as 'counterfactual interactions'.
  4572. See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more
  4573. information.
  4574. [.contract-index]
  4575. .Functions
  4576. --
  4577. * {xref-Create2-deploy-uint256-bytes32-bytes-}[`++deploy(amount, salt, bytecode)++`]
  4578. * {xref-Create2-computeAddress-bytes32-bytes32-}[`++computeAddress(salt, bytecodeHash)++`]
  4579. * {xref-Create2-computeAddress-bytes32-bytes32-address-}[`++computeAddress(salt, bytecodeHash, deployer)++`]
  4580. --
  4581. [.contract-index]
  4582. .Errors
  4583. --
  4584. * {xref-Create2-Create2EmptyBytecode--}[`++Create2EmptyBytecode()++`]
  4585. --
  4586. [.contract-item]
  4587. [[Create2-deploy-uint256-bytes32-bytes-]]
  4588. ==== `[.contract-item-name]#++deploy++#++(uint256 amount, bytes32 salt, bytes bytecode) โ†’ address addr++` [.item-kind]#internal#
  4589. Deploys a contract using `CREATE2`. The address where the contract
  4590. will be deployed can be known in advance via {computeAddress}.
  4591. The bytecode for a contract can be obtained from Solidity with
  4592. `type(contractName).creationCode`.
  4593. Requirements:
  4594. - `bytecode` must not be empty.
  4595. - `salt` must have not been used for `bytecode` already.
  4596. - the factory must have a balance of at least `amount`.
  4597. - if `amount` is non-zero, `bytecode` must have a `payable` constructor.
  4598. [.contract-item]
  4599. [[Create2-computeAddress-bytes32-bytes32-]]
  4600. ==== `[.contract-item-name]#++computeAddress++#++(bytes32 salt, bytes32 bytecodeHash) โ†’ address++` [.item-kind]#internal#
  4601. Returns the address where a contract will be stored if deployed via {deploy}. Any change in the
  4602. `bytecodeHash` or `salt` will result in a new destination address.
  4603. [.contract-item]
  4604. [[Create2-computeAddress-bytes32-bytes32-address-]]
  4605. ==== `[.contract-item-name]#++computeAddress++#++(bytes32 salt, bytes32 bytecodeHash, address deployer) โ†’ address addr++` [.item-kind]#internal#
  4606. Returns the address where a contract will be stored if deployed via {deploy} from a contract located at
  4607. `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.
  4608. [.contract-item]
  4609. [[Create2-Create2EmptyBytecode--]]
  4610. ==== `[.contract-item-name]#++Create2EmptyBytecode++#++()++` [.item-kind]#error#
  4611. There's no code to deploy.
  4612. :AddressEmptyCode: pass:normal[xref:#Address-AddressEmptyCode-address-[`++AddressEmptyCode++`]]
  4613. :sendValue: pass:normal[xref:#Address-sendValue-address-payable-uint256-[`++sendValue++`]]
  4614. :functionCall: pass:normal[xref:#Address-functionCall-address-bytes-[`++functionCall++`]]
  4615. :functionCallWithValue: pass:normal[xref:#Address-functionCallWithValue-address-bytes-uint256-[`++functionCallWithValue++`]]
  4616. :functionStaticCall: pass:normal[xref:#Address-functionStaticCall-address-bytes-[`++functionStaticCall++`]]
  4617. :functionDelegateCall: pass:normal[xref:#Address-functionDelegateCall-address-bytes-[`++functionDelegateCall++`]]
  4618. :verifyCallResultFromTarget: pass:normal[xref:#Address-verifyCallResultFromTarget-address-bool-bytes-[`++verifyCallResultFromTarget++`]]
  4619. :verifyCallResult: pass:normal[xref:#Address-verifyCallResult-bool-bytes-[`++verifyCallResult++`]]
  4620. :sendValue-address-payable-uint256: pass:normal[xref:#Address-sendValue-address-payable-uint256-[`++sendValue++`]]
  4621. :functionCall-address-bytes: pass:normal[xref:#Address-functionCall-address-bytes-[`++functionCall++`]]
  4622. :functionCallWithValue-address-bytes-uint256: pass:normal[xref:#Address-functionCallWithValue-address-bytes-uint256-[`++functionCallWithValue++`]]
  4623. :functionStaticCall-address-bytes: pass:normal[xref:#Address-functionStaticCall-address-bytes-[`++functionStaticCall++`]]
  4624. :functionDelegateCall-address-bytes: pass:normal[xref:#Address-functionDelegateCall-address-bytes-[`++functionDelegateCall++`]]
  4625. :verifyCallResultFromTarget-address-bool-bytes: pass:normal[xref:#Address-verifyCallResultFromTarget-address-bool-bytes-[`++verifyCallResultFromTarget++`]]
  4626. :verifyCallResult-bool-bytes: pass:normal[xref:#Address-verifyCallResult-bool-bytes-[`++verifyCallResult++`]]
  4627. [.contract]
  4628. [[Address]]
  4629. === `++Address++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/Address.sol[{github-icon},role=heading-link]
  4630. [.hljs-theme-light.nopadding]
  4631. ```solidity
  4632. import "@openzeppelin/contracts/utils/Address.sol";
  4633. ```
  4634. Collection of functions related to the address type
  4635. [.contract-index]
  4636. .Functions
  4637. --
  4638. * {xref-Address-sendValue-address-payable-uint256-}[`++sendValue(recipient, amount)++`]
  4639. * {xref-Address-functionCall-address-bytes-}[`++functionCall(target, data)++`]
  4640. * {xref-Address-functionCallWithValue-address-bytes-uint256-}[`++functionCallWithValue(target, data, value)++`]
  4641. * {xref-Address-functionStaticCall-address-bytes-}[`++functionStaticCall(target, data)++`]
  4642. * {xref-Address-functionDelegateCall-address-bytes-}[`++functionDelegateCall(target, data)++`]
  4643. * {xref-Address-verifyCallResultFromTarget-address-bool-bytes-}[`++verifyCallResultFromTarget(target, success, returndata)++`]
  4644. * {xref-Address-verifyCallResult-bool-bytes-}[`++verifyCallResult(success, returndata)++`]
  4645. --
  4646. [.contract-index]
  4647. .Errors
  4648. --
  4649. * {xref-Address-AddressEmptyCode-address-}[`++AddressEmptyCode(target)++`]
  4650. --
  4651. [.contract-item]
  4652. [[Address-sendValue-address-payable-uint256-]]
  4653. ==== `[.contract-item-name]#++sendValue++#++(address payable recipient, uint256 amount)++` [.item-kind]#internal#
  4654. Replacement for Solidity's `transfer`: sends `amount` wei to
  4655. `recipient`, forwarding all available gas and reverting on errors.
  4656. https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
  4657. of certain opcodes, possibly making contracts go over the 2300 gas limit
  4658. imposed by `transfer`, making them unable to receive funds via
  4659. `transfer`. {sendValue} removes this limitation.
  4660. https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
  4661. IMPORTANT: because control is transferred to `recipient`, care must be
  4662. taken to not create reentrancy vulnerabilities. Consider using
  4663. {ReentrancyGuard} or the
  4664. https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
  4665. [.contract-item]
  4666. [[Address-functionCall-address-bytes-]]
  4667. ==== `[.contract-item-name]#++functionCall++#++(address target, bytes data) โ†’ bytes++` [.item-kind]#internal#
  4668. Performs a Solidity function call using a low level `call`. A
  4669. plain `call` is an unsafe replacement for a function call: use this
  4670. function instead.
  4671. If `target` reverts with a revert reason or custom error, it is bubbled
  4672. up by this function (like regular Solidity function calls). However, if
  4673. the call reverted with no returned reason, this function reverts with a
  4674. {Errors.FailedCall} error.
  4675. Returns the raw returned data. To convert to the expected return value,
  4676. use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
  4677. Requirements:
  4678. - `target` must be a contract.
  4679. - calling `target` with `data` must not revert.
  4680. [.contract-item]
  4681. [[Address-functionCallWithValue-address-bytes-uint256-]]
  4682. ==== `[.contract-item-name]#++functionCallWithValue++#++(address target, bytes data, uint256 value) โ†’ bytes++` [.item-kind]#internal#
  4683. Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
  4684. but also transferring `value` wei to `target`.
  4685. Requirements:
  4686. - the calling contract must have an ETH balance of at least `value`.
  4687. - the called Solidity function must be `payable`.
  4688. [.contract-item]
  4689. [[Address-functionStaticCall-address-bytes-]]
  4690. ==== `[.contract-item-name]#++functionStaticCall++#++(address target, bytes data) โ†’ bytes++` [.item-kind]#internal#
  4691. Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
  4692. but performing a static call.
  4693. [.contract-item]
  4694. [[Address-functionDelegateCall-address-bytes-]]
  4695. ==== `[.contract-item-name]#++functionDelegateCall++#++(address target, bytes data) โ†’ bytes++` [.item-kind]#internal#
  4696. Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
  4697. but performing a delegate call.
  4698. [.contract-item]
  4699. [[Address-verifyCallResultFromTarget-address-bool-bytes-]]
  4700. ==== `[.contract-item-name]#++verifyCallResultFromTarget++#++(address target, bool success, bytes returndata) โ†’ bytes++` [.item-kind]#internal#
  4701. Tool to verify that a low level call to smart-contract was successful, and reverts if the target
  4702. was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case
  4703. of an unsuccessful call.
  4704. [.contract-item]
  4705. [[Address-verifyCallResult-bool-bytes-]]
  4706. ==== `[.contract-item-name]#++verifyCallResult++#++(bool success, bytes returndata) โ†’ bytes++` [.item-kind]#internal#
  4707. Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the
  4708. revert reason or with a default {Errors.FailedCall} error.
  4709. [.contract-item]
  4710. [[Address-AddressEmptyCode-address-]]
  4711. ==== `[.contract-item-name]#++AddressEmptyCode++#++(address target)++` [.item-kind]#error#
  4712. There's no code at `target` (it is not a contract).
  4713. :sort: pass:normal[xref:#Arrays-sort-uint256---function--uint256-uint256--pure-returns--bool--[`++sort++`]]
  4714. :sort: pass:normal[xref:#Arrays-sort-uint256---[`++sort++`]]
  4715. :sort: pass:normal[xref:#Arrays-sort-address---function--address-address--pure-returns--bool--[`++sort++`]]
  4716. :sort: pass:normal[xref:#Arrays-sort-address---[`++sort++`]]
  4717. :sort: pass:normal[xref:#Arrays-sort-bytes32---function--bytes32-bytes32--pure-returns--bool--[`++sort++`]]
  4718. :sort: pass:normal[xref:#Arrays-sort-bytes32---[`++sort++`]]
  4719. :findUpperBound: pass:normal[xref:#Arrays-findUpperBound-uint256---uint256-[`++findUpperBound++`]]
  4720. :lowerBound: pass:normal[xref:#Arrays-lowerBound-uint256---uint256-[`++lowerBound++`]]
  4721. :upperBound: pass:normal[xref:#Arrays-upperBound-uint256---uint256-[`++upperBound++`]]
  4722. :lowerBoundMemory: pass:normal[xref:#Arrays-lowerBoundMemory-uint256---uint256-[`++lowerBoundMemory++`]]
  4723. :upperBoundMemory: pass:normal[xref:#Arrays-upperBoundMemory-uint256---uint256-[`++upperBoundMemory++`]]
  4724. :unsafeAccess: pass:normal[xref:#Arrays-unsafeAccess-address---uint256-[`++unsafeAccess++`]]
  4725. :unsafeAccess: pass:normal[xref:#Arrays-unsafeAccess-bytes32---uint256-[`++unsafeAccess++`]]
  4726. :unsafeAccess: pass:normal[xref:#Arrays-unsafeAccess-uint256---uint256-[`++unsafeAccess++`]]
  4727. :unsafeAccess: pass:normal[xref:#Arrays-unsafeAccess-bytes---uint256-[`++unsafeAccess++`]]
  4728. :unsafeAccess: pass:normal[xref:#Arrays-unsafeAccess-string---uint256-[`++unsafeAccess++`]]
  4729. :unsafeMemoryAccess: pass:normal[xref:#Arrays-unsafeMemoryAccess-address---uint256-[`++unsafeMemoryAccess++`]]
  4730. :unsafeMemoryAccess: pass:normal[xref:#Arrays-unsafeMemoryAccess-bytes32---uint256-[`++unsafeMemoryAccess++`]]
  4731. :unsafeMemoryAccess: pass:normal[xref:#Arrays-unsafeMemoryAccess-uint256---uint256-[`++unsafeMemoryAccess++`]]
  4732. :unsafeMemoryAccess: pass:normal[xref:#Arrays-unsafeMemoryAccess-bytes---uint256-[`++unsafeMemoryAccess++`]]
  4733. :unsafeMemoryAccess: pass:normal[xref:#Arrays-unsafeMemoryAccess-string---uint256-[`++unsafeMemoryAccess++`]]
  4734. :unsafeSetLength: pass:normal[xref:#Arrays-unsafeSetLength-address---uint256-[`++unsafeSetLength++`]]
  4735. :unsafeSetLength: pass:normal[xref:#Arrays-unsafeSetLength-bytes32---uint256-[`++unsafeSetLength++`]]
  4736. :unsafeSetLength: pass:normal[xref:#Arrays-unsafeSetLength-uint256---uint256-[`++unsafeSetLength++`]]
  4737. :unsafeSetLength: pass:normal[xref:#Arrays-unsafeSetLength-bytes---uint256-[`++unsafeSetLength++`]]
  4738. :unsafeSetLength: pass:normal[xref:#Arrays-unsafeSetLength-string---uint256-[`++unsafeSetLength++`]]
  4739. :sort-uint256---function--uint256-uint256--pure-returns--bool-: pass:normal[xref:#Arrays-sort-uint256---function--uint256-uint256--pure-returns--bool--[`++sort++`]]
  4740. :sort-uint256--: pass:normal[xref:#Arrays-sort-uint256---[`++sort++`]]
  4741. :sort-address---function--address-address--pure-returns--bool-: pass:normal[xref:#Arrays-sort-address---function--address-address--pure-returns--bool--[`++sort++`]]
  4742. :sort-address--: pass:normal[xref:#Arrays-sort-address---[`++sort++`]]
  4743. :sort-bytes32---function--bytes32-bytes32--pure-returns--bool-: pass:normal[xref:#Arrays-sort-bytes32---function--bytes32-bytes32--pure-returns--bool--[`++sort++`]]
  4744. :sort-bytes32--: pass:normal[xref:#Arrays-sort-bytes32---[`++sort++`]]
  4745. :findUpperBound-uint256---uint256: pass:normal[xref:#Arrays-findUpperBound-uint256---uint256-[`++findUpperBound++`]]
  4746. :lowerBound-uint256---uint256: pass:normal[xref:#Arrays-lowerBound-uint256---uint256-[`++lowerBound++`]]
  4747. :upperBound-uint256---uint256: pass:normal[xref:#Arrays-upperBound-uint256---uint256-[`++upperBound++`]]
  4748. :lowerBoundMemory-uint256---uint256: pass:normal[xref:#Arrays-lowerBoundMemory-uint256---uint256-[`++lowerBoundMemory++`]]
  4749. :upperBoundMemory-uint256---uint256: pass:normal[xref:#Arrays-upperBoundMemory-uint256---uint256-[`++upperBoundMemory++`]]
  4750. :unsafeAccess-address---uint256: pass:normal[xref:#Arrays-unsafeAccess-address---uint256-[`++unsafeAccess++`]]
  4751. :unsafeAccess-bytes32---uint256: pass:normal[xref:#Arrays-unsafeAccess-bytes32---uint256-[`++unsafeAccess++`]]
  4752. :unsafeAccess-uint256---uint256: pass:normal[xref:#Arrays-unsafeAccess-uint256---uint256-[`++unsafeAccess++`]]
  4753. :unsafeAccess-bytes---uint256: pass:normal[xref:#Arrays-unsafeAccess-bytes---uint256-[`++unsafeAccess++`]]
  4754. :unsafeAccess-string---uint256: pass:normal[xref:#Arrays-unsafeAccess-string---uint256-[`++unsafeAccess++`]]
  4755. :unsafeMemoryAccess-address---uint256: pass:normal[xref:#Arrays-unsafeMemoryAccess-address---uint256-[`++unsafeMemoryAccess++`]]
  4756. :unsafeMemoryAccess-bytes32---uint256: pass:normal[xref:#Arrays-unsafeMemoryAccess-bytes32---uint256-[`++unsafeMemoryAccess++`]]
  4757. :unsafeMemoryAccess-uint256---uint256: pass:normal[xref:#Arrays-unsafeMemoryAccess-uint256---uint256-[`++unsafeMemoryAccess++`]]
  4758. :unsafeMemoryAccess-bytes---uint256: pass:normal[xref:#Arrays-unsafeMemoryAccess-bytes---uint256-[`++unsafeMemoryAccess++`]]
  4759. :unsafeMemoryAccess-string---uint256: pass:normal[xref:#Arrays-unsafeMemoryAccess-string---uint256-[`++unsafeMemoryAccess++`]]
  4760. :unsafeSetLength-address---uint256: pass:normal[xref:#Arrays-unsafeSetLength-address---uint256-[`++unsafeSetLength++`]]
  4761. :unsafeSetLength-bytes32---uint256: pass:normal[xref:#Arrays-unsafeSetLength-bytes32---uint256-[`++unsafeSetLength++`]]
  4762. :unsafeSetLength-uint256---uint256: pass:normal[xref:#Arrays-unsafeSetLength-uint256---uint256-[`++unsafeSetLength++`]]
  4763. :unsafeSetLength-bytes---uint256: pass:normal[xref:#Arrays-unsafeSetLength-bytes---uint256-[`++unsafeSetLength++`]]
  4764. :unsafeSetLength-string---uint256: pass:normal[xref:#Arrays-unsafeSetLength-string---uint256-[`++unsafeSetLength++`]]
  4765. [.contract]
  4766. [[Arrays]]
  4767. === `++Arrays++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/Arrays.sol[{github-icon},role=heading-link]
  4768. [.hljs-theme-light.nopadding]
  4769. ```solidity
  4770. import "@openzeppelin/contracts/utils/Arrays.sol";
  4771. ```
  4772. Collection of functions related to array types.
  4773. [.contract-index]
  4774. .Functions
  4775. --
  4776. * {xref-Arrays-sort-uint256---function--uint256-uint256--pure-returns--bool--}[`++sort(array, comp)++`]
  4777. * {xref-Arrays-sort-uint256---}[`++sort(array)++`]
  4778. * {xref-Arrays-sort-address---function--address-address--pure-returns--bool--}[`++sort(array, comp)++`]
  4779. * {xref-Arrays-sort-address---}[`++sort(array)++`]
  4780. * {xref-Arrays-sort-bytes32---function--bytes32-bytes32--pure-returns--bool--}[`++sort(array, comp)++`]
  4781. * {xref-Arrays-sort-bytes32---}[`++sort(array)++`]
  4782. * {xref-Arrays-findUpperBound-uint256---uint256-}[`++findUpperBound(array, element)++`]
  4783. * {xref-Arrays-lowerBound-uint256---uint256-}[`++lowerBound(array, element)++`]
  4784. * {xref-Arrays-upperBound-uint256---uint256-}[`++upperBound(array, element)++`]
  4785. * {xref-Arrays-lowerBoundMemory-uint256---uint256-}[`++lowerBoundMemory(array, element)++`]
  4786. * {xref-Arrays-upperBoundMemory-uint256---uint256-}[`++upperBoundMemory(array, element)++`]
  4787. * {xref-Arrays-unsafeAccess-address---uint256-}[`++unsafeAccess(arr, pos)++`]
  4788. * {xref-Arrays-unsafeAccess-bytes32---uint256-}[`++unsafeAccess(arr, pos)++`]
  4789. * {xref-Arrays-unsafeAccess-uint256---uint256-}[`++unsafeAccess(arr, pos)++`]
  4790. * {xref-Arrays-unsafeAccess-bytes---uint256-}[`++unsafeAccess(arr, pos)++`]
  4791. * {xref-Arrays-unsafeAccess-string---uint256-}[`++unsafeAccess(arr, pos)++`]
  4792. * {xref-Arrays-unsafeMemoryAccess-address---uint256-}[`++unsafeMemoryAccess(arr, pos)++`]
  4793. * {xref-Arrays-unsafeMemoryAccess-bytes32---uint256-}[`++unsafeMemoryAccess(arr, pos)++`]
  4794. * {xref-Arrays-unsafeMemoryAccess-uint256---uint256-}[`++unsafeMemoryAccess(arr, pos)++`]
  4795. * {xref-Arrays-unsafeMemoryAccess-bytes---uint256-}[`++unsafeMemoryAccess(arr, pos)++`]
  4796. * {xref-Arrays-unsafeMemoryAccess-string---uint256-}[`++unsafeMemoryAccess(arr, pos)++`]
  4797. * {xref-Arrays-unsafeSetLength-address---uint256-}[`++unsafeSetLength(array, len)++`]
  4798. * {xref-Arrays-unsafeSetLength-bytes32---uint256-}[`++unsafeSetLength(array, len)++`]
  4799. * {xref-Arrays-unsafeSetLength-uint256---uint256-}[`++unsafeSetLength(array, len)++`]
  4800. * {xref-Arrays-unsafeSetLength-bytes---uint256-}[`++unsafeSetLength(array, len)++`]
  4801. * {xref-Arrays-unsafeSetLength-string---uint256-}[`++unsafeSetLength(array, len)++`]
  4802. --
  4803. [.contract-item]
  4804. [[Arrays-sort-uint256---function--uint256-uint256--pure-returns--bool--]]
  4805. ==== `[.contract-item-name]#++sort++#++(uint256[] array, function (uint256,uint256) pure returns (bool) comp) โ†’ uint256[]++` [.item-kind]#internal#
  4806. Sort an array of uint256 (in memory) following the provided comparator function.
  4807. This function does the sorting "in place", meaning that it overrides the input. The object is returned for
  4808. convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.
  4809. NOTE: this function's cost is `O(n ยท log(n))` in average and `O(nยฒ)` in the worst case, with n the length of the
  4810. array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful
  4811. when executing this as part of a transaction. If the array being sorted is too large, the sort operation may
  4812. consume more gas than is available in a block, leading to potential DoS.
  4813. IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way.
  4814. [.contract-item]
  4815. [[Arrays-sort-uint256---]]
  4816. ==== `[.contract-item-name]#++sort++#++(uint256[] array) โ†’ uint256[]++` [.item-kind]#internal#
  4817. Variant of {sort} that sorts an array of uint256 in increasing order.
  4818. [.contract-item]
  4819. [[Arrays-sort-address---function--address-address--pure-returns--bool--]]
  4820. ==== `[.contract-item-name]#++sort++#++(address[] array, function (address,address) pure returns (bool) comp) โ†’ address[]++` [.item-kind]#internal#
  4821. Sort an array of address (in memory) following the provided comparator function.
  4822. This function does the sorting "in place", meaning that it overrides the input. The object is returned for
  4823. convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.
  4824. NOTE: this function's cost is `O(n ยท log(n))` in average and `O(nยฒ)` in the worst case, with n the length of the
  4825. array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful
  4826. when executing this as part of a transaction. If the array being sorted is too large, the sort operation may
  4827. consume more gas than is available in a block, leading to potential DoS.
  4828. IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way.
  4829. [.contract-item]
  4830. [[Arrays-sort-address---]]
  4831. ==== `[.contract-item-name]#++sort++#++(address[] array) โ†’ address[]++` [.item-kind]#internal#
  4832. Variant of {sort} that sorts an array of address in increasing order.
  4833. [.contract-item]
  4834. [[Arrays-sort-bytes32---function--bytes32-bytes32--pure-returns--bool--]]
  4835. ==== `[.contract-item-name]#++sort++#++(bytes32[] array, function (bytes32,bytes32) pure returns (bool) comp) โ†’ bytes32[]++` [.item-kind]#internal#
  4836. Sort an array of bytes32 (in memory) following the provided comparator function.
  4837. This function does the sorting "in place", meaning that it overrides the input. The object is returned for
  4838. convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.
  4839. NOTE: this function's cost is `O(n ยท log(n))` in average and `O(nยฒ)` in the worst case, with n the length of the
  4840. array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful
  4841. when executing this as part of a transaction. If the array being sorted is too large, the sort operation may
  4842. consume more gas than is available in a block, leading to potential DoS.
  4843. IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way.
  4844. [.contract-item]
  4845. [[Arrays-sort-bytes32---]]
  4846. ==== `[.contract-item-name]#++sort++#++(bytes32[] array) โ†’ bytes32[]++` [.item-kind]#internal#
  4847. Variant of {sort} that sorts an array of bytes32 in increasing order.
  4848. [.contract-item]
  4849. [[Arrays-findUpperBound-uint256---uint256-]]
  4850. ==== `[.contract-item-name]#++findUpperBound++#++(uint256[] array, uint256 element) โ†’ uint256++` [.item-kind]#internal#
  4851. Searches a sorted `array` and returns the first index that contains
  4852. a value greater or equal to `element`. If no such index exists (i.e. all
  4853. values in the array are strictly less than `element`), the array length is
  4854. returned. Time complexity O(log n).
  4855. NOTE: The `array` is expected to be sorted in ascending order, and to
  4856. contain no repeated elements.
  4857. IMPORTANT: Deprecated. This implementation behaves as {lowerBound} but lacks
  4858. support for repeated elements in the array. The {lowerBound} function should
  4859. be used instead.
  4860. [.contract-item]
  4861. [[Arrays-lowerBound-uint256---uint256-]]
  4862. ==== `[.contract-item-name]#++lowerBound++#++(uint256[] array, uint256 element) โ†’ uint256++` [.item-kind]#internal#
  4863. Searches an `array` sorted in ascending order and returns the first
  4864. index that contains a value greater or equal than `element`. If no such index
  4865. exists (i.e. all values in the array are strictly less than `element`), the array
  4866. length is returned. Time complexity O(log n).
  4867. See C++'s https://en.cppreference.com/w/cpp/algorithm/lower_bound[lower_bound].
  4868. [.contract-item]
  4869. [[Arrays-upperBound-uint256---uint256-]]
  4870. ==== `[.contract-item-name]#++upperBound++#++(uint256[] array, uint256 element) โ†’ uint256++` [.item-kind]#internal#
  4871. Searches an `array` sorted in ascending order and returns the first
  4872. index that contains a value strictly greater than `element`. If no such index
  4873. exists (i.e. all values in the array are strictly less than `element`), the array
  4874. length is returned. Time complexity O(log n).
  4875. See C++'s https://en.cppreference.com/w/cpp/algorithm/upper_bound[upper_bound].
  4876. [.contract-item]
  4877. [[Arrays-lowerBoundMemory-uint256---uint256-]]
  4878. ==== `[.contract-item-name]#++lowerBoundMemory++#++(uint256[] array, uint256 element) โ†’ uint256++` [.item-kind]#internal#
  4879. Same as {lowerBound}, but with an array in memory.
  4880. [.contract-item]
  4881. [[Arrays-upperBoundMemory-uint256---uint256-]]
  4882. ==== `[.contract-item-name]#++upperBoundMemory++#++(uint256[] array, uint256 element) โ†’ uint256++` [.item-kind]#internal#
  4883. Same as {upperBound}, but with an array in memory.
  4884. [.contract-item]
  4885. [[Arrays-unsafeAccess-address---uint256-]]
  4886. ==== `[.contract-item-name]#++unsafeAccess++#++(address[] arr, uint256 pos) โ†’ struct StorageSlot.AddressSlot++` [.item-kind]#internal#
  4887. Access an array in an "unsafe" way. Skips solidity "index-out-of-range" check.
  4888. WARNING: Only use if you are certain `pos` is lower than the array length.
  4889. [.contract-item]
  4890. [[Arrays-unsafeAccess-bytes32---uint256-]]
  4891. ==== `[.contract-item-name]#++unsafeAccess++#++(bytes32[] arr, uint256 pos) โ†’ struct StorageSlot.Bytes32Slot++` [.item-kind]#internal#
  4892. Access an array in an "unsafe" way. Skips solidity "index-out-of-range" check.
  4893. WARNING: Only use if you are certain `pos` is lower than the array length.
  4894. [.contract-item]
  4895. [[Arrays-unsafeAccess-uint256---uint256-]]
  4896. ==== `[.contract-item-name]#++unsafeAccess++#++(uint256[] arr, uint256 pos) โ†’ struct StorageSlot.Uint256Slot++` [.item-kind]#internal#
  4897. Access an array in an "unsafe" way. Skips solidity "index-out-of-range" check.
  4898. WARNING: Only use if you are certain `pos` is lower than the array length.
  4899. [.contract-item]
  4900. [[Arrays-unsafeAccess-bytes---uint256-]]
  4901. ==== `[.contract-item-name]#++unsafeAccess++#++(bytes[] arr, uint256 pos) โ†’ struct StorageSlot.BytesSlot++` [.item-kind]#internal#
  4902. Access an array in an "unsafe" way. Skips solidity "index-out-of-range" check.
  4903. WARNING: Only use if you are certain `pos` is lower than the array length.
  4904. [.contract-item]
  4905. [[Arrays-unsafeAccess-string---uint256-]]
  4906. ==== `[.contract-item-name]#++unsafeAccess++#++(string[] arr, uint256 pos) โ†’ struct StorageSlot.StringSlot++` [.item-kind]#internal#
  4907. Access an array in an "unsafe" way. Skips solidity "index-out-of-range" check.
  4908. WARNING: Only use if you are certain `pos` is lower than the array length.
  4909. [.contract-item]
  4910. [[Arrays-unsafeMemoryAccess-address---uint256-]]
  4911. ==== `[.contract-item-name]#++unsafeMemoryAccess++#++(address[] arr, uint256 pos) โ†’ address res++` [.item-kind]#internal#
  4912. Access an array in an "unsafe" way. Skips solidity "index-out-of-range" check.
  4913. WARNING: Only use if you are certain `pos` is lower than the array length.
  4914. [.contract-item]
  4915. [[Arrays-unsafeMemoryAccess-bytes32---uint256-]]
  4916. ==== `[.contract-item-name]#++unsafeMemoryAccess++#++(bytes32[] arr, uint256 pos) โ†’ bytes32 res++` [.item-kind]#internal#
  4917. Access an array in an "unsafe" way. Skips solidity "index-out-of-range" check.
  4918. WARNING: Only use if you are certain `pos` is lower than the array length.
  4919. [.contract-item]
  4920. [[Arrays-unsafeMemoryAccess-uint256---uint256-]]
  4921. ==== `[.contract-item-name]#++unsafeMemoryAccess++#++(uint256[] arr, uint256 pos) โ†’ uint256 res++` [.item-kind]#internal#
  4922. Access an array in an "unsafe" way. Skips solidity "index-out-of-range" check.
  4923. WARNING: Only use if you are certain `pos` is lower than the array length.
  4924. [.contract-item]
  4925. [[Arrays-unsafeMemoryAccess-bytes---uint256-]]
  4926. ==== `[.contract-item-name]#++unsafeMemoryAccess++#++(bytes[] arr, uint256 pos) โ†’ bytes res++` [.item-kind]#internal#
  4927. Access an array in an "unsafe" way. Skips solidity "index-out-of-range" check.
  4928. WARNING: Only use if you are certain `pos` is lower than the array length.
  4929. [.contract-item]
  4930. [[Arrays-unsafeMemoryAccess-string---uint256-]]
  4931. ==== `[.contract-item-name]#++unsafeMemoryAccess++#++(string[] arr, uint256 pos) โ†’ string res++` [.item-kind]#internal#
  4932. Access an array in an "unsafe" way. Skips solidity "index-out-of-range" check.
  4933. WARNING: Only use if you are certain `pos` is lower than the array length.
  4934. [.contract-item]
  4935. [[Arrays-unsafeSetLength-address---uint256-]]
  4936. ==== `[.contract-item-name]#++unsafeSetLength++#++(address[] array, uint256 len)++` [.item-kind]#internal#
  4937. Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.
  4938. WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased.
  4939. [.contract-item]
  4940. [[Arrays-unsafeSetLength-bytes32---uint256-]]
  4941. ==== `[.contract-item-name]#++unsafeSetLength++#++(bytes32[] array, uint256 len)++` [.item-kind]#internal#
  4942. Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.
  4943. WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased.
  4944. [.contract-item]
  4945. [[Arrays-unsafeSetLength-uint256---uint256-]]
  4946. ==== `[.contract-item-name]#++unsafeSetLength++#++(uint256[] array, uint256 len)++` [.item-kind]#internal#
  4947. Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.
  4948. WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased.
  4949. [.contract-item]
  4950. [[Arrays-unsafeSetLength-bytes---uint256-]]
  4951. ==== `[.contract-item-name]#++unsafeSetLength++#++(bytes[] array, uint256 len)++` [.item-kind]#internal#
  4952. Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.
  4953. WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased.
  4954. [.contract-item]
  4955. [[Arrays-unsafeSetLength-string---uint256-]]
  4956. ==== `[.contract-item-name]#++unsafeSetLength++#++(string[] array, uint256 len)++` [.item-kind]#internal#
  4957. Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.
  4958. WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased.
  4959. :_TABLE: pass:normal[xref:#Base64-_TABLE-string[`++_TABLE++`]]
  4960. :_TABLE_URL: pass:normal[xref:#Base64-_TABLE_URL-string[`++_TABLE_URL++`]]
  4961. :encode: pass:normal[xref:#Base64-encode-bytes-[`++encode++`]]
  4962. :encodeURL: pass:normal[xref:#Base64-encodeURL-bytes-[`++encodeURL++`]]
  4963. :encode-bytes: pass:normal[xref:#Base64-encode-bytes-[`++encode++`]]
  4964. :encodeURL-bytes: pass:normal[xref:#Base64-encodeURL-bytes-[`++encodeURL++`]]
  4965. [.contract]
  4966. [[Base64]]
  4967. === `++Base64++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/Base64.sol[{github-icon},role=heading-link]
  4968. [.hljs-theme-light.nopadding]
  4969. ```solidity
  4970. import "@openzeppelin/contracts/utils/Base64.sol";
  4971. ```
  4972. Provides a set of functions to operate with Base64 strings.
  4973. [.contract-index]
  4974. .Functions
  4975. --
  4976. * {xref-Base64-encode-bytes-}[`++encode(data)++`]
  4977. * {xref-Base64-encodeURL-bytes-}[`++encodeURL(data)++`]
  4978. --
  4979. [.contract-index]
  4980. .Internal Variables
  4981. --
  4982. * {xref-Base64-_TABLE-string}[`++string constant _TABLE++`]
  4983. * {xref-Base64-_TABLE_URL-string}[`++string constant _TABLE_URL++`]
  4984. --
  4985. [.contract-item]
  4986. [[Base64-encode-bytes-]]
  4987. ==== `[.contract-item-name]#++encode++#++(bytes data) โ†’ string++` [.item-kind]#internal#
  4988. Converts a `bytes` to its Bytes64 `string` representation.
  4989. [.contract-item]
  4990. [[Base64-encodeURL-bytes-]]
  4991. ==== `[.contract-item-name]#++encodeURL++#++(bytes data) โ†’ string++` [.item-kind]#internal#
  4992. Converts a `bytes` to its Bytes64Url `string` representation.
  4993. Output is not padded with `=` as specified in https://www.rfc-editor.org/rfc/rfc4648[rfc4648].
  4994. [.contract-item]
  4995. [[Base64-_TABLE-string]]
  4996. ==== `string [.contract-item-name]#++_TABLE++#` [.item-kind]#internal constant#
  4997. Base64 Encoding/Decoding Table
  4998. See sections 4 and 5 of https://datatracker.ietf.org/doc/html/rfc4648
  4999. [.contract-item]
  5000. [[Base64-_TABLE_URL-string]]
  5001. ==== `string [.contract-item-name]#++_TABLE_URL++#` [.item-kind]#internal constant#
  5002. :indexOf: pass:normal[xref:#Bytes-indexOf-bytes-bytes1-[`++indexOf++`]]
  5003. :indexOf: pass:normal[xref:#Bytes-indexOf-bytes-bytes1-uint256-[`++indexOf++`]]
  5004. :lastIndexOf: pass:normal[xref:#Bytes-lastIndexOf-bytes-bytes1-[`++lastIndexOf++`]]
  5005. :lastIndexOf: pass:normal[xref:#Bytes-lastIndexOf-bytes-bytes1-uint256-[`++lastIndexOf++`]]
  5006. :slice: pass:normal[xref:#Bytes-slice-bytes-uint256-[`++slice++`]]
  5007. :slice: pass:normal[xref:#Bytes-slice-bytes-uint256-uint256-[`++slice++`]]
  5008. :indexOf-bytes-bytes1: pass:normal[xref:#Bytes-indexOf-bytes-bytes1-[`++indexOf++`]]
  5009. :indexOf-bytes-bytes1-uint256: pass:normal[xref:#Bytes-indexOf-bytes-bytes1-uint256-[`++indexOf++`]]
  5010. :lastIndexOf-bytes-bytes1: pass:normal[xref:#Bytes-lastIndexOf-bytes-bytes1-[`++lastIndexOf++`]]
  5011. :lastIndexOf-bytes-bytes1-uint256: pass:normal[xref:#Bytes-lastIndexOf-bytes-bytes1-uint256-[`++lastIndexOf++`]]
  5012. :slice-bytes-uint256: pass:normal[xref:#Bytes-slice-bytes-uint256-[`++slice++`]]
  5013. :slice-bytes-uint256-uint256: pass:normal[xref:#Bytes-slice-bytes-uint256-uint256-[`++slice++`]]
  5014. [.contract]
  5015. [[Bytes]]
  5016. === `++Bytes++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/Bytes.sol[{github-icon},role=heading-link]
  5017. [.hljs-theme-light.nopadding]
  5018. ```solidity
  5019. import "@openzeppelin/contracts/utils/Bytes.sol";
  5020. ```
  5021. Bytes operations.
  5022. [.contract-index]
  5023. .Functions
  5024. --
  5025. * {xref-Bytes-indexOf-bytes-bytes1-}[`++indexOf(buffer, s)++`]
  5026. * {xref-Bytes-indexOf-bytes-bytes1-uint256-}[`++indexOf(buffer, s, pos)++`]
  5027. * {xref-Bytes-lastIndexOf-bytes-bytes1-}[`++lastIndexOf(buffer, s)++`]
  5028. * {xref-Bytes-lastIndexOf-bytes-bytes1-uint256-}[`++lastIndexOf(buffer, s, pos)++`]
  5029. * {xref-Bytes-slice-bytes-uint256-}[`++slice(buffer, start)++`]
  5030. * {xref-Bytes-slice-bytes-uint256-uint256-}[`++slice(buffer, start, end)++`]
  5031. --
  5032. [.contract-item]
  5033. [[Bytes-indexOf-bytes-bytes1-]]
  5034. ==== `[.contract-item-name]#++indexOf++#++(bytes buffer, bytes1 s) โ†’ uint256++` [.item-kind]#internal#
  5035. Forward search for `s` in `buffer`
  5036. * If `s` is present in the buffer, returns the index of the first instance
  5037. * If `s` is not present in the buffer, returns type(uint256).max
  5038. NOTE: replicates the behavior of https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf[Javascript's `Array.indexOf`]
  5039. [.contract-item]
  5040. [[Bytes-indexOf-bytes-bytes1-uint256-]]
  5041. ==== `[.contract-item-name]#++indexOf++#++(bytes buffer, bytes1 s, uint256 pos) โ†’ uint256++` [.item-kind]#internal#
  5042. Forward search for `s` in `buffer` starting at position `pos`
  5043. * If `s` is present in the buffer (at or after `pos`), returns the index of the next instance
  5044. * If `s` is not present in the buffer (at or after `pos`), returns type(uint256).max
  5045. NOTE: replicates the behavior of https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf[Javascript's `Array.indexOf`]
  5046. [.contract-item]
  5047. [[Bytes-lastIndexOf-bytes-bytes1-]]
  5048. ==== `[.contract-item-name]#++lastIndexOf++#++(bytes buffer, bytes1 s) โ†’ uint256++` [.item-kind]#internal#
  5049. Backward search for `s` in `buffer`
  5050. * If `s` is present in the buffer, returns the index of the last instance
  5051. * If `s` is not present in the buffer, returns type(uint256).max
  5052. NOTE: replicates the behavior of https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf[Javascript's `Array.lastIndexOf`]
  5053. [.contract-item]
  5054. [[Bytes-lastIndexOf-bytes-bytes1-uint256-]]
  5055. ==== `[.contract-item-name]#++lastIndexOf++#++(bytes buffer, bytes1 s, uint256 pos) โ†’ uint256++` [.item-kind]#internal#
  5056. Backward search for `s` in `buffer` starting at position `pos`
  5057. * If `s` is present in the buffer (at or before `pos`), returns the index of the previous instance
  5058. * If `s` is not present in the buffer (at or before `pos`), returns type(uint256).max
  5059. NOTE: replicates the behavior of https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf[Javascript's `Array.lastIndexOf`]
  5060. [.contract-item]
  5061. [[Bytes-slice-bytes-uint256-]]
  5062. ==== `[.contract-item-name]#++slice++#++(bytes buffer, uint256 start) โ†’ bytes++` [.item-kind]#internal#
  5063. Copies the content of `buffer`, from `start` (included) to the end of `buffer` into a new bytes object in
  5064. memory.
  5065. NOTE: replicates the behavior of https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice[Javascript's `Array.slice`]
  5066. [.contract-item]
  5067. [[Bytes-slice-bytes-uint256-uint256-]]
  5068. ==== `[.contract-item-name]#++slice++#++(bytes buffer, uint256 start, uint256 end) โ†’ bytes++` [.item-kind]#internal#
  5069. Copies the content of `buffer`, from `start` (included) to `end` (excluded) into a new bytes object in
  5070. memory.
  5071. NOTE: replicates the behavior of https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice[Javascript's `Array.slice`]
  5072. :emptyBytes: pass:normal[xref:#Calldata-emptyBytes--[`++emptyBytes++`]]
  5073. :emptyString: pass:normal[xref:#Calldata-emptyString--[`++emptyString++`]]
  5074. :emptyBytes-: pass:normal[xref:#Calldata-emptyBytes--[`++emptyBytes++`]]
  5075. :emptyString-: pass:normal[xref:#Calldata-emptyString--[`++emptyString++`]]
  5076. [.contract]
  5077. [[Calldata]]
  5078. === `++Calldata++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/Calldata.sol[{github-icon},role=heading-link]
  5079. [.hljs-theme-light.nopadding]
  5080. ```solidity
  5081. import "@openzeppelin/contracts/utils/Calldata.sol";
  5082. ```
  5083. Helper library for manipulating objects in calldata.
  5084. [.contract-index]
  5085. .Functions
  5086. --
  5087. * {xref-Calldata-emptyBytes--}[`++emptyBytes()++`]
  5088. * {xref-Calldata-emptyString--}[`++emptyString()++`]
  5089. --
  5090. [.contract-item]
  5091. [[Calldata-emptyBytes--]]
  5092. ==== `[.contract-item-name]#++emptyBytes++#++() โ†’ bytes result++` [.item-kind]#internal#
  5093. [.contract-item]
  5094. [[Calldata-emptyString--]]
  5095. ==== `[.contract-item-name]#++emptyString++#++() โ†’ string result++` [.item-kind]#internal#
  5096. :StringsInsufficientHexLength: pass:normal[xref:#Strings-StringsInsufficientHexLength-uint256-uint256-[`++StringsInsufficientHexLength++`]]
  5097. :StringsInvalidChar: pass:normal[xref:#Strings-StringsInvalidChar--[`++StringsInvalidChar++`]]
  5098. :StringsInvalidAddressFormat: pass:normal[xref:#Strings-StringsInvalidAddressFormat--[`++StringsInvalidAddressFormat++`]]
  5099. :toString: pass:normal[xref:#Strings-toString-uint256-[`++toString++`]]
  5100. :toStringSigned: pass:normal[xref:#Strings-toStringSigned-int256-[`++toStringSigned++`]]
  5101. :toHexString: pass:normal[xref:#Strings-toHexString-uint256-[`++toHexString++`]]
  5102. :toHexString: pass:normal[xref:#Strings-toHexString-uint256-uint256-[`++toHexString++`]]
  5103. :toHexString: pass:normal[xref:#Strings-toHexString-address-[`++toHexString++`]]
  5104. :toChecksumHexString: pass:normal[xref:#Strings-toChecksumHexString-address-[`++toChecksumHexString++`]]
  5105. :equal: pass:normal[xref:#Strings-equal-string-string-[`++equal++`]]
  5106. :parseUint: pass:normal[xref:#Strings-parseUint-string-[`++parseUint++`]]
  5107. :parseUint: pass:normal[xref:#Strings-parseUint-string-uint256-uint256-[`++parseUint++`]]
  5108. :tryParseUint: pass:normal[xref:#Strings-tryParseUint-string-[`++tryParseUint++`]]
  5109. :tryParseUint: pass:normal[xref:#Strings-tryParseUint-string-uint256-uint256-[`++tryParseUint++`]]
  5110. :parseInt: pass:normal[xref:#Strings-parseInt-string-[`++parseInt++`]]
  5111. :parseInt: pass:normal[xref:#Strings-parseInt-string-uint256-uint256-[`++parseInt++`]]
  5112. :tryParseInt: pass:normal[xref:#Strings-tryParseInt-string-[`++tryParseInt++`]]
  5113. :tryParseInt: pass:normal[xref:#Strings-tryParseInt-string-uint256-uint256-[`++tryParseInt++`]]
  5114. :parseHexUint: pass:normal[xref:#Strings-parseHexUint-string-[`++parseHexUint++`]]
  5115. :parseHexUint: pass:normal[xref:#Strings-parseHexUint-string-uint256-uint256-[`++parseHexUint++`]]
  5116. :tryParseHexUint: pass:normal[xref:#Strings-tryParseHexUint-string-[`++tryParseHexUint++`]]
  5117. :tryParseHexUint: pass:normal[xref:#Strings-tryParseHexUint-string-uint256-uint256-[`++tryParseHexUint++`]]
  5118. :parseAddress: pass:normal[xref:#Strings-parseAddress-string-[`++parseAddress++`]]
  5119. :parseAddress: pass:normal[xref:#Strings-parseAddress-string-uint256-uint256-[`++parseAddress++`]]
  5120. :tryParseAddress: pass:normal[xref:#Strings-tryParseAddress-string-[`++tryParseAddress++`]]
  5121. :tryParseAddress: pass:normal[xref:#Strings-tryParseAddress-string-uint256-uint256-[`++tryParseAddress++`]]
  5122. :escapeJSON: pass:normal[xref:#Strings-escapeJSON-string-[`++escapeJSON++`]]
  5123. :toString-uint256: pass:normal[xref:#Strings-toString-uint256-[`++toString++`]]
  5124. :toStringSigned-int256: pass:normal[xref:#Strings-toStringSigned-int256-[`++toStringSigned++`]]
  5125. :toHexString-uint256: pass:normal[xref:#Strings-toHexString-uint256-[`++toHexString++`]]
  5126. :toHexString-uint256-uint256: pass:normal[xref:#Strings-toHexString-uint256-uint256-[`++toHexString++`]]
  5127. :toHexString-address: pass:normal[xref:#Strings-toHexString-address-[`++toHexString++`]]
  5128. :toChecksumHexString-address: pass:normal[xref:#Strings-toChecksumHexString-address-[`++toChecksumHexString++`]]
  5129. :equal-string-string: pass:normal[xref:#Strings-equal-string-string-[`++equal++`]]
  5130. :parseUint-string: pass:normal[xref:#Strings-parseUint-string-[`++parseUint++`]]
  5131. :parseUint-string-uint256-uint256: pass:normal[xref:#Strings-parseUint-string-uint256-uint256-[`++parseUint++`]]
  5132. :tryParseUint-string: pass:normal[xref:#Strings-tryParseUint-string-[`++tryParseUint++`]]
  5133. :tryParseUint-string-uint256-uint256: pass:normal[xref:#Strings-tryParseUint-string-uint256-uint256-[`++tryParseUint++`]]
  5134. :parseInt-string: pass:normal[xref:#Strings-parseInt-string-[`++parseInt++`]]
  5135. :parseInt-string-uint256-uint256: pass:normal[xref:#Strings-parseInt-string-uint256-uint256-[`++parseInt++`]]
  5136. :tryParseInt-string: pass:normal[xref:#Strings-tryParseInt-string-[`++tryParseInt++`]]
  5137. :tryParseInt-string-uint256-uint256: pass:normal[xref:#Strings-tryParseInt-string-uint256-uint256-[`++tryParseInt++`]]
  5138. :parseHexUint-string: pass:normal[xref:#Strings-parseHexUint-string-[`++parseHexUint++`]]
  5139. :parseHexUint-string-uint256-uint256: pass:normal[xref:#Strings-parseHexUint-string-uint256-uint256-[`++parseHexUint++`]]
  5140. :tryParseHexUint-string: pass:normal[xref:#Strings-tryParseHexUint-string-[`++tryParseHexUint++`]]
  5141. :tryParseHexUint-string-uint256-uint256: pass:normal[xref:#Strings-tryParseHexUint-string-uint256-uint256-[`++tryParseHexUint++`]]
  5142. :parseAddress-string: pass:normal[xref:#Strings-parseAddress-string-[`++parseAddress++`]]
  5143. :parseAddress-string-uint256-uint256: pass:normal[xref:#Strings-parseAddress-string-uint256-uint256-[`++parseAddress++`]]
  5144. :tryParseAddress-string: pass:normal[xref:#Strings-tryParseAddress-string-[`++tryParseAddress++`]]
  5145. :tryParseAddress-string-uint256-uint256: pass:normal[xref:#Strings-tryParseAddress-string-uint256-uint256-[`++tryParseAddress++`]]
  5146. :escapeJSON-string: pass:normal[xref:#Strings-escapeJSON-string-[`++escapeJSON++`]]
  5147. [.contract]
  5148. [[Strings]]
  5149. === `++Strings++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/Strings.sol[{github-icon},role=heading-link]
  5150. [.hljs-theme-light.nopadding]
  5151. ```solidity
  5152. import "@openzeppelin/contracts/utils/Strings.sol";
  5153. ```
  5154. String operations.
  5155. [.contract-index]
  5156. .Functions
  5157. --
  5158. * {xref-Strings-toString-uint256-}[`++toString(value)++`]
  5159. * {xref-Strings-toStringSigned-int256-}[`++toStringSigned(value)++`]
  5160. * {xref-Strings-toHexString-uint256-}[`++toHexString(value)++`]
  5161. * {xref-Strings-toHexString-uint256-uint256-}[`++toHexString(value, length)++`]
  5162. * {xref-Strings-toHexString-address-}[`++toHexString(addr)++`]
  5163. * {xref-Strings-toChecksumHexString-address-}[`++toChecksumHexString(addr)++`]
  5164. * {xref-Strings-equal-string-string-}[`++equal(a, b)++`]
  5165. * {xref-Strings-parseUint-string-}[`++parseUint(input)++`]
  5166. * {xref-Strings-parseUint-string-uint256-uint256-}[`++parseUint(input, begin, end)++`]
  5167. * {xref-Strings-tryParseUint-string-}[`++tryParseUint(input)++`]
  5168. * {xref-Strings-tryParseUint-string-uint256-uint256-}[`++tryParseUint(input, begin, end)++`]
  5169. * {xref-Strings-parseInt-string-}[`++parseInt(input)++`]
  5170. * {xref-Strings-parseInt-string-uint256-uint256-}[`++parseInt(input, begin, end)++`]
  5171. * {xref-Strings-tryParseInt-string-}[`++tryParseInt(input)++`]
  5172. * {xref-Strings-tryParseInt-string-uint256-uint256-}[`++tryParseInt(input, begin, end)++`]
  5173. * {xref-Strings-parseHexUint-string-}[`++parseHexUint(input)++`]
  5174. * {xref-Strings-parseHexUint-string-uint256-uint256-}[`++parseHexUint(input, begin, end)++`]
  5175. * {xref-Strings-tryParseHexUint-string-}[`++tryParseHexUint(input)++`]
  5176. * {xref-Strings-tryParseHexUint-string-uint256-uint256-}[`++tryParseHexUint(input, begin, end)++`]
  5177. * {xref-Strings-parseAddress-string-}[`++parseAddress(input)++`]
  5178. * {xref-Strings-parseAddress-string-uint256-uint256-}[`++parseAddress(input, begin, end)++`]
  5179. * {xref-Strings-tryParseAddress-string-}[`++tryParseAddress(input)++`]
  5180. * {xref-Strings-tryParseAddress-string-uint256-uint256-}[`++tryParseAddress(input, begin, end)++`]
  5181. * {xref-Strings-escapeJSON-string-}[`++escapeJSON(input)++`]
  5182. --
  5183. [.contract-index]
  5184. .Errors
  5185. --
  5186. * {xref-Strings-StringsInsufficientHexLength-uint256-uint256-}[`++StringsInsufficientHexLength(value, length)++`]
  5187. * {xref-Strings-StringsInvalidChar--}[`++StringsInvalidChar()++`]
  5188. * {xref-Strings-StringsInvalidAddressFormat--}[`++StringsInvalidAddressFormat()++`]
  5189. --
  5190. [.contract-item]
  5191. [[Strings-toString-uint256-]]
  5192. ==== `[.contract-item-name]#++toString++#++(uint256 value) โ†’ string++` [.item-kind]#internal#
  5193. Converts a `uint256` to its ASCII `string` decimal representation.
  5194. [.contract-item]
  5195. [[Strings-toStringSigned-int256-]]
  5196. ==== `[.contract-item-name]#++toStringSigned++#++(int256 value) โ†’ string++` [.item-kind]#internal#
  5197. Converts a `int256` to its ASCII `string` decimal representation.
  5198. [.contract-item]
  5199. [[Strings-toHexString-uint256-]]
  5200. ==== `[.contract-item-name]#++toHexString++#++(uint256 value) โ†’ string++` [.item-kind]#internal#
  5201. Converts a `uint256` to its ASCII `string` hexadecimal representation.
  5202. [.contract-item]
  5203. [[Strings-toHexString-uint256-uint256-]]
  5204. ==== `[.contract-item-name]#++toHexString++#++(uint256 value, uint256 length) โ†’ string++` [.item-kind]#internal#
  5205. Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
  5206. [.contract-item]
  5207. [[Strings-toHexString-address-]]
  5208. ==== `[.contract-item-name]#++toHexString++#++(address addr) โ†’ string++` [.item-kind]#internal#
  5209. Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal
  5210. representation.
  5211. [.contract-item]
  5212. [[Strings-toChecksumHexString-address-]]
  5213. ==== `[.contract-item-name]#++toChecksumHexString++#++(address addr) โ†’ string++` [.item-kind]#internal#
  5214. Converts an `address` with fixed length of 20 bytes to its checksummed ASCII `string` hexadecimal
  5215. representation, according to EIP-55.
  5216. [.contract-item]
  5217. [[Strings-equal-string-string-]]
  5218. ==== `[.contract-item-name]#++equal++#++(string a, string b) โ†’ bool++` [.item-kind]#internal#
  5219. Returns true if the two strings are equal.
  5220. [.contract-item]
  5221. [[Strings-parseUint-string-]]
  5222. ==== `[.contract-item-name]#++parseUint++#++(string input) โ†’ uint256++` [.item-kind]#internal#
  5223. Parse a decimal string and returns the value as a `uint256`.
  5224. Requirements:
  5225. - The string must be formatted as `[0-9]*`
  5226. - The result must fit into an `uint256` type
  5227. [.contract-item]
  5228. [[Strings-parseUint-string-uint256-uint256-]]
  5229. ==== `[.contract-item-name]#++parseUint++#++(string input, uint256 begin, uint256 end) โ†’ uint256++` [.item-kind]#internal#
  5230. Variant of {parseUint-string} that parses a substring of `input` located between position `begin` (included) and
  5231. `end` (excluded).
  5232. Requirements:
  5233. - The substring must be formatted as `[0-9]*`
  5234. - The result must fit into an `uint256` type
  5235. [.contract-item]
  5236. [[Strings-tryParseUint-string-]]
  5237. ==== `[.contract-item-name]#++tryParseUint++#++(string input) โ†’ bool success, uint256 value++` [.item-kind]#internal#
  5238. Variant of {parseUint-string} that returns false if the parsing fails because of an invalid character.
  5239. NOTE: This function will revert if the result does not fit in a `uint256`.
  5240. [.contract-item]
  5241. [[Strings-tryParseUint-string-uint256-uint256-]]
  5242. ==== `[.contract-item-name]#++tryParseUint++#++(string input, uint256 begin, uint256 end) โ†’ bool success, uint256 value++` [.item-kind]#internal#
  5243. Variant of {parseUint-string-uint256-uint256} that returns false if the parsing fails because of an invalid
  5244. character.
  5245. NOTE: This function will revert if the result does not fit in a `uint256`.
  5246. [.contract-item]
  5247. [[Strings-parseInt-string-]]
  5248. ==== `[.contract-item-name]#++parseInt++#++(string input) โ†’ int256++` [.item-kind]#internal#
  5249. Parse a decimal string and returns the value as a `int256`.
  5250. Requirements:
  5251. - The string must be formatted as `[-+]?[0-9]*`
  5252. - The result must fit in an `int256` type.
  5253. [.contract-item]
  5254. [[Strings-parseInt-string-uint256-uint256-]]
  5255. ==== `[.contract-item-name]#++parseInt++#++(string input, uint256 begin, uint256 end) โ†’ int256++` [.item-kind]#internal#
  5256. Variant of {parseInt-string} that parses a substring of `input` located between position `begin` (included) and
  5257. `end` (excluded).
  5258. Requirements:
  5259. - The substring must be formatted as `[-+]?[0-9]*`
  5260. - The result must fit in an `int256` type.
  5261. [.contract-item]
  5262. [[Strings-tryParseInt-string-]]
  5263. ==== `[.contract-item-name]#++tryParseInt++#++(string input) โ†’ bool success, int256 value++` [.item-kind]#internal#
  5264. Variant of {parseInt-string} that returns false if the parsing fails because of an invalid character or if
  5265. the result does not fit in a `int256`.
  5266. NOTE: This function will revert if the absolute value of the result does not fit in a `uint256`.
  5267. [.contract-item]
  5268. [[Strings-tryParseInt-string-uint256-uint256-]]
  5269. ==== `[.contract-item-name]#++tryParseInt++#++(string input, uint256 begin, uint256 end) โ†’ bool success, int256 value++` [.item-kind]#internal#
  5270. Variant of {parseInt-string-uint256-uint256} that returns false if the parsing fails because of an invalid
  5271. character or if the result does not fit in a `int256`.
  5272. NOTE: This function will revert if the absolute value of the result does not fit in a `uint256`.
  5273. [.contract-item]
  5274. [[Strings-parseHexUint-string-]]
  5275. ==== `[.contract-item-name]#++parseHexUint++#++(string input) โ†’ uint256++` [.item-kind]#internal#
  5276. Parse a hexadecimal string (with or without "0x" prefix), and returns the value as a `uint256`.
  5277. Requirements:
  5278. - The string must be formatted as `(0x)?[0-9a-fA-F]*`
  5279. - The result must fit in an `uint256` type.
  5280. [.contract-item]
  5281. [[Strings-parseHexUint-string-uint256-uint256-]]
  5282. ==== `[.contract-item-name]#++parseHexUint++#++(string input, uint256 begin, uint256 end) โ†’ uint256++` [.item-kind]#internal#
  5283. Variant of {parseHexUint-string} that parses a substring of `input` located between position `begin` (included) and
  5284. `end` (excluded).
  5285. Requirements:
  5286. - The substring must be formatted as `(0x)?[0-9a-fA-F]*`
  5287. - The result must fit in an `uint256` type.
  5288. [.contract-item]
  5289. [[Strings-tryParseHexUint-string-]]
  5290. ==== `[.contract-item-name]#++tryParseHexUint++#++(string input) โ†’ bool success, uint256 value++` [.item-kind]#internal#
  5291. Variant of {parseHexUint-string} that returns false if the parsing fails because of an invalid character.
  5292. NOTE: This function will revert if the result does not fit in a `uint256`.
  5293. [.contract-item]
  5294. [[Strings-tryParseHexUint-string-uint256-uint256-]]
  5295. ==== `[.contract-item-name]#++tryParseHexUint++#++(string input, uint256 begin, uint256 end) โ†’ bool success, uint256 value++` [.item-kind]#internal#
  5296. Variant of {parseHexUint-string-uint256-uint256} that returns false if the parsing fails because of an
  5297. invalid character.
  5298. NOTE: This function will revert if the result does not fit in a `uint256`.
  5299. [.contract-item]
  5300. [[Strings-parseAddress-string-]]
  5301. ==== `[.contract-item-name]#++parseAddress++#++(string input) โ†’ address++` [.item-kind]#internal#
  5302. Parse a hexadecimal string (with or without "0x" prefix), and returns the value as an `address`.
  5303. Requirements:
  5304. - The string must be formatted as `(0x)?[0-9a-fA-F]{40}`
  5305. [.contract-item]
  5306. [[Strings-parseAddress-string-uint256-uint256-]]
  5307. ==== `[.contract-item-name]#++parseAddress++#++(string input, uint256 begin, uint256 end) โ†’ address++` [.item-kind]#internal#
  5308. Variant of {parseAddress-string} that parses a substring of `input` located between position `begin` (included) and
  5309. `end` (excluded).
  5310. Requirements:
  5311. - The substring must be formatted as `(0x)?[0-9a-fA-F]{40}`
  5312. [.contract-item]
  5313. [[Strings-tryParseAddress-string-]]
  5314. ==== `[.contract-item-name]#++tryParseAddress++#++(string input) โ†’ bool success, address value++` [.item-kind]#internal#
  5315. Variant of {parseAddress-string} that returns false if the parsing fails because the input is not a properly
  5316. formatted address. See {parseAddress-string} requirements.
  5317. [.contract-item]
  5318. [[Strings-tryParseAddress-string-uint256-uint256-]]
  5319. ==== `[.contract-item-name]#++tryParseAddress++#++(string input, uint256 begin, uint256 end) โ†’ bool success, address value++` [.item-kind]#internal#
  5320. Variant of {parseAddress-string-uint256-uint256} that returns false if the parsing fails because input is not a properly
  5321. formatted address. See {parseAddress-string-uint256-uint256} requirements.
  5322. [.contract-item]
  5323. [[Strings-escapeJSON-string-]]
  5324. ==== `[.contract-item-name]#++escapeJSON++#++(string input) โ†’ string++` [.item-kind]#internal#
  5325. Escape special characters in JSON strings. This can be useful to prevent JSON injection in NFT metadata.
  5326. WARNING: This function should only be used in double quoted JSON strings. Single quotes are not escaped.
  5327. NOTE: This function escapes all unicode characters, and not just the ones in ranges defined in section 2.5 of
  5328. RFC-4627 (U+0000 to U+001F, U+0022 and U+005C). ECMAScript's `JSON.parse` does recover escaped unicode
  5329. characters that are not in this range, but other tooling may provide different results.
  5330. [.contract-item]
  5331. [[Strings-StringsInsufficientHexLength-uint256-uint256-]]
  5332. ==== `[.contract-item-name]#++StringsInsufficientHexLength++#++(uint256 value, uint256 length)++` [.item-kind]#error#
  5333. The `value` string doesn't fit in the specified `length`.
  5334. [.contract-item]
  5335. [[Strings-StringsInvalidChar--]]
  5336. ==== `[.contract-item-name]#++StringsInvalidChar++#++()++` [.item-kind]#error#
  5337. The string being parsed contains characters that are not in scope of the given base.
  5338. [.contract-item]
  5339. [[Strings-StringsInvalidAddressFormat--]]
  5340. ==== `[.contract-item-name]#++StringsInvalidAddressFormat++#++()++` [.item-kind]#error#
  5341. The string being parsed is not a properly formatted address.
  5342. :StringTooLong: pass:normal[xref:#ShortStrings-StringTooLong-string-[`++StringTooLong++`]]
  5343. :InvalidShortString: pass:normal[xref:#ShortStrings-InvalidShortString--[`++InvalidShortString++`]]
  5344. :toShortString: pass:normal[xref:#ShortStrings-toShortString-string-[`++toShortString++`]]
  5345. :toString: pass:normal[xref:#ShortStrings-toString-ShortString-[`++toString++`]]
  5346. :byteLength: pass:normal[xref:#ShortStrings-byteLength-ShortString-[`++byteLength++`]]
  5347. :toShortStringWithFallback: pass:normal[xref:#ShortStrings-toShortStringWithFallback-string-string-[`++toShortStringWithFallback++`]]
  5348. :toStringWithFallback: pass:normal[xref:#ShortStrings-toStringWithFallback-ShortString-string-[`++toStringWithFallback++`]]
  5349. :byteLengthWithFallback: pass:normal[xref:#ShortStrings-byteLengthWithFallback-ShortString-string-[`++byteLengthWithFallback++`]]
  5350. :toShortString-string: pass:normal[xref:#ShortStrings-toShortString-string-[`++toShortString++`]]
  5351. :toString-ShortString: pass:normal[xref:#ShortStrings-toString-ShortString-[`++toString++`]]
  5352. :byteLength-ShortString: pass:normal[xref:#ShortStrings-byteLength-ShortString-[`++byteLength++`]]
  5353. :toShortStringWithFallback-string-string: pass:normal[xref:#ShortStrings-toShortStringWithFallback-string-string-[`++toShortStringWithFallback++`]]
  5354. :toStringWithFallback-ShortString-string: pass:normal[xref:#ShortStrings-toStringWithFallback-ShortString-string-[`++toStringWithFallback++`]]
  5355. :byteLengthWithFallback-ShortString-string: pass:normal[xref:#ShortStrings-byteLengthWithFallback-ShortString-string-[`++byteLengthWithFallback++`]]
  5356. [.contract]
  5357. [[ShortStrings]]
  5358. === `++ShortStrings++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/ShortStrings.sol[{github-icon},role=heading-link]
  5359. [.hljs-theme-light.nopadding]
  5360. ```solidity
  5361. import "@openzeppelin/contracts/utils/ShortStrings.sol";
  5362. ```
  5363. This library provides functions to convert short memory strings
  5364. into a `ShortString` type that can be used as an immutable variable.
  5365. Strings of arbitrary length can be optimized using this library if
  5366. they are short enough (up to 31 bytes) by packing them with their
  5367. length (1 byte) in a single EVM word (32 bytes). Additionally, a
  5368. fallback mechanism can be used for every other case.
  5369. Usage example:
  5370. ```solidity
  5371. contract Named {
  5372. using ShortStrings for *;
  5373. ShortString private immutable _name;
  5374. string private _nameFallback;
  5375. constructor(string memory contractName) {
  5376. _name = contractName.toShortStringWithFallback(_nameFallback);
  5377. }
  5378. function name() external view returns (string memory) {
  5379. return _name.toStringWithFallback(_nameFallback);
  5380. }
  5381. }
  5382. ```
  5383. [.contract-index]
  5384. .Functions
  5385. --
  5386. * {xref-ShortStrings-toShortString-string-}[`++toShortString(str)++`]
  5387. * {xref-ShortStrings-toString-ShortString-}[`++toString(sstr)++`]
  5388. * {xref-ShortStrings-byteLength-ShortString-}[`++byteLength(sstr)++`]
  5389. * {xref-ShortStrings-toShortStringWithFallback-string-string-}[`++toShortStringWithFallback(value, store)++`]
  5390. * {xref-ShortStrings-toStringWithFallback-ShortString-string-}[`++toStringWithFallback(value, store)++`]
  5391. * {xref-ShortStrings-byteLengthWithFallback-ShortString-string-}[`++byteLengthWithFallback(value, store)++`]
  5392. --
  5393. [.contract-index]
  5394. .Errors
  5395. --
  5396. * {xref-ShortStrings-StringTooLong-string-}[`++StringTooLong(str)++`]
  5397. * {xref-ShortStrings-InvalidShortString--}[`++InvalidShortString()++`]
  5398. --
  5399. [.contract-item]
  5400. [[ShortStrings-toShortString-string-]]
  5401. ==== `[.contract-item-name]#++toShortString++#++(string str) โ†’ ShortString++` [.item-kind]#internal#
  5402. Encode a string of at most 31 chars into a `ShortString`.
  5403. This will trigger a `StringTooLong` error is the input string is too long.
  5404. [.contract-item]
  5405. [[ShortStrings-toString-ShortString-]]
  5406. ==== `[.contract-item-name]#++toString++#++(ShortString sstr) โ†’ string++` [.item-kind]#internal#
  5407. Decode a `ShortString` back to a "normal" string.
  5408. [.contract-item]
  5409. [[ShortStrings-byteLength-ShortString-]]
  5410. ==== `[.contract-item-name]#++byteLength++#++(ShortString sstr) โ†’ uint256++` [.item-kind]#internal#
  5411. Return the length of a `ShortString`.
  5412. [.contract-item]
  5413. [[ShortStrings-toShortStringWithFallback-string-string-]]
  5414. ==== `[.contract-item-name]#++toShortStringWithFallback++#++(string value, string store) โ†’ ShortString++` [.item-kind]#internal#
  5415. Encode a string into a `ShortString`, or write it to storage if it is too long.
  5416. [.contract-item]
  5417. [[ShortStrings-toStringWithFallback-ShortString-string-]]
  5418. ==== `[.contract-item-name]#++toStringWithFallback++#++(ShortString value, string store) โ†’ string++` [.item-kind]#internal#
  5419. Decode a string that was encoded to `ShortString` or written to storage using {toShortStringWithFallback}.
  5420. [.contract-item]
  5421. [[ShortStrings-byteLengthWithFallback-ShortString-string-]]
  5422. ==== `[.contract-item-name]#++byteLengthWithFallback++#++(ShortString value, string store) โ†’ uint256++` [.item-kind]#internal#
  5423. Return the length of a string that was encoded to `ShortString` or written to storage using
  5424. {toShortStringWithFallback}.
  5425. WARNING: This will return the "byte length" of the string. This may not reflect the actual length in terms of
  5426. actual characters as the UTF-8 encoding of a single character can span over multiple bytes.
  5427. [.contract-item]
  5428. [[ShortStrings-StringTooLong-string-]]
  5429. ==== `[.contract-item-name]#++StringTooLong++#++(string str)++` [.item-kind]#error#
  5430. [.contract-item]
  5431. [[ShortStrings-InvalidShortString--]]
  5432. ==== `[.contract-item-name]#++InvalidShortString++#++()++` [.item-kind]#error#
  5433. :erc7201Slot: pass:normal[xref:#SlotDerivation-erc7201Slot-string-[`++erc7201Slot++`]]
  5434. :offset: pass:normal[xref:#SlotDerivation-offset-bytes32-uint256-[`++offset++`]]
  5435. :deriveArray: pass:normal[xref:#SlotDerivation-deriveArray-bytes32-[`++deriveArray++`]]
  5436. :deriveMapping: pass:normal[xref:#SlotDerivation-deriveMapping-bytes32-address-[`++deriveMapping++`]]
  5437. :deriveMapping: pass:normal[xref:#SlotDerivation-deriveMapping-bytes32-bool-[`++deriveMapping++`]]
  5438. :deriveMapping: pass:normal[xref:#SlotDerivation-deriveMapping-bytes32-bytes32-[`++deriveMapping++`]]
  5439. :deriveMapping: pass:normal[xref:#SlotDerivation-deriveMapping-bytes32-uint256-[`++deriveMapping++`]]
  5440. :deriveMapping: pass:normal[xref:#SlotDerivation-deriveMapping-bytes32-int256-[`++deriveMapping++`]]
  5441. :deriveMapping: pass:normal[xref:#SlotDerivation-deriveMapping-bytes32-string-[`++deriveMapping++`]]
  5442. :deriveMapping: pass:normal[xref:#SlotDerivation-deriveMapping-bytes32-bytes-[`++deriveMapping++`]]
  5443. :erc7201Slot-string: pass:normal[xref:#SlotDerivation-erc7201Slot-string-[`++erc7201Slot++`]]
  5444. :offset-bytes32-uint256: pass:normal[xref:#SlotDerivation-offset-bytes32-uint256-[`++offset++`]]
  5445. :deriveArray-bytes32: pass:normal[xref:#SlotDerivation-deriveArray-bytes32-[`++deriveArray++`]]
  5446. :deriveMapping-bytes32-address: pass:normal[xref:#SlotDerivation-deriveMapping-bytes32-address-[`++deriveMapping++`]]
  5447. :deriveMapping-bytes32-bool: pass:normal[xref:#SlotDerivation-deriveMapping-bytes32-bool-[`++deriveMapping++`]]
  5448. :deriveMapping-bytes32-bytes32: pass:normal[xref:#SlotDerivation-deriveMapping-bytes32-bytes32-[`++deriveMapping++`]]
  5449. :deriveMapping-bytes32-uint256: pass:normal[xref:#SlotDerivation-deriveMapping-bytes32-uint256-[`++deriveMapping++`]]
  5450. :deriveMapping-bytes32-int256: pass:normal[xref:#SlotDerivation-deriveMapping-bytes32-int256-[`++deriveMapping++`]]
  5451. :deriveMapping-bytes32-string: pass:normal[xref:#SlotDerivation-deriveMapping-bytes32-string-[`++deriveMapping++`]]
  5452. :deriveMapping-bytes32-bytes: pass:normal[xref:#SlotDerivation-deriveMapping-bytes32-bytes-[`++deriveMapping++`]]
  5453. [.contract]
  5454. [[SlotDerivation]]
  5455. === `++SlotDerivation++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/SlotDerivation.sol[{github-icon},role=heading-link]
  5456. [.hljs-theme-light.nopadding]
  5457. ```solidity
  5458. import "@openzeppelin/contracts/utils/SlotDerivation.sol";
  5459. ```
  5460. Library for computing storage (and transient storage) locations from namespaces and deriving slots
  5461. corresponding to standard patterns. The derivation method for array and mapping matches the storage layout used by
  5462. the solidity language / compiler.
  5463. See https://docs.soliditylang.org/en/v0.8.20/internals/layout_in_storage.html#mappings-and-dynamic-arrays[Solidity docs for mappings and dynamic arrays.].
  5464. Example usage:
  5465. ```solidity
  5466. contract Example {
  5467. // Add the library methods
  5468. using StorageSlot for bytes32;
  5469. using SlotDerivation for bytes32;
  5470. // Declare a namespace
  5471. string private constant _NAMESPACE = "<namespace>"; // eg. OpenZeppelin.Slot
  5472. function setValueInNamespace(uint256 key, address newValue) internal {
  5473. _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value = newValue;
  5474. }
  5475. function getValueInNamespace(uint256 key) internal view returns (address) {
  5476. return _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value;
  5477. }
  5478. }
  5479. ```
  5480. TIP: Consider using this library along with {StorageSlot}.
  5481. NOTE: This library provides a way to manipulate storage locations in a non-standard way. Tooling for checking
  5482. upgrade safety will ignore the slots accessed through this library.
  5483. _Available since v5.1._
  5484. [.contract-index]
  5485. .Functions
  5486. --
  5487. * {xref-SlotDerivation-erc7201Slot-string-}[`++erc7201Slot(namespace)++`]
  5488. * {xref-SlotDerivation-offset-bytes32-uint256-}[`++offset(slot, pos)++`]
  5489. * {xref-SlotDerivation-deriveArray-bytes32-}[`++deriveArray(slot)++`]
  5490. * {xref-SlotDerivation-deriveMapping-bytes32-address-}[`++deriveMapping(slot, key)++`]
  5491. * {xref-SlotDerivation-deriveMapping-bytes32-bool-}[`++deriveMapping(slot, key)++`]
  5492. * {xref-SlotDerivation-deriveMapping-bytes32-bytes32-}[`++deriveMapping(slot, key)++`]
  5493. * {xref-SlotDerivation-deriveMapping-bytes32-uint256-}[`++deriveMapping(slot, key)++`]
  5494. * {xref-SlotDerivation-deriveMapping-bytes32-int256-}[`++deriveMapping(slot, key)++`]
  5495. * {xref-SlotDerivation-deriveMapping-bytes32-string-}[`++deriveMapping(slot, key)++`]
  5496. * {xref-SlotDerivation-deriveMapping-bytes32-bytes-}[`++deriveMapping(slot, key)++`]
  5497. --
  5498. [.contract-item]
  5499. [[SlotDerivation-erc7201Slot-string-]]
  5500. ==== `[.contract-item-name]#++erc7201Slot++#++(string namespace) โ†’ bytes32 slot++` [.item-kind]#internal#
  5501. Derive an ERC-7201 slot from a string (namespace).
  5502. [.contract-item]
  5503. [[SlotDerivation-offset-bytes32-uint256-]]
  5504. ==== `[.contract-item-name]#++offset++#++(bytes32 slot, uint256 pos) โ†’ bytes32 result++` [.item-kind]#internal#
  5505. Add an offset to a slot to get the n-th element of a structure or an array.
  5506. [.contract-item]
  5507. [[SlotDerivation-deriveArray-bytes32-]]
  5508. ==== `[.contract-item-name]#++deriveArray++#++(bytes32 slot) โ†’ bytes32 result++` [.item-kind]#internal#
  5509. Derive the location of the first element in an array from the slot where the length is stored.
  5510. [.contract-item]
  5511. [[SlotDerivation-deriveMapping-bytes32-address-]]
  5512. ==== `[.contract-item-name]#++deriveMapping++#++(bytes32 slot, address key) โ†’ bytes32 result++` [.item-kind]#internal#
  5513. Derive the location of a mapping element from the key.
  5514. [.contract-item]
  5515. [[SlotDerivation-deriveMapping-bytes32-bool-]]
  5516. ==== `[.contract-item-name]#++deriveMapping++#++(bytes32 slot, bool key) โ†’ bytes32 result++` [.item-kind]#internal#
  5517. Derive the location of a mapping element from the key.
  5518. [.contract-item]
  5519. [[SlotDerivation-deriveMapping-bytes32-bytes32-]]
  5520. ==== `[.contract-item-name]#++deriveMapping++#++(bytes32 slot, bytes32 key) โ†’ bytes32 result++` [.item-kind]#internal#
  5521. Derive the location of a mapping element from the key.
  5522. [.contract-item]
  5523. [[SlotDerivation-deriveMapping-bytes32-uint256-]]
  5524. ==== `[.contract-item-name]#++deriveMapping++#++(bytes32 slot, uint256 key) โ†’ bytes32 result++` [.item-kind]#internal#
  5525. Derive the location of a mapping element from the key.
  5526. [.contract-item]
  5527. [[SlotDerivation-deriveMapping-bytes32-int256-]]
  5528. ==== `[.contract-item-name]#++deriveMapping++#++(bytes32 slot, int256 key) โ†’ bytes32 result++` [.item-kind]#internal#
  5529. Derive the location of a mapping element from the key.
  5530. [.contract-item]
  5531. [[SlotDerivation-deriveMapping-bytes32-string-]]
  5532. ==== `[.contract-item-name]#++deriveMapping++#++(bytes32 slot, string key) โ†’ bytes32 result++` [.item-kind]#internal#
  5533. Derive the location of a mapping element from the key.
  5534. [.contract-item]
  5535. [[SlotDerivation-deriveMapping-bytes32-bytes-]]
  5536. ==== `[.contract-item-name]#++deriveMapping++#++(bytes32 slot, bytes key) โ†’ bytes32 result++` [.item-kind]#internal#
  5537. Derive the location of a mapping element from the key.
  5538. :AddressSlot: pass:normal[xref:#StorageSlot-AddressSlot[`++AddressSlot++`]]
  5539. :BooleanSlot: pass:normal[xref:#StorageSlot-BooleanSlot[`++BooleanSlot++`]]
  5540. :Bytes32Slot: pass:normal[xref:#StorageSlot-Bytes32Slot[`++Bytes32Slot++`]]
  5541. :Uint256Slot: pass:normal[xref:#StorageSlot-Uint256Slot[`++Uint256Slot++`]]
  5542. :Int256Slot: pass:normal[xref:#StorageSlot-Int256Slot[`++Int256Slot++`]]
  5543. :StringSlot: pass:normal[xref:#StorageSlot-StringSlot[`++StringSlot++`]]
  5544. :BytesSlot: pass:normal[xref:#StorageSlot-BytesSlot[`++BytesSlot++`]]
  5545. :getAddressSlot: pass:normal[xref:#StorageSlot-getAddressSlot-bytes32-[`++getAddressSlot++`]]
  5546. :getBooleanSlot: pass:normal[xref:#StorageSlot-getBooleanSlot-bytes32-[`++getBooleanSlot++`]]
  5547. :getBytes32Slot: pass:normal[xref:#StorageSlot-getBytes32Slot-bytes32-[`++getBytes32Slot++`]]
  5548. :getUint256Slot: pass:normal[xref:#StorageSlot-getUint256Slot-bytes32-[`++getUint256Slot++`]]
  5549. :getInt256Slot: pass:normal[xref:#StorageSlot-getInt256Slot-bytes32-[`++getInt256Slot++`]]
  5550. :getStringSlot: pass:normal[xref:#StorageSlot-getStringSlot-bytes32-[`++getStringSlot++`]]
  5551. :getStringSlot: pass:normal[xref:#StorageSlot-getStringSlot-string-[`++getStringSlot++`]]
  5552. :getBytesSlot: pass:normal[xref:#StorageSlot-getBytesSlot-bytes32-[`++getBytesSlot++`]]
  5553. :getBytesSlot: pass:normal[xref:#StorageSlot-getBytesSlot-bytes-[`++getBytesSlot++`]]
  5554. :getAddressSlot-bytes32: pass:normal[xref:#StorageSlot-getAddressSlot-bytes32-[`++getAddressSlot++`]]
  5555. :getBooleanSlot-bytes32: pass:normal[xref:#StorageSlot-getBooleanSlot-bytes32-[`++getBooleanSlot++`]]
  5556. :getBytes32Slot-bytes32: pass:normal[xref:#StorageSlot-getBytes32Slot-bytes32-[`++getBytes32Slot++`]]
  5557. :getUint256Slot-bytes32: pass:normal[xref:#StorageSlot-getUint256Slot-bytes32-[`++getUint256Slot++`]]
  5558. :getInt256Slot-bytes32: pass:normal[xref:#StorageSlot-getInt256Slot-bytes32-[`++getInt256Slot++`]]
  5559. :getStringSlot-bytes32: pass:normal[xref:#StorageSlot-getStringSlot-bytes32-[`++getStringSlot++`]]
  5560. :getStringSlot-string: pass:normal[xref:#StorageSlot-getStringSlot-string-[`++getStringSlot++`]]
  5561. :getBytesSlot-bytes32: pass:normal[xref:#StorageSlot-getBytesSlot-bytes32-[`++getBytesSlot++`]]
  5562. :getBytesSlot-bytes: pass:normal[xref:#StorageSlot-getBytesSlot-bytes-[`++getBytesSlot++`]]
  5563. [.contract]
  5564. [[StorageSlot]]
  5565. === `++StorageSlot++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/StorageSlot.sol[{github-icon},role=heading-link]
  5566. [.hljs-theme-light.nopadding]
  5567. ```solidity
  5568. import "@openzeppelin/contracts/utils/StorageSlot.sol";
  5569. ```
  5570. Library for reading and writing primitive types to specific storage slots.
  5571. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.
  5572. This library helps with reading and writing to such slots without the need for inline assembly.
  5573. The functions in this library return Slot structs that contain a `value` member that can be used to read or write.
  5574. Example usage to set ERC-1967 implementation slot:
  5575. ```solidity
  5576. contract ERC1967 {
  5577. // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.
  5578. bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
  5579. function _getImplementation() internal view returns (address) {
  5580. return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
  5581. }
  5582. function _setImplementation(address newImplementation) internal {
  5583. require(newImplementation.code.length > 0);
  5584. StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
  5585. }
  5586. }
  5587. ```
  5588. TIP: Consider using this library along with {SlotDerivation}.
  5589. [.contract-index]
  5590. .Functions
  5591. --
  5592. * {xref-StorageSlot-getAddressSlot-bytes32-}[`++getAddressSlot(slot)++`]
  5593. * {xref-StorageSlot-getBooleanSlot-bytes32-}[`++getBooleanSlot(slot)++`]
  5594. * {xref-StorageSlot-getBytes32Slot-bytes32-}[`++getBytes32Slot(slot)++`]
  5595. * {xref-StorageSlot-getUint256Slot-bytes32-}[`++getUint256Slot(slot)++`]
  5596. * {xref-StorageSlot-getInt256Slot-bytes32-}[`++getInt256Slot(slot)++`]
  5597. * {xref-StorageSlot-getStringSlot-bytes32-}[`++getStringSlot(slot)++`]
  5598. * {xref-StorageSlot-getStringSlot-string-}[`++getStringSlot(store)++`]
  5599. * {xref-StorageSlot-getBytesSlot-bytes32-}[`++getBytesSlot(slot)++`]
  5600. * {xref-StorageSlot-getBytesSlot-bytes-}[`++getBytesSlot(store)++`]
  5601. --
  5602. [.contract-item]
  5603. [[StorageSlot-getAddressSlot-bytes32-]]
  5604. ==== `[.contract-item-name]#++getAddressSlot++#++(bytes32 slot) โ†’ struct StorageSlot.AddressSlot r++` [.item-kind]#internal#
  5605. Returns an `AddressSlot` with member `value` located at `slot`.
  5606. [.contract-item]
  5607. [[StorageSlot-getBooleanSlot-bytes32-]]
  5608. ==== `[.contract-item-name]#++getBooleanSlot++#++(bytes32 slot) โ†’ struct StorageSlot.BooleanSlot r++` [.item-kind]#internal#
  5609. Returns a `BooleanSlot` with member `value` located at `slot`.
  5610. [.contract-item]
  5611. [[StorageSlot-getBytes32Slot-bytes32-]]
  5612. ==== `[.contract-item-name]#++getBytes32Slot++#++(bytes32 slot) โ†’ struct StorageSlot.Bytes32Slot r++` [.item-kind]#internal#
  5613. Returns a `Bytes32Slot` with member `value` located at `slot`.
  5614. [.contract-item]
  5615. [[StorageSlot-getUint256Slot-bytes32-]]
  5616. ==== `[.contract-item-name]#++getUint256Slot++#++(bytes32 slot) โ†’ struct StorageSlot.Uint256Slot r++` [.item-kind]#internal#
  5617. Returns a `Uint256Slot` with member `value` located at `slot`.
  5618. [.contract-item]
  5619. [[StorageSlot-getInt256Slot-bytes32-]]
  5620. ==== `[.contract-item-name]#++getInt256Slot++#++(bytes32 slot) โ†’ struct StorageSlot.Int256Slot r++` [.item-kind]#internal#
  5621. Returns a `Int256Slot` with member `value` located at `slot`.
  5622. [.contract-item]
  5623. [[StorageSlot-getStringSlot-bytes32-]]
  5624. ==== `[.contract-item-name]#++getStringSlot++#++(bytes32 slot) โ†’ struct StorageSlot.StringSlot r++` [.item-kind]#internal#
  5625. Returns a `StringSlot` with member `value` located at `slot`.
  5626. [.contract-item]
  5627. [[StorageSlot-getStringSlot-string-]]
  5628. ==== `[.contract-item-name]#++getStringSlot++#++(string store) โ†’ struct StorageSlot.StringSlot r++` [.item-kind]#internal#
  5629. Returns an `StringSlot` representation of the string storage pointer `store`.
  5630. [.contract-item]
  5631. [[StorageSlot-getBytesSlot-bytes32-]]
  5632. ==== `[.contract-item-name]#++getBytesSlot++#++(bytes32 slot) โ†’ struct StorageSlot.BytesSlot r++` [.item-kind]#internal#
  5633. Returns a `BytesSlot` with member `value` located at `slot`.
  5634. [.contract-item]
  5635. [[StorageSlot-getBytesSlot-bytes-]]
  5636. ==== `[.contract-item-name]#++getBytesSlot++#++(bytes store) โ†’ struct StorageSlot.BytesSlot r++` [.item-kind]#internal#
  5637. Returns an `BytesSlot` representation of the bytes storage pointer `store`.
  5638. :AddressSlot: pass:normal[xref:#TransientSlot-AddressSlot[`++AddressSlot++`]]
  5639. :asAddress: pass:normal[xref:#TransientSlot-asAddress-bytes32-[`++asAddress++`]]
  5640. :BooleanSlot: pass:normal[xref:#TransientSlot-BooleanSlot[`++BooleanSlot++`]]
  5641. :asBoolean: pass:normal[xref:#TransientSlot-asBoolean-bytes32-[`++asBoolean++`]]
  5642. :Bytes32Slot: pass:normal[xref:#TransientSlot-Bytes32Slot[`++Bytes32Slot++`]]
  5643. :asBytes32: pass:normal[xref:#TransientSlot-asBytes32-bytes32-[`++asBytes32++`]]
  5644. :Uint256Slot: pass:normal[xref:#TransientSlot-Uint256Slot[`++Uint256Slot++`]]
  5645. :asUint256: pass:normal[xref:#TransientSlot-asUint256-bytes32-[`++asUint256++`]]
  5646. :Int256Slot: pass:normal[xref:#TransientSlot-Int256Slot[`++Int256Slot++`]]
  5647. :asInt256: pass:normal[xref:#TransientSlot-asInt256-bytes32-[`++asInt256++`]]
  5648. :tload: pass:normal[xref:#TransientSlot-tload-TransientSlot-AddressSlot-[`++tload++`]]
  5649. :tstore: pass:normal[xref:#TransientSlot-tstore-TransientSlot-AddressSlot-address-[`++tstore++`]]
  5650. :tload: pass:normal[xref:#TransientSlot-tload-TransientSlot-BooleanSlot-[`++tload++`]]
  5651. :tstore: pass:normal[xref:#TransientSlot-tstore-TransientSlot-BooleanSlot-bool-[`++tstore++`]]
  5652. :tload: pass:normal[xref:#TransientSlot-tload-TransientSlot-Bytes32Slot-[`++tload++`]]
  5653. :tstore: pass:normal[xref:#TransientSlot-tstore-TransientSlot-Bytes32Slot-bytes32-[`++tstore++`]]
  5654. :tload: pass:normal[xref:#TransientSlot-tload-TransientSlot-Uint256Slot-[`++tload++`]]
  5655. :tstore: pass:normal[xref:#TransientSlot-tstore-TransientSlot-Uint256Slot-uint256-[`++tstore++`]]
  5656. :tload: pass:normal[xref:#TransientSlot-tload-TransientSlot-Int256Slot-[`++tload++`]]
  5657. :tstore: pass:normal[xref:#TransientSlot-tstore-TransientSlot-Int256Slot-int256-[`++tstore++`]]
  5658. :asAddress-bytes32: pass:normal[xref:#TransientSlot-asAddress-bytes32-[`++asAddress++`]]
  5659. :asBoolean-bytes32: pass:normal[xref:#TransientSlot-asBoolean-bytes32-[`++asBoolean++`]]
  5660. :asBytes32-bytes32: pass:normal[xref:#TransientSlot-asBytes32-bytes32-[`++asBytes32++`]]
  5661. :asUint256-bytes32: pass:normal[xref:#TransientSlot-asUint256-bytes32-[`++asUint256++`]]
  5662. :asInt256-bytes32: pass:normal[xref:#TransientSlot-asInt256-bytes32-[`++asInt256++`]]
  5663. :tload-TransientSlot-AddressSlot: pass:normal[xref:#TransientSlot-tload-TransientSlot-AddressSlot-[`++tload++`]]
  5664. :tstore-TransientSlot-AddressSlot-address: pass:normal[xref:#TransientSlot-tstore-TransientSlot-AddressSlot-address-[`++tstore++`]]
  5665. :tload-TransientSlot-BooleanSlot: pass:normal[xref:#TransientSlot-tload-TransientSlot-BooleanSlot-[`++tload++`]]
  5666. :tstore-TransientSlot-BooleanSlot-bool: pass:normal[xref:#TransientSlot-tstore-TransientSlot-BooleanSlot-bool-[`++tstore++`]]
  5667. :tload-TransientSlot-Bytes32Slot: pass:normal[xref:#TransientSlot-tload-TransientSlot-Bytes32Slot-[`++tload++`]]
  5668. :tstore-TransientSlot-Bytes32Slot-bytes32: pass:normal[xref:#TransientSlot-tstore-TransientSlot-Bytes32Slot-bytes32-[`++tstore++`]]
  5669. :tload-TransientSlot-Uint256Slot: pass:normal[xref:#TransientSlot-tload-TransientSlot-Uint256Slot-[`++tload++`]]
  5670. :tstore-TransientSlot-Uint256Slot-uint256: pass:normal[xref:#TransientSlot-tstore-TransientSlot-Uint256Slot-uint256-[`++tstore++`]]
  5671. :tload-TransientSlot-Int256Slot: pass:normal[xref:#TransientSlot-tload-TransientSlot-Int256Slot-[`++tload++`]]
  5672. :tstore-TransientSlot-Int256Slot-int256: pass:normal[xref:#TransientSlot-tstore-TransientSlot-Int256Slot-int256-[`++tstore++`]]
  5673. [.contract]
  5674. [[TransientSlot]]
  5675. === `++TransientSlot++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/TransientSlot.sol[{github-icon},role=heading-link]
  5676. [.hljs-theme-light.nopadding]
  5677. ```solidity
  5678. import "@openzeppelin/contracts/utils/TransientSlot.sol";
  5679. ```
  5680. Library for reading and writing value-types to specific transient storage slots.
  5681. Transient slots are often used to store temporary values that are removed after the current transaction.
  5682. This library helps with reading and writing to such slots without the need for inline assembly.
  5683. * Example reading and writing values using transient storage:
  5684. ```solidity
  5685. contract Lock {
  5686. using TransientSlot for *;
  5687. // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.
  5688. bytes32 internal constant _LOCK_SLOT = 0xf4678858b2b588224636b8522b729e7722d32fc491da849ed75b3fdf3c84f542;
  5689. modifier locked() {
  5690. require(!_LOCK_SLOT.asBoolean().tload());
  5691. _LOCK_SLOT.asBoolean().tstore(true);
  5692. _;
  5693. _LOCK_SLOT.asBoolean().tstore(false);
  5694. }
  5695. }
  5696. ```
  5697. TIP: Consider using this library along with {SlotDerivation}.
  5698. [.contract-index]
  5699. .Functions
  5700. --
  5701. * {xref-TransientSlot-asAddress-bytes32-}[`++asAddress(slot)++`]
  5702. * {xref-TransientSlot-asBoolean-bytes32-}[`++asBoolean(slot)++`]
  5703. * {xref-TransientSlot-asBytes32-bytes32-}[`++asBytes32(slot)++`]
  5704. * {xref-TransientSlot-asUint256-bytes32-}[`++asUint256(slot)++`]
  5705. * {xref-TransientSlot-asInt256-bytes32-}[`++asInt256(slot)++`]
  5706. * {xref-TransientSlot-tload-TransientSlot-AddressSlot-}[`++tload(slot)++`]
  5707. * {xref-TransientSlot-tstore-TransientSlot-AddressSlot-address-}[`++tstore(slot, value)++`]
  5708. * {xref-TransientSlot-tload-TransientSlot-BooleanSlot-}[`++tload(slot)++`]
  5709. * {xref-TransientSlot-tstore-TransientSlot-BooleanSlot-bool-}[`++tstore(slot, value)++`]
  5710. * {xref-TransientSlot-tload-TransientSlot-Bytes32Slot-}[`++tload(slot)++`]
  5711. * {xref-TransientSlot-tstore-TransientSlot-Bytes32Slot-bytes32-}[`++tstore(slot, value)++`]
  5712. * {xref-TransientSlot-tload-TransientSlot-Uint256Slot-}[`++tload(slot)++`]
  5713. * {xref-TransientSlot-tstore-TransientSlot-Uint256Slot-uint256-}[`++tstore(slot, value)++`]
  5714. * {xref-TransientSlot-tload-TransientSlot-Int256Slot-}[`++tload(slot)++`]
  5715. * {xref-TransientSlot-tstore-TransientSlot-Int256Slot-int256-}[`++tstore(slot, value)++`]
  5716. --
  5717. [.contract-item]
  5718. [[TransientSlot-asAddress-bytes32-]]
  5719. ==== `[.contract-item-name]#++asAddress++#++(bytes32 slot) โ†’ TransientSlot.AddressSlot++` [.item-kind]#internal#
  5720. Cast an arbitrary slot to a AddressSlot.
  5721. [.contract-item]
  5722. [[TransientSlot-asBoolean-bytes32-]]
  5723. ==== `[.contract-item-name]#++asBoolean++#++(bytes32 slot) โ†’ TransientSlot.BooleanSlot++` [.item-kind]#internal#
  5724. Cast an arbitrary slot to a BooleanSlot.
  5725. [.contract-item]
  5726. [[TransientSlot-asBytes32-bytes32-]]
  5727. ==== `[.contract-item-name]#++asBytes32++#++(bytes32 slot) โ†’ TransientSlot.Bytes32Slot++` [.item-kind]#internal#
  5728. Cast an arbitrary slot to a Bytes32Slot.
  5729. [.contract-item]
  5730. [[TransientSlot-asUint256-bytes32-]]
  5731. ==== `[.contract-item-name]#++asUint256++#++(bytes32 slot) โ†’ TransientSlot.Uint256Slot++` [.item-kind]#internal#
  5732. Cast an arbitrary slot to a Uint256Slot.
  5733. [.contract-item]
  5734. [[TransientSlot-asInt256-bytes32-]]
  5735. ==== `[.contract-item-name]#++asInt256++#++(bytes32 slot) โ†’ TransientSlot.Int256Slot++` [.item-kind]#internal#
  5736. Cast an arbitrary slot to a Int256Slot.
  5737. [.contract-item]
  5738. [[TransientSlot-tload-TransientSlot-AddressSlot-]]
  5739. ==== `[.contract-item-name]#++tload++#++(TransientSlot.AddressSlot slot) โ†’ address value++` [.item-kind]#internal#
  5740. Load the value held at location `slot` in transient storage.
  5741. [.contract-item]
  5742. [[TransientSlot-tstore-TransientSlot-AddressSlot-address-]]
  5743. ==== `[.contract-item-name]#++tstore++#++(TransientSlot.AddressSlot slot, address value)++` [.item-kind]#internal#
  5744. Store `value` at location `slot` in transient storage.
  5745. [.contract-item]
  5746. [[TransientSlot-tload-TransientSlot-BooleanSlot-]]
  5747. ==== `[.contract-item-name]#++tload++#++(TransientSlot.BooleanSlot slot) โ†’ bool value++` [.item-kind]#internal#
  5748. Load the value held at location `slot` in transient storage.
  5749. [.contract-item]
  5750. [[TransientSlot-tstore-TransientSlot-BooleanSlot-bool-]]
  5751. ==== `[.contract-item-name]#++tstore++#++(TransientSlot.BooleanSlot slot, bool value)++` [.item-kind]#internal#
  5752. Store `value` at location `slot` in transient storage.
  5753. [.contract-item]
  5754. [[TransientSlot-tload-TransientSlot-Bytes32Slot-]]
  5755. ==== `[.contract-item-name]#++tload++#++(TransientSlot.Bytes32Slot slot) โ†’ bytes32 value++` [.item-kind]#internal#
  5756. Load the value held at location `slot` in transient storage.
  5757. [.contract-item]
  5758. [[TransientSlot-tstore-TransientSlot-Bytes32Slot-bytes32-]]
  5759. ==== `[.contract-item-name]#++tstore++#++(TransientSlot.Bytes32Slot slot, bytes32 value)++` [.item-kind]#internal#
  5760. Store `value` at location `slot` in transient storage.
  5761. [.contract-item]
  5762. [[TransientSlot-tload-TransientSlot-Uint256Slot-]]
  5763. ==== `[.contract-item-name]#++tload++#++(TransientSlot.Uint256Slot slot) โ†’ uint256 value++` [.item-kind]#internal#
  5764. Load the value held at location `slot` in transient storage.
  5765. [.contract-item]
  5766. [[TransientSlot-tstore-TransientSlot-Uint256Slot-uint256-]]
  5767. ==== `[.contract-item-name]#++tstore++#++(TransientSlot.Uint256Slot slot, uint256 value)++` [.item-kind]#internal#
  5768. Store `value` at location `slot` in transient storage.
  5769. [.contract-item]
  5770. [[TransientSlot-tload-TransientSlot-Int256Slot-]]
  5771. ==== `[.contract-item-name]#++tload++#++(TransientSlot.Int256Slot slot) โ†’ int256 value++` [.item-kind]#internal#
  5772. Load the value held at location `slot` in transient storage.
  5773. [.contract-item]
  5774. [[TransientSlot-tstore-TransientSlot-Int256Slot-int256-]]
  5775. ==== `[.contract-item-name]#++tstore++#++(TransientSlot.Int256Slot slot, int256 value)++` [.item-kind]#internal#
  5776. Store `value` at location `slot` in transient storage.
  5777. :multicall: pass:normal[xref:#Multicall-multicall-bytes---[`++multicall++`]]
  5778. :multicall-bytes--: pass:normal[xref:#Multicall-multicall-bytes---[`++multicall++`]]
  5779. [.contract]
  5780. [[Multicall]]
  5781. === `++Multicall++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/Multicall.sol[{github-icon},role=heading-link]
  5782. [.hljs-theme-light.nopadding]
  5783. ```solidity
  5784. import "@openzeppelin/contracts/utils/Multicall.sol";
  5785. ```
  5786. Provides a function to batch together multiple calls in a single external call.
  5787. Consider any assumption about calldata validation performed by the sender may be violated if it's not especially
  5788. careful about sending transactions invoking {multicall}. For example, a relay address that filters function
  5789. selectors won't filter calls nested within a {multicall} operation.
  5790. NOTE: Since 5.0.1 and 4.9.4, this contract identifies non-canonical contexts (i.e. `msg.sender` is not {Context-_msgSender}).
  5791. If a non-canonical context is identified, the following self `delegatecall` appends the last bytes of `msg.data`
  5792. to the subcall. This makes it safe to use with {ERC2771Context}. Contexts that don't affect the resolution of
  5793. {Context-_msgSender} are not propagated to subcalls.
  5794. [.contract-index]
  5795. .Functions
  5796. --
  5797. * {xref-Multicall-multicall-bytes---}[`++multicall(data)++`]
  5798. --
  5799. [.contract-item]
  5800. [[Multicall-multicall-bytes---]]
  5801. ==== `[.contract-item-name]#++multicall++#++(bytes[] data) โ†’ bytes[] results++` [.item-kind]#external#
  5802. Receives and executes a batch of function calls on this contract.
  5803. :_msgSender: pass:normal[xref:#Context-_msgSender--[`++_msgSender++`]]
  5804. :_msgData: pass:normal[xref:#Context-_msgData--[`++_msgData++`]]
  5805. :_contextSuffixLength: pass:normal[xref:#Context-_contextSuffixLength--[`++_contextSuffixLength++`]]
  5806. :_msgSender-: pass:normal[xref:#Context-_msgSender--[`++_msgSender++`]]
  5807. :_msgData-: pass:normal[xref:#Context-_msgData--[`++_msgData++`]]
  5808. :_contextSuffixLength-: pass:normal[xref:#Context-_contextSuffixLength--[`++_contextSuffixLength++`]]
  5809. [.contract]
  5810. [[Context]]
  5811. === `++Context++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/Context.sol[{github-icon},role=heading-link]
  5812. [.hljs-theme-light.nopadding]
  5813. ```solidity
  5814. import "@openzeppelin/contracts/utils/Context.sol";
  5815. ```
  5816. Provides information about the current execution context, including the
  5817. sender of the transaction and its data. While these are generally available
  5818. via msg.sender and msg.data, they should not be accessed in such a direct
  5819. manner, since when dealing with meta-transactions the account sending and
  5820. paying for execution may not be the actual sender (as far as an application
  5821. is concerned).
  5822. This contract is only required for intermediate, library-like contracts.
  5823. [.contract-index]
  5824. .Functions
  5825. --
  5826. * {xref-Context-_msgSender--}[`++_msgSender()++`]
  5827. * {xref-Context-_msgData--}[`++_msgData()++`]
  5828. * {xref-Context-_contextSuffixLength--}[`++_contextSuffixLength()++`]
  5829. --
  5830. [.contract-item]
  5831. [[Context-_msgSender--]]
  5832. ==== `[.contract-item-name]#++_msgSender++#++() โ†’ address++` [.item-kind]#internal#
  5833. [.contract-item]
  5834. [[Context-_msgData--]]
  5835. ==== `[.contract-item-name]#++_msgData++#++() โ†’ bytes++` [.item-kind]#internal#
  5836. [.contract-item]
  5837. [[Context-_contextSuffixLength--]]
  5838. ==== `[.contract-item-name]#++_contextSuffixLength++#++() โ†’ uint256++` [.item-kind]#internal#
  5839. :OutOfRangeAccess: pass:normal[xref:#Packing-OutOfRangeAccess--[`++OutOfRangeAccess++`]]
  5840. :pack_1_1: pass:normal[xref:#Packing-pack_1_1-bytes1-bytes1-[`++pack_1_1++`]]
  5841. :pack_2_2: pass:normal[xref:#Packing-pack_2_2-bytes2-bytes2-[`++pack_2_2++`]]
  5842. :pack_2_4: pass:normal[xref:#Packing-pack_2_4-bytes2-bytes4-[`++pack_2_4++`]]
  5843. :pack_2_6: pass:normal[xref:#Packing-pack_2_6-bytes2-bytes6-[`++pack_2_6++`]]
  5844. :pack_2_8: pass:normal[xref:#Packing-pack_2_8-bytes2-bytes8-[`++pack_2_8++`]]
  5845. :pack_2_10: pass:normal[xref:#Packing-pack_2_10-bytes2-bytes10-[`++pack_2_10++`]]
  5846. :pack_2_20: pass:normal[xref:#Packing-pack_2_20-bytes2-bytes20-[`++pack_2_20++`]]
  5847. :pack_2_22: pass:normal[xref:#Packing-pack_2_22-bytes2-bytes22-[`++pack_2_22++`]]
  5848. :pack_4_2: pass:normal[xref:#Packing-pack_4_2-bytes4-bytes2-[`++pack_4_2++`]]
  5849. :pack_4_4: pass:normal[xref:#Packing-pack_4_4-bytes4-bytes4-[`++pack_4_4++`]]
  5850. :pack_4_6: pass:normal[xref:#Packing-pack_4_6-bytes4-bytes6-[`++pack_4_6++`]]
  5851. :pack_4_8: pass:normal[xref:#Packing-pack_4_8-bytes4-bytes8-[`++pack_4_8++`]]
  5852. :pack_4_12: pass:normal[xref:#Packing-pack_4_12-bytes4-bytes12-[`++pack_4_12++`]]
  5853. :pack_4_16: pass:normal[xref:#Packing-pack_4_16-bytes4-bytes16-[`++pack_4_16++`]]
  5854. :pack_4_20: pass:normal[xref:#Packing-pack_4_20-bytes4-bytes20-[`++pack_4_20++`]]
  5855. :pack_4_24: pass:normal[xref:#Packing-pack_4_24-bytes4-bytes24-[`++pack_4_24++`]]
  5856. :pack_4_28: pass:normal[xref:#Packing-pack_4_28-bytes4-bytes28-[`++pack_4_28++`]]
  5857. :pack_6_2: pass:normal[xref:#Packing-pack_6_2-bytes6-bytes2-[`++pack_6_2++`]]
  5858. :pack_6_4: pass:normal[xref:#Packing-pack_6_4-bytes6-bytes4-[`++pack_6_4++`]]
  5859. :pack_6_6: pass:normal[xref:#Packing-pack_6_6-bytes6-bytes6-[`++pack_6_6++`]]
  5860. :pack_6_10: pass:normal[xref:#Packing-pack_6_10-bytes6-bytes10-[`++pack_6_10++`]]
  5861. :pack_6_16: pass:normal[xref:#Packing-pack_6_16-bytes6-bytes16-[`++pack_6_16++`]]
  5862. :pack_6_22: pass:normal[xref:#Packing-pack_6_22-bytes6-bytes22-[`++pack_6_22++`]]
  5863. :pack_8_2: pass:normal[xref:#Packing-pack_8_2-bytes8-bytes2-[`++pack_8_2++`]]
  5864. :pack_8_4: pass:normal[xref:#Packing-pack_8_4-bytes8-bytes4-[`++pack_8_4++`]]
  5865. :pack_8_8: pass:normal[xref:#Packing-pack_8_8-bytes8-bytes8-[`++pack_8_8++`]]
  5866. :pack_8_12: pass:normal[xref:#Packing-pack_8_12-bytes8-bytes12-[`++pack_8_12++`]]
  5867. :pack_8_16: pass:normal[xref:#Packing-pack_8_16-bytes8-bytes16-[`++pack_8_16++`]]
  5868. :pack_8_20: pass:normal[xref:#Packing-pack_8_20-bytes8-bytes20-[`++pack_8_20++`]]
  5869. :pack_8_24: pass:normal[xref:#Packing-pack_8_24-bytes8-bytes24-[`++pack_8_24++`]]
  5870. :pack_10_2: pass:normal[xref:#Packing-pack_10_2-bytes10-bytes2-[`++pack_10_2++`]]
  5871. :pack_10_6: pass:normal[xref:#Packing-pack_10_6-bytes10-bytes6-[`++pack_10_6++`]]
  5872. :pack_10_10: pass:normal[xref:#Packing-pack_10_10-bytes10-bytes10-[`++pack_10_10++`]]
  5873. :pack_10_12: pass:normal[xref:#Packing-pack_10_12-bytes10-bytes12-[`++pack_10_12++`]]
  5874. :pack_10_22: pass:normal[xref:#Packing-pack_10_22-bytes10-bytes22-[`++pack_10_22++`]]
  5875. :pack_12_4: pass:normal[xref:#Packing-pack_12_4-bytes12-bytes4-[`++pack_12_4++`]]
  5876. :pack_12_8: pass:normal[xref:#Packing-pack_12_8-bytes12-bytes8-[`++pack_12_8++`]]
  5877. :pack_12_10: pass:normal[xref:#Packing-pack_12_10-bytes12-bytes10-[`++pack_12_10++`]]
  5878. :pack_12_12: pass:normal[xref:#Packing-pack_12_12-bytes12-bytes12-[`++pack_12_12++`]]
  5879. :pack_12_16: pass:normal[xref:#Packing-pack_12_16-bytes12-bytes16-[`++pack_12_16++`]]
  5880. :pack_12_20: pass:normal[xref:#Packing-pack_12_20-bytes12-bytes20-[`++pack_12_20++`]]
  5881. :pack_16_4: pass:normal[xref:#Packing-pack_16_4-bytes16-bytes4-[`++pack_16_4++`]]
  5882. :pack_16_6: pass:normal[xref:#Packing-pack_16_6-bytes16-bytes6-[`++pack_16_6++`]]
  5883. :pack_16_8: pass:normal[xref:#Packing-pack_16_8-bytes16-bytes8-[`++pack_16_8++`]]
  5884. :pack_16_12: pass:normal[xref:#Packing-pack_16_12-bytes16-bytes12-[`++pack_16_12++`]]
  5885. :pack_16_16: pass:normal[xref:#Packing-pack_16_16-bytes16-bytes16-[`++pack_16_16++`]]
  5886. :pack_20_2: pass:normal[xref:#Packing-pack_20_2-bytes20-bytes2-[`++pack_20_2++`]]
  5887. :pack_20_4: pass:normal[xref:#Packing-pack_20_4-bytes20-bytes4-[`++pack_20_4++`]]
  5888. :pack_20_8: pass:normal[xref:#Packing-pack_20_8-bytes20-bytes8-[`++pack_20_8++`]]
  5889. :pack_20_12: pass:normal[xref:#Packing-pack_20_12-bytes20-bytes12-[`++pack_20_12++`]]
  5890. :pack_22_2: pass:normal[xref:#Packing-pack_22_2-bytes22-bytes2-[`++pack_22_2++`]]
  5891. :pack_22_6: pass:normal[xref:#Packing-pack_22_6-bytes22-bytes6-[`++pack_22_6++`]]
  5892. :pack_22_10: pass:normal[xref:#Packing-pack_22_10-bytes22-bytes10-[`++pack_22_10++`]]
  5893. :pack_24_4: pass:normal[xref:#Packing-pack_24_4-bytes24-bytes4-[`++pack_24_4++`]]
  5894. :pack_24_8: pass:normal[xref:#Packing-pack_24_8-bytes24-bytes8-[`++pack_24_8++`]]
  5895. :pack_28_4: pass:normal[xref:#Packing-pack_28_4-bytes28-bytes4-[`++pack_28_4++`]]
  5896. :extract_2_1: pass:normal[xref:#Packing-extract_2_1-bytes2-uint8-[`++extract_2_1++`]]
  5897. :replace_2_1: pass:normal[xref:#Packing-replace_2_1-bytes2-bytes1-uint8-[`++replace_2_1++`]]
  5898. :extract_4_1: pass:normal[xref:#Packing-extract_4_1-bytes4-uint8-[`++extract_4_1++`]]
  5899. :replace_4_1: pass:normal[xref:#Packing-replace_4_1-bytes4-bytes1-uint8-[`++replace_4_1++`]]
  5900. :extract_4_2: pass:normal[xref:#Packing-extract_4_2-bytes4-uint8-[`++extract_4_2++`]]
  5901. :replace_4_2: pass:normal[xref:#Packing-replace_4_2-bytes4-bytes2-uint8-[`++replace_4_2++`]]
  5902. :extract_6_1: pass:normal[xref:#Packing-extract_6_1-bytes6-uint8-[`++extract_6_1++`]]
  5903. :replace_6_1: pass:normal[xref:#Packing-replace_6_1-bytes6-bytes1-uint8-[`++replace_6_1++`]]
  5904. :extract_6_2: pass:normal[xref:#Packing-extract_6_2-bytes6-uint8-[`++extract_6_2++`]]
  5905. :replace_6_2: pass:normal[xref:#Packing-replace_6_2-bytes6-bytes2-uint8-[`++replace_6_2++`]]
  5906. :extract_6_4: pass:normal[xref:#Packing-extract_6_4-bytes6-uint8-[`++extract_6_4++`]]
  5907. :replace_6_4: pass:normal[xref:#Packing-replace_6_4-bytes6-bytes4-uint8-[`++replace_6_4++`]]
  5908. :extract_8_1: pass:normal[xref:#Packing-extract_8_1-bytes8-uint8-[`++extract_8_1++`]]
  5909. :replace_8_1: pass:normal[xref:#Packing-replace_8_1-bytes8-bytes1-uint8-[`++replace_8_1++`]]
  5910. :extract_8_2: pass:normal[xref:#Packing-extract_8_2-bytes8-uint8-[`++extract_8_2++`]]
  5911. :replace_8_2: pass:normal[xref:#Packing-replace_8_2-bytes8-bytes2-uint8-[`++replace_8_2++`]]
  5912. :extract_8_4: pass:normal[xref:#Packing-extract_8_4-bytes8-uint8-[`++extract_8_4++`]]
  5913. :replace_8_4: pass:normal[xref:#Packing-replace_8_4-bytes8-bytes4-uint8-[`++replace_8_4++`]]
  5914. :extract_8_6: pass:normal[xref:#Packing-extract_8_6-bytes8-uint8-[`++extract_8_6++`]]
  5915. :replace_8_6: pass:normal[xref:#Packing-replace_8_6-bytes8-bytes6-uint8-[`++replace_8_6++`]]
  5916. :extract_10_1: pass:normal[xref:#Packing-extract_10_1-bytes10-uint8-[`++extract_10_1++`]]
  5917. :replace_10_1: pass:normal[xref:#Packing-replace_10_1-bytes10-bytes1-uint8-[`++replace_10_1++`]]
  5918. :extract_10_2: pass:normal[xref:#Packing-extract_10_2-bytes10-uint8-[`++extract_10_2++`]]
  5919. :replace_10_2: pass:normal[xref:#Packing-replace_10_2-bytes10-bytes2-uint8-[`++replace_10_2++`]]
  5920. :extract_10_4: pass:normal[xref:#Packing-extract_10_4-bytes10-uint8-[`++extract_10_4++`]]
  5921. :replace_10_4: pass:normal[xref:#Packing-replace_10_4-bytes10-bytes4-uint8-[`++replace_10_4++`]]
  5922. :extract_10_6: pass:normal[xref:#Packing-extract_10_6-bytes10-uint8-[`++extract_10_6++`]]
  5923. :replace_10_6: pass:normal[xref:#Packing-replace_10_6-bytes10-bytes6-uint8-[`++replace_10_6++`]]
  5924. :extract_10_8: pass:normal[xref:#Packing-extract_10_8-bytes10-uint8-[`++extract_10_8++`]]
  5925. :replace_10_8: pass:normal[xref:#Packing-replace_10_8-bytes10-bytes8-uint8-[`++replace_10_8++`]]
  5926. :extract_12_1: pass:normal[xref:#Packing-extract_12_1-bytes12-uint8-[`++extract_12_1++`]]
  5927. :replace_12_1: pass:normal[xref:#Packing-replace_12_1-bytes12-bytes1-uint8-[`++replace_12_1++`]]
  5928. :extract_12_2: pass:normal[xref:#Packing-extract_12_2-bytes12-uint8-[`++extract_12_2++`]]
  5929. :replace_12_2: pass:normal[xref:#Packing-replace_12_2-bytes12-bytes2-uint8-[`++replace_12_2++`]]
  5930. :extract_12_4: pass:normal[xref:#Packing-extract_12_4-bytes12-uint8-[`++extract_12_4++`]]
  5931. :replace_12_4: pass:normal[xref:#Packing-replace_12_4-bytes12-bytes4-uint8-[`++replace_12_4++`]]
  5932. :extract_12_6: pass:normal[xref:#Packing-extract_12_6-bytes12-uint8-[`++extract_12_6++`]]
  5933. :replace_12_6: pass:normal[xref:#Packing-replace_12_6-bytes12-bytes6-uint8-[`++replace_12_6++`]]
  5934. :extract_12_8: pass:normal[xref:#Packing-extract_12_8-bytes12-uint8-[`++extract_12_8++`]]
  5935. :replace_12_8: pass:normal[xref:#Packing-replace_12_8-bytes12-bytes8-uint8-[`++replace_12_8++`]]
  5936. :extract_12_10: pass:normal[xref:#Packing-extract_12_10-bytes12-uint8-[`++extract_12_10++`]]
  5937. :replace_12_10: pass:normal[xref:#Packing-replace_12_10-bytes12-bytes10-uint8-[`++replace_12_10++`]]
  5938. :extract_16_1: pass:normal[xref:#Packing-extract_16_1-bytes16-uint8-[`++extract_16_1++`]]
  5939. :replace_16_1: pass:normal[xref:#Packing-replace_16_1-bytes16-bytes1-uint8-[`++replace_16_1++`]]
  5940. :extract_16_2: pass:normal[xref:#Packing-extract_16_2-bytes16-uint8-[`++extract_16_2++`]]
  5941. :replace_16_2: pass:normal[xref:#Packing-replace_16_2-bytes16-bytes2-uint8-[`++replace_16_2++`]]
  5942. :extract_16_4: pass:normal[xref:#Packing-extract_16_4-bytes16-uint8-[`++extract_16_4++`]]
  5943. :replace_16_4: pass:normal[xref:#Packing-replace_16_4-bytes16-bytes4-uint8-[`++replace_16_4++`]]
  5944. :extract_16_6: pass:normal[xref:#Packing-extract_16_6-bytes16-uint8-[`++extract_16_6++`]]
  5945. :replace_16_6: pass:normal[xref:#Packing-replace_16_6-bytes16-bytes6-uint8-[`++replace_16_6++`]]
  5946. :extract_16_8: pass:normal[xref:#Packing-extract_16_8-bytes16-uint8-[`++extract_16_8++`]]
  5947. :replace_16_8: pass:normal[xref:#Packing-replace_16_8-bytes16-bytes8-uint8-[`++replace_16_8++`]]
  5948. :extract_16_10: pass:normal[xref:#Packing-extract_16_10-bytes16-uint8-[`++extract_16_10++`]]
  5949. :replace_16_10: pass:normal[xref:#Packing-replace_16_10-bytes16-bytes10-uint8-[`++replace_16_10++`]]
  5950. :extract_16_12: pass:normal[xref:#Packing-extract_16_12-bytes16-uint8-[`++extract_16_12++`]]
  5951. :replace_16_12: pass:normal[xref:#Packing-replace_16_12-bytes16-bytes12-uint8-[`++replace_16_12++`]]
  5952. :extract_20_1: pass:normal[xref:#Packing-extract_20_1-bytes20-uint8-[`++extract_20_1++`]]
  5953. :replace_20_1: pass:normal[xref:#Packing-replace_20_1-bytes20-bytes1-uint8-[`++replace_20_1++`]]
  5954. :extract_20_2: pass:normal[xref:#Packing-extract_20_2-bytes20-uint8-[`++extract_20_2++`]]
  5955. :replace_20_2: pass:normal[xref:#Packing-replace_20_2-bytes20-bytes2-uint8-[`++replace_20_2++`]]
  5956. :extract_20_4: pass:normal[xref:#Packing-extract_20_4-bytes20-uint8-[`++extract_20_4++`]]
  5957. :replace_20_4: pass:normal[xref:#Packing-replace_20_4-bytes20-bytes4-uint8-[`++replace_20_4++`]]
  5958. :extract_20_6: pass:normal[xref:#Packing-extract_20_6-bytes20-uint8-[`++extract_20_6++`]]
  5959. :replace_20_6: pass:normal[xref:#Packing-replace_20_6-bytes20-bytes6-uint8-[`++replace_20_6++`]]
  5960. :extract_20_8: pass:normal[xref:#Packing-extract_20_8-bytes20-uint8-[`++extract_20_8++`]]
  5961. :replace_20_8: pass:normal[xref:#Packing-replace_20_8-bytes20-bytes8-uint8-[`++replace_20_8++`]]
  5962. :extract_20_10: pass:normal[xref:#Packing-extract_20_10-bytes20-uint8-[`++extract_20_10++`]]
  5963. :replace_20_10: pass:normal[xref:#Packing-replace_20_10-bytes20-bytes10-uint8-[`++replace_20_10++`]]
  5964. :extract_20_12: pass:normal[xref:#Packing-extract_20_12-bytes20-uint8-[`++extract_20_12++`]]
  5965. :replace_20_12: pass:normal[xref:#Packing-replace_20_12-bytes20-bytes12-uint8-[`++replace_20_12++`]]
  5966. :extract_20_16: pass:normal[xref:#Packing-extract_20_16-bytes20-uint8-[`++extract_20_16++`]]
  5967. :replace_20_16: pass:normal[xref:#Packing-replace_20_16-bytes20-bytes16-uint8-[`++replace_20_16++`]]
  5968. :extract_22_1: pass:normal[xref:#Packing-extract_22_1-bytes22-uint8-[`++extract_22_1++`]]
  5969. :replace_22_1: pass:normal[xref:#Packing-replace_22_1-bytes22-bytes1-uint8-[`++replace_22_1++`]]
  5970. :extract_22_2: pass:normal[xref:#Packing-extract_22_2-bytes22-uint8-[`++extract_22_2++`]]
  5971. :replace_22_2: pass:normal[xref:#Packing-replace_22_2-bytes22-bytes2-uint8-[`++replace_22_2++`]]
  5972. :extract_22_4: pass:normal[xref:#Packing-extract_22_4-bytes22-uint8-[`++extract_22_4++`]]
  5973. :replace_22_4: pass:normal[xref:#Packing-replace_22_4-bytes22-bytes4-uint8-[`++replace_22_4++`]]
  5974. :extract_22_6: pass:normal[xref:#Packing-extract_22_6-bytes22-uint8-[`++extract_22_6++`]]
  5975. :replace_22_6: pass:normal[xref:#Packing-replace_22_6-bytes22-bytes6-uint8-[`++replace_22_6++`]]
  5976. :extract_22_8: pass:normal[xref:#Packing-extract_22_8-bytes22-uint8-[`++extract_22_8++`]]
  5977. :replace_22_8: pass:normal[xref:#Packing-replace_22_8-bytes22-bytes8-uint8-[`++replace_22_8++`]]
  5978. :extract_22_10: pass:normal[xref:#Packing-extract_22_10-bytes22-uint8-[`++extract_22_10++`]]
  5979. :replace_22_10: pass:normal[xref:#Packing-replace_22_10-bytes22-bytes10-uint8-[`++replace_22_10++`]]
  5980. :extract_22_12: pass:normal[xref:#Packing-extract_22_12-bytes22-uint8-[`++extract_22_12++`]]
  5981. :replace_22_12: pass:normal[xref:#Packing-replace_22_12-bytes22-bytes12-uint8-[`++replace_22_12++`]]
  5982. :extract_22_16: pass:normal[xref:#Packing-extract_22_16-bytes22-uint8-[`++extract_22_16++`]]
  5983. :replace_22_16: pass:normal[xref:#Packing-replace_22_16-bytes22-bytes16-uint8-[`++replace_22_16++`]]
  5984. :extract_22_20: pass:normal[xref:#Packing-extract_22_20-bytes22-uint8-[`++extract_22_20++`]]
  5985. :replace_22_20: pass:normal[xref:#Packing-replace_22_20-bytes22-bytes20-uint8-[`++replace_22_20++`]]
  5986. :extract_24_1: pass:normal[xref:#Packing-extract_24_1-bytes24-uint8-[`++extract_24_1++`]]
  5987. :replace_24_1: pass:normal[xref:#Packing-replace_24_1-bytes24-bytes1-uint8-[`++replace_24_1++`]]
  5988. :extract_24_2: pass:normal[xref:#Packing-extract_24_2-bytes24-uint8-[`++extract_24_2++`]]
  5989. :replace_24_2: pass:normal[xref:#Packing-replace_24_2-bytes24-bytes2-uint8-[`++replace_24_2++`]]
  5990. :extract_24_4: pass:normal[xref:#Packing-extract_24_4-bytes24-uint8-[`++extract_24_4++`]]
  5991. :replace_24_4: pass:normal[xref:#Packing-replace_24_4-bytes24-bytes4-uint8-[`++replace_24_4++`]]
  5992. :extract_24_6: pass:normal[xref:#Packing-extract_24_6-bytes24-uint8-[`++extract_24_6++`]]
  5993. :replace_24_6: pass:normal[xref:#Packing-replace_24_6-bytes24-bytes6-uint8-[`++replace_24_6++`]]
  5994. :extract_24_8: pass:normal[xref:#Packing-extract_24_8-bytes24-uint8-[`++extract_24_8++`]]
  5995. :replace_24_8: pass:normal[xref:#Packing-replace_24_8-bytes24-bytes8-uint8-[`++replace_24_8++`]]
  5996. :extract_24_10: pass:normal[xref:#Packing-extract_24_10-bytes24-uint8-[`++extract_24_10++`]]
  5997. :replace_24_10: pass:normal[xref:#Packing-replace_24_10-bytes24-bytes10-uint8-[`++replace_24_10++`]]
  5998. :extract_24_12: pass:normal[xref:#Packing-extract_24_12-bytes24-uint8-[`++extract_24_12++`]]
  5999. :replace_24_12: pass:normal[xref:#Packing-replace_24_12-bytes24-bytes12-uint8-[`++replace_24_12++`]]
  6000. :extract_24_16: pass:normal[xref:#Packing-extract_24_16-bytes24-uint8-[`++extract_24_16++`]]
  6001. :replace_24_16: pass:normal[xref:#Packing-replace_24_16-bytes24-bytes16-uint8-[`++replace_24_16++`]]
  6002. :extract_24_20: pass:normal[xref:#Packing-extract_24_20-bytes24-uint8-[`++extract_24_20++`]]
  6003. :replace_24_20: pass:normal[xref:#Packing-replace_24_20-bytes24-bytes20-uint8-[`++replace_24_20++`]]
  6004. :extract_24_22: pass:normal[xref:#Packing-extract_24_22-bytes24-uint8-[`++extract_24_22++`]]
  6005. :replace_24_22: pass:normal[xref:#Packing-replace_24_22-bytes24-bytes22-uint8-[`++replace_24_22++`]]
  6006. :extract_28_1: pass:normal[xref:#Packing-extract_28_1-bytes28-uint8-[`++extract_28_1++`]]
  6007. :replace_28_1: pass:normal[xref:#Packing-replace_28_1-bytes28-bytes1-uint8-[`++replace_28_1++`]]
  6008. :extract_28_2: pass:normal[xref:#Packing-extract_28_2-bytes28-uint8-[`++extract_28_2++`]]
  6009. :replace_28_2: pass:normal[xref:#Packing-replace_28_2-bytes28-bytes2-uint8-[`++replace_28_2++`]]
  6010. :extract_28_4: pass:normal[xref:#Packing-extract_28_4-bytes28-uint8-[`++extract_28_4++`]]
  6011. :replace_28_4: pass:normal[xref:#Packing-replace_28_4-bytes28-bytes4-uint8-[`++replace_28_4++`]]
  6012. :extract_28_6: pass:normal[xref:#Packing-extract_28_6-bytes28-uint8-[`++extract_28_6++`]]
  6013. :replace_28_6: pass:normal[xref:#Packing-replace_28_6-bytes28-bytes6-uint8-[`++replace_28_6++`]]
  6014. :extract_28_8: pass:normal[xref:#Packing-extract_28_8-bytes28-uint8-[`++extract_28_8++`]]
  6015. :replace_28_8: pass:normal[xref:#Packing-replace_28_8-bytes28-bytes8-uint8-[`++replace_28_8++`]]
  6016. :extract_28_10: pass:normal[xref:#Packing-extract_28_10-bytes28-uint8-[`++extract_28_10++`]]
  6017. :replace_28_10: pass:normal[xref:#Packing-replace_28_10-bytes28-bytes10-uint8-[`++replace_28_10++`]]
  6018. :extract_28_12: pass:normal[xref:#Packing-extract_28_12-bytes28-uint8-[`++extract_28_12++`]]
  6019. :replace_28_12: pass:normal[xref:#Packing-replace_28_12-bytes28-bytes12-uint8-[`++replace_28_12++`]]
  6020. :extract_28_16: pass:normal[xref:#Packing-extract_28_16-bytes28-uint8-[`++extract_28_16++`]]
  6021. :replace_28_16: pass:normal[xref:#Packing-replace_28_16-bytes28-bytes16-uint8-[`++replace_28_16++`]]
  6022. :extract_28_20: pass:normal[xref:#Packing-extract_28_20-bytes28-uint8-[`++extract_28_20++`]]
  6023. :replace_28_20: pass:normal[xref:#Packing-replace_28_20-bytes28-bytes20-uint8-[`++replace_28_20++`]]
  6024. :extract_28_22: pass:normal[xref:#Packing-extract_28_22-bytes28-uint8-[`++extract_28_22++`]]
  6025. :replace_28_22: pass:normal[xref:#Packing-replace_28_22-bytes28-bytes22-uint8-[`++replace_28_22++`]]
  6026. :extract_28_24: pass:normal[xref:#Packing-extract_28_24-bytes28-uint8-[`++extract_28_24++`]]
  6027. :replace_28_24: pass:normal[xref:#Packing-replace_28_24-bytes28-bytes24-uint8-[`++replace_28_24++`]]
  6028. :extract_32_1: pass:normal[xref:#Packing-extract_32_1-bytes32-uint8-[`++extract_32_1++`]]
  6029. :replace_32_1: pass:normal[xref:#Packing-replace_32_1-bytes32-bytes1-uint8-[`++replace_32_1++`]]
  6030. :extract_32_2: pass:normal[xref:#Packing-extract_32_2-bytes32-uint8-[`++extract_32_2++`]]
  6031. :replace_32_2: pass:normal[xref:#Packing-replace_32_2-bytes32-bytes2-uint8-[`++replace_32_2++`]]
  6032. :extract_32_4: pass:normal[xref:#Packing-extract_32_4-bytes32-uint8-[`++extract_32_4++`]]
  6033. :replace_32_4: pass:normal[xref:#Packing-replace_32_4-bytes32-bytes4-uint8-[`++replace_32_4++`]]
  6034. :extract_32_6: pass:normal[xref:#Packing-extract_32_6-bytes32-uint8-[`++extract_32_6++`]]
  6035. :replace_32_6: pass:normal[xref:#Packing-replace_32_6-bytes32-bytes6-uint8-[`++replace_32_6++`]]
  6036. :extract_32_8: pass:normal[xref:#Packing-extract_32_8-bytes32-uint8-[`++extract_32_8++`]]
  6037. :replace_32_8: pass:normal[xref:#Packing-replace_32_8-bytes32-bytes8-uint8-[`++replace_32_8++`]]
  6038. :extract_32_10: pass:normal[xref:#Packing-extract_32_10-bytes32-uint8-[`++extract_32_10++`]]
  6039. :replace_32_10: pass:normal[xref:#Packing-replace_32_10-bytes32-bytes10-uint8-[`++replace_32_10++`]]
  6040. :extract_32_12: pass:normal[xref:#Packing-extract_32_12-bytes32-uint8-[`++extract_32_12++`]]
  6041. :replace_32_12: pass:normal[xref:#Packing-replace_32_12-bytes32-bytes12-uint8-[`++replace_32_12++`]]
  6042. :extract_32_16: pass:normal[xref:#Packing-extract_32_16-bytes32-uint8-[`++extract_32_16++`]]
  6043. :replace_32_16: pass:normal[xref:#Packing-replace_32_16-bytes32-bytes16-uint8-[`++replace_32_16++`]]
  6044. :extract_32_20: pass:normal[xref:#Packing-extract_32_20-bytes32-uint8-[`++extract_32_20++`]]
  6045. :replace_32_20: pass:normal[xref:#Packing-replace_32_20-bytes32-bytes20-uint8-[`++replace_32_20++`]]
  6046. :extract_32_22: pass:normal[xref:#Packing-extract_32_22-bytes32-uint8-[`++extract_32_22++`]]
  6047. :replace_32_22: pass:normal[xref:#Packing-replace_32_22-bytes32-bytes22-uint8-[`++replace_32_22++`]]
  6048. :extract_32_24: pass:normal[xref:#Packing-extract_32_24-bytes32-uint8-[`++extract_32_24++`]]
  6049. :replace_32_24: pass:normal[xref:#Packing-replace_32_24-bytes32-bytes24-uint8-[`++replace_32_24++`]]
  6050. :extract_32_28: pass:normal[xref:#Packing-extract_32_28-bytes32-uint8-[`++extract_32_28++`]]
  6051. :replace_32_28: pass:normal[xref:#Packing-replace_32_28-bytes32-bytes28-uint8-[`++replace_32_28++`]]
  6052. :pack_1_1-bytes1-bytes1: pass:normal[xref:#Packing-pack_1_1-bytes1-bytes1-[`++pack_1_1++`]]
  6053. :pack_2_2-bytes2-bytes2: pass:normal[xref:#Packing-pack_2_2-bytes2-bytes2-[`++pack_2_2++`]]
  6054. :pack_2_4-bytes2-bytes4: pass:normal[xref:#Packing-pack_2_4-bytes2-bytes4-[`++pack_2_4++`]]
  6055. :pack_2_6-bytes2-bytes6: pass:normal[xref:#Packing-pack_2_6-bytes2-bytes6-[`++pack_2_6++`]]
  6056. :pack_2_8-bytes2-bytes8: pass:normal[xref:#Packing-pack_2_8-bytes2-bytes8-[`++pack_2_8++`]]
  6057. :pack_2_10-bytes2-bytes10: pass:normal[xref:#Packing-pack_2_10-bytes2-bytes10-[`++pack_2_10++`]]
  6058. :pack_2_20-bytes2-bytes20: pass:normal[xref:#Packing-pack_2_20-bytes2-bytes20-[`++pack_2_20++`]]
  6059. :pack_2_22-bytes2-bytes22: pass:normal[xref:#Packing-pack_2_22-bytes2-bytes22-[`++pack_2_22++`]]
  6060. :pack_4_2-bytes4-bytes2: pass:normal[xref:#Packing-pack_4_2-bytes4-bytes2-[`++pack_4_2++`]]
  6061. :pack_4_4-bytes4-bytes4: pass:normal[xref:#Packing-pack_4_4-bytes4-bytes4-[`++pack_4_4++`]]
  6062. :pack_4_6-bytes4-bytes6: pass:normal[xref:#Packing-pack_4_6-bytes4-bytes6-[`++pack_4_6++`]]
  6063. :pack_4_8-bytes4-bytes8: pass:normal[xref:#Packing-pack_4_8-bytes4-bytes8-[`++pack_4_8++`]]
  6064. :pack_4_12-bytes4-bytes12: pass:normal[xref:#Packing-pack_4_12-bytes4-bytes12-[`++pack_4_12++`]]
  6065. :pack_4_16-bytes4-bytes16: pass:normal[xref:#Packing-pack_4_16-bytes4-bytes16-[`++pack_4_16++`]]
  6066. :pack_4_20-bytes4-bytes20: pass:normal[xref:#Packing-pack_4_20-bytes4-bytes20-[`++pack_4_20++`]]
  6067. :pack_4_24-bytes4-bytes24: pass:normal[xref:#Packing-pack_4_24-bytes4-bytes24-[`++pack_4_24++`]]
  6068. :pack_4_28-bytes4-bytes28: pass:normal[xref:#Packing-pack_4_28-bytes4-bytes28-[`++pack_4_28++`]]
  6069. :pack_6_2-bytes6-bytes2: pass:normal[xref:#Packing-pack_6_2-bytes6-bytes2-[`++pack_6_2++`]]
  6070. :pack_6_4-bytes6-bytes4: pass:normal[xref:#Packing-pack_6_4-bytes6-bytes4-[`++pack_6_4++`]]
  6071. :pack_6_6-bytes6-bytes6: pass:normal[xref:#Packing-pack_6_6-bytes6-bytes6-[`++pack_6_6++`]]
  6072. :pack_6_10-bytes6-bytes10: pass:normal[xref:#Packing-pack_6_10-bytes6-bytes10-[`++pack_6_10++`]]
  6073. :pack_6_16-bytes6-bytes16: pass:normal[xref:#Packing-pack_6_16-bytes6-bytes16-[`++pack_6_16++`]]
  6074. :pack_6_22-bytes6-bytes22: pass:normal[xref:#Packing-pack_6_22-bytes6-bytes22-[`++pack_6_22++`]]
  6075. :pack_8_2-bytes8-bytes2: pass:normal[xref:#Packing-pack_8_2-bytes8-bytes2-[`++pack_8_2++`]]
  6076. :pack_8_4-bytes8-bytes4: pass:normal[xref:#Packing-pack_8_4-bytes8-bytes4-[`++pack_8_4++`]]
  6077. :pack_8_8-bytes8-bytes8: pass:normal[xref:#Packing-pack_8_8-bytes8-bytes8-[`++pack_8_8++`]]
  6078. :pack_8_12-bytes8-bytes12: pass:normal[xref:#Packing-pack_8_12-bytes8-bytes12-[`++pack_8_12++`]]
  6079. :pack_8_16-bytes8-bytes16: pass:normal[xref:#Packing-pack_8_16-bytes8-bytes16-[`++pack_8_16++`]]
  6080. :pack_8_20-bytes8-bytes20: pass:normal[xref:#Packing-pack_8_20-bytes8-bytes20-[`++pack_8_20++`]]
  6081. :pack_8_24-bytes8-bytes24: pass:normal[xref:#Packing-pack_8_24-bytes8-bytes24-[`++pack_8_24++`]]
  6082. :pack_10_2-bytes10-bytes2: pass:normal[xref:#Packing-pack_10_2-bytes10-bytes2-[`++pack_10_2++`]]
  6083. :pack_10_6-bytes10-bytes6: pass:normal[xref:#Packing-pack_10_6-bytes10-bytes6-[`++pack_10_6++`]]
  6084. :pack_10_10-bytes10-bytes10: pass:normal[xref:#Packing-pack_10_10-bytes10-bytes10-[`++pack_10_10++`]]
  6085. :pack_10_12-bytes10-bytes12: pass:normal[xref:#Packing-pack_10_12-bytes10-bytes12-[`++pack_10_12++`]]
  6086. :pack_10_22-bytes10-bytes22: pass:normal[xref:#Packing-pack_10_22-bytes10-bytes22-[`++pack_10_22++`]]
  6087. :pack_12_4-bytes12-bytes4: pass:normal[xref:#Packing-pack_12_4-bytes12-bytes4-[`++pack_12_4++`]]
  6088. :pack_12_8-bytes12-bytes8: pass:normal[xref:#Packing-pack_12_8-bytes12-bytes8-[`++pack_12_8++`]]
  6089. :pack_12_10-bytes12-bytes10: pass:normal[xref:#Packing-pack_12_10-bytes12-bytes10-[`++pack_12_10++`]]
  6090. :pack_12_12-bytes12-bytes12: pass:normal[xref:#Packing-pack_12_12-bytes12-bytes12-[`++pack_12_12++`]]
  6091. :pack_12_16-bytes12-bytes16: pass:normal[xref:#Packing-pack_12_16-bytes12-bytes16-[`++pack_12_16++`]]
  6092. :pack_12_20-bytes12-bytes20: pass:normal[xref:#Packing-pack_12_20-bytes12-bytes20-[`++pack_12_20++`]]
  6093. :pack_16_4-bytes16-bytes4: pass:normal[xref:#Packing-pack_16_4-bytes16-bytes4-[`++pack_16_4++`]]
  6094. :pack_16_6-bytes16-bytes6: pass:normal[xref:#Packing-pack_16_6-bytes16-bytes6-[`++pack_16_6++`]]
  6095. :pack_16_8-bytes16-bytes8: pass:normal[xref:#Packing-pack_16_8-bytes16-bytes8-[`++pack_16_8++`]]
  6096. :pack_16_12-bytes16-bytes12: pass:normal[xref:#Packing-pack_16_12-bytes16-bytes12-[`++pack_16_12++`]]
  6097. :pack_16_16-bytes16-bytes16: pass:normal[xref:#Packing-pack_16_16-bytes16-bytes16-[`++pack_16_16++`]]
  6098. :pack_20_2-bytes20-bytes2: pass:normal[xref:#Packing-pack_20_2-bytes20-bytes2-[`++pack_20_2++`]]
  6099. :pack_20_4-bytes20-bytes4: pass:normal[xref:#Packing-pack_20_4-bytes20-bytes4-[`++pack_20_4++`]]
  6100. :pack_20_8-bytes20-bytes8: pass:normal[xref:#Packing-pack_20_8-bytes20-bytes8-[`++pack_20_8++`]]
  6101. :pack_20_12-bytes20-bytes12: pass:normal[xref:#Packing-pack_20_12-bytes20-bytes12-[`++pack_20_12++`]]
  6102. :pack_22_2-bytes22-bytes2: pass:normal[xref:#Packing-pack_22_2-bytes22-bytes2-[`++pack_22_2++`]]
  6103. :pack_22_6-bytes22-bytes6: pass:normal[xref:#Packing-pack_22_6-bytes22-bytes6-[`++pack_22_6++`]]
  6104. :pack_22_10-bytes22-bytes10: pass:normal[xref:#Packing-pack_22_10-bytes22-bytes10-[`++pack_22_10++`]]
  6105. :pack_24_4-bytes24-bytes4: pass:normal[xref:#Packing-pack_24_4-bytes24-bytes4-[`++pack_24_4++`]]
  6106. :pack_24_8-bytes24-bytes8: pass:normal[xref:#Packing-pack_24_8-bytes24-bytes8-[`++pack_24_8++`]]
  6107. :pack_28_4-bytes28-bytes4: pass:normal[xref:#Packing-pack_28_4-bytes28-bytes4-[`++pack_28_4++`]]
  6108. :extract_2_1-bytes2-uint8: pass:normal[xref:#Packing-extract_2_1-bytes2-uint8-[`++extract_2_1++`]]
  6109. :replace_2_1-bytes2-bytes1-uint8: pass:normal[xref:#Packing-replace_2_1-bytes2-bytes1-uint8-[`++replace_2_1++`]]
  6110. :extract_4_1-bytes4-uint8: pass:normal[xref:#Packing-extract_4_1-bytes4-uint8-[`++extract_4_1++`]]
  6111. :replace_4_1-bytes4-bytes1-uint8: pass:normal[xref:#Packing-replace_4_1-bytes4-bytes1-uint8-[`++replace_4_1++`]]
  6112. :extract_4_2-bytes4-uint8: pass:normal[xref:#Packing-extract_4_2-bytes4-uint8-[`++extract_4_2++`]]
  6113. :replace_4_2-bytes4-bytes2-uint8: pass:normal[xref:#Packing-replace_4_2-bytes4-bytes2-uint8-[`++replace_4_2++`]]
  6114. :extract_6_1-bytes6-uint8: pass:normal[xref:#Packing-extract_6_1-bytes6-uint8-[`++extract_6_1++`]]
  6115. :replace_6_1-bytes6-bytes1-uint8: pass:normal[xref:#Packing-replace_6_1-bytes6-bytes1-uint8-[`++replace_6_1++`]]
  6116. :extract_6_2-bytes6-uint8: pass:normal[xref:#Packing-extract_6_2-bytes6-uint8-[`++extract_6_2++`]]
  6117. :replace_6_2-bytes6-bytes2-uint8: pass:normal[xref:#Packing-replace_6_2-bytes6-bytes2-uint8-[`++replace_6_2++`]]
  6118. :extract_6_4-bytes6-uint8: pass:normal[xref:#Packing-extract_6_4-bytes6-uint8-[`++extract_6_4++`]]
  6119. :replace_6_4-bytes6-bytes4-uint8: pass:normal[xref:#Packing-replace_6_4-bytes6-bytes4-uint8-[`++replace_6_4++`]]
  6120. :extract_8_1-bytes8-uint8: pass:normal[xref:#Packing-extract_8_1-bytes8-uint8-[`++extract_8_1++`]]
  6121. :replace_8_1-bytes8-bytes1-uint8: pass:normal[xref:#Packing-replace_8_1-bytes8-bytes1-uint8-[`++replace_8_1++`]]
  6122. :extract_8_2-bytes8-uint8: pass:normal[xref:#Packing-extract_8_2-bytes8-uint8-[`++extract_8_2++`]]
  6123. :replace_8_2-bytes8-bytes2-uint8: pass:normal[xref:#Packing-replace_8_2-bytes8-bytes2-uint8-[`++replace_8_2++`]]
  6124. :extract_8_4-bytes8-uint8: pass:normal[xref:#Packing-extract_8_4-bytes8-uint8-[`++extract_8_4++`]]
  6125. :replace_8_4-bytes8-bytes4-uint8: pass:normal[xref:#Packing-replace_8_4-bytes8-bytes4-uint8-[`++replace_8_4++`]]
  6126. :extract_8_6-bytes8-uint8: pass:normal[xref:#Packing-extract_8_6-bytes8-uint8-[`++extract_8_6++`]]
  6127. :replace_8_6-bytes8-bytes6-uint8: pass:normal[xref:#Packing-replace_8_6-bytes8-bytes6-uint8-[`++replace_8_6++`]]
  6128. :extract_10_1-bytes10-uint8: pass:normal[xref:#Packing-extract_10_1-bytes10-uint8-[`++extract_10_1++`]]
  6129. :replace_10_1-bytes10-bytes1-uint8: pass:normal[xref:#Packing-replace_10_1-bytes10-bytes1-uint8-[`++replace_10_1++`]]
  6130. :extract_10_2-bytes10-uint8: pass:normal[xref:#Packing-extract_10_2-bytes10-uint8-[`++extract_10_2++`]]
  6131. :replace_10_2-bytes10-bytes2-uint8: pass:normal[xref:#Packing-replace_10_2-bytes10-bytes2-uint8-[`++replace_10_2++`]]
  6132. :extract_10_4-bytes10-uint8: pass:normal[xref:#Packing-extract_10_4-bytes10-uint8-[`++extract_10_4++`]]
  6133. :replace_10_4-bytes10-bytes4-uint8: pass:normal[xref:#Packing-replace_10_4-bytes10-bytes4-uint8-[`++replace_10_4++`]]
  6134. :extract_10_6-bytes10-uint8: pass:normal[xref:#Packing-extract_10_6-bytes10-uint8-[`++extract_10_6++`]]
  6135. :replace_10_6-bytes10-bytes6-uint8: pass:normal[xref:#Packing-replace_10_6-bytes10-bytes6-uint8-[`++replace_10_6++`]]
  6136. :extract_10_8-bytes10-uint8: pass:normal[xref:#Packing-extract_10_8-bytes10-uint8-[`++extract_10_8++`]]
  6137. :replace_10_8-bytes10-bytes8-uint8: pass:normal[xref:#Packing-replace_10_8-bytes10-bytes8-uint8-[`++replace_10_8++`]]
  6138. :extract_12_1-bytes12-uint8: pass:normal[xref:#Packing-extract_12_1-bytes12-uint8-[`++extract_12_1++`]]
  6139. :replace_12_1-bytes12-bytes1-uint8: pass:normal[xref:#Packing-replace_12_1-bytes12-bytes1-uint8-[`++replace_12_1++`]]
  6140. :extract_12_2-bytes12-uint8: pass:normal[xref:#Packing-extract_12_2-bytes12-uint8-[`++extract_12_2++`]]
  6141. :replace_12_2-bytes12-bytes2-uint8: pass:normal[xref:#Packing-replace_12_2-bytes12-bytes2-uint8-[`++replace_12_2++`]]
  6142. :extract_12_4-bytes12-uint8: pass:normal[xref:#Packing-extract_12_4-bytes12-uint8-[`++extract_12_4++`]]
  6143. :replace_12_4-bytes12-bytes4-uint8: pass:normal[xref:#Packing-replace_12_4-bytes12-bytes4-uint8-[`++replace_12_4++`]]
  6144. :extract_12_6-bytes12-uint8: pass:normal[xref:#Packing-extract_12_6-bytes12-uint8-[`++extract_12_6++`]]
  6145. :replace_12_6-bytes12-bytes6-uint8: pass:normal[xref:#Packing-replace_12_6-bytes12-bytes6-uint8-[`++replace_12_6++`]]
  6146. :extract_12_8-bytes12-uint8: pass:normal[xref:#Packing-extract_12_8-bytes12-uint8-[`++extract_12_8++`]]
  6147. :replace_12_8-bytes12-bytes8-uint8: pass:normal[xref:#Packing-replace_12_8-bytes12-bytes8-uint8-[`++replace_12_8++`]]
  6148. :extract_12_10-bytes12-uint8: pass:normal[xref:#Packing-extract_12_10-bytes12-uint8-[`++extract_12_10++`]]
  6149. :replace_12_10-bytes12-bytes10-uint8: pass:normal[xref:#Packing-replace_12_10-bytes12-bytes10-uint8-[`++replace_12_10++`]]
  6150. :extract_16_1-bytes16-uint8: pass:normal[xref:#Packing-extract_16_1-bytes16-uint8-[`++extract_16_1++`]]
  6151. :replace_16_1-bytes16-bytes1-uint8: pass:normal[xref:#Packing-replace_16_1-bytes16-bytes1-uint8-[`++replace_16_1++`]]
  6152. :extract_16_2-bytes16-uint8: pass:normal[xref:#Packing-extract_16_2-bytes16-uint8-[`++extract_16_2++`]]
  6153. :replace_16_2-bytes16-bytes2-uint8: pass:normal[xref:#Packing-replace_16_2-bytes16-bytes2-uint8-[`++replace_16_2++`]]
  6154. :extract_16_4-bytes16-uint8: pass:normal[xref:#Packing-extract_16_4-bytes16-uint8-[`++extract_16_4++`]]
  6155. :replace_16_4-bytes16-bytes4-uint8: pass:normal[xref:#Packing-replace_16_4-bytes16-bytes4-uint8-[`++replace_16_4++`]]
  6156. :extract_16_6-bytes16-uint8: pass:normal[xref:#Packing-extract_16_6-bytes16-uint8-[`++extract_16_6++`]]
  6157. :replace_16_6-bytes16-bytes6-uint8: pass:normal[xref:#Packing-replace_16_6-bytes16-bytes6-uint8-[`++replace_16_6++`]]
  6158. :extract_16_8-bytes16-uint8: pass:normal[xref:#Packing-extract_16_8-bytes16-uint8-[`++extract_16_8++`]]
  6159. :replace_16_8-bytes16-bytes8-uint8: pass:normal[xref:#Packing-replace_16_8-bytes16-bytes8-uint8-[`++replace_16_8++`]]
  6160. :extract_16_10-bytes16-uint8: pass:normal[xref:#Packing-extract_16_10-bytes16-uint8-[`++extract_16_10++`]]
  6161. :replace_16_10-bytes16-bytes10-uint8: pass:normal[xref:#Packing-replace_16_10-bytes16-bytes10-uint8-[`++replace_16_10++`]]
  6162. :extract_16_12-bytes16-uint8: pass:normal[xref:#Packing-extract_16_12-bytes16-uint8-[`++extract_16_12++`]]
  6163. :replace_16_12-bytes16-bytes12-uint8: pass:normal[xref:#Packing-replace_16_12-bytes16-bytes12-uint8-[`++replace_16_12++`]]
  6164. :extract_20_1-bytes20-uint8: pass:normal[xref:#Packing-extract_20_1-bytes20-uint8-[`++extract_20_1++`]]
  6165. :replace_20_1-bytes20-bytes1-uint8: pass:normal[xref:#Packing-replace_20_1-bytes20-bytes1-uint8-[`++replace_20_1++`]]
  6166. :extract_20_2-bytes20-uint8: pass:normal[xref:#Packing-extract_20_2-bytes20-uint8-[`++extract_20_2++`]]
  6167. :replace_20_2-bytes20-bytes2-uint8: pass:normal[xref:#Packing-replace_20_2-bytes20-bytes2-uint8-[`++replace_20_2++`]]
  6168. :extract_20_4-bytes20-uint8: pass:normal[xref:#Packing-extract_20_4-bytes20-uint8-[`++extract_20_4++`]]
  6169. :replace_20_4-bytes20-bytes4-uint8: pass:normal[xref:#Packing-replace_20_4-bytes20-bytes4-uint8-[`++replace_20_4++`]]
  6170. :extract_20_6-bytes20-uint8: pass:normal[xref:#Packing-extract_20_6-bytes20-uint8-[`++extract_20_6++`]]
  6171. :replace_20_6-bytes20-bytes6-uint8: pass:normal[xref:#Packing-replace_20_6-bytes20-bytes6-uint8-[`++replace_20_6++`]]
  6172. :extract_20_8-bytes20-uint8: pass:normal[xref:#Packing-extract_20_8-bytes20-uint8-[`++extract_20_8++`]]
  6173. :replace_20_8-bytes20-bytes8-uint8: pass:normal[xref:#Packing-replace_20_8-bytes20-bytes8-uint8-[`++replace_20_8++`]]
  6174. :extract_20_10-bytes20-uint8: pass:normal[xref:#Packing-extract_20_10-bytes20-uint8-[`++extract_20_10++`]]
  6175. :replace_20_10-bytes20-bytes10-uint8: pass:normal[xref:#Packing-replace_20_10-bytes20-bytes10-uint8-[`++replace_20_10++`]]
  6176. :extract_20_12-bytes20-uint8: pass:normal[xref:#Packing-extract_20_12-bytes20-uint8-[`++extract_20_12++`]]
  6177. :replace_20_12-bytes20-bytes12-uint8: pass:normal[xref:#Packing-replace_20_12-bytes20-bytes12-uint8-[`++replace_20_12++`]]
  6178. :extract_20_16-bytes20-uint8: pass:normal[xref:#Packing-extract_20_16-bytes20-uint8-[`++extract_20_16++`]]
  6179. :replace_20_16-bytes20-bytes16-uint8: pass:normal[xref:#Packing-replace_20_16-bytes20-bytes16-uint8-[`++replace_20_16++`]]
  6180. :extract_22_1-bytes22-uint8: pass:normal[xref:#Packing-extract_22_1-bytes22-uint8-[`++extract_22_1++`]]
  6181. :replace_22_1-bytes22-bytes1-uint8: pass:normal[xref:#Packing-replace_22_1-bytes22-bytes1-uint8-[`++replace_22_1++`]]
  6182. :extract_22_2-bytes22-uint8: pass:normal[xref:#Packing-extract_22_2-bytes22-uint8-[`++extract_22_2++`]]
  6183. :replace_22_2-bytes22-bytes2-uint8: pass:normal[xref:#Packing-replace_22_2-bytes22-bytes2-uint8-[`++replace_22_2++`]]
  6184. :extract_22_4-bytes22-uint8: pass:normal[xref:#Packing-extract_22_4-bytes22-uint8-[`++extract_22_4++`]]
  6185. :replace_22_4-bytes22-bytes4-uint8: pass:normal[xref:#Packing-replace_22_4-bytes22-bytes4-uint8-[`++replace_22_4++`]]
  6186. :extract_22_6-bytes22-uint8: pass:normal[xref:#Packing-extract_22_6-bytes22-uint8-[`++extract_22_6++`]]
  6187. :replace_22_6-bytes22-bytes6-uint8: pass:normal[xref:#Packing-replace_22_6-bytes22-bytes6-uint8-[`++replace_22_6++`]]
  6188. :extract_22_8-bytes22-uint8: pass:normal[xref:#Packing-extract_22_8-bytes22-uint8-[`++extract_22_8++`]]
  6189. :replace_22_8-bytes22-bytes8-uint8: pass:normal[xref:#Packing-replace_22_8-bytes22-bytes8-uint8-[`++replace_22_8++`]]
  6190. :extract_22_10-bytes22-uint8: pass:normal[xref:#Packing-extract_22_10-bytes22-uint8-[`++extract_22_10++`]]
  6191. :replace_22_10-bytes22-bytes10-uint8: pass:normal[xref:#Packing-replace_22_10-bytes22-bytes10-uint8-[`++replace_22_10++`]]
  6192. :extract_22_12-bytes22-uint8: pass:normal[xref:#Packing-extract_22_12-bytes22-uint8-[`++extract_22_12++`]]
  6193. :replace_22_12-bytes22-bytes12-uint8: pass:normal[xref:#Packing-replace_22_12-bytes22-bytes12-uint8-[`++replace_22_12++`]]
  6194. :extract_22_16-bytes22-uint8: pass:normal[xref:#Packing-extract_22_16-bytes22-uint8-[`++extract_22_16++`]]
  6195. :replace_22_16-bytes22-bytes16-uint8: pass:normal[xref:#Packing-replace_22_16-bytes22-bytes16-uint8-[`++replace_22_16++`]]
  6196. :extract_22_20-bytes22-uint8: pass:normal[xref:#Packing-extract_22_20-bytes22-uint8-[`++extract_22_20++`]]
  6197. :replace_22_20-bytes22-bytes20-uint8: pass:normal[xref:#Packing-replace_22_20-bytes22-bytes20-uint8-[`++replace_22_20++`]]
  6198. :extract_24_1-bytes24-uint8: pass:normal[xref:#Packing-extract_24_1-bytes24-uint8-[`++extract_24_1++`]]
  6199. :replace_24_1-bytes24-bytes1-uint8: pass:normal[xref:#Packing-replace_24_1-bytes24-bytes1-uint8-[`++replace_24_1++`]]
  6200. :extract_24_2-bytes24-uint8: pass:normal[xref:#Packing-extract_24_2-bytes24-uint8-[`++extract_24_2++`]]
  6201. :replace_24_2-bytes24-bytes2-uint8: pass:normal[xref:#Packing-replace_24_2-bytes24-bytes2-uint8-[`++replace_24_2++`]]
  6202. :extract_24_4-bytes24-uint8: pass:normal[xref:#Packing-extract_24_4-bytes24-uint8-[`++extract_24_4++`]]
  6203. :replace_24_4-bytes24-bytes4-uint8: pass:normal[xref:#Packing-replace_24_4-bytes24-bytes4-uint8-[`++replace_24_4++`]]
  6204. :extract_24_6-bytes24-uint8: pass:normal[xref:#Packing-extract_24_6-bytes24-uint8-[`++extract_24_6++`]]
  6205. :replace_24_6-bytes24-bytes6-uint8: pass:normal[xref:#Packing-replace_24_6-bytes24-bytes6-uint8-[`++replace_24_6++`]]
  6206. :extract_24_8-bytes24-uint8: pass:normal[xref:#Packing-extract_24_8-bytes24-uint8-[`++extract_24_8++`]]
  6207. :replace_24_8-bytes24-bytes8-uint8: pass:normal[xref:#Packing-replace_24_8-bytes24-bytes8-uint8-[`++replace_24_8++`]]
  6208. :extract_24_10-bytes24-uint8: pass:normal[xref:#Packing-extract_24_10-bytes24-uint8-[`++extract_24_10++`]]
  6209. :replace_24_10-bytes24-bytes10-uint8: pass:normal[xref:#Packing-replace_24_10-bytes24-bytes10-uint8-[`++replace_24_10++`]]
  6210. :extract_24_12-bytes24-uint8: pass:normal[xref:#Packing-extract_24_12-bytes24-uint8-[`++extract_24_12++`]]
  6211. :replace_24_12-bytes24-bytes12-uint8: pass:normal[xref:#Packing-replace_24_12-bytes24-bytes12-uint8-[`++replace_24_12++`]]
  6212. :extract_24_16-bytes24-uint8: pass:normal[xref:#Packing-extract_24_16-bytes24-uint8-[`++extract_24_16++`]]
  6213. :replace_24_16-bytes24-bytes16-uint8: pass:normal[xref:#Packing-replace_24_16-bytes24-bytes16-uint8-[`++replace_24_16++`]]
  6214. :extract_24_20-bytes24-uint8: pass:normal[xref:#Packing-extract_24_20-bytes24-uint8-[`++extract_24_20++`]]
  6215. :replace_24_20-bytes24-bytes20-uint8: pass:normal[xref:#Packing-replace_24_20-bytes24-bytes20-uint8-[`++replace_24_20++`]]
  6216. :extract_24_22-bytes24-uint8: pass:normal[xref:#Packing-extract_24_22-bytes24-uint8-[`++extract_24_22++`]]
  6217. :replace_24_22-bytes24-bytes22-uint8: pass:normal[xref:#Packing-replace_24_22-bytes24-bytes22-uint8-[`++replace_24_22++`]]
  6218. :extract_28_1-bytes28-uint8: pass:normal[xref:#Packing-extract_28_1-bytes28-uint8-[`++extract_28_1++`]]
  6219. :replace_28_1-bytes28-bytes1-uint8: pass:normal[xref:#Packing-replace_28_1-bytes28-bytes1-uint8-[`++replace_28_1++`]]
  6220. :extract_28_2-bytes28-uint8: pass:normal[xref:#Packing-extract_28_2-bytes28-uint8-[`++extract_28_2++`]]
  6221. :replace_28_2-bytes28-bytes2-uint8: pass:normal[xref:#Packing-replace_28_2-bytes28-bytes2-uint8-[`++replace_28_2++`]]
  6222. :extract_28_4-bytes28-uint8: pass:normal[xref:#Packing-extract_28_4-bytes28-uint8-[`++extract_28_4++`]]
  6223. :replace_28_4-bytes28-bytes4-uint8: pass:normal[xref:#Packing-replace_28_4-bytes28-bytes4-uint8-[`++replace_28_4++`]]
  6224. :extract_28_6-bytes28-uint8: pass:normal[xref:#Packing-extract_28_6-bytes28-uint8-[`++extract_28_6++`]]
  6225. :replace_28_6-bytes28-bytes6-uint8: pass:normal[xref:#Packing-replace_28_6-bytes28-bytes6-uint8-[`++replace_28_6++`]]
  6226. :extract_28_8-bytes28-uint8: pass:normal[xref:#Packing-extract_28_8-bytes28-uint8-[`++extract_28_8++`]]
  6227. :replace_28_8-bytes28-bytes8-uint8: pass:normal[xref:#Packing-replace_28_8-bytes28-bytes8-uint8-[`++replace_28_8++`]]
  6228. :extract_28_10-bytes28-uint8: pass:normal[xref:#Packing-extract_28_10-bytes28-uint8-[`++extract_28_10++`]]
  6229. :replace_28_10-bytes28-bytes10-uint8: pass:normal[xref:#Packing-replace_28_10-bytes28-bytes10-uint8-[`++replace_28_10++`]]
  6230. :extract_28_12-bytes28-uint8: pass:normal[xref:#Packing-extract_28_12-bytes28-uint8-[`++extract_28_12++`]]
  6231. :replace_28_12-bytes28-bytes12-uint8: pass:normal[xref:#Packing-replace_28_12-bytes28-bytes12-uint8-[`++replace_28_12++`]]
  6232. :extract_28_16-bytes28-uint8: pass:normal[xref:#Packing-extract_28_16-bytes28-uint8-[`++extract_28_16++`]]
  6233. :replace_28_16-bytes28-bytes16-uint8: pass:normal[xref:#Packing-replace_28_16-bytes28-bytes16-uint8-[`++replace_28_16++`]]
  6234. :extract_28_20-bytes28-uint8: pass:normal[xref:#Packing-extract_28_20-bytes28-uint8-[`++extract_28_20++`]]
  6235. :replace_28_20-bytes28-bytes20-uint8: pass:normal[xref:#Packing-replace_28_20-bytes28-bytes20-uint8-[`++replace_28_20++`]]
  6236. :extract_28_22-bytes28-uint8: pass:normal[xref:#Packing-extract_28_22-bytes28-uint8-[`++extract_28_22++`]]
  6237. :replace_28_22-bytes28-bytes22-uint8: pass:normal[xref:#Packing-replace_28_22-bytes28-bytes22-uint8-[`++replace_28_22++`]]
  6238. :extract_28_24-bytes28-uint8: pass:normal[xref:#Packing-extract_28_24-bytes28-uint8-[`++extract_28_24++`]]
  6239. :replace_28_24-bytes28-bytes24-uint8: pass:normal[xref:#Packing-replace_28_24-bytes28-bytes24-uint8-[`++replace_28_24++`]]
  6240. :extract_32_1-bytes32-uint8: pass:normal[xref:#Packing-extract_32_1-bytes32-uint8-[`++extract_32_1++`]]
  6241. :replace_32_1-bytes32-bytes1-uint8: pass:normal[xref:#Packing-replace_32_1-bytes32-bytes1-uint8-[`++replace_32_1++`]]
  6242. :extract_32_2-bytes32-uint8: pass:normal[xref:#Packing-extract_32_2-bytes32-uint8-[`++extract_32_2++`]]
  6243. :replace_32_2-bytes32-bytes2-uint8: pass:normal[xref:#Packing-replace_32_2-bytes32-bytes2-uint8-[`++replace_32_2++`]]
  6244. :extract_32_4-bytes32-uint8: pass:normal[xref:#Packing-extract_32_4-bytes32-uint8-[`++extract_32_4++`]]
  6245. :replace_32_4-bytes32-bytes4-uint8: pass:normal[xref:#Packing-replace_32_4-bytes32-bytes4-uint8-[`++replace_32_4++`]]
  6246. :extract_32_6-bytes32-uint8: pass:normal[xref:#Packing-extract_32_6-bytes32-uint8-[`++extract_32_6++`]]
  6247. :replace_32_6-bytes32-bytes6-uint8: pass:normal[xref:#Packing-replace_32_6-bytes32-bytes6-uint8-[`++replace_32_6++`]]
  6248. :extract_32_8-bytes32-uint8: pass:normal[xref:#Packing-extract_32_8-bytes32-uint8-[`++extract_32_8++`]]
  6249. :replace_32_8-bytes32-bytes8-uint8: pass:normal[xref:#Packing-replace_32_8-bytes32-bytes8-uint8-[`++replace_32_8++`]]
  6250. :extract_32_10-bytes32-uint8: pass:normal[xref:#Packing-extract_32_10-bytes32-uint8-[`++extract_32_10++`]]
  6251. :replace_32_10-bytes32-bytes10-uint8: pass:normal[xref:#Packing-replace_32_10-bytes32-bytes10-uint8-[`++replace_32_10++`]]
  6252. :extract_32_12-bytes32-uint8: pass:normal[xref:#Packing-extract_32_12-bytes32-uint8-[`++extract_32_12++`]]
  6253. :replace_32_12-bytes32-bytes12-uint8: pass:normal[xref:#Packing-replace_32_12-bytes32-bytes12-uint8-[`++replace_32_12++`]]
  6254. :extract_32_16-bytes32-uint8: pass:normal[xref:#Packing-extract_32_16-bytes32-uint8-[`++extract_32_16++`]]
  6255. :replace_32_16-bytes32-bytes16-uint8: pass:normal[xref:#Packing-replace_32_16-bytes32-bytes16-uint8-[`++replace_32_16++`]]
  6256. :extract_32_20-bytes32-uint8: pass:normal[xref:#Packing-extract_32_20-bytes32-uint8-[`++extract_32_20++`]]
  6257. :replace_32_20-bytes32-bytes20-uint8: pass:normal[xref:#Packing-replace_32_20-bytes32-bytes20-uint8-[`++replace_32_20++`]]
  6258. :extract_32_22-bytes32-uint8: pass:normal[xref:#Packing-extract_32_22-bytes32-uint8-[`++extract_32_22++`]]
  6259. :replace_32_22-bytes32-bytes22-uint8: pass:normal[xref:#Packing-replace_32_22-bytes32-bytes22-uint8-[`++replace_32_22++`]]
  6260. :extract_32_24-bytes32-uint8: pass:normal[xref:#Packing-extract_32_24-bytes32-uint8-[`++extract_32_24++`]]
  6261. :replace_32_24-bytes32-bytes24-uint8: pass:normal[xref:#Packing-replace_32_24-bytes32-bytes24-uint8-[`++replace_32_24++`]]
  6262. :extract_32_28-bytes32-uint8: pass:normal[xref:#Packing-extract_32_28-bytes32-uint8-[`++extract_32_28++`]]
  6263. :replace_32_28-bytes32-bytes28-uint8: pass:normal[xref:#Packing-replace_32_28-bytes32-bytes28-uint8-[`++replace_32_28++`]]
  6264. [.contract]
  6265. [[Packing]]
  6266. === `++Packing++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/Packing.sol[{github-icon},role=heading-link]
  6267. [.hljs-theme-light.nopadding]
  6268. ```solidity
  6269. import "@openzeppelin/contracts/utils/Packing.sol";
  6270. ```
  6271. Helper library packing and unpacking multiple values into bytesXX.
  6272. Example usage:
  6273. ```solidity
  6274. library MyPacker {
  6275. type MyType is bytes32;
  6276. function _pack(address account, bytes4 selector, uint64 period) external pure returns (MyType) {
  6277. bytes12 subpack = Packing.pack_4_8(selector, bytes8(period));
  6278. bytes32 pack = Packing.pack_20_12(bytes20(account), subpack);
  6279. return MyType.wrap(pack);
  6280. }
  6281. function _unpack(MyType self) external pure returns (address, bytes4, uint64) {
  6282. bytes32 pack = MyType.unwrap(self);
  6283. return (
  6284. address(Packing.extract_32_20(pack, 0)),
  6285. Packing.extract_32_4(pack, 20),
  6286. uint64(Packing.extract_32_8(pack, 24))
  6287. );
  6288. }
  6289. }
  6290. ```
  6291. _Available since v5.1._
  6292. [.contract-index]
  6293. .Functions
  6294. --
  6295. * {xref-Packing-pack_1_1-bytes1-bytes1-}[`++pack_1_1(left, right)++`]
  6296. * {xref-Packing-pack_2_2-bytes2-bytes2-}[`++pack_2_2(left, right)++`]
  6297. * {xref-Packing-pack_2_4-bytes2-bytes4-}[`++pack_2_4(left, right)++`]
  6298. * {xref-Packing-pack_2_6-bytes2-bytes6-}[`++pack_2_6(left, right)++`]
  6299. * {xref-Packing-pack_2_8-bytes2-bytes8-}[`++pack_2_8(left, right)++`]
  6300. * {xref-Packing-pack_2_10-bytes2-bytes10-}[`++pack_2_10(left, right)++`]
  6301. * {xref-Packing-pack_2_20-bytes2-bytes20-}[`++pack_2_20(left, right)++`]
  6302. * {xref-Packing-pack_2_22-bytes2-bytes22-}[`++pack_2_22(left, right)++`]
  6303. * {xref-Packing-pack_4_2-bytes4-bytes2-}[`++pack_4_2(left, right)++`]
  6304. * {xref-Packing-pack_4_4-bytes4-bytes4-}[`++pack_4_4(left, right)++`]
  6305. * {xref-Packing-pack_4_6-bytes4-bytes6-}[`++pack_4_6(left, right)++`]
  6306. * {xref-Packing-pack_4_8-bytes4-bytes8-}[`++pack_4_8(left, right)++`]
  6307. * {xref-Packing-pack_4_12-bytes4-bytes12-}[`++pack_4_12(left, right)++`]
  6308. * {xref-Packing-pack_4_16-bytes4-bytes16-}[`++pack_4_16(left, right)++`]
  6309. * {xref-Packing-pack_4_20-bytes4-bytes20-}[`++pack_4_20(left, right)++`]
  6310. * {xref-Packing-pack_4_24-bytes4-bytes24-}[`++pack_4_24(left, right)++`]
  6311. * {xref-Packing-pack_4_28-bytes4-bytes28-}[`++pack_4_28(left, right)++`]
  6312. * {xref-Packing-pack_6_2-bytes6-bytes2-}[`++pack_6_2(left, right)++`]
  6313. * {xref-Packing-pack_6_4-bytes6-bytes4-}[`++pack_6_4(left, right)++`]
  6314. * {xref-Packing-pack_6_6-bytes6-bytes6-}[`++pack_6_6(left, right)++`]
  6315. * {xref-Packing-pack_6_10-bytes6-bytes10-}[`++pack_6_10(left, right)++`]
  6316. * {xref-Packing-pack_6_16-bytes6-bytes16-}[`++pack_6_16(left, right)++`]
  6317. * {xref-Packing-pack_6_22-bytes6-bytes22-}[`++pack_6_22(left, right)++`]
  6318. * {xref-Packing-pack_8_2-bytes8-bytes2-}[`++pack_8_2(left, right)++`]
  6319. * {xref-Packing-pack_8_4-bytes8-bytes4-}[`++pack_8_4(left, right)++`]
  6320. * {xref-Packing-pack_8_8-bytes8-bytes8-}[`++pack_8_8(left, right)++`]
  6321. * {xref-Packing-pack_8_12-bytes8-bytes12-}[`++pack_8_12(left, right)++`]
  6322. * {xref-Packing-pack_8_16-bytes8-bytes16-}[`++pack_8_16(left, right)++`]
  6323. * {xref-Packing-pack_8_20-bytes8-bytes20-}[`++pack_8_20(left, right)++`]
  6324. * {xref-Packing-pack_8_24-bytes8-bytes24-}[`++pack_8_24(left, right)++`]
  6325. * {xref-Packing-pack_10_2-bytes10-bytes2-}[`++pack_10_2(left, right)++`]
  6326. * {xref-Packing-pack_10_6-bytes10-bytes6-}[`++pack_10_6(left, right)++`]
  6327. * {xref-Packing-pack_10_10-bytes10-bytes10-}[`++pack_10_10(left, right)++`]
  6328. * {xref-Packing-pack_10_12-bytes10-bytes12-}[`++pack_10_12(left, right)++`]
  6329. * {xref-Packing-pack_10_22-bytes10-bytes22-}[`++pack_10_22(left, right)++`]
  6330. * {xref-Packing-pack_12_4-bytes12-bytes4-}[`++pack_12_4(left, right)++`]
  6331. * {xref-Packing-pack_12_8-bytes12-bytes8-}[`++pack_12_8(left, right)++`]
  6332. * {xref-Packing-pack_12_10-bytes12-bytes10-}[`++pack_12_10(left, right)++`]
  6333. * {xref-Packing-pack_12_12-bytes12-bytes12-}[`++pack_12_12(left, right)++`]
  6334. * {xref-Packing-pack_12_16-bytes12-bytes16-}[`++pack_12_16(left, right)++`]
  6335. * {xref-Packing-pack_12_20-bytes12-bytes20-}[`++pack_12_20(left, right)++`]
  6336. * {xref-Packing-pack_16_4-bytes16-bytes4-}[`++pack_16_4(left, right)++`]
  6337. * {xref-Packing-pack_16_6-bytes16-bytes6-}[`++pack_16_6(left, right)++`]
  6338. * {xref-Packing-pack_16_8-bytes16-bytes8-}[`++pack_16_8(left, right)++`]
  6339. * {xref-Packing-pack_16_12-bytes16-bytes12-}[`++pack_16_12(left, right)++`]
  6340. * {xref-Packing-pack_16_16-bytes16-bytes16-}[`++pack_16_16(left, right)++`]
  6341. * {xref-Packing-pack_20_2-bytes20-bytes2-}[`++pack_20_2(left, right)++`]
  6342. * {xref-Packing-pack_20_4-bytes20-bytes4-}[`++pack_20_4(left, right)++`]
  6343. * {xref-Packing-pack_20_8-bytes20-bytes8-}[`++pack_20_8(left, right)++`]
  6344. * {xref-Packing-pack_20_12-bytes20-bytes12-}[`++pack_20_12(left, right)++`]
  6345. * {xref-Packing-pack_22_2-bytes22-bytes2-}[`++pack_22_2(left, right)++`]
  6346. * {xref-Packing-pack_22_6-bytes22-bytes6-}[`++pack_22_6(left, right)++`]
  6347. * {xref-Packing-pack_22_10-bytes22-bytes10-}[`++pack_22_10(left, right)++`]
  6348. * {xref-Packing-pack_24_4-bytes24-bytes4-}[`++pack_24_4(left, right)++`]
  6349. * {xref-Packing-pack_24_8-bytes24-bytes8-}[`++pack_24_8(left, right)++`]
  6350. * {xref-Packing-pack_28_4-bytes28-bytes4-}[`++pack_28_4(left, right)++`]
  6351. * {xref-Packing-extract_2_1-bytes2-uint8-}[`++extract_2_1(self, offset)++`]
  6352. * {xref-Packing-replace_2_1-bytes2-bytes1-uint8-}[`++replace_2_1(self, value, offset)++`]
  6353. * {xref-Packing-extract_4_1-bytes4-uint8-}[`++extract_4_1(self, offset)++`]
  6354. * {xref-Packing-replace_4_1-bytes4-bytes1-uint8-}[`++replace_4_1(self, value, offset)++`]
  6355. * {xref-Packing-extract_4_2-bytes4-uint8-}[`++extract_4_2(self, offset)++`]
  6356. * {xref-Packing-replace_4_2-bytes4-bytes2-uint8-}[`++replace_4_2(self, value, offset)++`]
  6357. * {xref-Packing-extract_6_1-bytes6-uint8-}[`++extract_6_1(self, offset)++`]
  6358. * {xref-Packing-replace_6_1-bytes6-bytes1-uint8-}[`++replace_6_1(self, value, offset)++`]
  6359. * {xref-Packing-extract_6_2-bytes6-uint8-}[`++extract_6_2(self, offset)++`]
  6360. * {xref-Packing-replace_6_2-bytes6-bytes2-uint8-}[`++replace_6_2(self, value, offset)++`]
  6361. * {xref-Packing-extract_6_4-bytes6-uint8-}[`++extract_6_4(self, offset)++`]
  6362. * {xref-Packing-replace_6_4-bytes6-bytes4-uint8-}[`++replace_6_4(self, value, offset)++`]
  6363. * {xref-Packing-extract_8_1-bytes8-uint8-}[`++extract_8_1(self, offset)++`]
  6364. * {xref-Packing-replace_8_1-bytes8-bytes1-uint8-}[`++replace_8_1(self, value, offset)++`]
  6365. * {xref-Packing-extract_8_2-bytes8-uint8-}[`++extract_8_2(self, offset)++`]
  6366. * {xref-Packing-replace_8_2-bytes8-bytes2-uint8-}[`++replace_8_2(self, value, offset)++`]
  6367. * {xref-Packing-extract_8_4-bytes8-uint8-}[`++extract_8_4(self, offset)++`]
  6368. * {xref-Packing-replace_8_4-bytes8-bytes4-uint8-}[`++replace_8_4(self, value, offset)++`]
  6369. * {xref-Packing-extract_8_6-bytes8-uint8-}[`++extract_8_6(self, offset)++`]
  6370. * {xref-Packing-replace_8_6-bytes8-bytes6-uint8-}[`++replace_8_6(self, value, offset)++`]
  6371. * {xref-Packing-extract_10_1-bytes10-uint8-}[`++extract_10_1(self, offset)++`]
  6372. * {xref-Packing-replace_10_1-bytes10-bytes1-uint8-}[`++replace_10_1(self, value, offset)++`]
  6373. * {xref-Packing-extract_10_2-bytes10-uint8-}[`++extract_10_2(self, offset)++`]
  6374. * {xref-Packing-replace_10_2-bytes10-bytes2-uint8-}[`++replace_10_2(self, value, offset)++`]
  6375. * {xref-Packing-extract_10_4-bytes10-uint8-}[`++extract_10_4(self, offset)++`]
  6376. * {xref-Packing-replace_10_4-bytes10-bytes4-uint8-}[`++replace_10_4(self, value, offset)++`]
  6377. * {xref-Packing-extract_10_6-bytes10-uint8-}[`++extract_10_6(self, offset)++`]
  6378. * {xref-Packing-replace_10_6-bytes10-bytes6-uint8-}[`++replace_10_6(self, value, offset)++`]
  6379. * {xref-Packing-extract_10_8-bytes10-uint8-}[`++extract_10_8(self, offset)++`]
  6380. * {xref-Packing-replace_10_8-bytes10-bytes8-uint8-}[`++replace_10_8(self, value, offset)++`]
  6381. * {xref-Packing-extract_12_1-bytes12-uint8-}[`++extract_12_1(self, offset)++`]
  6382. * {xref-Packing-replace_12_1-bytes12-bytes1-uint8-}[`++replace_12_1(self, value, offset)++`]
  6383. * {xref-Packing-extract_12_2-bytes12-uint8-}[`++extract_12_2(self, offset)++`]
  6384. * {xref-Packing-replace_12_2-bytes12-bytes2-uint8-}[`++replace_12_2(self, value, offset)++`]
  6385. * {xref-Packing-extract_12_4-bytes12-uint8-}[`++extract_12_4(self, offset)++`]
  6386. * {xref-Packing-replace_12_4-bytes12-bytes4-uint8-}[`++replace_12_4(self, value, offset)++`]
  6387. * {xref-Packing-extract_12_6-bytes12-uint8-}[`++extract_12_6(self, offset)++`]
  6388. * {xref-Packing-replace_12_6-bytes12-bytes6-uint8-}[`++replace_12_6(self, value, offset)++`]
  6389. * {xref-Packing-extract_12_8-bytes12-uint8-}[`++extract_12_8(self, offset)++`]
  6390. * {xref-Packing-replace_12_8-bytes12-bytes8-uint8-}[`++replace_12_8(self, value, offset)++`]
  6391. * {xref-Packing-extract_12_10-bytes12-uint8-}[`++extract_12_10(self, offset)++`]
  6392. * {xref-Packing-replace_12_10-bytes12-bytes10-uint8-}[`++replace_12_10(self, value, offset)++`]
  6393. * {xref-Packing-extract_16_1-bytes16-uint8-}[`++extract_16_1(self, offset)++`]
  6394. * {xref-Packing-replace_16_1-bytes16-bytes1-uint8-}[`++replace_16_1(self, value, offset)++`]
  6395. * {xref-Packing-extract_16_2-bytes16-uint8-}[`++extract_16_2(self, offset)++`]
  6396. * {xref-Packing-replace_16_2-bytes16-bytes2-uint8-}[`++replace_16_2(self, value, offset)++`]
  6397. * {xref-Packing-extract_16_4-bytes16-uint8-}[`++extract_16_4(self, offset)++`]
  6398. * {xref-Packing-replace_16_4-bytes16-bytes4-uint8-}[`++replace_16_4(self, value, offset)++`]
  6399. * {xref-Packing-extract_16_6-bytes16-uint8-}[`++extract_16_6(self, offset)++`]
  6400. * {xref-Packing-replace_16_6-bytes16-bytes6-uint8-}[`++replace_16_6(self, value, offset)++`]
  6401. * {xref-Packing-extract_16_8-bytes16-uint8-}[`++extract_16_8(self, offset)++`]
  6402. * {xref-Packing-replace_16_8-bytes16-bytes8-uint8-}[`++replace_16_8(self, value, offset)++`]
  6403. * {xref-Packing-extract_16_10-bytes16-uint8-}[`++extract_16_10(self, offset)++`]
  6404. * {xref-Packing-replace_16_10-bytes16-bytes10-uint8-}[`++replace_16_10(self, value, offset)++`]
  6405. * {xref-Packing-extract_16_12-bytes16-uint8-}[`++extract_16_12(self, offset)++`]
  6406. * {xref-Packing-replace_16_12-bytes16-bytes12-uint8-}[`++replace_16_12(self, value, offset)++`]
  6407. * {xref-Packing-extract_20_1-bytes20-uint8-}[`++extract_20_1(self, offset)++`]
  6408. * {xref-Packing-replace_20_1-bytes20-bytes1-uint8-}[`++replace_20_1(self, value, offset)++`]
  6409. * {xref-Packing-extract_20_2-bytes20-uint8-}[`++extract_20_2(self, offset)++`]
  6410. * {xref-Packing-replace_20_2-bytes20-bytes2-uint8-}[`++replace_20_2(self, value, offset)++`]
  6411. * {xref-Packing-extract_20_4-bytes20-uint8-}[`++extract_20_4(self, offset)++`]
  6412. * {xref-Packing-replace_20_4-bytes20-bytes4-uint8-}[`++replace_20_4(self, value, offset)++`]
  6413. * {xref-Packing-extract_20_6-bytes20-uint8-}[`++extract_20_6(self, offset)++`]
  6414. * {xref-Packing-replace_20_6-bytes20-bytes6-uint8-}[`++replace_20_6(self, value, offset)++`]
  6415. * {xref-Packing-extract_20_8-bytes20-uint8-}[`++extract_20_8(self, offset)++`]
  6416. * {xref-Packing-replace_20_8-bytes20-bytes8-uint8-}[`++replace_20_8(self, value, offset)++`]
  6417. * {xref-Packing-extract_20_10-bytes20-uint8-}[`++extract_20_10(self, offset)++`]
  6418. * {xref-Packing-replace_20_10-bytes20-bytes10-uint8-}[`++replace_20_10(self, value, offset)++`]
  6419. * {xref-Packing-extract_20_12-bytes20-uint8-}[`++extract_20_12(self, offset)++`]
  6420. * {xref-Packing-replace_20_12-bytes20-bytes12-uint8-}[`++replace_20_12(self, value, offset)++`]
  6421. * {xref-Packing-extract_20_16-bytes20-uint8-}[`++extract_20_16(self, offset)++`]
  6422. * {xref-Packing-replace_20_16-bytes20-bytes16-uint8-}[`++replace_20_16(self, value, offset)++`]
  6423. * {xref-Packing-extract_22_1-bytes22-uint8-}[`++extract_22_1(self, offset)++`]
  6424. * {xref-Packing-replace_22_1-bytes22-bytes1-uint8-}[`++replace_22_1(self, value, offset)++`]
  6425. * {xref-Packing-extract_22_2-bytes22-uint8-}[`++extract_22_2(self, offset)++`]
  6426. * {xref-Packing-replace_22_2-bytes22-bytes2-uint8-}[`++replace_22_2(self, value, offset)++`]
  6427. * {xref-Packing-extract_22_4-bytes22-uint8-}[`++extract_22_4(self, offset)++`]
  6428. * {xref-Packing-replace_22_4-bytes22-bytes4-uint8-}[`++replace_22_4(self, value, offset)++`]
  6429. * {xref-Packing-extract_22_6-bytes22-uint8-}[`++extract_22_6(self, offset)++`]
  6430. * {xref-Packing-replace_22_6-bytes22-bytes6-uint8-}[`++replace_22_6(self, value, offset)++`]
  6431. * {xref-Packing-extract_22_8-bytes22-uint8-}[`++extract_22_8(self, offset)++`]
  6432. * {xref-Packing-replace_22_8-bytes22-bytes8-uint8-}[`++replace_22_8(self, value, offset)++`]
  6433. * {xref-Packing-extract_22_10-bytes22-uint8-}[`++extract_22_10(self, offset)++`]
  6434. * {xref-Packing-replace_22_10-bytes22-bytes10-uint8-}[`++replace_22_10(self, value, offset)++`]
  6435. * {xref-Packing-extract_22_12-bytes22-uint8-}[`++extract_22_12(self, offset)++`]
  6436. * {xref-Packing-replace_22_12-bytes22-bytes12-uint8-}[`++replace_22_12(self, value, offset)++`]
  6437. * {xref-Packing-extract_22_16-bytes22-uint8-}[`++extract_22_16(self, offset)++`]
  6438. * {xref-Packing-replace_22_16-bytes22-bytes16-uint8-}[`++replace_22_16(self, value, offset)++`]
  6439. * {xref-Packing-extract_22_20-bytes22-uint8-}[`++extract_22_20(self, offset)++`]
  6440. * {xref-Packing-replace_22_20-bytes22-bytes20-uint8-}[`++replace_22_20(self, value, offset)++`]
  6441. * {xref-Packing-extract_24_1-bytes24-uint8-}[`++extract_24_1(self, offset)++`]
  6442. * {xref-Packing-replace_24_1-bytes24-bytes1-uint8-}[`++replace_24_1(self, value, offset)++`]
  6443. * {xref-Packing-extract_24_2-bytes24-uint8-}[`++extract_24_2(self, offset)++`]
  6444. * {xref-Packing-replace_24_2-bytes24-bytes2-uint8-}[`++replace_24_2(self, value, offset)++`]
  6445. * {xref-Packing-extract_24_4-bytes24-uint8-}[`++extract_24_4(self, offset)++`]
  6446. * {xref-Packing-replace_24_4-bytes24-bytes4-uint8-}[`++replace_24_4(self, value, offset)++`]
  6447. * {xref-Packing-extract_24_6-bytes24-uint8-}[`++extract_24_6(self, offset)++`]
  6448. * {xref-Packing-replace_24_6-bytes24-bytes6-uint8-}[`++replace_24_6(self, value, offset)++`]
  6449. * {xref-Packing-extract_24_8-bytes24-uint8-}[`++extract_24_8(self, offset)++`]
  6450. * {xref-Packing-replace_24_8-bytes24-bytes8-uint8-}[`++replace_24_8(self, value, offset)++`]
  6451. * {xref-Packing-extract_24_10-bytes24-uint8-}[`++extract_24_10(self, offset)++`]
  6452. * {xref-Packing-replace_24_10-bytes24-bytes10-uint8-}[`++replace_24_10(self, value, offset)++`]
  6453. * {xref-Packing-extract_24_12-bytes24-uint8-}[`++extract_24_12(self, offset)++`]
  6454. * {xref-Packing-replace_24_12-bytes24-bytes12-uint8-}[`++replace_24_12(self, value, offset)++`]
  6455. * {xref-Packing-extract_24_16-bytes24-uint8-}[`++extract_24_16(self, offset)++`]
  6456. * {xref-Packing-replace_24_16-bytes24-bytes16-uint8-}[`++replace_24_16(self, value, offset)++`]
  6457. * {xref-Packing-extract_24_20-bytes24-uint8-}[`++extract_24_20(self, offset)++`]
  6458. * {xref-Packing-replace_24_20-bytes24-bytes20-uint8-}[`++replace_24_20(self, value, offset)++`]
  6459. * {xref-Packing-extract_24_22-bytes24-uint8-}[`++extract_24_22(self, offset)++`]
  6460. * {xref-Packing-replace_24_22-bytes24-bytes22-uint8-}[`++replace_24_22(self, value, offset)++`]
  6461. * {xref-Packing-extract_28_1-bytes28-uint8-}[`++extract_28_1(self, offset)++`]
  6462. * {xref-Packing-replace_28_1-bytes28-bytes1-uint8-}[`++replace_28_1(self, value, offset)++`]
  6463. * {xref-Packing-extract_28_2-bytes28-uint8-}[`++extract_28_2(self, offset)++`]
  6464. * {xref-Packing-replace_28_2-bytes28-bytes2-uint8-}[`++replace_28_2(self, value, offset)++`]
  6465. * {xref-Packing-extract_28_4-bytes28-uint8-}[`++extract_28_4(self, offset)++`]
  6466. * {xref-Packing-replace_28_4-bytes28-bytes4-uint8-}[`++replace_28_4(self, value, offset)++`]
  6467. * {xref-Packing-extract_28_6-bytes28-uint8-}[`++extract_28_6(self, offset)++`]
  6468. * {xref-Packing-replace_28_6-bytes28-bytes6-uint8-}[`++replace_28_6(self, value, offset)++`]
  6469. * {xref-Packing-extract_28_8-bytes28-uint8-}[`++extract_28_8(self, offset)++`]
  6470. * {xref-Packing-replace_28_8-bytes28-bytes8-uint8-}[`++replace_28_8(self, value, offset)++`]
  6471. * {xref-Packing-extract_28_10-bytes28-uint8-}[`++extract_28_10(self, offset)++`]
  6472. * {xref-Packing-replace_28_10-bytes28-bytes10-uint8-}[`++replace_28_10(self, value, offset)++`]
  6473. * {xref-Packing-extract_28_12-bytes28-uint8-}[`++extract_28_12(self, offset)++`]
  6474. * {xref-Packing-replace_28_12-bytes28-bytes12-uint8-}[`++replace_28_12(self, value, offset)++`]
  6475. * {xref-Packing-extract_28_16-bytes28-uint8-}[`++extract_28_16(self, offset)++`]
  6476. * {xref-Packing-replace_28_16-bytes28-bytes16-uint8-}[`++replace_28_16(self, value, offset)++`]
  6477. * {xref-Packing-extract_28_20-bytes28-uint8-}[`++extract_28_20(self, offset)++`]
  6478. * {xref-Packing-replace_28_20-bytes28-bytes20-uint8-}[`++replace_28_20(self, value, offset)++`]
  6479. * {xref-Packing-extract_28_22-bytes28-uint8-}[`++extract_28_22(self, offset)++`]
  6480. * {xref-Packing-replace_28_22-bytes28-bytes22-uint8-}[`++replace_28_22(self, value, offset)++`]
  6481. * {xref-Packing-extract_28_24-bytes28-uint8-}[`++extract_28_24(self, offset)++`]
  6482. * {xref-Packing-replace_28_24-bytes28-bytes24-uint8-}[`++replace_28_24(self, value, offset)++`]
  6483. * {xref-Packing-extract_32_1-bytes32-uint8-}[`++extract_32_1(self, offset)++`]
  6484. * {xref-Packing-replace_32_1-bytes32-bytes1-uint8-}[`++replace_32_1(self, value, offset)++`]
  6485. * {xref-Packing-extract_32_2-bytes32-uint8-}[`++extract_32_2(self, offset)++`]
  6486. * {xref-Packing-replace_32_2-bytes32-bytes2-uint8-}[`++replace_32_2(self, value, offset)++`]
  6487. * {xref-Packing-extract_32_4-bytes32-uint8-}[`++extract_32_4(self, offset)++`]
  6488. * {xref-Packing-replace_32_4-bytes32-bytes4-uint8-}[`++replace_32_4(self, value, offset)++`]
  6489. * {xref-Packing-extract_32_6-bytes32-uint8-}[`++extract_32_6(self, offset)++`]
  6490. * {xref-Packing-replace_32_6-bytes32-bytes6-uint8-}[`++replace_32_6(self, value, offset)++`]
  6491. * {xref-Packing-extract_32_8-bytes32-uint8-}[`++extract_32_8(self, offset)++`]
  6492. * {xref-Packing-replace_32_8-bytes32-bytes8-uint8-}[`++replace_32_8(self, value, offset)++`]
  6493. * {xref-Packing-extract_32_10-bytes32-uint8-}[`++extract_32_10(self, offset)++`]
  6494. * {xref-Packing-replace_32_10-bytes32-bytes10-uint8-}[`++replace_32_10(self, value, offset)++`]
  6495. * {xref-Packing-extract_32_12-bytes32-uint8-}[`++extract_32_12(self, offset)++`]
  6496. * {xref-Packing-replace_32_12-bytes32-bytes12-uint8-}[`++replace_32_12(self, value, offset)++`]
  6497. * {xref-Packing-extract_32_16-bytes32-uint8-}[`++extract_32_16(self, offset)++`]
  6498. * {xref-Packing-replace_32_16-bytes32-bytes16-uint8-}[`++replace_32_16(self, value, offset)++`]
  6499. * {xref-Packing-extract_32_20-bytes32-uint8-}[`++extract_32_20(self, offset)++`]
  6500. * {xref-Packing-replace_32_20-bytes32-bytes20-uint8-}[`++replace_32_20(self, value, offset)++`]
  6501. * {xref-Packing-extract_32_22-bytes32-uint8-}[`++extract_32_22(self, offset)++`]
  6502. * {xref-Packing-replace_32_22-bytes32-bytes22-uint8-}[`++replace_32_22(self, value, offset)++`]
  6503. * {xref-Packing-extract_32_24-bytes32-uint8-}[`++extract_32_24(self, offset)++`]
  6504. * {xref-Packing-replace_32_24-bytes32-bytes24-uint8-}[`++replace_32_24(self, value, offset)++`]
  6505. * {xref-Packing-extract_32_28-bytes32-uint8-}[`++extract_32_28(self, offset)++`]
  6506. * {xref-Packing-replace_32_28-bytes32-bytes28-uint8-}[`++replace_32_28(self, value, offset)++`]
  6507. --
  6508. [.contract-index]
  6509. .Errors
  6510. --
  6511. * {xref-Packing-OutOfRangeAccess--}[`++OutOfRangeAccess()++`]
  6512. --
  6513. [.contract-item]
  6514. [[Packing-pack_1_1-bytes1-bytes1-]]
  6515. ==== `[.contract-item-name]#++pack_1_1++#++(bytes1 left, bytes1 right) โ†’ bytes2 result++` [.item-kind]#internal#
  6516. [.contract-item]
  6517. [[Packing-pack_2_2-bytes2-bytes2-]]
  6518. ==== `[.contract-item-name]#++pack_2_2++#++(bytes2 left, bytes2 right) โ†’ bytes4 result++` [.item-kind]#internal#
  6519. [.contract-item]
  6520. [[Packing-pack_2_4-bytes2-bytes4-]]
  6521. ==== `[.contract-item-name]#++pack_2_4++#++(bytes2 left, bytes4 right) โ†’ bytes6 result++` [.item-kind]#internal#
  6522. [.contract-item]
  6523. [[Packing-pack_2_6-bytes2-bytes6-]]
  6524. ==== `[.contract-item-name]#++pack_2_6++#++(bytes2 left, bytes6 right) โ†’ bytes8 result++` [.item-kind]#internal#
  6525. [.contract-item]
  6526. [[Packing-pack_2_8-bytes2-bytes8-]]
  6527. ==== `[.contract-item-name]#++pack_2_8++#++(bytes2 left, bytes8 right) โ†’ bytes10 result++` [.item-kind]#internal#
  6528. [.contract-item]
  6529. [[Packing-pack_2_10-bytes2-bytes10-]]
  6530. ==== `[.contract-item-name]#++pack_2_10++#++(bytes2 left, bytes10 right) โ†’ bytes12 result++` [.item-kind]#internal#
  6531. [.contract-item]
  6532. [[Packing-pack_2_20-bytes2-bytes20-]]
  6533. ==== `[.contract-item-name]#++pack_2_20++#++(bytes2 left, bytes20 right) โ†’ bytes22 result++` [.item-kind]#internal#
  6534. [.contract-item]
  6535. [[Packing-pack_2_22-bytes2-bytes22-]]
  6536. ==== `[.contract-item-name]#++pack_2_22++#++(bytes2 left, bytes22 right) โ†’ bytes24 result++` [.item-kind]#internal#
  6537. [.contract-item]
  6538. [[Packing-pack_4_2-bytes4-bytes2-]]
  6539. ==== `[.contract-item-name]#++pack_4_2++#++(bytes4 left, bytes2 right) โ†’ bytes6 result++` [.item-kind]#internal#
  6540. [.contract-item]
  6541. [[Packing-pack_4_4-bytes4-bytes4-]]
  6542. ==== `[.contract-item-name]#++pack_4_4++#++(bytes4 left, bytes4 right) โ†’ bytes8 result++` [.item-kind]#internal#
  6543. [.contract-item]
  6544. [[Packing-pack_4_6-bytes4-bytes6-]]
  6545. ==== `[.contract-item-name]#++pack_4_6++#++(bytes4 left, bytes6 right) โ†’ bytes10 result++` [.item-kind]#internal#
  6546. [.contract-item]
  6547. [[Packing-pack_4_8-bytes4-bytes8-]]
  6548. ==== `[.contract-item-name]#++pack_4_8++#++(bytes4 left, bytes8 right) โ†’ bytes12 result++` [.item-kind]#internal#
  6549. [.contract-item]
  6550. [[Packing-pack_4_12-bytes4-bytes12-]]
  6551. ==== `[.contract-item-name]#++pack_4_12++#++(bytes4 left, bytes12 right) โ†’ bytes16 result++` [.item-kind]#internal#
  6552. [.contract-item]
  6553. [[Packing-pack_4_16-bytes4-bytes16-]]
  6554. ==== `[.contract-item-name]#++pack_4_16++#++(bytes4 left, bytes16 right) โ†’ bytes20 result++` [.item-kind]#internal#
  6555. [.contract-item]
  6556. [[Packing-pack_4_20-bytes4-bytes20-]]
  6557. ==== `[.contract-item-name]#++pack_4_20++#++(bytes4 left, bytes20 right) โ†’ bytes24 result++` [.item-kind]#internal#
  6558. [.contract-item]
  6559. [[Packing-pack_4_24-bytes4-bytes24-]]
  6560. ==== `[.contract-item-name]#++pack_4_24++#++(bytes4 left, bytes24 right) โ†’ bytes28 result++` [.item-kind]#internal#
  6561. [.contract-item]
  6562. [[Packing-pack_4_28-bytes4-bytes28-]]
  6563. ==== `[.contract-item-name]#++pack_4_28++#++(bytes4 left, bytes28 right) โ†’ bytes32 result++` [.item-kind]#internal#
  6564. [.contract-item]
  6565. [[Packing-pack_6_2-bytes6-bytes2-]]
  6566. ==== `[.contract-item-name]#++pack_6_2++#++(bytes6 left, bytes2 right) โ†’ bytes8 result++` [.item-kind]#internal#
  6567. [.contract-item]
  6568. [[Packing-pack_6_4-bytes6-bytes4-]]
  6569. ==== `[.contract-item-name]#++pack_6_4++#++(bytes6 left, bytes4 right) โ†’ bytes10 result++` [.item-kind]#internal#
  6570. [.contract-item]
  6571. [[Packing-pack_6_6-bytes6-bytes6-]]
  6572. ==== `[.contract-item-name]#++pack_6_6++#++(bytes6 left, bytes6 right) โ†’ bytes12 result++` [.item-kind]#internal#
  6573. [.contract-item]
  6574. [[Packing-pack_6_10-bytes6-bytes10-]]
  6575. ==== `[.contract-item-name]#++pack_6_10++#++(bytes6 left, bytes10 right) โ†’ bytes16 result++` [.item-kind]#internal#
  6576. [.contract-item]
  6577. [[Packing-pack_6_16-bytes6-bytes16-]]
  6578. ==== `[.contract-item-name]#++pack_6_16++#++(bytes6 left, bytes16 right) โ†’ bytes22 result++` [.item-kind]#internal#
  6579. [.contract-item]
  6580. [[Packing-pack_6_22-bytes6-bytes22-]]
  6581. ==== `[.contract-item-name]#++pack_6_22++#++(bytes6 left, bytes22 right) โ†’ bytes28 result++` [.item-kind]#internal#
  6582. [.contract-item]
  6583. [[Packing-pack_8_2-bytes8-bytes2-]]
  6584. ==== `[.contract-item-name]#++pack_8_2++#++(bytes8 left, bytes2 right) โ†’ bytes10 result++` [.item-kind]#internal#
  6585. [.contract-item]
  6586. [[Packing-pack_8_4-bytes8-bytes4-]]
  6587. ==== `[.contract-item-name]#++pack_8_4++#++(bytes8 left, bytes4 right) โ†’ bytes12 result++` [.item-kind]#internal#
  6588. [.contract-item]
  6589. [[Packing-pack_8_8-bytes8-bytes8-]]
  6590. ==== `[.contract-item-name]#++pack_8_8++#++(bytes8 left, bytes8 right) โ†’ bytes16 result++` [.item-kind]#internal#
  6591. [.contract-item]
  6592. [[Packing-pack_8_12-bytes8-bytes12-]]
  6593. ==== `[.contract-item-name]#++pack_8_12++#++(bytes8 left, bytes12 right) โ†’ bytes20 result++` [.item-kind]#internal#
  6594. [.contract-item]
  6595. [[Packing-pack_8_16-bytes8-bytes16-]]
  6596. ==== `[.contract-item-name]#++pack_8_16++#++(bytes8 left, bytes16 right) โ†’ bytes24 result++` [.item-kind]#internal#
  6597. [.contract-item]
  6598. [[Packing-pack_8_20-bytes8-bytes20-]]
  6599. ==== `[.contract-item-name]#++pack_8_20++#++(bytes8 left, bytes20 right) โ†’ bytes28 result++` [.item-kind]#internal#
  6600. [.contract-item]
  6601. [[Packing-pack_8_24-bytes8-bytes24-]]
  6602. ==== `[.contract-item-name]#++pack_8_24++#++(bytes8 left, bytes24 right) โ†’ bytes32 result++` [.item-kind]#internal#
  6603. [.contract-item]
  6604. [[Packing-pack_10_2-bytes10-bytes2-]]
  6605. ==== `[.contract-item-name]#++pack_10_2++#++(bytes10 left, bytes2 right) โ†’ bytes12 result++` [.item-kind]#internal#
  6606. [.contract-item]
  6607. [[Packing-pack_10_6-bytes10-bytes6-]]
  6608. ==== `[.contract-item-name]#++pack_10_6++#++(bytes10 left, bytes6 right) โ†’ bytes16 result++` [.item-kind]#internal#
  6609. [.contract-item]
  6610. [[Packing-pack_10_10-bytes10-bytes10-]]
  6611. ==== `[.contract-item-name]#++pack_10_10++#++(bytes10 left, bytes10 right) โ†’ bytes20 result++` [.item-kind]#internal#
  6612. [.contract-item]
  6613. [[Packing-pack_10_12-bytes10-bytes12-]]
  6614. ==== `[.contract-item-name]#++pack_10_12++#++(bytes10 left, bytes12 right) โ†’ bytes22 result++` [.item-kind]#internal#
  6615. [.contract-item]
  6616. [[Packing-pack_10_22-bytes10-bytes22-]]
  6617. ==== `[.contract-item-name]#++pack_10_22++#++(bytes10 left, bytes22 right) โ†’ bytes32 result++` [.item-kind]#internal#
  6618. [.contract-item]
  6619. [[Packing-pack_12_4-bytes12-bytes4-]]
  6620. ==== `[.contract-item-name]#++pack_12_4++#++(bytes12 left, bytes4 right) โ†’ bytes16 result++` [.item-kind]#internal#
  6621. [.contract-item]
  6622. [[Packing-pack_12_8-bytes12-bytes8-]]
  6623. ==== `[.contract-item-name]#++pack_12_8++#++(bytes12 left, bytes8 right) โ†’ bytes20 result++` [.item-kind]#internal#
  6624. [.contract-item]
  6625. [[Packing-pack_12_10-bytes12-bytes10-]]
  6626. ==== `[.contract-item-name]#++pack_12_10++#++(bytes12 left, bytes10 right) โ†’ bytes22 result++` [.item-kind]#internal#
  6627. [.contract-item]
  6628. [[Packing-pack_12_12-bytes12-bytes12-]]
  6629. ==== `[.contract-item-name]#++pack_12_12++#++(bytes12 left, bytes12 right) โ†’ bytes24 result++` [.item-kind]#internal#
  6630. [.contract-item]
  6631. [[Packing-pack_12_16-bytes12-bytes16-]]
  6632. ==== `[.contract-item-name]#++pack_12_16++#++(bytes12 left, bytes16 right) โ†’ bytes28 result++` [.item-kind]#internal#
  6633. [.contract-item]
  6634. [[Packing-pack_12_20-bytes12-bytes20-]]
  6635. ==== `[.contract-item-name]#++pack_12_20++#++(bytes12 left, bytes20 right) โ†’ bytes32 result++` [.item-kind]#internal#
  6636. [.contract-item]
  6637. [[Packing-pack_16_4-bytes16-bytes4-]]
  6638. ==== `[.contract-item-name]#++pack_16_4++#++(bytes16 left, bytes4 right) โ†’ bytes20 result++` [.item-kind]#internal#
  6639. [.contract-item]
  6640. [[Packing-pack_16_6-bytes16-bytes6-]]
  6641. ==== `[.contract-item-name]#++pack_16_6++#++(bytes16 left, bytes6 right) โ†’ bytes22 result++` [.item-kind]#internal#
  6642. [.contract-item]
  6643. [[Packing-pack_16_8-bytes16-bytes8-]]
  6644. ==== `[.contract-item-name]#++pack_16_8++#++(bytes16 left, bytes8 right) โ†’ bytes24 result++` [.item-kind]#internal#
  6645. [.contract-item]
  6646. [[Packing-pack_16_12-bytes16-bytes12-]]
  6647. ==== `[.contract-item-name]#++pack_16_12++#++(bytes16 left, bytes12 right) โ†’ bytes28 result++` [.item-kind]#internal#
  6648. [.contract-item]
  6649. [[Packing-pack_16_16-bytes16-bytes16-]]
  6650. ==== `[.contract-item-name]#++pack_16_16++#++(bytes16 left, bytes16 right) โ†’ bytes32 result++` [.item-kind]#internal#
  6651. [.contract-item]
  6652. [[Packing-pack_20_2-bytes20-bytes2-]]
  6653. ==== `[.contract-item-name]#++pack_20_2++#++(bytes20 left, bytes2 right) โ†’ bytes22 result++` [.item-kind]#internal#
  6654. [.contract-item]
  6655. [[Packing-pack_20_4-bytes20-bytes4-]]
  6656. ==== `[.contract-item-name]#++pack_20_4++#++(bytes20 left, bytes4 right) โ†’ bytes24 result++` [.item-kind]#internal#
  6657. [.contract-item]
  6658. [[Packing-pack_20_8-bytes20-bytes8-]]
  6659. ==== `[.contract-item-name]#++pack_20_8++#++(bytes20 left, bytes8 right) โ†’ bytes28 result++` [.item-kind]#internal#
  6660. [.contract-item]
  6661. [[Packing-pack_20_12-bytes20-bytes12-]]
  6662. ==== `[.contract-item-name]#++pack_20_12++#++(bytes20 left, bytes12 right) โ†’ bytes32 result++` [.item-kind]#internal#
  6663. [.contract-item]
  6664. [[Packing-pack_22_2-bytes22-bytes2-]]
  6665. ==== `[.contract-item-name]#++pack_22_2++#++(bytes22 left, bytes2 right) โ†’ bytes24 result++` [.item-kind]#internal#
  6666. [.contract-item]
  6667. [[Packing-pack_22_6-bytes22-bytes6-]]
  6668. ==== `[.contract-item-name]#++pack_22_6++#++(bytes22 left, bytes6 right) โ†’ bytes28 result++` [.item-kind]#internal#
  6669. [.contract-item]
  6670. [[Packing-pack_22_10-bytes22-bytes10-]]
  6671. ==== `[.contract-item-name]#++pack_22_10++#++(bytes22 left, bytes10 right) โ†’ bytes32 result++` [.item-kind]#internal#
  6672. [.contract-item]
  6673. [[Packing-pack_24_4-bytes24-bytes4-]]
  6674. ==== `[.contract-item-name]#++pack_24_4++#++(bytes24 left, bytes4 right) โ†’ bytes28 result++` [.item-kind]#internal#
  6675. [.contract-item]
  6676. [[Packing-pack_24_8-bytes24-bytes8-]]
  6677. ==== `[.contract-item-name]#++pack_24_8++#++(bytes24 left, bytes8 right) โ†’ bytes32 result++` [.item-kind]#internal#
  6678. [.contract-item]
  6679. [[Packing-pack_28_4-bytes28-bytes4-]]
  6680. ==== `[.contract-item-name]#++pack_28_4++#++(bytes28 left, bytes4 right) โ†’ bytes32 result++` [.item-kind]#internal#
  6681. [.contract-item]
  6682. [[Packing-extract_2_1-bytes2-uint8-]]
  6683. ==== `[.contract-item-name]#++extract_2_1++#++(bytes2 self, uint8 offset) โ†’ bytes1 result++` [.item-kind]#internal#
  6684. [.contract-item]
  6685. [[Packing-replace_2_1-bytes2-bytes1-uint8-]]
  6686. ==== `[.contract-item-name]#++replace_2_1++#++(bytes2 self, bytes1 value, uint8 offset) โ†’ bytes2 result++` [.item-kind]#internal#
  6687. [.contract-item]
  6688. [[Packing-extract_4_1-bytes4-uint8-]]
  6689. ==== `[.contract-item-name]#++extract_4_1++#++(bytes4 self, uint8 offset) โ†’ bytes1 result++` [.item-kind]#internal#
  6690. [.contract-item]
  6691. [[Packing-replace_4_1-bytes4-bytes1-uint8-]]
  6692. ==== `[.contract-item-name]#++replace_4_1++#++(bytes4 self, bytes1 value, uint8 offset) โ†’ bytes4 result++` [.item-kind]#internal#
  6693. [.contract-item]
  6694. [[Packing-extract_4_2-bytes4-uint8-]]
  6695. ==== `[.contract-item-name]#++extract_4_2++#++(bytes4 self, uint8 offset) โ†’ bytes2 result++` [.item-kind]#internal#
  6696. [.contract-item]
  6697. [[Packing-replace_4_2-bytes4-bytes2-uint8-]]
  6698. ==== `[.contract-item-name]#++replace_4_2++#++(bytes4 self, bytes2 value, uint8 offset) โ†’ bytes4 result++` [.item-kind]#internal#
  6699. [.contract-item]
  6700. [[Packing-extract_6_1-bytes6-uint8-]]
  6701. ==== `[.contract-item-name]#++extract_6_1++#++(bytes6 self, uint8 offset) โ†’ bytes1 result++` [.item-kind]#internal#
  6702. [.contract-item]
  6703. [[Packing-replace_6_1-bytes6-bytes1-uint8-]]
  6704. ==== `[.contract-item-name]#++replace_6_1++#++(bytes6 self, bytes1 value, uint8 offset) โ†’ bytes6 result++` [.item-kind]#internal#
  6705. [.contract-item]
  6706. [[Packing-extract_6_2-bytes6-uint8-]]
  6707. ==== `[.contract-item-name]#++extract_6_2++#++(bytes6 self, uint8 offset) โ†’ bytes2 result++` [.item-kind]#internal#
  6708. [.contract-item]
  6709. [[Packing-replace_6_2-bytes6-bytes2-uint8-]]
  6710. ==== `[.contract-item-name]#++replace_6_2++#++(bytes6 self, bytes2 value, uint8 offset) โ†’ bytes6 result++` [.item-kind]#internal#
  6711. [.contract-item]
  6712. [[Packing-extract_6_4-bytes6-uint8-]]
  6713. ==== `[.contract-item-name]#++extract_6_4++#++(bytes6 self, uint8 offset) โ†’ bytes4 result++` [.item-kind]#internal#
  6714. [.contract-item]
  6715. [[Packing-replace_6_4-bytes6-bytes4-uint8-]]
  6716. ==== `[.contract-item-name]#++replace_6_4++#++(bytes6 self, bytes4 value, uint8 offset) โ†’ bytes6 result++` [.item-kind]#internal#
  6717. [.contract-item]
  6718. [[Packing-extract_8_1-bytes8-uint8-]]
  6719. ==== `[.contract-item-name]#++extract_8_1++#++(bytes8 self, uint8 offset) โ†’ bytes1 result++` [.item-kind]#internal#
  6720. [.contract-item]
  6721. [[Packing-replace_8_1-bytes8-bytes1-uint8-]]
  6722. ==== `[.contract-item-name]#++replace_8_1++#++(bytes8 self, bytes1 value, uint8 offset) โ†’ bytes8 result++` [.item-kind]#internal#
  6723. [.contract-item]
  6724. [[Packing-extract_8_2-bytes8-uint8-]]
  6725. ==== `[.contract-item-name]#++extract_8_2++#++(bytes8 self, uint8 offset) โ†’ bytes2 result++` [.item-kind]#internal#
  6726. [.contract-item]
  6727. [[Packing-replace_8_2-bytes8-bytes2-uint8-]]
  6728. ==== `[.contract-item-name]#++replace_8_2++#++(bytes8 self, bytes2 value, uint8 offset) โ†’ bytes8 result++` [.item-kind]#internal#
  6729. [.contract-item]
  6730. [[Packing-extract_8_4-bytes8-uint8-]]
  6731. ==== `[.contract-item-name]#++extract_8_4++#++(bytes8 self, uint8 offset) โ†’ bytes4 result++` [.item-kind]#internal#
  6732. [.contract-item]
  6733. [[Packing-replace_8_4-bytes8-bytes4-uint8-]]
  6734. ==== `[.contract-item-name]#++replace_8_4++#++(bytes8 self, bytes4 value, uint8 offset) โ†’ bytes8 result++` [.item-kind]#internal#
  6735. [.contract-item]
  6736. [[Packing-extract_8_6-bytes8-uint8-]]
  6737. ==== `[.contract-item-name]#++extract_8_6++#++(bytes8 self, uint8 offset) โ†’ bytes6 result++` [.item-kind]#internal#
  6738. [.contract-item]
  6739. [[Packing-replace_8_6-bytes8-bytes6-uint8-]]
  6740. ==== `[.contract-item-name]#++replace_8_6++#++(bytes8 self, bytes6 value, uint8 offset) โ†’ bytes8 result++` [.item-kind]#internal#
  6741. [.contract-item]
  6742. [[Packing-extract_10_1-bytes10-uint8-]]
  6743. ==== `[.contract-item-name]#++extract_10_1++#++(bytes10 self, uint8 offset) โ†’ bytes1 result++` [.item-kind]#internal#
  6744. [.contract-item]
  6745. [[Packing-replace_10_1-bytes10-bytes1-uint8-]]
  6746. ==== `[.contract-item-name]#++replace_10_1++#++(bytes10 self, bytes1 value, uint8 offset) โ†’ bytes10 result++` [.item-kind]#internal#
  6747. [.contract-item]
  6748. [[Packing-extract_10_2-bytes10-uint8-]]
  6749. ==== `[.contract-item-name]#++extract_10_2++#++(bytes10 self, uint8 offset) โ†’ bytes2 result++` [.item-kind]#internal#
  6750. [.contract-item]
  6751. [[Packing-replace_10_2-bytes10-bytes2-uint8-]]
  6752. ==== `[.contract-item-name]#++replace_10_2++#++(bytes10 self, bytes2 value, uint8 offset) โ†’ bytes10 result++` [.item-kind]#internal#
  6753. [.contract-item]
  6754. [[Packing-extract_10_4-bytes10-uint8-]]
  6755. ==== `[.contract-item-name]#++extract_10_4++#++(bytes10 self, uint8 offset) โ†’ bytes4 result++` [.item-kind]#internal#
  6756. [.contract-item]
  6757. [[Packing-replace_10_4-bytes10-bytes4-uint8-]]
  6758. ==== `[.contract-item-name]#++replace_10_4++#++(bytes10 self, bytes4 value, uint8 offset) โ†’ bytes10 result++` [.item-kind]#internal#
  6759. [.contract-item]
  6760. [[Packing-extract_10_6-bytes10-uint8-]]
  6761. ==== `[.contract-item-name]#++extract_10_6++#++(bytes10 self, uint8 offset) โ†’ bytes6 result++` [.item-kind]#internal#
  6762. [.contract-item]
  6763. [[Packing-replace_10_6-bytes10-bytes6-uint8-]]
  6764. ==== `[.contract-item-name]#++replace_10_6++#++(bytes10 self, bytes6 value, uint8 offset) โ†’ bytes10 result++` [.item-kind]#internal#
  6765. [.contract-item]
  6766. [[Packing-extract_10_8-bytes10-uint8-]]
  6767. ==== `[.contract-item-name]#++extract_10_8++#++(bytes10 self, uint8 offset) โ†’ bytes8 result++` [.item-kind]#internal#
  6768. [.contract-item]
  6769. [[Packing-replace_10_8-bytes10-bytes8-uint8-]]
  6770. ==== `[.contract-item-name]#++replace_10_8++#++(bytes10 self, bytes8 value, uint8 offset) โ†’ bytes10 result++` [.item-kind]#internal#
  6771. [.contract-item]
  6772. [[Packing-extract_12_1-bytes12-uint8-]]
  6773. ==== `[.contract-item-name]#++extract_12_1++#++(bytes12 self, uint8 offset) โ†’ bytes1 result++` [.item-kind]#internal#
  6774. [.contract-item]
  6775. [[Packing-replace_12_1-bytes12-bytes1-uint8-]]
  6776. ==== `[.contract-item-name]#++replace_12_1++#++(bytes12 self, bytes1 value, uint8 offset) โ†’ bytes12 result++` [.item-kind]#internal#
  6777. [.contract-item]
  6778. [[Packing-extract_12_2-bytes12-uint8-]]
  6779. ==== `[.contract-item-name]#++extract_12_2++#++(bytes12 self, uint8 offset) โ†’ bytes2 result++` [.item-kind]#internal#
  6780. [.contract-item]
  6781. [[Packing-replace_12_2-bytes12-bytes2-uint8-]]
  6782. ==== `[.contract-item-name]#++replace_12_2++#++(bytes12 self, bytes2 value, uint8 offset) โ†’ bytes12 result++` [.item-kind]#internal#
  6783. [.contract-item]
  6784. [[Packing-extract_12_4-bytes12-uint8-]]
  6785. ==== `[.contract-item-name]#++extract_12_4++#++(bytes12 self, uint8 offset) โ†’ bytes4 result++` [.item-kind]#internal#
  6786. [.contract-item]
  6787. [[Packing-replace_12_4-bytes12-bytes4-uint8-]]
  6788. ==== `[.contract-item-name]#++replace_12_4++#++(bytes12 self, bytes4 value, uint8 offset) โ†’ bytes12 result++` [.item-kind]#internal#
  6789. [.contract-item]
  6790. [[Packing-extract_12_6-bytes12-uint8-]]
  6791. ==== `[.contract-item-name]#++extract_12_6++#++(bytes12 self, uint8 offset) โ†’ bytes6 result++` [.item-kind]#internal#
  6792. [.contract-item]
  6793. [[Packing-replace_12_6-bytes12-bytes6-uint8-]]
  6794. ==== `[.contract-item-name]#++replace_12_6++#++(bytes12 self, bytes6 value, uint8 offset) โ†’ bytes12 result++` [.item-kind]#internal#
  6795. [.contract-item]
  6796. [[Packing-extract_12_8-bytes12-uint8-]]
  6797. ==== `[.contract-item-name]#++extract_12_8++#++(bytes12 self, uint8 offset) โ†’ bytes8 result++` [.item-kind]#internal#
  6798. [.contract-item]
  6799. [[Packing-replace_12_8-bytes12-bytes8-uint8-]]
  6800. ==== `[.contract-item-name]#++replace_12_8++#++(bytes12 self, bytes8 value, uint8 offset) โ†’ bytes12 result++` [.item-kind]#internal#
  6801. [.contract-item]
  6802. [[Packing-extract_12_10-bytes12-uint8-]]
  6803. ==== `[.contract-item-name]#++extract_12_10++#++(bytes12 self, uint8 offset) โ†’ bytes10 result++` [.item-kind]#internal#
  6804. [.contract-item]
  6805. [[Packing-replace_12_10-bytes12-bytes10-uint8-]]
  6806. ==== `[.contract-item-name]#++replace_12_10++#++(bytes12 self, bytes10 value, uint8 offset) โ†’ bytes12 result++` [.item-kind]#internal#
  6807. [.contract-item]
  6808. [[Packing-extract_16_1-bytes16-uint8-]]
  6809. ==== `[.contract-item-name]#++extract_16_1++#++(bytes16 self, uint8 offset) โ†’ bytes1 result++` [.item-kind]#internal#
  6810. [.contract-item]
  6811. [[Packing-replace_16_1-bytes16-bytes1-uint8-]]
  6812. ==== `[.contract-item-name]#++replace_16_1++#++(bytes16 self, bytes1 value, uint8 offset) โ†’ bytes16 result++` [.item-kind]#internal#
  6813. [.contract-item]
  6814. [[Packing-extract_16_2-bytes16-uint8-]]
  6815. ==== `[.contract-item-name]#++extract_16_2++#++(bytes16 self, uint8 offset) โ†’ bytes2 result++` [.item-kind]#internal#
  6816. [.contract-item]
  6817. [[Packing-replace_16_2-bytes16-bytes2-uint8-]]
  6818. ==== `[.contract-item-name]#++replace_16_2++#++(bytes16 self, bytes2 value, uint8 offset) โ†’ bytes16 result++` [.item-kind]#internal#
  6819. [.contract-item]
  6820. [[Packing-extract_16_4-bytes16-uint8-]]
  6821. ==== `[.contract-item-name]#++extract_16_4++#++(bytes16 self, uint8 offset) โ†’ bytes4 result++` [.item-kind]#internal#
  6822. [.contract-item]
  6823. [[Packing-replace_16_4-bytes16-bytes4-uint8-]]
  6824. ==== `[.contract-item-name]#++replace_16_4++#++(bytes16 self, bytes4 value, uint8 offset) โ†’ bytes16 result++` [.item-kind]#internal#
  6825. [.contract-item]
  6826. [[Packing-extract_16_6-bytes16-uint8-]]
  6827. ==== `[.contract-item-name]#++extract_16_6++#++(bytes16 self, uint8 offset) โ†’ bytes6 result++` [.item-kind]#internal#
  6828. [.contract-item]
  6829. [[Packing-replace_16_6-bytes16-bytes6-uint8-]]
  6830. ==== `[.contract-item-name]#++replace_16_6++#++(bytes16 self, bytes6 value, uint8 offset) โ†’ bytes16 result++` [.item-kind]#internal#
  6831. [.contract-item]
  6832. [[Packing-extract_16_8-bytes16-uint8-]]
  6833. ==== `[.contract-item-name]#++extract_16_8++#++(bytes16 self, uint8 offset) โ†’ bytes8 result++` [.item-kind]#internal#
  6834. [.contract-item]
  6835. [[Packing-replace_16_8-bytes16-bytes8-uint8-]]
  6836. ==== `[.contract-item-name]#++replace_16_8++#++(bytes16 self, bytes8 value, uint8 offset) โ†’ bytes16 result++` [.item-kind]#internal#
  6837. [.contract-item]
  6838. [[Packing-extract_16_10-bytes16-uint8-]]
  6839. ==== `[.contract-item-name]#++extract_16_10++#++(bytes16 self, uint8 offset) โ†’ bytes10 result++` [.item-kind]#internal#
  6840. [.contract-item]
  6841. [[Packing-replace_16_10-bytes16-bytes10-uint8-]]
  6842. ==== `[.contract-item-name]#++replace_16_10++#++(bytes16 self, bytes10 value, uint8 offset) โ†’ bytes16 result++` [.item-kind]#internal#
  6843. [.contract-item]
  6844. [[Packing-extract_16_12-bytes16-uint8-]]
  6845. ==== `[.contract-item-name]#++extract_16_12++#++(bytes16 self, uint8 offset) โ†’ bytes12 result++` [.item-kind]#internal#
  6846. [.contract-item]
  6847. [[Packing-replace_16_12-bytes16-bytes12-uint8-]]
  6848. ==== `[.contract-item-name]#++replace_16_12++#++(bytes16 self, bytes12 value, uint8 offset) โ†’ bytes16 result++` [.item-kind]#internal#
  6849. [.contract-item]
  6850. [[Packing-extract_20_1-bytes20-uint8-]]
  6851. ==== `[.contract-item-name]#++extract_20_1++#++(bytes20 self, uint8 offset) โ†’ bytes1 result++` [.item-kind]#internal#
  6852. [.contract-item]
  6853. [[Packing-replace_20_1-bytes20-bytes1-uint8-]]
  6854. ==== `[.contract-item-name]#++replace_20_1++#++(bytes20 self, bytes1 value, uint8 offset) โ†’ bytes20 result++` [.item-kind]#internal#
  6855. [.contract-item]
  6856. [[Packing-extract_20_2-bytes20-uint8-]]
  6857. ==== `[.contract-item-name]#++extract_20_2++#++(bytes20 self, uint8 offset) โ†’ bytes2 result++` [.item-kind]#internal#
  6858. [.contract-item]
  6859. [[Packing-replace_20_2-bytes20-bytes2-uint8-]]
  6860. ==== `[.contract-item-name]#++replace_20_2++#++(bytes20 self, bytes2 value, uint8 offset) โ†’ bytes20 result++` [.item-kind]#internal#
  6861. [.contract-item]
  6862. [[Packing-extract_20_4-bytes20-uint8-]]
  6863. ==== `[.contract-item-name]#++extract_20_4++#++(bytes20 self, uint8 offset) โ†’ bytes4 result++` [.item-kind]#internal#
  6864. [.contract-item]
  6865. [[Packing-replace_20_4-bytes20-bytes4-uint8-]]
  6866. ==== `[.contract-item-name]#++replace_20_4++#++(bytes20 self, bytes4 value, uint8 offset) โ†’ bytes20 result++` [.item-kind]#internal#
  6867. [.contract-item]
  6868. [[Packing-extract_20_6-bytes20-uint8-]]
  6869. ==== `[.contract-item-name]#++extract_20_6++#++(bytes20 self, uint8 offset) โ†’ bytes6 result++` [.item-kind]#internal#
  6870. [.contract-item]
  6871. [[Packing-replace_20_6-bytes20-bytes6-uint8-]]
  6872. ==== `[.contract-item-name]#++replace_20_6++#++(bytes20 self, bytes6 value, uint8 offset) โ†’ bytes20 result++` [.item-kind]#internal#
  6873. [.contract-item]
  6874. [[Packing-extract_20_8-bytes20-uint8-]]
  6875. ==== `[.contract-item-name]#++extract_20_8++#++(bytes20 self, uint8 offset) โ†’ bytes8 result++` [.item-kind]#internal#
  6876. [.contract-item]
  6877. [[Packing-replace_20_8-bytes20-bytes8-uint8-]]
  6878. ==== `[.contract-item-name]#++replace_20_8++#++(bytes20 self, bytes8 value, uint8 offset) โ†’ bytes20 result++` [.item-kind]#internal#
  6879. [.contract-item]
  6880. [[Packing-extract_20_10-bytes20-uint8-]]
  6881. ==== `[.contract-item-name]#++extract_20_10++#++(bytes20 self, uint8 offset) โ†’ bytes10 result++` [.item-kind]#internal#
  6882. [.contract-item]
  6883. [[Packing-replace_20_10-bytes20-bytes10-uint8-]]
  6884. ==== `[.contract-item-name]#++replace_20_10++#++(bytes20 self, bytes10 value, uint8 offset) โ†’ bytes20 result++` [.item-kind]#internal#
  6885. [.contract-item]
  6886. [[Packing-extract_20_12-bytes20-uint8-]]
  6887. ==== `[.contract-item-name]#++extract_20_12++#++(bytes20 self, uint8 offset) โ†’ bytes12 result++` [.item-kind]#internal#
  6888. [.contract-item]
  6889. [[Packing-replace_20_12-bytes20-bytes12-uint8-]]
  6890. ==== `[.contract-item-name]#++replace_20_12++#++(bytes20 self, bytes12 value, uint8 offset) โ†’ bytes20 result++` [.item-kind]#internal#
  6891. [.contract-item]
  6892. [[Packing-extract_20_16-bytes20-uint8-]]
  6893. ==== `[.contract-item-name]#++extract_20_16++#++(bytes20 self, uint8 offset) โ†’ bytes16 result++` [.item-kind]#internal#
  6894. [.contract-item]
  6895. [[Packing-replace_20_16-bytes20-bytes16-uint8-]]
  6896. ==== `[.contract-item-name]#++replace_20_16++#++(bytes20 self, bytes16 value, uint8 offset) โ†’ bytes20 result++` [.item-kind]#internal#
  6897. [.contract-item]
  6898. [[Packing-extract_22_1-bytes22-uint8-]]
  6899. ==== `[.contract-item-name]#++extract_22_1++#++(bytes22 self, uint8 offset) โ†’ bytes1 result++` [.item-kind]#internal#
  6900. [.contract-item]
  6901. [[Packing-replace_22_1-bytes22-bytes1-uint8-]]
  6902. ==== `[.contract-item-name]#++replace_22_1++#++(bytes22 self, bytes1 value, uint8 offset) โ†’ bytes22 result++` [.item-kind]#internal#
  6903. [.contract-item]
  6904. [[Packing-extract_22_2-bytes22-uint8-]]
  6905. ==== `[.contract-item-name]#++extract_22_2++#++(bytes22 self, uint8 offset) โ†’ bytes2 result++` [.item-kind]#internal#
  6906. [.contract-item]
  6907. [[Packing-replace_22_2-bytes22-bytes2-uint8-]]
  6908. ==== `[.contract-item-name]#++replace_22_2++#++(bytes22 self, bytes2 value, uint8 offset) โ†’ bytes22 result++` [.item-kind]#internal#
  6909. [.contract-item]
  6910. [[Packing-extract_22_4-bytes22-uint8-]]
  6911. ==== `[.contract-item-name]#++extract_22_4++#++(bytes22 self, uint8 offset) โ†’ bytes4 result++` [.item-kind]#internal#
  6912. [.contract-item]
  6913. [[Packing-replace_22_4-bytes22-bytes4-uint8-]]
  6914. ==== `[.contract-item-name]#++replace_22_4++#++(bytes22 self, bytes4 value, uint8 offset) โ†’ bytes22 result++` [.item-kind]#internal#
  6915. [.contract-item]
  6916. [[Packing-extract_22_6-bytes22-uint8-]]
  6917. ==== `[.contract-item-name]#++extract_22_6++#++(bytes22 self, uint8 offset) โ†’ bytes6 result++` [.item-kind]#internal#
  6918. [.contract-item]
  6919. [[Packing-replace_22_6-bytes22-bytes6-uint8-]]
  6920. ==== `[.contract-item-name]#++replace_22_6++#++(bytes22 self, bytes6 value, uint8 offset) โ†’ bytes22 result++` [.item-kind]#internal#
  6921. [.contract-item]
  6922. [[Packing-extract_22_8-bytes22-uint8-]]
  6923. ==== `[.contract-item-name]#++extract_22_8++#++(bytes22 self, uint8 offset) โ†’ bytes8 result++` [.item-kind]#internal#
  6924. [.contract-item]
  6925. [[Packing-replace_22_8-bytes22-bytes8-uint8-]]
  6926. ==== `[.contract-item-name]#++replace_22_8++#++(bytes22 self, bytes8 value, uint8 offset) โ†’ bytes22 result++` [.item-kind]#internal#
  6927. [.contract-item]
  6928. [[Packing-extract_22_10-bytes22-uint8-]]
  6929. ==== `[.contract-item-name]#++extract_22_10++#++(bytes22 self, uint8 offset) โ†’ bytes10 result++` [.item-kind]#internal#
  6930. [.contract-item]
  6931. [[Packing-replace_22_10-bytes22-bytes10-uint8-]]
  6932. ==== `[.contract-item-name]#++replace_22_10++#++(bytes22 self, bytes10 value, uint8 offset) โ†’ bytes22 result++` [.item-kind]#internal#
  6933. [.contract-item]
  6934. [[Packing-extract_22_12-bytes22-uint8-]]
  6935. ==== `[.contract-item-name]#++extract_22_12++#++(bytes22 self, uint8 offset) โ†’ bytes12 result++` [.item-kind]#internal#
  6936. [.contract-item]
  6937. [[Packing-replace_22_12-bytes22-bytes12-uint8-]]
  6938. ==== `[.contract-item-name]#++replace_22_12++#++(bytes22 self, bytes12 value, uint8 offset) โ†’ bytes22 result++` [.item-kind]#internal#
  6939. [.contract-item]
  6940. [[Packing-extract_22_16-bytes22-uint8-]]
  6941. ==== `[.contract-item-name]#++extract_22_16++#++(bytes22 self, uint8 offset) โ†’ bytes16 result++` [.item-kind]#internal#
  6942. [.contract-item]
  6943. [[Packing-replace_22_16-bytes22-bytes16-uint8-]]
  6944. ==== `[.contract-item-name]#++replace_22_16++#++(bytes22 self, bytes16 value, uint8 offset) โ†’ bytes22 result++` [.item-kind]#internal#
  6945. [.contract-item]
  6946. [[Packing-extract_22_20-bytes22-uint8-]]
  6947. ==== `[.contract-item-name]#++extract_22_20++#++(bytes22 self, uint8 offset) โ†’ bytes20 result++` [.item-kind]#internal#
  6948. [.contract-item]
  6949. [[Packing-replace_22_20-bytes22-bytes20-uint8-]]
  6950. ==== `[.contract-item-name]#++replace_22_20++#++(bytes22 self, bytes20 value, uint8 offset) โ†’ bytes22 result++` [.item-kind]#internal#
  6951. [.contract-item]
  6952. [[Packing-extract_24_1-bytes24-uint8-]]
  6953. ==== `[.contract-item-name]#++extract_24_1++#++(bytes24 self, uint8 offset) โ†’ bytes1 result++` [.item-kind]#internal#
  6954. [.contract-item]
  6955. [[Packing-replace_24_1-bytes24-bytes1-uint8-]]
  6956. ==== `[.contract-item-name]#++replace_24_1++#++(bytes24 self, bytes1 value, uint8 offset) โ†’ bytes24 result++` [.item-kind]#internal#
  6957. [.contract-item]
  6958. [[Packing-extract_24_2-bytes24-uint8-]]
  6959. ==== `[.contract-item-name]#++extract_24_2++#++(bytes24 self, uint8 offset) โ†’ bytes2 result++` [.item-kind]#internal#
  6960. [.contract-item]
  6961. [[Packing-replace_24_2-bytes24-bytes2-uint8-]]
  6962. ==== `[.contract-item-name]#++replace_24_2++#++(bytes24 self, bytes2 value, uint8 offset) โ†’ bytes24 result++` [.item-kind]#internal#
  6963. [.contract-item]
  6964. [[Packing-extract_24_4-bytes24-uint8-]]
  6965. ==== `[.contract-item-name]#++extract_24_4++#++(bytes24 self, uint8 offset) โ†’ bytes4 result++` [.item-kind]#internal#
  6966. [.contract-item]
  6967. [[Packing-replace_24_4-bytes24-bytes4-uint8-]]
  6968. ==== `[.contract-item-name]#++replace_24_4++#++(bytes24 self, bytes4 value, uint8 offset) โ†’ bytes24 result++` [.item-kind]#internal#
  6969. [.contract-item]
  6970. [[Packing-extract_24_6-bytes24-uint8-]]
  6971. ==== `[.contract-item-name]#++extract_24_6++#++(bytes24 self, uint8 offset) โ†’ bytes6 result++` [.item-kind]#internal#
  6972. [.contract-item]
  6973. [[Packing-replace_24_6-bytes24-bytes6-uint8-]]
  6974. ==== `[.contract-item-name]#++replace_24_6++#++(bytes24 self, bytes6 value, uint8 offset) โ†’ bytes24 result++` [.item-kind]#internal#
  6975. [.contract-item]
  6976. [[Packing-extract_24_8-bytes24-uint8-]]
  6977. ==== `[.contract-item-name]#++extract_24_8++#++(bytes24 self, uint8 offset) โ†’ bytes8 result++` [.item-kind]#internal#
  6978. [.contract-item]
  6979. [[Packing-replace_24_8-bytes24-bytes8-uint8-]]
  6980. ==== `[.contract-item-name]#++replace_24_8++#++(bytes24 self, bytes8 value, uint8 offset) โ†’ bytes24 result++` [.item-kind]#internal#
  6981. [.contract-item]
  6982. [[Packing-extract_24_10-bytes24-uint8-]]
  6983. ==== `[.contract-item-name]#++extract_24_10++#++(bytes24 self, uint8 offset) โ†’ bytes10 result++` [.item-kind]#internal#
  6984. [.contract-item]
  6985. [[Packing-replace_24_10-bytes24-bytes10-uint8-]]
  6986. ==== `[.contract-item-name]#++replace_24_10++#++(bytes24 self, bytes10 value, uint8 offset) โ†’ bytes24 result++` [.item-kind]#internal#
  6987. [.contract-item]
  6988. [[Packing-extract_24_12-bytes24-uint8-]]
  6989. ==== `[.contract-item-name]#++extract_24_12++#++(bytes24 self, uint8 offset) โ†’ bytes12 result++` [.item-kind]#internal#
  6990. [.contract-item]
  6991. [[Packing-replace_24_12-bytes24-bytes12-uint8-]]
  6992. ==== `[.contract-item-name]#++replace_24_12++#++(bytes24 self, bytes12 value, uint8 offset) โ†’ bytes24 result++` [.item-kind]#internal#
  6993. [.contract-item]
  6994. [[Packing-extract_24_16-bytes24-uint8-]]
  6995. ==== `[.contract-item-name]#++extract_24_16++#++(bytes24 self, uint8 offset) โ†’ bytes16 result++` [.item-kind]#internal#
  6996. [.contract-item]
  6997. [[Packing-replace_24_16-bytes24-bytes16-uint8-]]
  6998. ==== `[.contract-item-name]#++replace_24_16++#++(bytes24 self, bytes16 value, uint8 offset) โ†’ bytes24 result++` [.item-kind]#internal#
  6999. [.contract-item]
  7000. [[Packing-extract_24_20-bytes24-uint8-]]
  7001. ==== `[.contract-item-name]#++extract_24_20++#++(bytes24 self, uint8 offset) โ†’ bytes20 result++` [.item-kind]#internal#
  7002. [.contract-item]
  7003. [[Packing-replace_24_20-bytes24-bytes20-uint8-]]
  7004. ==== `[.contract-item-name]#++replace_24_20++#++(bytes24 self, bytes20 value, uint8 offset) โ†’ bytes24 result++` [.item-kind]#internal#
  7005. [.contract-item]
  7006. [[Packing-extract_24_22-bytes24-uint8-]]
  7007. ==== `[.contract-item-name]#++extract_24_22++#++(bytes24 self, uint8 offset) โ†’ bytes22 result++` [.item-kind]#internal#
  7008. [.contract-item]
  7009. [[Packing-replace_24_22-bytes24-bytes22-uint8-]]
  7010. ==== `[.contract-item-name]#++replace_24_22++#++(bytes24 self, bytes22 value, uint8 offset) โ†’ bytes24 result++` [.item-kind]#internal#
  7011. [.contract-item]
  7012. [[Packing-extract_28_1-bytes28-uint8-]]
  7013. ==== `[.contract-item-name]#++extract_28_1++#++(bytes28 self, uint8 offset) โ†’ bytes1 result++` [.item-kind]#internal#
  7014. [.contract-item]
  7015. [[Packing-replace_28_1-bytes28-bytes1-uint8-]]
  7016. ==== `[.contract-item-name]#++replace_28_1++#++(bytes28 self, bytes1 value, uint8 offset) โ†’ bytes28 result++` [.item-kind]#internal#
  7017. [.contract-item]
  7018. [[Packing-extract_28_2-bytes28-uint8-]]
  7019. ==== `[.contract-item-name]#++extract_28_2++#++(bytes28 self, uint8 offset) โ†’ bytes2 result++` [.item-kind]#internal#
  7020. [.contract-item]
  7021. [[Packing-replace_28_2-bytes28-bytes2-uint8-]]
  7022. ==== `[.contract-item-name]#++replace_28_2++#++(bytes28 self, bytes2 value, uint8 offset) โ†’ bytes28 result++` [.item-kind]#internal#
  7023. [.contract-item]
  7024. [[Packing-extract_28_4-bytes28-uint8-]]
  7025. ==== `[.contract-item-name]#++extract_28_4++#++(bytes28 self, uint8 offset) โ†’ bytes4 result++` [.item-kind]#internal#
  7026. [.contract-item]
  7027. [[Packing-replace_28_4-bytes28-bytes4-uint8-]]
  7028. ==== `[.contract-item-name]#++replace_28_4++#++(bytes28 self, bytes4 value, uint8 offset) โ†’ bytes28 result++` [.item-kind]#internal#
  7029. [.contract-item]
  7030. [[Packing-extract_28_6-bytes28-uint8-]]
  7031. ==== `[.contract-item-name]#++extract_28_6++#++(bytes28 self, uint8 offset) โ†’ bytes6 result++` [.item-kind]#internal#
  7032. [.contract-item]
  7033. [[Packing-replace_28_6-bytes28-bytes6-uint8-]]
  7034. ==== `[.contract-item-name]#++replace_28_6++#++(bytes28 self, bytes6 value, uint8 offset) โ†’ bytes28 result++` [.item-kind]#internal#
  7035. [.contract-item]
  7036. [[Packing-extract_28_8-bytes28-uint8-]]
  7037. ==== `[.contract-item-name]#++extract_28_8++#++(bytes28 self, uint8 offset) โ†’ bytes8 result++` [.item-kind]#internal#
  7038. [.contract-item]
  7039. [[Packing-replace_28_8-bytes28-bytes8-uint8-]]
  7040. ==== `[.contract-item-name]#++replace_28_8++#++(bytes28 self, bytes8 value, uint8 offset) โ†’ bytes28 result++` [.item-kind]#internal#
  7041. [.contract-item]
  7042. [[Packing-extract_28_10-bytes28-uint8-]]
  7043. ==== `[.contract-item-name]#++extract_28_10++#++(bytes28 self, uint8 offset) โ†’ bytes10 result++` [.item-kind]#internal#
  7044. [.contract-item]
  7045. [[Packing-replace_28_10-bytes28-bytes10-uint8-]]
  7046. ==== `[.contract-item-name]#++replace_28_10++#++(bytes28 self, bytes10 value, uint8 offset) โ†’ bytes28 result++` [.item-kind]#internal#
  7047. [.contract-item]
  7048. [[Packing-extract_28_12-bytes28-uint8-]]
  7049. ==== `[.contract-item-name]#++extract_28_12++#++(bytes28 self, uint8 offset) โ†’ bytes12 result++` [.item-kind]#internal#
  7050. [.contract-item]
  7051. [[Packing-replace_28_12-bytes28-bytes12-uint8-]]
  7052. ==== `[.contract-item-name]#++replace_28_12++#++(bytes28 self, bytes12 value, uint8 offset) โ†’ bytes28 result++` [.item-kind]#internal#
  7053. [.contract-item]
  7054. [[Packing-extract_28_16-bytes28-uint8-]]
  7055. ==== `[.contract-item-name]#++extract_28_16++#++(bytes28 self, uint8 offset) โ†’ bytes16 result++` [.item-kind]#internal#
  7056. [.contract-item]
  7057. [[Packing-replace_28_16-bytes28-bytes16-uint8-]]
  7058. ==== `[.contract-item-name]#++replace_28_16++#++(bytes28 self, bytes16 value, uint8 offset) โ†’ bytes28 result++` [.item-kind]#internal#
  7059. [.contract-item]
  7060. [[Packing-extract_28_20-bytes28-uint8-]]
  7061. ==== `[.contract-item-name]#++extract_28_20++#++(bytes28 self, uint8 offset) โ†’ bytes20 result++` [.item-kind]#internal#
  7062. [.contract-item]
  7063. [[Packing-replace_28_20-bytes28-bytes20-uint8-]]
  7064. ==== `[.contract-item-name]#++replace_28_20++#++(bytes28 self, bytes20 value, uint8 offset) โ†’ bytes28 result++` [.item-kind]#internal#
  7065. [.contract-item]
  7066. [[Packing-extract_28_22-bytes28-uint8-]]
  7067. ==== `[.contract-item-name]#++extract_28_22++#++(bytes28 self, uint8 offset) โ†’ bytes22 result++` [.item-kind]#internal#
  7068. [.contract-item]
  7069. [[Packing-replace_28_22-bytes28-bytes22-uint8-]]
  7070. ==== `[.contract-item-name]#++replace_28_22++#++(bytes28 self, bytes22 value, uint8 offset) โ†’ bytes28 result++` [.item-kind]#internal#
  7071. [.contract-item]
  7072. [[Packing-extract_28_24-bytes28-uint8-]]
  7073. ==== `[.contract-item-name]#++extract_28_24++#++(bytes28 self, uint8 offset) โ†’ bytes24 result++` [.item-kind]#internal#
  7074. [.contract-item]
  7075. [[Packing-replace_28_24-bytes28-bytes24-uint8-]]
  7076. ==== `[.contract-item-name]#++replace_28_24++#++(bytes28 self, bytes24 value, uint8 offset) โ†’ bytes28 result++` [.item-kind]#internal#
  7077. [.contract-item]
  7078. [[Packing-extract_32_1-bytes32-uint8-]]
  7079. ==== `[.contract-item-name]#++extract_32_1++#++(bytes32 self, uint8 offset) โ†’ bytes1 result++` [.item-kind]#internal#
  7080. [.contract-item]
  7081. [[Packing-replace_32_1-bytes32-bytes1-uint8-]]
  7082. ==== `[.contract-item-name]#++replace_32_1++#++(bytes32 self, bytes1 value, uint8 offset) โ†’ bytes32 result++` [.item-kind]#internal#
  7083. [.contract-item]
  7084. [[Packing-extract_32_2-bytes32-uint8-]]
  7085. ==== `[.contract-item-name]#++extract_32_2++#++(bytes32 self, uint8 offset) โ†’ bytes2 result++` [.item-kind]#internal#
  7086. [.contract-item]
  7087. [[Packing-replace_32_2-bytes32-bytes2-uint8-]]
  7088. ==== `[.contract-item-name]#++replace_32_2++#++(bytes32 self, bytes2 value, uint8 offset) โ†’ bytes32 result++` [.item-kind]#internal#
  7089. [.contract-item]
  7090. [[Packing-extract_32_4-bytes32-uint8-]]
  7091. ==== `[.contract-item-name]#++extract_32_4++#++(bytes32 self, uint8 offset) โ†’ bytes4 result++` [.item-kind]#internal#
  7092. [.contract-item]
  7093. [[Packing-replace_32_4-bytes32-bytes4-uint8-]]
  7094. ==== `[.contract-item-name]#++replace_32_4++#++(bytes32 self, bytes4 value, uint8 offset) โ†’ bytes32 result++` [.item-kind]#internal#
  7095. [.contract-item]
  7096. [[Packing-extract_32_6-bytes32-uint8-]]
  7097. ==== `[.contract-item-name]#++extract_32_6++#++(bytes32 self, uint8 offset) โ†’ bytes6 result++` [.item-kind]#internal#
  7098. [.contract-item]
  7099. [[Packing-replace_32_6-bytes32-bytes6-uint8-]]
  7100. ==== `[.contract-item-name]#++replace_32_6++#++(bytes32 self, bytes6 value, uint8 offset) โ†’ bytes32 result++` [.item-kind]#internal#
  7101. [.contract-item]
  7102. [[Packing-extract_32_8-bytes32-uint8-]]
  7103. ==== `[.contract-item-name]#++extract_32_8++#++(bytes32 self, uint8 offset) โ†’ bytes8 result++` [.item-kind]#internal#
  7104. [.contract-item]
  7105. [[Packing-replace_32_8-bytes32-bytes8-uint8-]]
  7106. ==== `[.contract-item-name]#++replace_32_8++#++(bytes32 self, bytes8 value, uint8 offset) โ†’ bytes32 result++` [.item-kind]#internal#
  7107. [.contract-item]
  7108. [[Packing-extract_32_10-bytes32-uint8-]]
  7109. ==== `[.contract-item-name]#++extract_32_10++#++(bytes32 self, uint8 offset) โ†’ bytes10 result++` [.item-kind]#internal#
  7110. [.contract-item]
  7111. [[Packing-replace_32_10-bytes32-bytes10-uint8-]]
  7112. ==== `[.contract-item-name]#++replace_32_10++#++(bytes32 self, bytes10 value, uint8 offset) โ†’ bytes32 result++` [.item-kind]#internal#
  7113. [.contract-item]
  7114. [[Packing-extract_32_12-bytes32-uint8-]]
  7115. ==== `[.contract-item-name]#++extract_32_12++#++(bytes32 self, uint8 offset) โ†’ bytes12 result++` [.item-kind]#internal#
  7116. [.contract-item]
  7117. [[Packing-replace_32_12-bytes32-bytes12-uint8-]]
  7118. ==== `[.contract-item-name]#++replace_32_12++#++(bytes32 self, bytes12 value, uint8 offset) โ†’ bytes32 result++` [.item-kind]#internal#
  7119. [.contract-item]
  7120. [[Packing-extract_32_16-bytes32-uint8-]]
  7121. ==== `[.contract-item-name]#++extract_32_16++#++(bytes32 self, uint8 offset) โ†’ bytes16 result++` [.item-kind]#internal#
  7122. [.contract-item]
  7123. [[Packing-replace_32_16-bytes32-bytes16-uint8-]]
  7124. ==== `[.contract-item-name]#++replace_32_16++#++(bytes32 self, bytes16 value, uint8 offset) โ†’ bytes32 result++` [.item-kind]#internal#
  7125. [.contract-item]
  7126. [[Packing-extract_32_20-bytes32-uint8-]]
  7127. ==== `[.contract-item-name]#++extract_32_20++#++(bytes32 self, uint8 offset) โ†’ bytes20 result++` [.item-kind]#internal#
  7128. [.contract-item]
  7129. [[Packing-replace_32_20-bytes32-bytes20-uint8-]]
  7130. ==== `[.contract-item-name]#++replace_32_20++#++(bytes32 self, bytes20 value, uint8 offset) โ†’ bytes32 result++` [.item-kind]#internal#
  7131. [.contract-item]
  7132. [[Packing-extract_32_22-bytes32-uint8-]]
  7133. ==== `[.contract-item-name]#++extract_32_22++#++(bytes32 self, uint8 offset) โ†’ bytes22 result++` [.item-kind]#internal#
  7134. [.contract-item]
  7135. [[Packing-replace_32_22-bytes32-bytes22-uint8-]]
  7136. ==== `[.contract-item-name]#++replace_32_22++#++(bytes32 self, bytes22 value, uint8 offset) โ†’ bytes32 result++` [.item-kind]#internal#
  7137. [.contract-item]
  7138. [[Packing-extract_32_24-bytes32-uint8-]]
  7139. ==== `[.contract-item-name]#++extract_32_24++#++(bytes32 self, uint8 offset) โ†’ bytes24 result++` [.item-kind]#internal#
  7140. [.contract-item]
  7141. [[Packing-replace_32_24-bytes32-bytes24-uint8-]]
  7142. ==== `[.contract-item-name]#++replace_32_24++#++(bytes32 self, bytes24 value, uint8 offset) โ†’ bytes32 result++` [.item-kind]#internal#
  7143. [.contract-item]
  7144. [[Packing-extract_32_28-bytes32-uint8-]]
  7145. ==== `[.contract-item-name]#++extract_32_28++#++(bytes32 self, uint8 offset) โ†’ bytes28 result++` [.item-kind]#internal#
  7146. [.contract-item]
  7147. [[Packing-replace_32_28-bytes32-bytes28-uint8-]]
  7148. ==== `[.contract-item-name]#++replace_32_28++#++(bytes32 self, bytes28 value, uint8 offset) โ†’ bytes32 result++` [.item-kind]#internal#
  7149. [.contract-item]
  7150. [[Packing-OutOfRangeAccess--]]
  7151. ==== `[.contract-item-name]#++OutOfRangeAccess++#++()++` [.item-kind]#error#
  7152. :GENERIC: pass:normal[xref:#Panic-GENERIC-uint256[`++GENERIC++`]]
  7153. :ASSERT: pass:normal[xref:#Panic-ASSERT-uint256[`++ASSERT++`]]
  7154. :UNDER_OVERFLOW: pass:normal[xref:#Panic-UNDER_OVERFLOW-uint256[`++UNDER_OVERFLOW++`]]
  7155. :DIVISION_BY_ZERO: pass:normal[xref:#Panic-DIVISION_BY_ZERO-uint256[`++DIVISION_BY_ZERO++`]]
  7156. :ENUM_CONVERSION_ERROR: pass:normal[xref:#Panic-ENUM_CONVERSION_ERROR-uint256[`++ENUM_CONVERSION_ERROR++`]]
  7157. :STORAGE_ENCODING_ERROR: pass:normal[xref:#Panic-STORAGE_ENCODING_ERROR-uint256[`++STORAGE_ENCODING_ERROR++`]]
  7158. :EMPTY_ARRAY_POP: pass:normal[xref:#Panic-EMPTY_ARRAY_POP-uint256[`++EMPTY_ARRAY_POP++`]]
  7159. :ARRAY_OUT_OF_BOUNDS: pass:normal[xref:#Panic-ARRAY_OUT_OF_BOUNDS-uint256[`++ARRAY_OUT_OF_BOUNDS++`]]
  7160. :RESOURCE_ERROR: pass:normal[xref:#Panic-RESOURCE_ERROR-uint256[`++RESOURCE_ERROR++`]]
  7161. :INVALID_INTERNAL_FUNCTION: pass:normal[xref:#Panic-INVALID_INTERNAL_FUNCTION-uint256[`++INVALID_INTERNAL_FUNCTION++`]]
  7162. :panic: pass:normal[xref:#Panic-panic-uint256-[`++panic++`]]
  7163. :panic-uint256: pass:normal[xref:#Panic-panic-uint256-[`++panic++`]]
  7164. [.contract]
  7165. [[Panic]]
  7166. === `++Panic++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/Panic.sol[{github-icon},role=heading-link]
  7167. [.hljs-theme-light.nopadding]
  7168. ```solidity
  7169. import "@openzeppelin/contracts/utils/Panic.sol";
  7170. ```
  7171. Helper library for emitting standardized panic codes.
  7172. ```solidity
  7173. contract Example {
  7174. using Panic for uint256;
  7175. // Use any of the declared internal constants
  7176. function foo() { Panic.GENERIC.panic(); }
  7177. // Alternatively
  7178. function foo() { Panic.panic(Panic.GENERIC); }
  7179. }
  7180. ```
  7181. Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].
  7182. _Available since v5.1._
  7183. [.contract-index]
  7184. .Functions
  7185. --
  7186. * {xref-Panic-panic-uint256-}[`++panic(code)++`]
  7187. --
  7188. [.contract-index]
  7189. .Internal Variables
  7190. --
  7191. * {xref-Panic-GENERIC-uint256}[`++uint256 constant GENERIC++`]
  7192. * {xref-Panic-ASSERT-uint256}[`++uint256 constant ASSERT++`]
  7193. * {xref-Panic-UNDER_OVERFLOW-uint256}[`++uint256 constant UNDER_OVERFLOW++`]
  7194. * {xref-Panic-DIVISION_BY_ZERO-uint256}[`++uint256 constant DIVISION_BY_ZERO++`]
  7195. * {xref-Panic-ENUM_CONVERSION_ERROR-uint256}[`++uint256 constant ENUM_CONVERSION_ERROR++`]
  7196. * {xref-Panic-STORAGE_ENCODING_ERROR-uint256}[`++uint256 constant STORAGE_ENCODING_ERROR++`]
  7197. * {xref-Panic-EMPTY_ARRAY_POP-uint256}[`++uint256 constant EMPTY_ARRAY_POP++`]
  7198. * {xref-Panic-ARRAY_OUT_OF_BOUNDS-uint256}[`++uint256 constant ARRAY_OUT_OF_BOUNDS++`]
  7199. * {xref-Panic-RESOURCE_ERROR-uint256}[`++uint256 constant RESOURCE_ERROR++`]
  7200. * {xref-Panic-INVALID_INTERNAL_FUNCTION-uint256}[`++uint256 constant INVALID_INTERNAL_FUNCTION++`]
  7201. --
  7202. [.contract-item]
  7203. [[Panic-panic-uint256-]]
  7204. ==== `[.contract-item-name]#++panic++#++(uint256 code)++` [.item-kind]#internal#
  7205. Reverts with a panic code. Recommended to use with
  7206. the internal constants with predefined codes.
  7207. [.contract-item]
  7208. [[Panic-GENERIC-uint256]]
  7209. ==== `uint256 [.contract-item-name]#++GENERIC++#` [.item-kind]#internal constant#
  7210. generic / unspecified error
  7211. [.contract-item]
  7212. [[Panic-ASSERT-uint256]]
  7213. ==== `uint256 [.contract-item-name]#++ASSERT++#` [.item-kind]#internal constant#
  7214. used by the assert() builtin
  7215. [.contract-item]
  7216. [[Panic-UNDER_OVERFLOW-uint256]]
  7217. ==== `uint256 [.contract-item-name]#++UNDER_OVERFLOW++#` [.item-kind]#internal constant#
  7218. arithmetic underflow or overflow
  7219. [.contract-item]
  7220. [[Panic-DIVISION_BY_ZERO-uint256]]
  7221. ==== `uint256 [.contract-item-name]#++DIVISION_BY_ZERO++#` [.item-kind]#internal constant#
  7222. division or modulo by zero
  7223. [.contract-item]
  7224. [[Panic-ENUM_CONVERSION_ERROR-uint256]]
  7225. ==== `uint256 [.contract-item-name]#++ENUM_CONVERSION_ERROR++#` [.item-kind]#internal constant#
  7226. enum conversion error
  7227. [.contract-item]
  7228. [[Panic-STORAGE_ENCODING_ERROR-uint256]]
  7229. ==== `uint256 [.contract-item-name]#++STORAGE_ENCODING_ERROR++#` [.item-kind]#internal constant#
  7230. invalid encoding in storage
  7231. [.contract-item]
  7232. [[Panic-EMPTY_ARRAY_POP-uint256]]
  7233. ==== `uint256 [.contract-item-name]#++EMPTY_ARRAY_POP++#` [.item-kind]#internal constant#
  7234. empty array pop
  7235. [.contract-item]
  7236. [[Panic-ARRAY_OUT_OF_BOUNDS-uint256]]
  7237. ==== `uint256 [.contract-item-name]#++ARRAY_OUT_OF_BOUNDS++#` [.item-kind]#internal constant#
  7238. array out of bounds access
  7239. [.contract-item]
  7240. [[Panic-RESOURCE_ERROR-uint256]]
  7241. ==== `uint256 [.contract-item-name]#++RESOURCE_ERROR++#` [.item-kind]#internal constant#
  7242. resource error (too large allocation or too large array)
  7243. [.contract-item]
  7244. [[Panic-INVALID_INTERNAL_FUNCTION-uint256]]
  7245. ==== `uint256 [.contract-item-name]#++INVALID_INTERNAL_FUNCTION++#` [.item-kind]#internal constant#
  7246. calling invalid internal function
  7247. :lt: pass:normal[xref:#Comparators-lt-uint256-uint256-[`++lt++`]]
  7248. :gt: pass:normal[xref:#Comparators-gt-uint256-uint256-[`++gt++`]]
  7249. :lt-uint256-uint256: pass:normal[xref:#Comparators-lt-uint256-uint256-[`++lt++`]]
  7250. :gt-uint256-uint256: pass:normal[xref:#Comparators-gt-uint256-uint256-[`++gt++`]]
  7251. [.contract]
  7252. [[Comparators]]
  7253. === `++Comparators++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/Comparators.sol[{github-icon},role=heading-link]
  7254. [.hljs-theme-light.nopadding]
  7255. ```solidity
  7256. import "@openzeppelin/contracts/utils/Comparators.sol";
  7257. ```
  7258. Provides a set of functions to compare values.
  7259. _Available since v5.1._
  7260. [.contract-index]
  7261. .Functions
  7262. --
  7263. * {xref-Comparators-lt-uint256-uint256-}[`++lt(a, b)++`]
  7264. * {xref-Comparators-gt-uint256-uint256-}[`++gt(a, b)++`]
  7265. --
  7266. [.contract-item]
  7267. [[Comparators-lt-uint256-uint256-]]
  7268. ==== `[.contract-item-name]#++lt++#++(uint256 a, uint256 b) โ†’ bool++` [.item-kind]#internal#
  7269. [.contract-item]
  7270. [[Comparators-gt-uint256-uint256-]]
  7271. ==== `[.contract-item-name]#++gt++#++(uint256 a, uint256 b) โ†’ bool++` [.item-kind]#internal#
  7272. :local: pass:normal[xref:#CAIP2-local--[`++local++`]]
  7273. :format: pass:normal[xref:#CAIP2-format-string-string-[`++format++`]]
  7274. :parse: pass:normal[xref:#CAIP2-parse-string-[`++parse++`]]
  7275. :local-: pass:normal[xref:#CAIP2-local--[`++local++`]]
  7276. :format-string-string: pass:normal[xref:#CAIP2-format-string-string-[`++format++`]]
  7277. :parse-string: pass:normal[xref:#CAIP2-parse-string-[`++parse++`]]
  7278. [.contract]
  7279. [[CAIP2]]
  7280. === `++CAIP2++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/CAIP2.sol[{github-icon},role=heading-link]
  7281. [.hljs-theme-light.nopadding]
  7282. ```solidity
  7283. import "@openzeppelin/contracts/utils/CAIP2.sol";
  7284. ```
  7285. Helper library to format and parse CAIP-2 identifiers
  7286. https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md[CAIP-2] defines chain identifiers as:
  7287. chain_id: namespace + ":" + reference
  7288. namespace: [-a-z0-9]{3,8}
  7289. reference: [-_a-zA-Z0-9]{1,32}
  7290. WARNING: In some cases, multiple CAIP-2 identifiers may all be valid representation of a single chain.
  7291. For EVM chains, it is recommended to use `eip155:xxx` as the canonical representation (where `xxx` is
  7292. the EIP-155 chain id). Consider the possible ambiguity when processing CAIP-2 identifiers or when using them
  7293. in the context of hashes.
  7294. [.contract-index]
  7295. .Functions
  7296. --
  7297. * {xref-CAIP2-local--}[`++local()++`]
  7298. * {xref-CAIP2-format-string-string-}[`++format(namespace, ref)++`]
  7299. * {xref-CAIP2-parse-string-}[`++parse(caip2)++`]
  7300. --
  7301. [.contract-item]
  7302. [[CAIP2-local--]]
  7303. ==== `[.contract-item-name]#++local++#++() โ†’ string++` [.item-kind]#internal#
  7304. Return the CAIP-2 identifier for the current (local) chain.
  7305. [.contract-item]
  7306. [[CAIP2-format-string-string-]]
  7307. ==== `[.contract-item-name]#++format++#++(string namespace, string ref) โ†’ string++` [.item-kind]#internal#
  7308. Return the CAIP-2 identifier for a given namespace and reference.
  7309. NOTE: This function does not verify that the inputs are properly formatted.
  7310. [.contract-item]
  7311. [[CAIP2-parse-string-]]
  7312. ==== `[.contract-item-name]#++parse++#++(string caip2) โ†’ string namespace, string ref++` [.item-kind]#internal#
  7313. Parse a CAIP-2 identifier into its components.
  7314. NOTE: This function does not verify that the CAIP-2 input is properly formatted.
  7315. :local: pass:normal[xref:#CAIP10-local-address-[`++local++`]]
  7316. :format: pass:normal[xref:#CAIP10-format-string-string-[`++format++`]]
  7317. :parse: pass:normal[xref:#CAIP10-parse-string-[`++parse++`]]
  7318. :local-address: pass:normal[xref:#CAIP10-local-address-[`++local++`]]
  7319. :format-string-string: pass:normal[xref:#CAIP10-format-string-string-[`++format++`]]
  7320. :parse-string: pass:normal[xref:#CAIP10-parse-string-[`++parse++`]]
  7321. [.contract]
  7322. [[CAIP10]]
  7323. === `++CAIP10++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/CAIP10.sol[{github-icon},role=heading-link]
  7324. [.hljs-theme-light.nopadding]
  7325. ```solidity
  7326. import "@openzeppelin/contracts/utils/CAIP10.sol";
  7327. ```
  7328. Helper library to format and parse CAIP-10 identifiers
  7329. https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-10.md[CAIP-10] defines account identifiers as:
  7330. account_id: chain_id + ":" + account_address
  7331. chain_id: [-a-z0-9]{3,8}:[-_a-zA-Z0-9]{1,32} (See {CAIP2})
  7332. account_address: [-.%a-zA-Z0-9]{1,128}
  7333. WARNING: According to [CAIP-10's canonicalization section](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-10.md#canonicalization),
  7334. the implementation remains at the developer's discretion. Please note that case variations may introduce ambiguity.
  7335. For example, when building hashes to identify accounts or data associated to them, multiple representations of the
  7336. same account would derive to different hashes. For EVM chains, we recommend using checksummed addresses for the
  7337. "account_address" part. They can be generated onchain using {Strings-toChecksumHexString}.
  7338. [.contract-index]
  7339. .Functions
  7340. --
  7341. * {xref-CAIP10-local-address-}[`++local(account)++`]
  7342. * {xref-CAIP10-format-string-string-}[`++format(caip2, account)++`]
  7343. * {xref-CAIP10-parse-string-}[`++parse(caip10)++`]
  7344. --
  7345. [.contract-item]
  7346. [[CAIP10-local-address-]]
  7347. ==== `[.contract-item-name]#++local++#++(address account) โ†’ string++` [.item-kind]#internal#
  7348. Return the CAIP-10 identifier for an account on the current (local) chain.
  7349. [.contract-item]
  7350. [[CAIP10-format-string-string-]]
  7351. ==== `[.contract-item-name]#++format++#++(string caip2, string account) โ†’ string++` [.item-kind]#internal#
  7352. Return the CAIP-10 identifier for a given caip2 chain and account.
  7353. NOTE: This function does not verify that the inputs are properly formatted.
  7354. [.contract-item]
  7355. [[CAIP10-parse-string-]]
  7356. ==== `[.contract-item-name]#++parse++#++(string caip10) โ†’ string caip2, string account++` [.item-kind]#internal#
  7357. Parse a CAIP-10 identifier into its components.
  7358. NOTE: This function does not verify that the CAIP-10 input is properly formatted. The `caip2` return can be
  7359. parsed using the {CAIP2} library.
  7360. :HISTORY_STORAGE_ADDRESS: pass:normal[xref:#Blockhash-HISTORY_STORAGE_ADDRESS-address[`++HISTORY_STORAGE_ADDRESS++`]]
  7361. :blockHash: pass:normal[xref:#Blockhash-blockHash-uint256-[`++blockHash++`]]
  7362. :blockHash-uint256: pass:normal[xref:#Blockhash-blockHash-uint256-[`++blockHash++`]]
  7363. [.contract]
  7364. [[Blockhash]]
  7365. === `++Blockhash++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/Blockhash.sol[{github-icon},role=heading-link]
  7366. [.hljs-theme-light.nopadding]
  7367. ```solidity
  7368. import "@openzeppelin/contracts/utils/Blockhash.sol";
  7369. ```
  7370. Library for accessing historical block hashes beyond the standard 256 block limit.
  7371. Uses EIP-2935's history storage contract which maintains a ring buffer of the last
  7372. 8191 block hashes in state.
  7373. For blocks within the last 256 blocks, it uses the native `BLOCKHASH` opcode.
  7374. For blocks between 257 and 8191 blocks ago, it queries the EIP-2935 history storage.
  7375. For blocks older than 8191 or future blocks, it returns zero, matching the `BLOCKHASH` behavior.
  7376. NOTE: After EIP-2935 activation, it takes 8191 blocks to completely fill the history.
  7377. Before that, only block hashes since the fork block will be available.
  7378. [.contract-index]
  7379. .Functions
  7380. --
  7381. * {xref-Blockhash-blockHash-uint256-}[`++blockHash(blockNumber)++`]
  7382. --
  7383. [.contract-index]
  7384. .Internal Variables
  7385. --
  7386. * {xref-Blockhash-HISTORY_STORAGE_ADDRESS-address}[`++address constant HISTORY_STORAGE_ADDRESS++`]
  7387. --
  7388. [.contract-item]
  7389. [[Blockhash-blockHash-uint256-]]
  7390. ==== `[.contract-item-name]#++blockHash++#++(uint256 blockNumber) โ†’ bytes32++` [.item-kind]#internal#
  7391. Retrieves the block hash for any historical block within the supported range.
  7392. NOTE: The function gracefully handles future blocks and blocks beyond the history window
  7393. by returning zero, consistent with the EVM's native `BLOCKHASH` behavior.
  7394. [.contract-item]
  7395. [[Blockhash-HISTORY_STORAGE_ADDRESS-address]]
  7396. ==== `address [.contract-item-name]#++HISTORY_STORAGE_ADDRESS++#` [.item-kind]#internal constant#
  7397. Address of the EIP-2935 history storage contract.
  7398. :timestamp: pass:normal[xref:#Time-timestamp--[`++timestamp++`]]
  7399. :blockNumber: pass:normal[xref:#Time-blockNumber--[`++blockNumber++`]]
  7400. :Delay: pass:normal[xref:#Time-Delay[`++Delay++`]]
  7401. :toDelay: pass:normal[xref:#Time-toDelay-uint32-[`++toDelay++`]]
  7402. :getFull: pass:normal[xref:#Time-getFull-Time-Delay-[`++getFull++`]]
  7403. :get: pass:normal[xref:#Time-get-Time-Delay-[`++get++`]]
  7404. :withUpdate: pass:normal[xref:#Time-withUpdate-Time-Delay-uint32-uint32-[`++withUpdate++`]]
  7405. :unpack: pass:normal[xref:#Time-unpack-Time-Delay-[`++unpack++`]]
  7406. :pack: pass:normal[xref:#Time-pack-uint32-uint32-uint48-[`++pack++`]]
  7407. :timestamp-: pass:normal[xref:#Time-timestamp--[`++timestamp++`]]
  7408. :blockNumber-: pass:normal[xref:#Time-blockNumber--[`++blockNumber++`]]
  7409. :toDelay-uint32: pass:normal[xref:#Time-toDelay-uint32-[`++toDelay++`]]
  7410. :getFull-Time-Delay: pass:normal[xref:#Time-getFull-Time-Delay-[`++getFull++`]]
  7411. :get-Time-Delay: pass:normal[xref:#Time-get-Time-Delay-[`++get++`]]
  7412. :withUpdate-Time-Delay-uint32-uint32: pass:normal[xref:#Time-withUpdate-Time-Delay-uint32-uint32-[`++withUpdate++`]]
  7413. :unpack-Time-Delay: pass:normal[xref:#Time-unpack-Time-Delay-[`++unpack++`]]
  7414. :pack-uint32-uint32-uint48: pass:normal[xref:#Time-pack-uint32-uint32-uint48-[`++pack++`]]
  7415. [.contract]
  7416. [[Time]]
  7417. === `++Time++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/utils/types/Time.sol[{github-icon},role=heading-link]
  7418. [.hljs-theme-light.nopadding]
  7419. ```solidity
  7420. import "@openzeppelin/contracts/utils/types/Time.sol";
  7421. ```
  7422. This library provides helpers for manipulating time-related objects.
  7423. It uses the following types:
  7424. - `uint48` for timepoints
  7425. - `uint32` for durations
  7426. While the library doesn't provide specific types for timepoints and duration, it does provide:
  7427. - a `Delay` type to represent duration that can be programmed to change value automatically at a given point
  7428. - additional helper functions
  7429. [.contract-index]
  7430. .Functions
  7431. --
  7432. * {xref-Time-timestamp--}[`++timestamp()++`]
  7433. * {xref-Time-blockNumber--}[`++blockNumber()++`]
  7434. * {xref-Time-toDelay-uint32-}[`++toDelay(duration)++`]
  7435. * {xref-Time-getFull-Time-Delay-}[`++getFull(self)++`]
  7436. * {xref-Time-get-Time-Delay-}[`++get(self)++`]
  7437. * {xref-Time-withUpdate-Time-Delay-uint32-uint32-}[`++withUpdate(self, newValue, minSetback)++`]
  7438. * {xref-Time-unpack-Time-Delay-}[`++unpack(self)++`]
  7439. * {xref-Time-pack-uint32-uint32-uint48-}[`++pack(valueBefore, valueAfter, effect)++`]
  7440. --
  7441. [.contract-item]
  7442. [[Time-timestamp--]]
  7443. ==== `[.contract-item-name]#++timestamp++#++() โ†’ uint48++` [.item-kind]#internal#
  7444. Get the block timestamp as a Timepoint.
  7445. [.contract-item]
  7446. [[Time-blockNumber--]]
  7447. ==== `[.contract-item-name]#++blockNumber++#++() โ†’ uint48++` [.item-kind]#internal#
  7448. Get the block number as a Timepoint.
  7449. [.contract-item]
  7450. [[Time-toDelay-uint32-]]
  7451. ==== `[.contract-item-name]#++toDelay++#++(uint32 duration) โ†’ Time.Delay++` [.item-kind]#internal#
  7452. Wrap a duration into a Delay to add the one-step "update in the future" feature
  7453. [.contract-item]
  7454. [[Time-getFull-Time-Delay-]]
  7455. ==== `[.contract-item-name]#++getFull++#++(Time.Delay self) โ†’ uint32 valueBefore, uint32 valueAfter, uint48 effect++` [.item-kind]#internal#
  7456. Get the current value plus the pending value and effect timepoint if there is a scheduled change. If the
  7457. effect timepoint is 0, then the pending value should not be considered.
  7458. [.contract-item]
  7459. [[Time-get-Time-Delay-]]
  7460. ==== `[.contract-item-name]#++get++#++(Time.Delay self) โ†’ uint32++` [.item-kind]#internal#
  7461. Get the current value.
  7462. [.contract-item]
  7463. [[Time-withUpdate-Time-Delay-uint32-uint32-]]
  7464. ==== `[.contract-item-name]#++withUpdate++#++(Time.Delay self, uint32 newValue, uint32 minSetback) โ†’ Time.Delay updatedDelay, uint48 effect++` [.item-kind]#internal#
  7465. Update a Delay object so that it takes a new duration after a timepoint that is automatically computed to
  7466. enforce the old delay at the moment of the update. Returns the updated Delay object and the timestamp when the
  7467. new delay becomes effective.
  7468. [.contract-item]
  7469. [[Time-unpack-Time-Delay-]]
  7470. ==== `[.contract-item-name]#++unpack++#++(Time.Delay self) โ†’ uint32 valueBefore, uint32 valueAfter, uint48 effect++` [.item-kind]#internal#
  7471. Split a delay into its components: valueBefore, valueAfter and effect (transition timepoint).
  7472. [.contract-item]
  7473. [[Time-pack-uint32-uint32-uint48-]]
  7474. ==== `[.contract-item-name]#++pack++#++(uint32 valueBefore, uint32 valueAfter, uint48 effect) โ†’ Time.Delay++` [.item-kind]#internal#
  7475. pack the components into a Delay object.