Source Code
Overview
POL Balance
0 POL
More Info
ContractCreator
Multichain Info
N/A
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
SemaphoreVerifier
Compiler Version
v0.8.23+commit.f704f362
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // Part of this file was generated with [snarkJS](https://github.com/iden3/snarkjs). pragma solidity 0.8.23; import {MAX_DEPTH} from "./Constants.sol"; contract SemaphoreVerifier { // Scalar field size uint256 constant r = 21888242871839275222246405745257275088548364400416034343698204186575808495617; // Base field size uint256 constant q = 21888242871839275222246405745257275088696311157297823662689037894645226208583; // Verification Key data uint256 constant alphax = 20491192805390485299153009773594534940189261866228447918068658471970481763042; uint256 constant alphay = 9383485363053290200918347156157836566562967994039712273449902621266178545958; uint256 constant betax1 = 4252822878758300859123897981450591353533073413197771768651442665752259397132; uint256 constant betax2 = 6375614351688725206403948262868962793625744043794305715222011528459656738731; uint256 constant betay1 = 21847035105528745403288232691147584728191162732299865338377159692350059136679; uint256 constant betay2 = 10505242626370262277552901082094356697409835680220590971873171140371331206856; uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634; uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781; uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531; uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930; // Verification Key points. // These values are taken from the verification key json file generated with snarkjs. // It allows to use the same verifier to verify proofs for all the tree depths supported by Semaphore. uint256[14][MAX_DEPTH] VK_POINTS = [ [ 6798275159111696631765684932966934480819839778360905827982023140392612472251, 10049769308514589345710525790497478045162192181874654650612439582831356277192, 13909893679970909921284721325099295595079958875696358686115736114533495869795, 9632931161306518428495887250948808623666181422608519935229236995717535313753, 11373228439083951786763438874368468668602473169346848394664028118071804690004, 2392728274936215006016716287711141290248196217507457308817981648956555973842, 21165236263460891597139480651611604342552675916374159149811150532317922022637, 2205889866435138776852640052657720558691248366998420655585799331913362910317, 5142950424486523257531761394520431861723450305642839631787321698382624066484, 15189409525440736600177098582380596261100810741418368942552492853472187151232, 15166768161845773257369241904008805578918273462394677953758522994830670545180, 11585842449811129847758954303386730558495513604993443241740010514431580852767, 18309269743519286170259635930367379586611051469932392196263349325096833776404, 5169422438906150387687192335052847822734742081564185146089879581734761329500 ], [ 9002589149121965406377790703690701514742110610103894317373190676851261250182, 19341779283870938325962302230892649885502492339014465701160403382913313018716, 15384387008815567134216543585911373077215244920196736604974944142355824894376, 15853924395610285571497184614672056220255220256147800551140212909213761909913, 9858819933413872566321287453112479619079314892623028633956302548255682218967, 8978980794620905465584214544974627507731009260328687273037813961789203643024, 10076358326823042048333094257819800797834453359160913022846795563251044706095, 19803968301016597767781555029004899114416563609613744105056144083718519453457, 5163620256392555974431339018883081297271688900512864797552560460039668157036, 14255936460639291949681319740874191007595598327244735898045668418052144766452, 14537605621065916653836904827349546258169731169287489407049733321313440129043, 13697104552179432948127977631695913762483329167428550338828664939969524379194, 10518837188707767707511411972157042015637825295037224566646839468274503919246, 20859740531774787409224706405964614133972994888613078458739440328759279998775 ], [ 4892475367240699533498124978912576905968020673574559095879617409161257740280, 20083606144842666939684160820556467581044745205228415333288523629251382490832, 19196917991372254097659601920372094664470329157515388592183392963173987434415, 8880701712891502068342106183752508169009511975869428067925759962432179990770, 8295798606560676055262757451569098075661634806877203374010954805416034560369, 17823033916327857017646050340986899797748134226556967395794361949180557598708, 7863282428525672743372793899382505053760053469668593484933349016990801573594, 18331488006684435728676028523354067877257617459721620528326034910754871664656, 3208791308718324440134969236351379590643354353649811828887575168234009128404, 10257765481441384707633559757593912517257134336953024015057545492286789467798, 211202131360446365222702196868578991195656024430005775334667458570635430182, 20847900408506094777967626429608261593000174750467914924458433091857566381170, 12874163201492094577931796006056258188942453406826318262453514614280169978298, 6030254908603478785612749007917517401778254879153565233016575793713168729906 ], [ 14709385606134004409926090352432771201334818755294681438762198567603122984956, 15595111262392352699569329550863719272136417639201948573321210451845475261310, 14227147558489134328158035447732190048870965571562543433839005727350235629494, 6894292519900463438264764292659242116361936210107228897203114956615108320465, 5698226291009392212509456603087660757167892215070748391710298686451794945150, 6157973895099184288402315817801807399850034827661856468278605062696847353498, 15141526076642728649535042926649597908183234939224775055067110611584500129001, 4384760212321739848884344304193577499977798066111221580475869690599633722806, 4172483707996304656828832165635673373391709578552982633845732115764569616109, 18703118242791177268087540217341214701751955061868356627779317654228486952499, 19450300041750343627209216069867232901980973906626832440586455706765725761024, 16059746288175455494980620176090534670137960271693908437020084988051972211964, 20545976615820429183066000767405817531114365884543728191728740956241774393365, 441682222632036954103668474012025602234972690129065917741930205184363335774 ], [ 5475541246268319974306511838266954642349839591742677843373092350878881816036, 14320850367979727803456370253215537369678224171279198206044992705279862306132, 14026863062721131266417143383735927929515468275568001741023143022462108466668, 9695519010485916829174245942670015592311240112874015080337013283624414875322, 5694780594861626040122686431862072023944220266576706715410778734338641503716, 8712472904136893949123536631603982882802768648960668490262215595304129180625, 1995786476093573828491499692373505173525336583145392096683467783999902548268, 4926925836258627177637371690839427994092983220113811290959738100072290144384, 3791559722445528845247206264702403543222196830021730221796818130566106209767, 18417761581887733852915376127193234657558128442956795523445623750943914605716, 6559711611059474660788123194641390228396298237139470196512451543415077405796, 10546964127996233691569839986330212916129646278460480030759233831657936468012, 19639002331873293572459373894235941550278985499149213248754356208213460657162, 16617740711303077578250556582154106231075844388484693766277639059298286987625 ], [ 10286912080628596477467183526391676938111746098793720613051271594210995874277, 12402838088924052923512617712407943454558325804407246215860795418264423785092, 8969827906164370148568535190125332589838680819876134752608330672491611718778, 18192144771812728760821091791509406004413270888917521896519497516182602851052, 10137887164821194167739010222610234245229180897989876335252633099720202939025, 13556557929447859629157159796541922173969485671491640178139584889369979056605, 18001826336416230108554083436980932740049468855770464827475781769090259294957, 10997751199060512644156045915284269336171252742084691214654620601348632057908, 79913969765597476108932900497715672182891152853885723893501837676479334643, 5339064100797178384601587097901074769415731437415874905101259438574150065725, 11790468783349396195257730524002236946005794800506042451697489501177528985869, 2058745275642252757008568790584694831559296102476273845301514491747777902, 8569838436054970055409792695113682207394942064434307728493565465575383738014, 13183322615830117090366962414504200812495447396240587506161350006490578304105 ], [ 21294477411884184721419887719040509211791603543588769195913632677965664561521, 11068844518467094308182673400072406174415035287465774858372276008144890272347, 3145975317148809397211222308484405528017506805621720865271122352919092734185, 4898298183000166428070984533097167988044449442228324686951622815588789280020, 3610567344582501189941093515503625764015617358100951789070992465620388014770, 10092557495034796324189431780067983533486688638792444215776822879681822814418, 1266136239205073111432095590744834423814511894190159459963868637184138842722, 11374864676654295041142699893206238903356920702572230940823052344171478284171, 7496182320409371534981231046400216671163346135425875811178408606577271153492, 1462528704706444827904493040179558039394825924259061934534583958249261959624, 16141406653410498360525438265360373701532563198050057601030953589813051750690, 14018180053857919258735952789533727227462568550710713906158448711665296451356, 511374127838749625770334668647416912569313578777284750605965725458096929607, 17635169227434142694714979150654436187903738366738972509867831826867283825221 ], [ 17019299296527992906342471627956454165356014861255173051509531752951474839628, 18275029135856620478842184125347270385705018956856636472544734692104668441197, 18712955702371136698460276131619504667967074451844136203135440318125770689683, 4726292743397434547486156972449202870187918808626632743805765024906772393932, 10971489037448711908698715978943908500318707562175731815741960924655210840831, 6006427343343794957952233726619963086279381477900155964075102505701412817059, 15106747726469907788692287944434907296109850836405367650663267344226048690859, 20492702082677255463093066854699770210633096845859381878102473765397334244292, 20017671604137050517701389289600332952924272776091967565221423262198791114477, 19092277823744726322414075820335182617528620489612060910384627313255069537857, 521420364975417235554366424369539937652264103736140177007376087084617840969, 3996914661098703435279657116324643068485300222550651293916442007463647760470, 4679024209278631191232555253447082923762821738851347894762954616029136450469, 8497347026541846312098745702841179850966624542794907236048342704145659678775 ], [ 7070022814268269475674001477040669982274081663112043242616687573179272469763, 4203949560354147821783061259439508268015232617968894950825877033100175693770, 15428836885992191488864297196572470385256339610669991675966605773279258629810, 12940391355331109441147053871885221765801476632578768077585085250842908979972, 6504013699913689711099075581237522738280971836923813934562267069952131008789, 9335304366750096675257996749136859439347731736177301019673263812644758419624, 18674691980838913091347677991332234920479452203295602521958600357998616141596, 4741568400157063102689633599777211724821079787176561142252991434247861983373, 6081240166901015395566231760209678592881994305266889564610929100038948121840, 6726099338457783260423971895907643672217936148382337363967495541886267184664, 1518231630037540558074208692256894068220282655237665440528391362801123567400, 6814959623000862963349418000763326032812413890585599160227546882616685479781, 17691964860627566514162469663546469998385191762053312278765810284413361692706, 8886638770454932775046812264172460584356331780532116653693013498914944507850 ], [ 9215863273591023879373751614289228209440638027086548351177699133093136218918, 15029143251469020678417745262015955011761489030158757959406941301509954637253, 17639902090432855761607212999107125862255080434477939330403550134367931862250, 17630923485910370531147811073172401806424795286222769017995022586794787691894, 6051337981942268387146348592741777699916830790184591013400952407193740242722, 14813309083853385461981331205467429689964041093530055551198131882311452944165, 13243916879266487104491184915617833718034439141755271499342847081003561471291, 20559308417239116672012110806712907520758637467837138402161111223933628840592, 19581439469161095403630005805154174170687505024117879919441181595776240034092, 17149923765379212333833055145767060687040557826663126725983709990821216291941, 8848229792169763857187638630433883807573443546037902935946980878173551942434, 9076584903972238461379608530218901607367189390010139393438137978954314962294, 2838594782505936821949168913265923356032509180068328675364337511551145041706, 12082207822506113008552336146445599677710895859529470992436917935385155760011 ], [ 11286999809932675831231635172884104916598198610643895494221292893580015272745, 13783008611244158112820345862046566925592820181422685465611038024392658912218, 7399859568003719929092067255297667044787076639314018778324389410794797203822, 18220331907668058189189266984811818382536030325980319490052254711990106619408, 7221075042299165070640763584725863160347647659704278782330562384672809305162, 13601198331885563117630840819920283945716376381432043240564878006092148603574, 17966363662480886855360210401838893312981368660270687414500495451106355682632, 9255647376958236127578779968319205385670535134228597865566167852255941456992, 8203959912436866237932353632392355578980349384400645301966843912631449233592, 20011411139499301504584228175724552542130947288854633651397978547089429982167, 1820524505387064465309460998360793499775868154592043137422833944836520606454, 1959603910351136409471920269505238383870634384371099582856753558856496902512, 4198694051360120490653446337443734423586650228488283685090646499268901675490, 21526524841382152147992421724785801038770676270240714297859552516739773492697 ], [ 16377454805970471136556451041642561492050129029468552950239023629414014853926, 17038353963915800405951415178090940216214909064699790293151814567548494237780, 3632028168433409518690370660019979191925992823806956511592031439491580827093, 15490021089663831333876456182365939475639854244939093159179164741657017023319, 11332498437023113295175458390938230450212523402749978995184951126111215368275, 7016084735586326731105326496042171157633237979413962565940384222454876829020, 5013383022618445727921740844767853050438275291216971327851792785650669011741, 528618354489883480125467549183593651465882051681270315858578353218107644734, 6932115924239435517832880685428272633342271017032662880345701095160428372300, 5520601709801507363146277496110244143378961419982733100311341395981490633588, 434079293392651414251114604226309649137438107252197032381696615267775897288, 18623332313653972273799518879682220458729835518812577091590130632605360081933, 16981203870828204556408891045732712151034600645789784935821356391746701607849, 10839961472824284602079430847341654099878245597092020402049973455392611362164 ], [ 19318612173039398554610402032189036230760569630971013176034600348734573687128, 10869362019203773549991994466432246818750552482449272815024995819170579818159, 17376037803297137953593713472693431735691900221654570494069764772063916969267, 3245151284162480382840661459866398914990218375518126822356780454697379196592, 10532694937633872732615221785339191399998813277853598590284977223084586265406, 18569891906743239236657790847950300608514739578359676359176841830736581922673, 5204330292569275288250153279775499240677764904182920564782936399035494759139, 14869136923170104943599081137392440247136712268832152014557322866069417673392, 16609139756845639786750046885223171804867949172280450359139781662901766868597, 7367747621397764356413880321758620580129087430671669202576071458908338963767, 18157171842959734937470210968648189999811759058976098804831380331978049484161, 14612065821098816890897211924691530301447930045836897440401478111363414764157, 3678851330338811698871212394774190592148694554830208940152772420325429207592, 1261073646471879421850354957670569129175034189935008550219832398890385831603 ], [ 13337456010890669571312110722110978626654402271645533931088450675631972389174, 21739762430966591611544841693197130387727042679304816904320680605415377362025, 21111955068677333960505079108312560231811849538594697119908234179626105686302, 9392230200497743555544102618287208999941692619434060081126831244370851959140, 18128060449612109642142496525936963279825759724692188014181733764391545826501, 6412545369924963430376339636555328095118045874871394681127600419621347748574, 9178419128141821432265215706509797566711681420667049266964463482093364121974, 12757958736224258162889762688354106158996770313065275427510212926355720788806, 21697843782274732041256438596018216848529426578597975296740068185709056950695, 9641329027897013830146943496858364657344657408442613002988204006109548012670, 10157462635214395067310714425532743819094195406756516970796212542533337329791, 6756552332702121619038049584093175387814338143922613739401669728656840170909, 9276003791014657516094759987195269349958840151064358512535335441437526577719, 17177335596130235736675313878734353760926293469390853206840228086544227127243 ], [ 10611805799193697089972647133835358446175696630019306104758388585312795475026, 9765887841111014027207536734081294072212942995633675647422724718381533100171, 19734635784073407875945934329600179316595807453795254623432046479616133177247, 12111202900875841332274674234864138665123655274511234144349518743965832241535, 4691701433964504850819405353426875432448611177084640879664399563684106977201, 6997026109056305304958456212770850719737661180940807196442278723629505898836, 21862540916562048400075167198394269266629631981308358022452061330955535980535, 20203136947717696850833432049217389834551585785220431602620838951128875924332, 6166688558584392552732686802822787347815166465668907688252438119180905848686, 1515830657197384709067854833370847128665474205967014377229527531272518040510, 9783110166666159719262248155776421656845594701278593694743917659000214566949, 14498343612651837182986000137068086166435021811504906980633109697812438152688, 7451534988011232583608528483663880320228268776552285912767998924492654022315, 14389118774297616531519885127100101489071211382178872997387065906551438715617 ], [ 21819764752388384320943920865020023504588699757854723759009625630599418384159, 9338876125692749169921649753345966897920335121369780024613311788669200836231, 16193105938174292468402166430441544247332830012383311834096877330373326202912, 18733835313573560168713238640348200008758608939774980957241614757051426557329, 17586200399272141670685001491641162521294196727236050999778548238215046166017, 281329337697491075931159352771449215426528517554332825727307529327678211850, 13587768455979634277266588196077051473493752291227370910424884771755142551393, 12132714832736811067697324782216133875324337588127071061942622831539088199516, 5424242637034241045316293106740200282134858230716641545833281265555664814058, 4099977807866045222441365441679488428090978308192769063472099506097446172444, 20991094374514370732056452708323057419772785522538068181419368097559064487764, 17494034245166301533444525935585362973100718889755879021217726039762737332309, 21513377844056886482755561165035200163740875639723610667981589251852648290497, 9065101624205101464784359744884631484276281653365096468139033730232168384170 ], [ 9675068040487058613030479303481110062861018853323992035192122053375288989240, 3919601513420678474289276072949118564098120747866534224625771548831677958372, 14608360470284772612816373122857162753416790881336559383898199290740342112532, 14825744772260021909192492207967364627484904101011554011523154032558083852565, 20984349344022619370458450579312578055808523135369866643465670885076660164806, 418264638272070574199167297855020670696708537402223370097894154915338824856, 21427513166561351336822904548010728579322568176247623689193394481261310743729, 17218242846472515735641714187716984107651753683015981795233490838798663005098, 21103921212558832170255972733170723908475938955264614598038505509464559335152, 10402439116707708662126524824676626448483957064152280120730850351913612702748, 17902409153345924357919108278878752639341210912451068626743802458423268435162, 17156991212231172773517848502387153524430619870630373199856683436943875771004, 10646416238055467241386416360395574804199761155307993872061057698215892822922, 9567771666871218298332873263950533751702773388778384953522740303362056866931 ], [ 12968340607736823528148475270009593191211106142050392359906510451365260428580, 2721486373801018323157167210616746825623246218390071226081564411423434451187, 9200592412239337272867558509657794777460340114124665277681133167901890516146, 21479491441666028821536714814783435198368229014209693309182760114418462843253, 271501919920560807144690888833558109667061334163559001274202634455325808979, 14794481401072540343622539363544947515055760970979041148841701973173121160867, 16241413887148836912852878034655069636111245133456457252704664072852738020971, 4616891037946851677520624578755099324972320662835976914889099357030429177473, 3608927726708508538381205233592212299638621918906539441231152707366248326730, 20453218571243012416227036764366636460616051978680116597236464784651135817662, 21663166035926867176571290287267617498655213253914511123571589436615865760399, 6820544505512911561421102139415733480016159315919965296282806777526762552747, 1241495087165602740391581058509323079765010896996258108944819093246488858318, 8124857698166498408579282540958166224847900470279217858870563626568969324640 ], [ 7468504662830152377628803783383953933430030795298938442558418401235422516300, 4793686881935694857536946556150865385816389634693618604434563516314064685468, 1544206620168318762839348132398850094597148992890365849594573375964142863145, 5369558539480434036232750403701436967132622763576337857204435045501308015944, 12006824962639473646619675695320713559632292589665720351249509600690404062910, 13276706600670868735848192943347104623934461144298261448190397129714774342173, 18264760419082021650494509547780257751527429714087988777838583561869870161497, 16206621246021864196868319303736926716510401444517967423381020552156354105325, 1711726122386296242553570383485323505029934793448519517467561601648909492476, 424608816752490157168394436055547341686841853472229245627510525503910492101, 15415617655332841541287596609058338190575210759281068404604554729079985521497, 18478290351885872204755929772605378173281926792205081562405194750294909414375, 1332104917854036528393448566746555920300729960761914526841432630705030394652, 4875500610885916981959937005615629475085341806101091219174051361012752723259 ], [ 11778504031072617076835666396737479480765353231040635692430530998929741888857, 21484720459303605302798978604237614472976046584193439253348361650969825748292, 8499136457565785031004321689745329944377719203840897611578892135704152228750, 2793941551558768339218839007321603095797268500190811372910811097625523777732, 1105636691459466684354861615642532458695547504319491829198944901848354002466, 12426506081436950451531584361567271522327297423292681691257507245865800741808, 21744454903360799020170340278186587365704908765309976031542813238813825084489, 11372248299010487313898881702904101518095247949018830132141430386679279269802, 21355163712164844869530150285034119671090568151924216195709912115114996041497, 5914269246724008463378274526282819036767424774567321843447592335886063108576, 11757178117438262829005662514573037965023628709384135799022098340275235227691, 12324099857879926506512664547633107100872133202763933183968148074461422444945, 19030167447913285073203707487614824348154933215474799593455300093917690498309, 10756138991756861027792433599825283466492898786698456971350016301834120358130 ], [ 11875738647114616324350947684061726919561909502972863503130998242120718452173, 13694249165008464179020280306785446096967664405044044843321440965214796746818, 19812433478661078453961877947302599509407379278239949313742808880496429684167, 8478769662157599345424310347901565107922506021173025438525323643981274129672, 5818698629865247565077962768609742022241069606093835632689725123770908238374, 10032230959981143208283946841992758493223859540652919348005062379046462012203, 11522228664628777947230879504212386210128576797203829606594158165912469543023, 13272285677937114294437486001063514791939240537126238704993220742500063989359, 8471655692275117723910962427858752915984310638982095612617085072826817856111, 4389133967757502017802977428616053155133503096651056259096018766643340643444, 14833683426056097377459837308704611274315245609945506612281500340707955071545, 21735047966739217600224642583481593664121921255631091231639049365846545339271, 7278464060898751306868720821317869528105334779561787036194323452374165351865, 6039871164511288641970658426390882746101314533737081850970345002118723705339 ], [ 19806735015669785931995353978269817545182909058206355431360188275802638341659, 5812040741672176204747103844640668295298927415072914668459838256763201016256, 11525530340338830716502860942689345100262306689117330289237484894552808300709, 17521885357464563233202648521875905290166433650141773052058705408597538338911, 3562081668776383619644089086241623016377051210290983257053604147762967187048, 4553365292908760204444921066083280974740968313355524357160308575327815731986, 9612674806513362915023578944934656419542782185316845654919222232866782079973, 2856039308549766546769489569358317466998141815061340660074603482372423614916, 17144423089194150938664044057037571466137059216126551322826296560818480520188, 7777587218396926909905079292812226413674978129026320051535300425275288555883, 13348600530906896077492067999286804922009589548263122827764204432718850414877, 3504452333162729816257605356258771813994176063517472700088677353335099652978, 9271993074172346116417190887626439840621996383820554885726881799780298924983, 19415901227000992567609415633317148788461729474913900357094507534384428975572 ], [ 19436706355139059383094509938806698706706766923839248625914995027794208831821, 10792411997925964958381215817029067479896035855504468308483392531229534219232, 8072583953344188119277829536748521153437596767795457833432747233169365522749, 935862788360489051830486282214078237146011038653740178111222389815697167391, 7693170882539863875701602528545342311434468852163389086171388853464572270633, 3908303967241020812745991584454294385640133430208468916543029049706292930305, 14200361022064175872846252914915938901018673724842857113422899538373627654493, 1887985090111673428008310095306101841985601166058324952496388205310462613383, 11573157656525163647952907768764423420183350046483835223957092582860133547451, 9173604865670358445639146193904526160076171763657483567287015999631297551260, 8178722693917751358075016256308930447648179998714325218415150487090497217243, 16479808796736995387921450370830080669813035631409450618705788666753274143975, 20533543720941262967922843401527010251494136604304116450329194230919992456714, 21738708027542248258448002258354036928076950567990414271901435012481250510866 ], [ 21007636601223260258896743126015285106374704680873221102534543271676455685798, 13369983427310673379273386726118528512090053533610011895772924489087434499560, 7437655172123655742476741904638757853205242308502126726581419961030710769332, 781816009964815727693649369421765727079762601401895827065766198634750193888, 705729203963801077445366659807159942042515811344776106038944684242779323077, 8198640129213076396347058165827729949570109420499123900233622693161948493955, 17567949859381263201697894705370978555666635560577878390586549308344241574720, 16953629262080155066207979848352607491010984453917718285923448228568338552102, 16571340903058171078202337397668804978258511905425857983395617262853832093164, 8200869898550007995855767338315600003217265793696813934354774140864404387075, 19245130308508431368191001431651810775716975255435369252757393063712397235401, 19295429264588775090334360243373041256684104838925789132682844828445374541241, 8244640034562580123950327146088236084020067479873470678893810764954021793820, 6071779329882466654134795663117452253106971568263743258793999061311754781283 ], [ 7297858819137361266048049960276576061221795813016982777983276508233065012908, 18289767809318109953604511379563953654879368440278122006476245297734205780313, 11861017471431365163414128324204576291654501179050818386156071891372931715517, 4400537004106671968009111731711678778861503186165383927771233149107549932374, 12211353780794522017482442205152184029453185156252615419956272689806996867522, 11858951133579915446931127734829983281450719684822534749146423795831786572024, 18699083494838544659449334875917956720534604312394484877250282743052866694, 749778821409550859537528691118971534871459292764959826137658158363222566834, 2909597392070263345393422292436111503720531353687130181723707126400751447693, 12217177777420376281128847110380606163261839348068116179245513037333903388087, 6920254660239140919505113388774145966103232605095540610909080767264160069300, 9696367212878183305057911542364374139977595200010754215085255727487778572962, 14968323162826489282828176469636555044919206060463682988985750923782404039777, 11757071201913114247059598621424329188966752420483410843397919162379753756933 ], [ 2149278938146333837762157047865197539626726297462234579786480672038208839960, 2992162472650247075753290379196863994101122291268065125561265479303189972094, 28038421244332437252451488699272760491836813993308427474241344447797755331, 551667036500907650888508201663204030618105224866044580467647054394918324251, 13128279467779141267539556181844646897000953259054467200148815485804849945589, 19182542610668848202527767345596590904881280203255613775118909904478382941801, 12622787765544530515623619382100437898246101834816376149292007743211956407286, 12570391550772615838335361042568121892906867634448929202232001812492234390257, 5735316164124731332271878247418185434228086026647700113833855177940542823181, 9649474108395394754402030685603045386825744478341882098839846461266003368756, 16190069071551003451113144390700917484497316557096684922619605534369669949534, 10681321343942329435795471710031949263678373347092770298132700842902513672840, 13863872929961730606993556753801300020729351590807975827100825368353540990573, 11931534405924761866343686993715271905704590108489876499851774273982957911423 ], [ 8817602722261405319698829040610455364903580494786394492896940141358443005801, 11119926988115729035668011565310535780603655775231850120289918739692745155137, 654240854620562345252945066604315306494281026224973615193213783227252715475, 1680290803075724940691569649460494417420550431404206498993917267359934429167, 454088003829163771011170852736324196796734198039551149147118112028488218145, 19539522144446103612355666512646927077463791742130426065863787086655625062176, 9677517649080056520842169551325292586844311652869297540972831144430102239541, 12171721941568335982623293519100425613310698565606469058956892831634461540059, 15037699242073552386046516617138931456404909452736126928849871092088157606104, 2403475304123870051310189713205959145472986292698418380091083485671020127630, 127899593359332180821632671011918317356219506177015610133494845926153175595, 18684733307620435559282273679266280240730732702398400109727422417551972403102, 17130978638728591547347686801647449269492555647218567636544356715497286682290, 14514080855160049012448903996874963632870196574887173768510902774625324658544 ], [ 14337554339543299757023541671562153395916531829217482775164867679838962247573, 4417305792230285111357011064673221162480286486496089003939989926259051525871, 18318343953566300700872145919583310314872293221527574189507609074563561808951, 18102181553730085952093068611215465293662342195186852247233989189686218494670, 5855924544364003112712450030145237149424995112678688873039358008205969147611, 15570549396870292677660853760591267003520405786863190676970087082855555878636, 14821240964410715386910463283745689087244285662861027299124772223732179089302, 15446473065604291444037235422131957717379131935322344411928007251149202158658, 586582749011680966506460208877749670972200690716863059163322868400282852300, 6765443750336920009167305874738739551390685770965140484130502003990191861016, 11516588183751421185156362409787679404091107770536300994982153030408504091807, 9422281521245157165519221572217222566067379888854607677340273485846988818889, 11972785834549950434085949313031360662160524117252689786653411157712853588295, 1251548247225430075659521219630231228104532865302157324337575228144557232422 ], [ 6800687607590437742793451968857688924532461129043710692695682669594760138183, 1902628209424530126704615228962823322693910527728191597878269502368972448245, 17205169168497932228842841751695431463810324846010162985835301764799251782423, 10034931611814725856775298104026042876081758307779816060207300321750191893265, 6083168185688688297667869638715177381772180226443830560342282797830104869062, 926194281246578915103720926341497520082595828680525575284123365838007044551, 9409122852531801098754556536729028548924539102103420345160677794564194221020, 20542245913396046089533736519215869670909083018889617904362139603473474391693, 16873198639240289433836743385124757917190871707428690095953534423420502659893, 6588241760722454601615602907791715854928448488066342428651422663075975107816, 19842357292988471204463611705572234531158701273234975255676630503476698710155, 14693625717448698302951456188963654748379774732579848481403435079923870603157, 20241432824683494982737262054148903653340519392174437358036298330854555784611, 5945081237575571782036580504962786649821981413555607621373828735238630355652 ], [ 17652382972559786603081358712023734457988123179346418318061767410638467351353, 8609310002954675750899296865505156197275068986904937546335682968407062557353, 20953981342395933310821155979182741101782516022917194002901756056810161577653, 14010114671133332884183212883039266364632832900771268544464943567097360538030, 20768578042859563979294333002563065924476840206018011719077318477769915880402, 2001786654254515377677955109354751436919751171611935922531378122392365944293, 2298051095199584549599791615579815921675635758326996304424561508720678758962, 15610877986863106190281569495837881819071964316157027243989237288310023404773, 21503958051574416294837474683907975773972588915544597427974161349505807601206, 16176536100016079147853297185775543699660096471098091832015791823791903209774, 3606739889472294515277184850587920470749374877850756839089044653095424769194, 14664144387169595605857061033949425545099119522415523292224065111113602111904, 19699387660834749955063410769084991520255142011324093146157127237115274380578, 4331670811250121546993058308579590495468093227852181043972677680581964769228 ], [ 11589273064298032074960397339280273111253628710081452605587787277989878262684, 155887139811629598842391409587306581332057016161277301334614704354501745866, 21415746312736962630685763964130668169157204911852029590085104536633069699336, 16121151623164478719433805875174860779395398667644700642305374194327245787952, 10631178625335401501457304969878852001559776191683447428857609753454937038299, 11675745006421997275450756626998030285194831397590498324078767720340123952646, 1759441622054752159360583922123536313476013806215300533220440946452846159126, 3059329356920789196856680267147718801714171797250645043538678427768342056591, 1809413652255811383678263677090386586529134039718623375196604927184100692799, 7533217575609552382385270158875791232330359159976337796303987871112517604844, 7704646641054955393597890923317433079643657350033170553840404545002600772539, 19522826015127415513569513500635678903639248861485847260009074714535026926155, 9396801995941988552875859512580723873116085524385365053682345361229348266222, 8122885501816310710455960482459104382732335722838233409931476783790044860185 ], [ 14621784478774900045485232005516896073016099759402781623216618339142142444432, 1432416214818308586539371032122259241440290306461685527056371471791146740623, 10859741497221216461724796630804714121202257706435373999834867538278407694230, 11269289100589657711755210305168004136417079020640258348687053385360804643179, 16304360708182088008313907877667665892976553429106710412375369419780233976442, 10460941404478613816427928998514834125407907547113907613807191273719986187223, 20051043271541513424021087402997604909963063035826832503174487686321968961776, 13432165841378395910455231038520827433713426813680931204822379789609795102053, 18762866968227660024720719389346562423430884054824643430326826128394380607310, 17713599719831815773421839749444223685540274101601039260510841144941870261910, 1883157762896148563929088253054113240995256206097667755269496270918239318411, 10985354533025938485092599481185428202087973711120611094551172933738810516920, 670487064764400248463858966885752477833093767820377805346079091001272760417, 8502840196732756246718058003393498205431869135787193347957619883686320532648 ] ]; // Memory data uint16 constant pVk = 0; uint16 constant pPairing = 128; uint16 constant pLastMem = 896; function verifyProof( uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[4] calldata _pubSignals, uint merkleTreeDepth ) external view returns (bool) { uint[14] memory _vkPoints = VK_POINTS[merkleTreeDepth - 1]; assembly { function checkField(v) { if iszero(lt(v, r)) { mstore(0, 0) return(0, 0x20) } } // G1 function to multiply a G1 value(x,y) to value in an address function g1_mulAccC(pR, x, y, s) { let success let mIn := mload(0x40) mstore(mIn, x) mstore(add(mIn, 32), y) mstore(add(mIn, 64), s) success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64) if iszero(success) { mstore(0, 0) return(0, 0x20) } mstore(add(mIn, 64), mload(pR)) mstore(add(mIn, 96), mload(add(pR, 32))) success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64) if iszero(success) { mstore(0, 0) return(0, 0x20) } } function checkPairing(pA, pB, pC, pubSignals, pMem, vkPoints) -> isOk { let _pPairing := add(pMem, pPairing) let _pVk := add(pMem, pVk) mstore(_pVk, mload(add(vkPoints, 128))) mstore(add(_pVk, 32), mload(add(vkPoints, 160))) // Compute the linear combination vk_x g1_mulAccC(_pVk, mload(add(vkPoints, 192)), mload(add(vkPoints, 224)), calldataload(add(pubSignals, 0))) g1_mulAccC( _pVk, mload(add(vkPoints, 256)), mload(add(vkPoints, 288)), calldataload(add(pubSignals, 32)) ) g1_mulAccC( _pVk, mload(add(vkPoints, 320)), mload(add(vkPoints, 352)), calldataload(add(pubSignals, 64)) ) g1_mulAccC( _pVk, mload(add(vkPoints, 384)), mload(add(vkPoints, 416)), calldataload(add(pubSignals, 96)) ) // -A mstore(_pPairing, calldataload(pA)) mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q)) // B mstore(add(_pPairing, 64), calldataload(pB)) mstore(add(_pPairing, 96), calldataload(add(pB, 32))) mstore(add(_pPairing, 128), calldataload(add(pB, 64))) mstore(add(_pPairing, 160), calldataload(add(pB, 96))) // alpha1 mstore(add(_pPairing, 192), alphax) mstore(add(_pPairing, 224), alphay) // beta2 mstore(add(_pPairing, 256), betax1) mstore(add(_pPairing, 288), betax2) mstore(add(_pPairing, 320), betay1) mstore(add(_pPairing, 352), betay2) // vk_x mstore(add(_pPairing, 384), mload(add(pMem, pVk))) mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32)))) // gamma2 mstore(add(_pPairing, 448), gammax1) mstore(add(_pPairing, 480), gammax2) mstore(add(_pPairing, 512), gammay1) mstore(add(_pPairing, 544), gammay2) // C mstore(add(_pPairing, 576), calldataload(pC)) mstore(add(_pPairing, 608), calldataload(add(pC, 32))) // delta2 mstore(add(_pPairing, 640), mload(vkPoints)) mstore(add(_pPairing, 672), mload(add(vkPoints, 32))) mstore(add(_pPairing, 704), mload(add(vkPoints, 64))) mstore(add(_pPairing, 736), mload(add(vkPoints, 96))) let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20) isOk := and(success, mload(_pPairing)) } let pMem := mload(0x40) mstore(0x40, add(pMem, pLastMem)) // Validate that all evaluations ∈ F checkField(calldataload(add(_pubSignals, 0))) checkField(calldataload(add(_pubSignals, 32))) checkField(calldataload(add(_pubSignals, 64))) checkField(calldataload(add(_pubSignals, 96))) checkField(calldataload(add(_pubSignals, 128))) // Validate all evaluations let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem, _vkPoints) mstore(0, isValid) return(0, 0x20) } } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.23; /// @dev Minimum supported tree depth. uint8 constant MIN_DEPTH = 1; /// @dev Maximum supported tree depth. uint8 constant MAX_DEPTH = 32;
{ "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
[{"inputs":[{"internalType":"uint256[2]","name":"_pA","type":"uint256[2]"},{"internalType":"uint256[2][2]","name":"_pB","type":"uint256[2][2]"},{"internalType":"uint256[2]","name":"_pC","type":"uint256[2]"},{"internalType":"uint256[4]","name":"_pubSignals","type":"uint256[4]"},{"internalType":"uint256","name":"merkleTreeDepth","type":"uint256"}],"name":"verifyProof","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
7f0f07aff857a93d376cac88e894be2b2db768c532c45f5522b57842fbb31925bb6104809081527f1637f7c55242051e110c4625d92c39abbe4b4be9d2e140645fd0bde59ba9f1c86104a0527f1ec0b887ee7ad718347ba3a3363c6aa3714bff8ba33cf6f5b428c59e0bb211636104c0527f154c0bbb206d396cadbd8c9bd55cf432661d023f385db601222a1c7e32cf2f596104e0527f192504e8cb52d9b888872278450765e626b47e0b46e483f754e035f4af4ffe54610500527f054a3c7857da10078970887e6753b89b81387aa519b7ca458ea6de7b954ad4d2610520527f2ecb19654ab4734c85215f75f5dc164f4329c86afda5c7f855d40b4344e154ed610540527f04e07d4a9a6b7e30b99dce822a8c2f79a054b24991ffec6dd418270614852c6d610560527f0b5ece8978cbbfd2721a16df71bde98f75c6b3e6371cb2ffe13c99df88ec0bb4610580527f2194e6b05ee965ce9968e4f087a1893ef6d778bb7b56772ad8d2a992c86873806105a0527f21881629850a133667f3f0d579f246e5aee9f23266b7248956d04f83c633c11c6105c0527f199d5abcc1e199e53379f6b5b368ff3bb0f6e4523d212a58122c6386d414521f6105e0527f287aadef78fa3e89dc285d709fc08201324b742817c15a42309e0652f623fb14610600527f0b6dca170f158dd45f855ea093cbbf8b395b6fecc0e1e9e9f689f51e5562f35c6106205260809081527f13e748ee70baccaf53f121eda22032b8ff7b1ad74e11cc7003e15b8fa9251a866106409081527f2ac30f22d987aa2c4d08d20fc861da2be26ea609c67916337e03dafb741c135c610660527f220341252d31f6863dab75803b65a762c9d6f5c2d821f95553e7b2f7084fe1a8610680527f230d00d2ceabe36fd6e609451f09981107423e4b634e1711abdd2e4754bfb4996106a0527f15cbe4f35afa8146f57ea45118b21e2f8c5221ab517e7c05183bd152e26a4bd76106c0527f13d9ec4be732eee60951ae1ce5991582f89974c71ba9c9e8429a4118334d7a906106e0527f16470446d2e628320411b9f29f12c125163237c2d8ac0f189e2db9a20e17e72f610700527f2bc8a61a4d2ec48fa088c2b2f004fd08daca3bed9dd5df598bda218989c4f711610720527f0b6a816825f3fe266a50ab861f58dc55ee2fcac6cf81a22843680e7f2ef8ca6c610740527f1f8492f8093f6071eb673f30a5f9f070dbeb7e2a79a8747cae44f3eac8601df4610760527f2023fe41dbf849169bcbd8728ddf27ff419b99102fb135b8c51d57c445566013610780527f1e48495483f98849afd49163e42b5603608944e7fd6da117f1beabe7f525ae3a6107a0527f1741736bfbfdfdf9811f689b859b1865eefd53c8c9bb342b04a669f9721c268e6107c0527f2e1e31dad27063dab45ede08a151080447de335c533eef7e97a526298731d7376107e05260a0527f0ad10afd3e18594ff3197a078f1c51ced4b65d5cd1aa44b0e98b1db2c692e7f86108009081527f2c66eb126782e633694ecde3a764c6653db47f78ed753305218cd5ec684836d0610820527f2a71120ee0decfd1456db4087b646daa583f0b8f9d5d04e0378da07e31d0bfaf610840527f13a24c8e28a576c8eb946e9ee3cd9fc92b519e82bd5763aaf5c175f3c8eef0f2610860527f1257417029c6d1c4f4497b7d44298ebb9f40f9a9904404cc424b73be4f03e971610880527f27677ace43773b2e74a961917e3d75827399949ccaf4f3b193b8f58be1e91ff46108a0527f116275cb7c1bb0409685c511376daafa44776954478c1e62f359088d2441b6da6108c0527f28874128a80e290dad368e7e0eda157792e7a3cd04c3428e727e80bdee4f60106108e0527f07181c8c95f0aa07d71ce4f5c2e4f3c7e0c5aa8cd367d9a03b568c269e2fedd4610900527f16adb08429249eab5c8d21ba47ce0177ceb90d3ff719d875c7ba9a334e713e96610920527e7789427261c9594cbd9c891795c7ab844af206334145d1446303a9ccdbc926610940527f2e177e543dd2b0828927130477939ff879bb902022c19f7f01c3097081c3b472610960527f1c7684a551bc6d4357c94a63a7ea7702275c3fba71b3017000e6c4252f93f9ba610980527f0d5500d9f8d84b1f5a56eaae084fd716a8b63fffecb1944a9221d6dfac3347326109a05260c0527f2085379ba18cabfa78d423303e2c60f74a7d68ad750582674143aebc7673d7fc6109c09081527f227a852a26b54cb71dd65486b22cf960a3256fa16cedd2e195089348f064db7e6109e0527f1f7447b84e8e0068eed0e206c916520524dd9a02dea604fc2e2193c258a887b6610a00527f0f3e080231ccc5552438483c0a65708128fc65d96335aceedbd536965708dcd1610a20527f0c9914f010f303949ac20ba629e9268e30972122f1c32374a1b3deb5b42da47e610a40527f0d9d4a2a7988debdaf29c56cf8734ba85754fcdc829eb5768c0605aa0b85269a610a60527f2179ccd08af319498231d71a9438639911ad4f4d69e8775906216fa834b85ce9610a80527f09b1afb37d03610fb485c700a394236e0c181f44760020f75607454f25b61db6610aa0527f09398ac6555ba31177b267ea749e66b5fbf42f6e9630f8c174aee30e0656aeed610ac0527f295996fc3b612ca4acf056470a995a31e532c95950b7534cd9ae65aadd899633610ae0527f2b007acd79cb8714571868da46c724c72a4e398b4f846017a76a593a72bb7e00610b00527f23817e891b15a2223787420728857bc5e2ab89ec1e75f02408b773bdc6e4c4fc610b20527f2d6c9c545a51cccea9f0f5b54fd80d9f54e7841b2b189130d6d9c104bed23815610b40527ef9fbb82b19ab35b6f2cbb4908d15e623ec082789c9f5b9417430790ec8105e610b605260e0527f0c1b0be8b0a49323442099a2e98663b2e76e64005f1c34792e3a734c85061de4610b809081527f1fa95066ae0a67ed96f628dfe2b3a353604b12912f7bd0e18632758f4cc8f554610ba0527f1f02ec5378907496271e33f8568102e68df713adc817d7a8acd2bab878fc7dec610bc0527f156f78237a5efbf0fd3baadc802d1e34935a30acad7cb85286b6a3e03e380eba610be0527f0c9721b017bf31f6945ed09ad82b13b92c43d6649af6443ee189e4feae2825e4610c00527f134315bcd65418222c01054fbf8fac2ccebddd88555f7c3cb0ad4feaf874b3d1610c20527f0469933ab9d15804d8e9a049f28a5d389699001ed9e59ddbb7fccada8d99812c610c40527f0ae48a8c28872de0a4729356ce8d595427051aa81c7bf1b3b4d912659d675080610c60527f0861f25e6e93639a055c4ac53db8cbed71d1560475453fd7f214b8f799b65de7610c80527f28b815696a112fb10cb54c98c403abc4c09881b3593d3677a89cebed650c3c94610ca0527f0e80aa4a8b765f6c27a52c2afb06055b743d043213cbc2c3eee9cebe00db0464610cc0527f17515ec2257c95a2b3372558239ec973505e27bb5652fd6e842544290cc7382c610ce0527f2b6b480a6d70016476ec4b267eb3cafda24219f9e58cb72bb6caaaed09ee240a610d00527f24bd4ed491a624cb8f76b47b3a717ec21100b7e85e2eac4590f9491c77c26969610d2052610100527f16be2f979c48a211389b7221e8a0f18af0a6b351cad2a1e533a9b6d75b8229e5610d409081527f1b6bc1f141117eb33a6dbf69d05b9ae705e213f6b12ec2177f6085d755266284610d60527f13d4be2066ca611515120d491531843bf8e6a8a2f8b59ba28460b7737902847a610d80527f28386398d16aee777a0785a3a80599d7eb09b394c4bb2e15ab2784ca42c922ec610da0527f1669d73e446daa92ec3b7454a4520d563d7466ad27301862b3307eafe7e86a91610dc0527f1df8bd688a63ab9bca514259162af8f9acba70a399f6f6eff82722cc610cf1dd610de0527f27ccac31b4d7de7c661e0c1274d7c65d79721dc60a56429adae8fdff9eb51aed610e00527f185081afe9b0ae0c24a16ee9760c41af2985ef45af7c73d87d211be4628f9834610e20527e2d3acde1bde8a540d87286eec761f124c14e525e4c1b61b82765ea7c2948f3610e40527f0bcdcd9e0412dff959419b96890491048daa8cd109139f232bab714445539e3d610e60527f1a112b394e8f70044c973df43c63b53f9a30db83c9f58b48c203c22f28e4290d610e80527e012a4b1b3c729e5ea1f7527a2c4f9b036ee3dcb259d1b1b1d14892e8f63d6e610ea0527f12f25b4e5fc6b3281fe392fa408447b7af5b21534a8fa79a63dd5c51b709a69e610ec0527f1d257f0554d278f69ca8bf260635790a0ec5d27125194250787001dd75243c69610ee052610120527f2f143f41eb191a8cfc9e7a19b9d39d9678d4428e8cf8ff00f85dfdc3c92b2971610f009081527f1878be75b062e404424afab0d3a596da453b629b474b3cc3da89692f56dc9a5b610f20527f06f48f15f6798526d2339904f7d282ed1e90b2b11d553ccef3a5f09b2d3d28e9610f40527f0ad456a97b9c369f9ca1dceb2cf65bb5bcdd8990b180fa75c43c9bd2b3985d14610f60527f07fb823a051c77d266608267506495cf73aa0a6b90b24e5f4428755b527beab2610f80527f16502f635e142722e2d73fd4c8416e2db8d0b6c22c3d06aa1fe76493d36f70d2610fa0527f02cc9b9342bbb9e73093e7365707593fae3186ebf1836e6927b95cac34569262610fc0527f1925f1fc38055f5e13b6d97ea1eda5096dbc5d225e92ac00999ea67c3f02778b610fe0527f1092b057b2039a51d55a6cd3a49748fba618e2c42a86777942ca6c553e8aa354611000527f033bc30caba88b3e34c254c969dd7eb2f73a4963902fa53d78f140af864309c8611020527f23afb66065513d64a1ecafb7e8be764cff8113ccc3f3745b34c1b830e0b97922611040527f1efe023cc5aaa7623b5520fba7d00977b70e0bd236952fa0aa28d29f6389a71c611060527f01216d709a52598ce1a94fe2dab3f2a37ddff4a772ca362a93756f9e147f3b47611080527f26fd26edab0a15b9369de7df0d067de0c33465659b0a5d64fb8c317c12e012456110a052610140527f25a095004f8b2c22f12bad66a7424084f79a27373d5df4ea1e5e378345a0604c6110c09081527f28674cc8bf42bcc03ed10a4f5037b4da9760de67867542263b240a38858bea6d6110e0527f295f2857e3446b8ab0f218bed8720ccfb29d61b7af848f52cc73883299564c93611100527f0a72fca52339286326ead2c467fb573bd7e0d113e9b582bd075856cabc52afcc611120527f1841a48a32f4889c73d59295f98b91040ca695effa3d4708be9917c11095c2ff611140527f0d47847474b47e89cc8fdf39b78fab53abbcdf34bf6ad66c3be1baec27f5c8a3611160527f21661dbfd6cc3e65cb9b49abba2fe67a58979d33de6c8bbee6c2dad7d79e4aab611180527f2d4e755617bc1bd386a2bb77056ae08b495a96cf50fc2893e79896e0f692bbc46111a0527f2c4199c25d74a15dfe47541aa494d360f87b22abe181b1016ad10739a53f8eed6111c0527f2a35d8a7583c4a3274fb845145956defe903466a2d75f2a56e54fa66021056416111e0527f01271d0c3fa49366a4e96acebf83106a87ede770b6da52680ccf05cd479e3949611200527f08d62c6c727bb9e65415c6d2039da361b9fb1c52fb775e8487bd150b5cbbd056611220527f0a583bddc34162feab720b369ab59e99b17bc97950720a6146f0c80726fa73a5611240527f12c953f68dc239668499fd590daf26dac2c3ed043ed139c99ededc37ea59503761126052610160527f0fa17db914f3a29a9b259fc34f7d51b09d2dd80433f1f2346be006066a7f1d036112809081527f094b59e3aa19952c32497246c8d6a52d3fbcc7103890b0046e74a4ed8d3f57ca6112a0527f221c6986c1376cfcc0c204330e400e4954839945f6071add738bde312eda56b26112c0527f1c9c00801330e603ccf127929ca5a4063b887412202c6e60e5deb91aea0873046112e0527f0e61242c32e15a3621308466e9b260609ebf6e741f681634fd01b1ac553b0915611300527f14a39853c1c3483d320da8a2aa63d42b7d57b8fb20ea29f01fd604e72ad8f8a8611320527f294980479340ce5b8da59286b510ec63ccddae5a629fbcb0bb08b8be6b6c5f1c611340527f0a7ba1f2bcd86584f85494f968224adcfaac43197594e10994498ef26628588d611360527f0d71dc264f0b51cf29b0e9a863fdb49d3a6eab10367a43fdbf45bf0ad415ecf0611380527f0eded65a5d093a5a01e3c1ee7b965f90f3663a69690ac6c4aa9e05286ee456186113a0527f035b49e500c6dbf495f83984fa605b0f8f9cf2f07e8eceb66e13d9cc8585a7286113c0527f0f11216580d285ad4928d3333c4ee9a4efe6706ae30ab82d96f1a146960bc7656113e0527f271d4c18c9b0dd1ad2bba4d263bf24ce85385750b969a7e822f7291d3909a022611400527f13a5a8c7dcf34bd16cf27379f5e81db31eb8bd5ed2ea03d2a9bb776621f2dfca61142052610180527f145ffe67620b11a5fb30c0447ec9ed2f4db53eb3b4223c4b9b1fd41e609ebb266114409081527f213a3191e10d830b886e65ae6fe7769efb170d6bab09bc42032347c6a65a8dc5611460527f26ffd4ad50466b3c16cc34dcdb3f819cd761589d6dbe1e6e8efd6576cafc0cea611480527f26fabfc25cc4f95c99fcdb704c9ac105af81f1586d5e4d0e5357a0dcab3b5d766114a0527f0d60ef98a005ae952223038de142e84834934a0b19d04e109b9c0578b9c9ef226114c0527f20c0092ba89bdd00cb2c39e468588bd742d5f2d311cd24cb515320b23f0767256114e0527f1d47ca937a49604cb2f6d49f6cff03443cc6e9abac18e632456bc6dac1bb4d3b611500527f2d7427fc59dd1b1db26f20ed479c140c99c7daf52106cc39858ab017fd9bfa90611520527f2b4ab3b52ee9fa20dc90a401b402d5bd01d7a8566fe92ee815f35e94da23a12c611540527f25ea834b24c637ab04885f7067b86498ecb8c56ec71b0520841c9361b67e8c65611560527f138febabad991f8454d30474a70194fb6d979949ea4cc624e118e75e76675b22611580527f14112a3d87cf205ff4d6cb42a9afe166bb5c7e8a149e8f646dae555ae22455766115a0527f06469674440ba0f44d8dfe8301fbc27c37a95e8f5eccb28c161bd15e9ba75f2a6115c0527f1ab6498bb0f4addff5dab778874fa915bb04537bbb32fcd5952208120f486f8b6115e0526101a0527f18f4372b2d97fc6eb2717dab213a2e0a40de25470456b4d3944fad1cf2e183296116009081527f1e78e80b2875a7590a6bcc59137127f47abb25ff05d38f7394c79293328803da611620527f105c2c0e3d1691b8a467e9b61632b6441c1b2fc8fbdf9f4e2f81ec0c0e67016e611640527f284857a7cb7dacba5de2325cdb5b52a183d855e5020682a507cb23c1b7e67e10611660527f0ff6fbcf9d5df56ecdd623389c72a80400fbf5b019cfa88887587468c394444a611680527f1e12016517ef3d76f9c95a67457b9f22fd753aadb7daaeddcc839573da757ab66116a0527f27b899fa060b5d91d72bb54d9cfaf4469a52b22201d32ae45b068795b2f79d486116c0527f147682c1cac55a8503484eec2b7fca15fe79bb55bf78ca0a6a0eacd0b0db74606116e0527f122346d9ac0ab94b4a1c5a0402ba4be8453c7f1e01df97f2f16ff9c4b57728b8611700527f2c3e0eacd35e2f36e8bb17889fdb50fae9579f2b58f365e86863b3936d6b6bd7611720527f0406615eedb7fe0dfc0b0b8e6a83120068f0dddd03e8cdbf9d631df82c8cfaf6611740527f045518b4c59853b25bda5b26a4a2ec95fd54d75b94a9a1a46b042686e7f8f170611760527f0948606a0068a04cedf7c55395828a448b42609d93cd794c0ff8b436acb721e2611780527f2f9794cf72201c4bd98b5aef52b48a496e5a43e298d43ea0749bfae224d3edd96117a0526101c0527f24354f98fd364635597ba32650a9734a8a322f8bfee8689ef845b743a0b723266117c09081527f25ab5dd93498f4fd1d9aac7158a34dbad492e38169756792e5f3405c74ab50546117e0527f0807a7b437de08c0c0766f85da8053635f86a8356fa829c9139ccbc2f43815d5611800527f223f0a8f0026a33d2e8c4146dbfa42963227ea1261174cadf4e031f8cf817b57611820527f190df7810d7852594c8ea7fca4f27c6e544b257e6e9ba27a888258e39d573853611840527f0f82f6968cc04dffa886004b9d1360834b2ecddc74084a223a3467067df9755c611860527f0b1579676eb729c08d03b1ecf01c72d4f37fd5192718c4faf3a6b1684df3431d611880527f012b2ff884b5f42cd33f5e006b1d37e3fb6a49524741d7143df19c1bb20a9b3e6118a0527f0f5370463c136b98f228b0125faccf0435310e0b3e2ae265a68b9ebee8d8214c6118c0527f0c348cc22cc71022496bd16c6646443cf697961dd2937d3caff1cb7a1a7abb746118e0527ef5ae1fd97103de921a153105625e942c2242bc4dbc841ed4c182e725b95ec8611900527f292c6ebba4194f55525ccf99cd76a22e6c7b298ca15eaad4fc9fd4fec2ea4c0d611920527f258b05527001fb72e297199762e79716c00454e6293dfb6607a72bf70d1bc3a9611940527f17f73365aea110a2643caba373cb6c21b1a757cb5f26a89a5dd7e24d76ade574611960526101e0527f2ab5f26ef327d0bd4d1a62fd229e42307991e98b65b54f3589605f2c37e6b1586119809081527f1807d7448e89b71d3f0c01a38b47f22d6eb1998f450523702b7d9bd45baf26af6119a0527f266a7d26f2175c219c5c6693c460685ace229b4f946d02cfec109b26049dcd336119c0527f072cb0c7080115de72f2b10c35b6acc72517241953d334410c37d45193626eb06119e0527f17494b4875b94583c46d67240f8ecf955ff19b875b584b13108e69acecc36b3e611a00527f290e2fb4c7eac28ce897c96d2d9e7ad6c999e292dd90f7d9fe39c45f82188f71611a20527f0b818beb5066c68ea68526ddce9c97ce9c1465bfa9a6672ee4a4b24f7aa6fae3611a40527f20dfa21d4ef0ad3a8f47c49e4e8ca3dd972bbf73ca9466a7f471a0c4bafec2b0611a60527f24b870a16feb92780483e3697539563c3d320cc03c995ebe5a8ec54361964e75611a80527f1049ff53f0a4a171df1cc101ed800617ffb4ea16ec7bfa451af55b693fd4c537611aa0527f28249856ca39f956425eb0a6ee9ecbf5e03df00fbcad40527913fe9b6e787581611ac0527f204e22dc2dbebe9310de623b281ce91a97b5258a9e060a4eb1922cb8530e2a7d611ae0527f082227f3d1cf8d1c3ce0723c7b6a837210183087217c94f96e4da33fe15fe228611b00527f02c9be0d4277509730790d02d4d49bb47475eb6c17557df74b0b42c38b2c76b3611b2052610200527f1d7cbb8ab380eb79c8dc9532dfeda4b7179001371ee8972b268920361fe39136611b409081527f301044fd3bf78d5c5d357e2fd9ed4bafdbb717d5aa223babdd7fd9f8c1c65c69611b60527f2eacf16ff01005d84a5765f76d8c3af95f819fca6d027651e5f3e5436fb9c91e611b80527f14c3d05c4898f33ada3da82a9e06a846bc8a6f7cf50c2dfd21eabb1586049164611ba0527f28141e5d3285479852312df9c0dc2f220ab5a46ba5eda9c08535fd03755f6cc5611bc0527f0e2d5f3f46e17d675ebe600bd978474f87d34b9c3b2db968a0936747cad76ade611be0527f144acd16d63f8d7dc274ea8179e2b8549913f4574310241602d2fd250e891176611c00527f1c34bfae256cee389ce5b6dd60dde45aa3af597c1eaed7eb660299cd5d265b46611c20527f2ff88b5c2380b3c1050d81b83ea07ccf7606a8ecc487d2188ecd574d842901a7611c40527f1550cc814f8e7aadb81c58397b101f75f69149579ef8eebd65025b8aa3ce647e611c60527f1674eb8cd1b3bf56bc708389832f6b8899d4cdc70049a2222ceb6cfe006bb07f611c80527f0ef012b6b2f1c3da841190194a948fea2624d26f6bf706d690905a10ef5f9d9d611ca0527f1482083727812047847681a82ccd72be02aa05545861b09c60ca674ac6b3d237611cc0527f25fa070474b4b7eac30077e8299d9915b2103c92f00cba05e377334370944fcb611ce052610220527f177611b9671727fbc567c501099483ada9dd05e06767ae7388cbb9c5bb33bc52611d009081527f15974bf078c2f43a26cd1ab35bf5d1d431b5846e6d422d6a3329b96ebdb1f88b611d20527f2ba16874519088d854b7df7d00b5bc4b772410630bba9f692357c5cda70a1f9f611d40527f1ac6b2aaebe8bdec5ac74925d3706c4a778329eceebb933faab1aa62a422e17f611d60527f0a5f68ae29169e03b3f0b838d9e46af743aa5c9dfc226b015dbe23523317bfb1611d80527f0f782d2acd64ecb28b89f7a1250b69ea703b28cf06451778fcbc1828eb5ce954611da0527f3055c2785fa913882db866a660c8e8d894c06240842aa328545fe5960ec517f7611dc0527f2caa91fe4bea8e29a57d460c52a09f576bfb867b0eb2c6e20e6ab603edfffb6c611de0527f0da238d74f0a39b4cabd70e41a9e5eedbcefe94d222ab238bf428af3029d9f6e611e00527f0359ee03f8847201402e4e4fe9d92ead0aaf39854c8fa9f4e2203eb7b66cfbbe611e20527f15a10b4c07cf593a6b43da1bb69fbf0d66e5e2c7cf6096deed21d7df26b6b825611e40527f200dc58d073d482a03c29d7bc398710b5c5dfaa571d6850f78c21244b3c775f0611e60527f10796b5a188f61fa42c945a1ac915f778dc781833c63a61ff21b685eb1b08eab611e80527f1fcff3de9b20914ae76594805616dfb68fefcbf8ff250d87025c275a142c2ae1611ea052610240527f303d8c9842d87ebbc63ab75d6398d996df0b9f8450dbd4531f739ab7f8d68f1f611ec09081527f14a59dd7a8c6389a2b55ebca73dbfa30be1ebd19c9ff75807f89fa806e292687611ee0527f23ccf921723303d752f6cd60d8d86ff676dae6e07deba714bfa588c63e84e820611f00527f296af99bb5f1ebbb4d33d853c197b6121b322d2aff00b6f6f0fb0f444eb64d91611f20527f26e16fcae1cbf0cb09d54104de7c7343b9865b383d544753ffbd4e360666f601611f40527e9f3a0d18f9ec56f1808a7b2470220c38d45caaedaa1026bc4f0bf438e2470a611f60527f1e0a67874f73e005f5702e1ce6513ba9d139d335bf44dd2b60de1a8f00f21761611f80527f1ad2df8cd23cb62d008fcfc3631f5088611c41d2f1b11055a5659d47df5b0f5c611fa0527f0bfe03358565bcf4c665b6473727ba9e4f76cdc3acd7760b4d7c870d7cf83fea611fc0527f0910815506b42b352f647be9fbe1d3731fe369f1b1a555f6957a7a5ac203b71c611fe0527f2e6889d3a2d6af895f682d1e17f11d0ff655ebc42df5a7f6646fbfe7ce862754612000527f26ad45c2399e56094a8498facb1c2aa7e353dfabc55fd65bde8fd7a5b4a88055612020527f2f9023ee365ebb8427b57577854a6a1d84cd11b1c123d95b6b40b14c376b98c1612040527f140aaa6b02d633a602b93068a3be6797443942a88c1d974e8880b670f26286aa61206052610260527f1563e4fad747c67ce5b959a45dec7741ff3755297366420e6f84f564c09cd6386120809081527f08aa6a746b1195804d53077d819bed4e59bd3bfa3aebb87851f90c60f42c48e46120a0527f204c09fd14118b4c63d70f944f5d7482651101ad35f29ad90fd3326de645c1146120c0527f20c712fcfa56d6ee98604f29d9d804b1d7ffc6b102d41efd59806faad09ac9156120e0527f2e64b8888cdb62bd44fb0f2ef487260796c316130593bce165c1ba5839f498c6612100527eecbab9b05e3feb45922a2b877a89ecb0a0ba79543965c3039bd0627614ac98612120527f2f5f8aec503e4e04fd69e72e578b605b831c17399e6a6bf311b53f8600fd94b1612140527f26112e1ab39fb1cd5f4c125084efae1cbb83e2d32e6c6f4e31d69a056e2db3aa612160527f2ea86567a707985c1699fef6904fd7a1d7c3a0ba6751d8919102f1ff0a4036f0612180527f16ff926789d6fb1cdd333bbe2abd65ad4f47018ca525e5f6be0319cee71d741c6121a0527f2794678d6fe813699bb3e78938269d844e56bda96078f359ae9efde7e46b64da6121c0527f25ee834d512589d00e50f70a1716d8b35994593ee8b1d23c1332421153d80a7c6121e0527f1789a875ee034b727359b86efa1c32c83deef8e23cd09a30600532cc6b4b2b8a612200527f15272ab726bc9f5950dd691757edf402f82f3fdf7067d4557ae7830eecf54c7361222052610280527f1cabd21776da519e3b19fe28b32396f1b5145956931c46764f63aea0dfbe05246122409081527f06044e83f796f98021372ebe86a123aa6c505acff8a40b1f0321f2f117dfa8f3612260527f145759cba78acd260acc9da5f54dec72d41cd7bf2021109e44b3982294cf14b2612280527f2f7cf619b0cebdc2fed2a6035ed52b3ea7cbacb70a8b7a11351b5957c25961756122a0527e99aa25e9b5a437321995f6e82ee2240517e84078109e5c23a036e1779b19536122c0527f20b56136174484c577ccecdee9cfb82035c6a624c283e93ad1f529a7d6c196a36122e0527f23e85082dc58847f0b6776e129283a2209604e314b0361f86b416d781dee166b612300527f0a351156599d98369d510bbb24930e820beb4c5c470e9152085eeea6822f3681612320527f07fa94a93682f4c63d8faa3a178bcd9258dcf653b5b48583a57c4b0577ad264a612340527f2d381c89421209deca1898d820dbb493861e0a13347edc2cb3eed117ab5117be612360527f2fe4eadf09c94c1b916abd0771c8f2cd693dab6ebd1a500f5d4184ceec357a8f612380527f0f144a984f114f787d3157eb4c827acc7d4f4d24d3e71949b6a5e46a219b3dab6123a0527f02bea94c22357d916fefb3d24ad10d7ef263efd54c30927b94858df1d923cece6123c0527f11f681a9799916d4db218fbef5c933ea6ffbbe257fe77e1e188f980fa87b88606123e0526102a0527f1083061a516d3950d43ccf94256463e804a0e20a517bea5125d9f184e929944c6124009081527f0a992170ab6164d0421b1f369b0a00edfb3d228688cdb3a4391b62e057fe899c612420527f0369fd6eef42507842632d352c1c7bbb04f7fba6b529df1d0b504fd59d238329612440527f0bdf0ffb9c75a1f21bca1e886b157bd92c5c14614639b857249db53770e89548612460527f1a8b9f42043915a6310e84e3d74615ea6d601b928da56f9b5705b9138677f6be612480527f1d5a5981d73f1c09b66b7a3bda1dccb05dc46586fa260fd4fa23e6cc24187a1d6124a0527f28617cf0df77290061e551c8a619497cb95ac142fb26f68436cce8691f0ade596124c0527f23d49f6013787f62d0aeb4589ec1b613c1d470712a83a94f10ace4d3740ecfed6124e0527f03c8cd7a9d4e493261d5aeca844fc0881e3246a2b26684ed33d8e4d2001220fc612500527ef051f058eb90d04fcecea6b6c20dbffd748dba11cea750b11a1c3cbb68b7c5612520527f2214ee2e3cf19e793b88514ae53513766f7372224cb05ae7eb5618ec2f8dc359612540527f28da577a4626e77fba7b9635f09529a3d59e12e9ab11fdb7273922dec96e6be7612560527f02f1f1d58bf15b0c2b58f579914e0dc457814a581aecf9a102e45e365287731c612580527f0ac76f808929171488d7e9a47019492d90a803cde94ddfb98a4ef71a24462d3b6125a0526102c0527f1a0a65a3fac141fbc2fd54f6b4f5a67ee2905be052fdd24133df6a43e4d8bd596125c09081527f2f7febbcbc076a24b80d118caff07a2f64a5362e37bdbcc150160500a433a5446125e0527f12ca573c3d45da55fbf21a9eaec265873ce4188de2b87e9a6b4eca75a217c38e612600527f062d509be084ffd045aee37eb9d475901f63a19184e5e65f9518e770f879f0c4612620527f0271c4a829f37aa5a8327dbb486308dc521e88e94980bc353efa6893d1381622612640527f1b792737e3617524af29d1a69e755a9db8f4ac860104d712d7b701940b1ab3b0612660527f3012ece2b57b36cbd2bd78fe43d49212046657c8cde3b944b337cc29eab2ac49612680527f192476e560db10629bb42829848e235e8093c11d2979f68e8b64820f191437aa6126a0527f2f369825e6a71040059bcb2859d85531fdacdc256373a1a72f8ad1f5736e87196126c0527f0d135b96aaee7d141e90a3625e1d1dd6b54cf1ddb320025f8000233935fe01e06126e0527f19fe53b5e119849cc976fff12a758aa30f5d0a828cf0a305259589def37a882b612700527f1b3f317df201eec987de0070c6a17d6c6f1ce111549321488e41bfcefce46191612720527f2a12b16d76d03e910709552f905f6a4e8cc10971057260ad98ddf1b8058e8d05612740527f17c7c2490f0928505cca23fb6bbbe034283c7dd886115dd5d04924f4a38668f2612760526102e0527f1a416e0c569d5a5223e5cf113ea12bb8e8706ca5b69641a6d9f406ad096985cd6127809081527f1e46ab9c51a7058d6c7580ed3ad8924db9eaf84aaed2284a57c4d7a6938790426127a0527f2bcd70a130fc59c053d69dd0112d4103904dd33e5e411d853781610ce9e6d5c76127c0527f12bed045cfb5dd2b40c812a22f0dde9e1c9a9792bb2ed68584c44cee685da5086127e0527f0cdd4447780b90cfe180380717c9dc90ff709290f2efdfd3bcce42b759516226612800527f162e0a9fd19c1c3b32a8c4b8b1dbe0f0e03e3cde0ad87832bd393c2f473fbb2b612820527f197959ae531e36a2dcd4c5cdecd6e1f223097689ee2170f1fe52cde62e1a986f612840527f1d57d8f4b3edec48db6d863986f5c082b9fa289d326cdf62c031b4f900094e6f612860527f12bac98600c00073eb0dd9cf3c5e6232a9a87e369f4a1a0fbbb5b407dc08426f612880527f09b4296b180e8eae3bf71141750e61a8c730ba39280bfae4fd6e3ce3d7520c746128a0527f20cb913a03451dbb139ddb31cd860668a079aeb95b1d3d9712a08c7ce9985a396128c0527f300d99e80982d187fdc7844de63029a39238d62c3cf466fd3350fa6c5b5b13876128e0527f101776f49f5791ab82defaf4f0be77843f4efc839da955c58460829bbb29edb9612900527f0d5a7228ba472f713db3a9623845d6f3a93663035262a6d79abf1521e67099fb61292052610300527f2bca36f9739aefc8dea17a994245a71e3af5d37015c24e106001e89af70f561b6129409081527f0cd97f9cabaa075f98ca76b577bfbd9206f2a5bf7a75e4d958cdf22194f651c0612960527f197b3810487f52c71ec7d503b82358e1d4e15471e815ddd7f90065aaf1dd20a5612980527f26bd0921653dccecf098dd717373928c24a3435e9162eab4fc5f4f6a5fef785f6129a0527f07e0111859cb96a0072c17291cb972787b7568808186f6c333213d3130d58e686129c0527f0a111d098201acba649b5266f5b0a69304fb33cbeafca901c69a5e2bc8880b126129e0527f154094c52b34c32bfaaec27b0e4b67c16658ffea155d7abc48ff6bc91bb26be5612a00527f06507601b2e324d9a13c6cf33939f69bbc398c8e5c9cdc3897c1bed667ed01c4612a20527f25e7664bb9695b448a789284e0a05dde061e38d3306a8e641d13d5fe14bc9bfc612a40527f1131f5577ad7f1a26df64fc66c48b599861e5eb007a2284387fdbe2772fb916b612a60527f1d830a47ec4fc8291053c6102b7996cc15252c366c91b15697e900ab52dbd91d612a80527f07bf73217d552b24d28fe85065b9cc8047da7a9dc9d64ed513ac995a65ea7b72612aa0527f147fc3196604e865529a05f5194e5054321ee64cde1f3d715f3df2450a7423b7612ac0527f2aed02ba85f7fe65a6c0ce7c61ebf1f6e486b2ebdb35d396f090bc623f0785d4612ae052610320527f2af8c9339da9b73fcdbb4dcd950ca487d3b1886105971ebb415e3a72ff1d394d612b009081527f17dc49e9a274f4d595231ad0ff146f395bae56680dc572837c56d7a451ce6be0612b20527f11d8ebac84502da9c7f6832f4f751ecaacdc2ec9dd51309e7edc06e648cbd93d612b40527f0211adf81b9cd929c72c000e6762d58d28c9ae7fd5d89bf666dad9eaf9e7541f612b60527f11022e2f8edd2d93a37b69a81300403c6ec344ce2ace6cffe2de2706680e9829612b80527f08a4058b23f57a5c65211c7c09f8cb5a76fff9bac0009b1437b799aec6076701612ba0527f1f651e987341da5dcaaebf90a9f191819270c428c667d0c0970d9519c260b15d612bc0527f042c8fcb1623cacee6cc4982062290f34b7c4e1b0fa8770413c6309056cb5787612be0527f19962cd39fe4b615f3dda5e5150a412ce92cacf350db6d6ed1edb8c5f3c0bdbb612c00527f1448138beacdfab88621ab47c904b9b5f3043b799ee2555b8995f67e1c831b9c612c20527f1214fe3535e10c172f81e52211736bc7f7f6578082b2dfd6240a37b208ba62db612c40527f246f3dc182959c12b5004ce486fe16ad3da9f09e48f3741d6344b8bc9db4e4e7612c60527f2d6592eaa6b7ef8429ca9501a8dc45599ed829df5402477f98432d110750360a612c80527f300fac373cd1dd94eb8dc8673a8f6925e94a0f873709d9206351a9d21e204812612ca052610340527f2e71e6a4ed37f5c0a1e148764b005bde62433bf22118edb48de15f3d1f040ea6612cc09081527f1d8f2477a1b6dafb53b0c54b9f278c715cd2942ccbfd8a53c9c66b375d3225e8612ce0527f1071904b1c803cedd6d4872c5fd23aa76a32f0fb37caf197e1c1a33284b9b6b4612d00527f01ba7dff87572cb01cf966024d5af24baebfa2c55d0fa0095b1edfbe81f0b0e0612d20527f018f6db70a663f97550b9a0d278795dc0f2c2779ea5cfeea0f74ffe7dadd3ac5612d40527f1220440ff20c31ef9c29f8f278d4a0a39320797f0a432245beb5efdf49853883612d60527f26d71b74bbddb9b351b15b611b19e2cf2a58031768a7bdaab72d3d54c3555340612d80527f257b6a035a93ebe6ed3ffc6bcafa5c7f650b7da685c15fcc55c7613f45ac5526612da0527f24a30bec0711b8be512806ccf5116cd8c7e478fa8c54442f5c3129181060adec612dc0527f12218722afd80919e2e91eece7fc0ea16d70f9573d4a1f314381b5a4bdf7f503612de0527f2a8c5b951c6abf95e78191ea7b40218797e64e5cebd1c1eec292c91150bc94c9612e00527f2aa8d371156b3c2403f426a9ea6afb6bc356558a9bd792af6199a3b26e99edb9612e20527f123a4d074397a6c0762aec2ca352a6375705bf7db2f391f6e92d7d4d1a62101c612e40527f0d6c815c5c33f78087674cf70cb8b560f3c48b1556eb60e4f7c030f0c4fec263612e6052610360527f10227114301c02f8e2b612943a4e0e5f9498c797b63b42922d1b25cfabeb9eac612e809081527f286fa4488798ce4e8e9526a1b77c3d977cfdf1cbb43f661bd0febcfc773b3159612ea0527f1a391915959dfb548c9cb00c6ad7317f0b480be26a5b39a6f0b25194d23291bd612ec0527f09ba9d9d3837bfbbf89075fe7ce3df611ed4e787da4e7e2876f2dbe0f5c28b56612ee0527f1aff619d84f974934dac8c70d19759af870ddcb29d956cfa06a5ef4ae83b09c2612f00527f1a37edb0da9023e523809bb42f46fab2904a46cdce475c9c6e9b0149e21608f8612f20527e0a95538e1bde23318ab1a1766c3d73ecb7f135fe193f8c7c9b80e10b279486612f40527f01a85c1a2907c38c76aee10b8584fbd376ac1504d1d180b38365dea1b99967b2612f60527f066ec6156d4a0a4fe67a71ea07f5323948aa5acabf062385caf6da5dc8a32e8d612f80527f1b02ad758f7c7edb8d883053eb898ad4a679f9902efbaf1ab24232e61c672db7612fa0527f0f4cb9af8035f1d52e9eb7fbbd93552b3d7acc7ff7e92688dfd7a8bee511b6b4612fc0527f156ff3090da61f34caac2f4c539baf928ff16c0e8899667eb52bcab562ec4aa2612fe0527f2117c54b690b64ddec1701aefb79e50576eba1636f4bb0ae8e4902b35ad9e461613000527f19fe4438297cd0985e8e2db77d15196109eeacee949194ec4a45be0dc114190561302052610380527f04c072e291b404ba0ea5ce1731f7b96b6a4020ae676e09d9b1b9c5aa99cea1186130409081527f069d8102795eddd020b009ff04377240724168dafc85f9f8ba163bc8111f447e613060527e0fde82d868e2b74fde977939e7a3df8ecfb12859f1779eacb566983f877dc3613080527f01383b83a63268d7cb2198f677c0255c4c69dcf81b77871b3a7685247962481b6130a0527f1d0657c57f90716faea7466c2d029963b629f911b3bbffe57ec3ff85eb445bf56130c0527f2a68ef325f87b34de97c0913f77c8345cff265482d7fce5e0927698fd90566696130e0527f1be83ea4301377a9ac52560eca7da7bf9f678fa7bf6ef11b0baec51cff450bf6613100527f1bca96e8911683cba404c7acde435836ec6eb89dc34a2f4d37add7f0d9a9faf1613120527f0cae12ebebcc303c97482701aed7162edce4bdcdf27a19c67fa3ecd25ad21b0d613140527f155568a723393e03115ab33672b2116160694ecf20e69492c9e1306b703e1b34613160527f23cb411dcd71686d917d86a3d59473b71e70901433cdd73180471e2d0283a85e613180527f179d69e443a26de0d5a3c5fac9d31af5c09330d73e0796f265b3b277ef7e62886131a0527f1ea6ac8b710e97fac1ebcbeb8eae8b69105ba080ddebaba8787c70b59a98e66d6131c0527f1a6102580e528d6e704bbaab3a34e979d50678f039af3f9df9dca9d548547d7f6131e0526103a0527f137e9616846ddfe0149615aaef723acd3e3b8b77502df1c374d68380f02607696132009081527f1895a7d7cb8e3d36db2bc7cd7fbddb662cd2c6da8c4aef3b770d81d600046241613220527f017249860517e4f5bdc8eb2053092220e21d3858fca4cbf60f75489dd919afd3613240527f03b702c9d12ec456a437c5bc12cc5f19d21437c939de8c0eeb6e44889d17b7ef613260527f010101342ae58b79f5035a9f502168c3370e603c9917eb0786edb1edae49b621613280527f2b32fa45325c9c180a3c32ab966e4a97a04085b4543d400086f563aaaeb767206132a0527f156547e7dfa0331456a34f83b47283581fd9482166dbd8f60ce042e61b79d9356132c0527f1ae8f352e6b68f5b6ac3e5ee842ff055f054bada87a3accd3e7bb0060effbedb6132e0527f213f094135785ec3e9d1bcb33542dbbe8af96d32f63641ba9a5cfa23f5ed90d8613300527f0550519dcf919fb9c1d34eeb9eac456c953b611f639626878743431fed09658e613320527e48637b95660f28999c821aeea5aa26d3902021db1c980ec6d39deb461cc22b613340527f294f2f2d15f6e36a01900b34d7993604233efac99f06bfc9fbee26866b50879e613360527f25dfca51573618ecb18b15b778e341f4accc54fb2ee7731f701bdf5686a646b2613380527f2016adbbcb9b88f708c8a41498b122d7047eb0eee771fa290fe3972194ee6f706133a0526103c0527f1fb2c4a76ba5528fa5621feb64dfed80f2218c83cc242c5a91f2ac6ca08ce7956133c09081527f09c41b4223dc1dd710649cda09c6c5cf6829c6a6fd58a2d4eeb89e78a144f6ef6133e0527f287fd0b4a137dbc9ae1bdc46ad2b3a4bce9d7bd6d20b273a58de6e545fffe437613400527f280578bf997cc6795c0e660c04ebfb646a171207209d4e97b45f25fba0ec92ce613420527f0cf255f96110e3a5d85abeb1137ee0377b65823ab297a9362f9a20fcd75346db613440527f226c9e5fecae65ae51ab144b956f06a14b78036cc5967a01ce77b25784d74eec613460527f20c4866d75cad063dfbfdbf3f17e570e70b10068665062db8a77b71077f93796613480527f222664d9037fe51b9943038c0076d2c1a89275803e7642a2d0083496d9c874426134a0527f014bfe7b67bc03d14d7adee38850a28a785f969b2fa2a5694034d872769adbcc6134c0527f0ef51affb573934a1c323a3fc238528c7a4b8283757e636fceb2630d227eed186134e0527f1976286d42d41329563b32e09e701a3e9dacbb3ec14d3715baaf3237f190249f613500527f14d4d285b89aa5450f935e6442a5e0f757b9b183876315334bbec7f885cd89c9613520527f1a785b4c95713c1ed0dbbd40df3ed529587538eabb7cbcb94ad540945fa0d947613540527f02c459e8909db27637f4f2b1a4340105ba605613dbdb6e94010f3f3fef481126613560526103e0527f0f090d83079fc718cc4ee6c35cc197793a8b7ca592873d42ed8aed8e1d9f4dc76135809081527f0434d972919593e2d9c4c6ab115ca3dd52dafe54482ae758b302e626ebd2a1f56135a0527f2609c7d908badad0b3fa3ef925c92bec77023c40cc78dce3a100bb7573ea9b176135c0527f162f91ec900da5157e15f4e44527143427934e431862036f34b0b30cd5deeb116135e0527f0d72f380800ec2fce55ab4cf44887e828625ec05c8d24b727d443463623ee8c6613600527f020c35173f4febf8c27c8d61d58586e3b55fbd97dbb980190e16b170a12409c7613620527f14cd5ff392647472bc231caf83938a235e40eeeb78c0905654488203459cbbdc613640527f2d6a7fc8e8b5a3d91d1436839bb0bb2b324ae856b15efb6dd9bcf3249f420e8d613660527f254de459be9176ca498662c7edb697cbb87bf1b3b12dc490f1db6c214d59d335613680527f0e90d00c9c62465478e89cc9ae1470feb1ae4124effe08ed411ebdb1cbf794e86136a0527f2bde605127249e45b7683a03513ce1beb2f5e44a7531fd369e41bf5592b6808b6136c0527f207c4c24dedf5ee4ccbcff67a433791826f595609b542dc2e6f0ce1b8c4217956136e0527f2cc03eb752073b6604348c3ebe0f3e82361127fc5e13065e9f78130f462615a3613700527f0d24cbf6ed71c0b46b8af454c05c278c85ad0200e452162509394b95ed3d32c461372052610400527f2706e50af609c6b4187c4229e255c2dc517d62d545488893ebea33ad8647c3396137409081527f1308b260294db9d33143a5ad8d5284957cf060235a34122a318487aab5e332a9613760527f2e53887cc41b80cdd6ac3197b132ead13781c9c79e376c6d2ae3bf6a29e61eb5613780527f1ef971a3199c1d8cfd2e83c40f9d1fc2c6d961d1adbcd12eb469a51b592bd9ae6137a0527f2dea993e2d128b9daed603b9fb5a682dc163a2f58800362a882a322b8025d3d26137c0527f046cf899b40816d2637a99e1191cd4413a30c4e8ea4042c31885251b7e43cde56137e0527f0514a69c91af665dae7cb4d50bbfe0447e0bc480244d21850e1a0ae7c9f76a32613800527f2283719e770c89532f66e5245ef905f21862a027c0a924fdd8ce297f36803ce5613820527f2f8acf16b0b3a62a4aab14714025687e275aa722b17008dbb2da6f26b2b0ce36613840527f23c3984ffd6e830a2075253ca8d7826029f026b348279e50bb9ba56a42f3f92e613860527f07f957a9d1d1817030e070cf8c76096f0567159d82e6e44eff532095c70e3caa613880527f206b9c918df8e241f594240f6dc8f8e49239229dccb4a077f157b04b662f19a06138a0527f2b8d7552c370e6c9498185225472baf146233c5267f0ed0a9374e977eec0c5226138c0527f0993a388288e4b39a8381f99324ad45a8079abb3cfb4d5e0303c9811c0c0a7cc6138e052610420527f199f4bcd5226b653d4d4a8c0c45b8b74fc624de0827528910f4bff143c996b9c6139009081527e583a9f60c628ae6d5a15f2d9a67746da74a2e6b93b6ea2e5b016f0c78e5cca613920527f2f58e2037299750c1adedca61398a9e999d05127a680235ac04c94b256168108613940527f23a43f9b916c816b20b4e2e6447a7f008b3adb8a5f20db6c2d71911167d79330613960527f178108ab76255569089593e392afef3169df3748b5c0d7747fda15b5ca5adddb613980527f19d03ccbeab25e5068cd35cc23f2368237c00cdc9a637215326311bcd4e626066139a0527f03e3cf04dcee2f235530344df1c1c53090d57753f39bea82b559aab9cfed25166139c0527f06c384e0ad3bad4bace72a042bdcaa7f1af5df53d92871ed076a19889bd20e8f6139e0527f040017827b190421a40b5da3e943b656225c83b88a4883ede49f9090273c933f613a00527f10a7a669a8bfb77d98607803b5356b81d0c11c431f6d2edfe5a91897835755ec613a20527f1108aceb19472b89881f3a5807e57413fcbbb44f53966ed3d2b59cb8d16db3bb613a40527f2b2987275752fdf4dfe46ca8afad4f11d09de662585cd64dadda9054bbdaa24b613a60527f14c666c599f5427cffd340af3065bada68366c33a13e67906c0966bccf06e0ee613a80527f11f563e8a58bfed4252205c1e8e183c8d43a69282e82800fb3c3c1f49f95cf19613aa05261044052613c806040527f2053a3013a1b2f5e12d3121019318715b8f3e8ccb506e1c3478e16c4b6dec390613ac09081527f032ab80657ee9c255285775e09cd2c41818ec6c3892e73a0c284f41c39a12b8f613ae0527f18026557904d91f133592120a613395d45bd6c40cab63ea131ad41cf24b36796613b00527f18ea310c75339c7345c80ed03dacfb791224898aa2f439d5890e9a0003d3816b613b20527f240bf0ee37d8e3c23e4ee5eb96ac33ed931899d53fbd31e6a9e6825d88d55a7a613b40527f1720aed9fea67c4b3bb9efba48996093c7eec5aac62b7593a9cc4d42ab00ebd7613b60527f2c547d024e1568b3766e36bc90f37b9e891393c33753c9b34e937f01011ed8f0613b80527f1db256218f16d7789f47596dfa7d8283d25a26fcc476f8a942833ac632d0a565613ba0527f297b6807a17c08ec898848049f2ac04e490e4e41ec641e409b3a77c08b037f4e613bc0527f27298aca50ef4ee4a2920137a333d46f4e0df1e20238182f4c8c7b4b3b832696613be0527f0429d45b9188aa32651e179cb1d1cd6c5fac2fd075474b54b0b64f01aaf6f18b613c00527f18497d8603898c5190ba56a0168ca930483b3417e2b6477bbc058f64817725b8613c20527f017b7b737220418d810a338f25e10dc7118b535b4deb5b8d3c326aeeff12f861613c40527f12cc6fdf8f7209cb10abbd6cbb423d2652ed88832faacceefd39400889e5eca8613c605261046052614184906000906020614197565b5034801561419157600080fd5b50614261565b6101c0830191839082156141d3579160200282015b828111156141d35782516141c3908390600e6141e3565b50916020019190600e01906141ac565b506141df92915061421d565b5090565b82600e8101928215614211579160200282015b828111156142115782518255916020019190600101906141f6565b506141df92915061423a565b808211156141df576000614231828261424f565b50600e0161421d565b5b808211156141df576000815560010161423b565b5061425e90600e81019061423a565b50565b61059a806142706000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063a23f019914610030575b600080fd5b61004361003e3660046104ca565b610057565b604051901515815260200160405180910390f35b6000808061006660018561052d565b602081106100765761007661054e565b604080516101c081019182905292600e92830201919082845b81548152602001906001019080831161008f575050505050905061043c565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181106100df576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa915081610115576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa91505080610146576000805260206000f35b5050505050565b600060808601600087016080890151815260a08901516020820152610180600088013560e08b015160c08c0151846100e2565b61019a60208801356101208b01516101008c0151846100e2565b6101b460408801356101608b01516101408c0151846100e2565b6101ce60608801356101a08b01516101808c0151846100e2565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa61022082015284356102408201526020850135610260820152875161028082015260208801516102a082015260408801516102c082015260608801516102e08201526020816103008360086107d05a03fa905116979650505050505050565b604051610380810160405261045460008601356100ae565b61046160208601356100ae565b61046e60408601356100ae565b61047b60608601356100ae565b61048860808601356100ae565b610496828287898b8d61014d565b90508060005260206000f35b80604081018310156104b357600080fd5b92915050565b80608081018310156104b357600080fd5b60008060008060006101a086880312156104e357600080fd5b6104ed87876104a2565b94506104fc87604088016104b9565b935061050b8760c088016104a2565b925061051b8761010088016104b9565b94979396509194610180013592915050565b818103818111156104b357634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fdfea2646970667358221220a20931c805d6b6596609ce172dc78d1cab49f7e2e44a0aa5695f94bf36ec7a3864736f6c63430008170033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063a23f019914610030575b600080fd5b61004361003e3660046104ca565b610057565b604051901515815260200160405180910390f35b6000808061006660018561052d565b602081106100765761007661054e565b604080516101c081019182905292600e92830201919082845b81548152602001906001019080831161008f575050505050905061043c565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181106100df576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa915081610115576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa91505080610146576000805260206000f35b5050505050565b600060808601600087016080890151815260a08901516020820152610180600088013560e08b015160c08c0151846100e2565b61019a60208801356101208b01516101008c0151846100e2565b6101b460408801356101608b01516101408c0151846100e2565b6101ce60608801356101a08b01516101808c0151846100e2565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa61022082015284356102408201526020850135610260820152875161028082015260208801516102a082015260408801516102c082015260608801516102e08201526020816103008360086107d05a03fa905116979650505050505050565b604051610380810160405261045460008601356100ae565b61046160208601356100ae565b61046e60408601356100ae565b61047b60608601356100ae565b61048860808601356100ae565b610496828287898b8d61014d565b90508060005260206000f35b80604081018310156104b357600080fd5b92915050565b80608081018310156104b357600080fd5b60008060008060006101a086880312156104e357600080fd5b6104ed87876104a2565b94506104fc87604088016104b9565b935061050b8760c088016104a2565b925061051b8761010088016104b9565b94979396509194610180013592915050565b818103818111156104b357634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fdfea2646970667358221220a20931c805d6b6596609ce172dc78d1cab49f7e2e44a0aa5695f94bf36ec7a3864736f6c63430008170033
Loading...
Loading
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.