Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
3928635 | 13 days ago | Contract Creation | 0 ETH |
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 = 16428432848801857252194528405604668803277877773566238944394625302971855135431; uint256 constant alphay = 16846502678714586896801519656441059708016666274385668027902869494772365009666; uint256 constant betax1 = 3182164110458002340215786955198810119980427837186618912744689678939861918171; uint256 constant betax2 = 16348171800823588416173124589066524623406261996681292662100840445103873053252; uint256 constant betay1 = 4920802715848186258981584729175884379674325733638798907835771393452862684714; uint256 constant betay2 = 19687132236965066906216944365591810874384658708175106803089633851114028275753; 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 = [ [ 18358547564487905095688479908858987846616998213156437518686067355563592118237, 15662648751553932653781975807624464121405704024803073886925976686616010387354, 1545474538105908330267074270190095622354834966212647889547653097055078098224, 12579159544968648693964563165973893448704730885005100826654630574108054705556, 20602000776800724705104231353971008348678632605343811527051139864158800058742, 14100125742256756091734688090621667470723401759459592787502475801413744195297, 5090583730862410755830979584235210054631184460526892606022709842010236308675, 4935746665478263580470501879719907639988899436008466660042851826337922233613, 3603230519262933722323237889869128969156000998401789817930265262617368730462, 11467103179184542033012124498958167915605281189440445972230559164572312725202, 20354120984011889701917116306955017859695028034788955847437411305304360829487, 16952752114474306858880411587178692742589121096026762314329638709126787301483, 18678961143994743003180318723146092299060216598083112257165966782010215931454, 5866474510945308764957529269555101130643879788634167019342763906927794156659 ], [ 15357842752194390032830879177519514606613356943505010426726499926726016517582, 13720528004476084359207196371475762368424714925503835663451917882430924467554, 2196656647584375999320189230399052835502476576494068012902156164580595749760, 14571933744484927053512012311263939678215066456565339237074260778179419354637, 15947740979005208428427315036716544174249364023308166418156254508145278950889, 13324328715790405384125386378518079709609297588403011236512446709595322048979, 18308129219862888344083447566760955160779532192553849267018614487088634836563, 6372459765603725576424215986727450779217530423615747931788702584026023386877, 7093003777162632186231777482293120808844116758585672698445917711442486215336, 15357576732947512625016950088762579987226580659874157718142226214458009204755, 13910597919064508360434043231000553781072135406219661606166769706745413894201, 9475901949906914147982792916474633312982452326368523201024844634638043554494, 5845138751782936895477553974859998077996624699108246120208069774017428318479, 3326095377373657419775174404381825686428913179751401123841216020519623741775 ], [ 1096090542237876305763822439899873238394525438826581012748557492836778110917, 18282758355470198230938465615400409713402004038201360061031317503584711879237, 7973969975759518869552865162652900479072033124669141796195141770899882758383, 2920496587818605789230962034477809982324000981266163502059117507002917895757, 8027751638293718359199675565570157214590620386957299982399037269650333307021, 19002113380575481191643777830101182489616906893723699470070419138254788369727, 13631613009301650992828160964785768170789209232530437462516754147352285424672, 10537705110128905270703523362934130036880036854847578111990360444182641655212, 15557574650831364767567015658284909068256128766563081293491003990055297878366, 4049724481871929240016595616316679773340938699307608349394228543495262553744, 9967066649437927083270210032320564587652082866881800887188539489167094397640, 12463426560961961450861478284334163210886016242490079948590082000657390077088, 21318595425700216078579789307308348011199610228556265752904860757510620370622, 7430155508771673067823897542900534022148544854722115377830369283854627952599 ], [ 14033304028688398404089545751254979569049699915340551984412184456786819712695, 17529478610649635357901422564682249462969460088983393810272144503916885638629, 968190632906420692452807865081290940343138767641492735661467959437198373032, 7242759178038747404494096998044224993169513816067824413031492987300456908934, 12017353327534072098763415761011052990865822334777878720246921848197559257711, 4746680322053291743787031203095442352574780441873349801788355375401126089939, 6764632552006100580460767171096753901452726344615530017064702126145414585640, 11581587935666673652762153205827599529022773836189155792609728856814288572033, 3123694825428833189943974730387937552931713004458396242443840668462184834558, 3432192610292569155696646287493678963086402014898209278361624573082188247990, 12349833666000936285363634772178969342930188247085371717039135170012686159900, 5587426338437935681688079936152042996259869611071713486439341129143155921959, 12022589354168680516901928073724404259700970836413687340697868887207353139344, 2351613311284811919248989036726852289804810348516261915606564943623124473717 ], [ 15740655435463241944594855735935231648684671883923953096410588018036769516770, 12964751171177929169670182425240761498461607040020835118601467328036987558858, 21474571159868965455306627669334290549452576803823591301731326342326814568896, 6954370193053655486251406740905618458518953022289151868757271522548301919472, 3115002343037487520580459802807906562630507097436525958861415456096559884443, 11775142132959919266954507317832500578453517368862270948538792702813845219681, 5975456097652384580746132945351678665917860606511206167023154005883554813508, 10958037207675554032315788914627312943186758288936582678633536154169678007202, 16345185674805541466042568997276776714209785989761944600635051035243995431568, 3326264593228494909568322793066180033820330146744162800569972963329142251537, 20721047231464194965879320004420846916587593568519526251056516572985788552732, 2552439778142862614309289213707433798337671284267429041900242151271508522517, 2849386127826497959217687777221941766595094589431869464564268817450132435018, 12188539304210779665491473755999603070354632830707125660270270405780470402800 ], [ 16239592155161765109648123193105804251252701943901733499502441663333912783245, 18702593988046837524790351483331632258278160532977261915119611324471253407466, 13746033878407070858115621843430829498309218839316343379025665907999784574154, 19358066347678636498093783612000296194480758342913325289131948678991962529441, 6024976123298004874848602709755399197808739071863728225378332097920450236516, 11108084608972457539770160222798307153256767409158349747526974841008717682367, 3009127146923662343754766534488769100730310563110562565512507605403185571089, 10560679284132950437595738585637379866590755950272794729013445350206405316661, 16015321530803994569819047219560485624444041236327101681073970215458831987478, 18489840631710745699731219026737904723160484479846032199737023956049067434815, 609265187318362115240245160721406765003010398230819869810290394123140807290, 2656965952206569220410287839949134856874352189248192147930831679380007159249, 13957423432693450118120092425077530751840166358932317773385901323790404449641, 7610225795517710715985874151201119876406845575780133396869144717381641586640 ], [ 6482921272760726478838066628157548923897782117283646773208763176771446379138, 4562585331778730670899179927104513856322577370213643119870201750008533040214, 9299549824594530154451155704400285409056448609359755927574262701418672785771, 16654459784024455427280229763380300423080811024668332509526284511491790880990, 18178936861568428015361893654874798233785855995042899944660014774323534883903, 534506139369949013962728832141783820104682340925384016906020027968881380951, 13888044772855561714276444972404100722751042044045312252045340354941233320135, 13061437363756343100054622876229104455920015737970195589611281743974716159827, 15297052669271818809266618537917704542138894789392864971735934945598379827363, 3240592020743113440365790241401792477958041186219702004441781545015089517479, 12939402739160799630996576545137073878726141216092557580496570401396343874133, 409838859583542828209958035048329036930557790097408442597169497017958367880, 4849352055719384218783567790347020036570406423962447054960403165168624679411, 10140481868950825952506002812679553069445144019364683137830173127833535162812 ], [ 4169753203433043290708949478342499350225971996935208104044673971132510531963, 16198597482473356107060462797493408464959815651823410647378959304462364790023, 17831214733154720272879709021886998538183166751338990495293296921834561417050, 15996002991058741836925286413107190453488985346498046642177496721490001022163, 12128929995926069335150064696726717100038806543084523729572253928762150006902, 1527343541447603983494013575570118174442170324803005341835852970207664984106, 3864366504647042739453971869413719136218296278515580744588126485271535533745, 16390744785373846505589339019032992526980013169808686005019244934399314954484, 1189371614834081242339044631966546656514169937037419744085755746584992776112, 2490564128297998291899011962907372091056992851367564813460897014374926950158, 2632864541439030478006092584387470079076010621748787710053145987733131826177, 10997016251008884590554668186933912000821350188750456144761529496433221911191, 3662989402605074726032541754492900291134797145446056852785520146936851543244, 8371074929323402425468930212402691638137013802793901226648986870188378349904 ], [ 17920452210119585965813298538098997746450528307627971419517604274103840658730, 8026613233416032931155189579997899527124867847165186585887532521124762242171, 12536429843060624487053183271774959575059067729019923970247266906616071589989, 18354222295715868456732739635697044486544782691576216892030243636076554800619, 11685593308965088606881675161829854229906033467171784802160080423031157953626, 18989841286028554273231159314070667749621876499337485447347239057791285949659, 13501500842653069022700095920888317808542113497043735775280862312089436522286, 16284422417487952110266526583186344607656490299306406671512902584454645262294, 14766820041476554952520399418749355774195705334216487399328042021346008099854, 11502099463338241997177160748027482497157165595330950109059924501733819344412, 21097733162892834226328090737666232905549661288100963226189626007151883115218, 3620141777236347892405766912767968106066233413607983266884777435591408542679, 4465316625088681267432956930147995293521314127558426510839100849580054135068, 15951396696291486543574989938200386934444721629903447106494532971713975302198 ], [ 21420692366857794685888663542888709905237738746850069466081467001353666342965, 18343503004862189418033094393114515169584171574852422315350418500159030922263, 16439186901063853414808045554962977634854311593865750348846556486836509716488, 15200551988732901161699976788357951085426436066677048420098461828563894176150, 15140772590596966074591171894694986645347795546765667852915300358255369432294, 7383386342436648909729802223228006548918015494414484659175617833341830753463, 11436445698241305906567677067532324081573492145508451249291326304016376374466, 17397405229027848655285535331264669055168427730382628461971653096729174692794, 8888190346365862431131132945799487885295183925892581338098808269532220115208, 17373048493258440814074078107890527278667903472831731635546171123117085702144, 5394355195223713516914582580686192473163629785306318732489822694588538915692, 20814957740385525027786677509245187599649792998372465800981035312224123940783, 11167741662268878371451552983943563550747492198375641214347145843414778750740, 1505498991925224080559736158020686494389967648228591899080542175743913505975 ], [ 8482807834840099486107357849095958421708288941420679407730439668240369271197, 1531932691795154082010331247272128035283420450879984505970978649526303671013, 10326017741190716069982105202291613302347042236075737537452333444753171570010, 2890563104449202149521252385842115871596603958515320789619311677428773944295, 5091938011714608365574587822261119297677309310900626302766934784886036216676, 18792973255357094538588824962661759194320829424712347846315600994520652609459, 5819484726278895533547092474664732368175576227992878488267454637556311136768, 14087278759052154922504944654932471722205352537489748711235261956958139094423, 6676755499836944199268283133886528716777488598645051771936175647684814488319, 7841200200792172536039490995922340397104113825218911994623753022413575084536, 9685171750835271647846188024034904289604883281120913275229696726161494108338, 13804722593058778047599265964893015518608567919815229008355552695901539135617, 133210224564739370698401112580329091433152068231765294734991529050629411851, 6253365067148837443745536970484493754157158998156041417978340186561909915882 ], [ 6379626794062388565530320965673584683811331210463512233691169393056454417810, 8031021217500376290269114216814836477415391402921787637085737712949651005952, 15261959534341262089656432084966075417921918036565394975811438856221288978192, 12412675319987657724460960278402203548317535126494687402198671892291826563464, 11594484527416994136900781664743660516883697944736099448760569480817952218099, 5525949004768282420418522754788387377346850869414250693501350383184014395566, 13423677678153887686951876961584096043047689175638209759158420018856273430250, 688554022717474500337948897714325469989973507431329797109415877246281679190, 5767985312159947447966233995178318554138266544591427341210101818005833690773, 13782057493439290506357575012457041256926849070794382612465582256292384507590, 2009465632383454183075946487099156558696455704620200103263777377956167571948, 10265570962161934109202420603055144010322859077969741656080416572925588897009, 13063467510206676485181697613068184940643350938488359709447602318070297992418, 8824580488237789516855671915345935747743201560548603121129517348234754630838 ], [ 18405974527641184935569939050199806786119735189423462681352004154947586987761, 11063658239692825381704700810385108349384459703800229121613802621026834850995, 20401912636755055463157317129314482008782101856095804626717136888886428939725, 10581036997862130058603889786198200057133900928078268413900852134308841628552, 15613862437263830065893280422700893831122147824370200118126675792748158214283, 11637898091445829201992956909089879348463617460955895182594618572267100421779, 676470684249461112964281503193041675013396554434239929609436328672155420783, 14862758280768060051884504554805186980208629806423451755599092137651959992706, 5623342967419780942118234966618900971275224510117264341831041912523393680166, 12293742687505619727765346377361630310803471543338450439759434637239250426631, 17107107724389526013252251054585363312805578717860151655674796329456502453436, 695490429984933474058785653390434166254929169748519672533632124843844650437, 7941603993861390710630117468483386570984050378175531457457840811645822985465, 19423663035279971057851778008344970269742436279020301703706239058210708410668 ], [ 2844460676842285471844840162496739784337096369846435331204280645139535043731, 5914749649291606384462747717764850940787906745751128721215181537027495043325, 16403998562201315274383761287898474039980386929670468025842124690312505385798, 16679714051449621657256662882211432986285335589270632187081448168743144646010, 14178974435133537452754432783693851994073934244854394772136599698341675338748, 14490318493007296294817313593753116388501252549516359980240258503496717340194, 21219478166573360512901478467779541318881953172337799756939010190701884653821, 13653038712207413996195005796658436532811211815454701512198612316602372800026, 6606031466185873676955137126631780808678269492505994174970319773811652852017, 6998326006251734945119834407770954155028321677085545151592873301468610324946, 15717984973502827230694305820570642040862757036680118080574899662027439132392, 6129387663611887185666499162725019000386957238200546358846681873950634080364, 3229894653990057163047872622628926092609943988699832798310941005306795398260, 1577249093608064810495237122250056987651980088410811739655744853476971398741 ], [ 8019490235657930229602545685025618469913840887375206662306714562639338096359, 6360514614281299182411878013125972206098844277909449064382248671632240409416, 18532505668867290379738328175003759079607042632729982459107375168365918757976, 8421518624327767035539667378193845962377888010421324291966623261409058898245, 21508024236353721936402111331734487542417525255582275314005272967405040862839, 18027689383014810715963711252886295463940938266456411644747464137365500951807, 14484077699638992615220759300878276902226958277985946809174186953862915299590, 4817080763362108602919187869554992685382108795016276838137423588157592666796, 10791657063117982548380087239678382293931165307389242284595466175088416832331, 17574587559710800088797913763598808892829608388483075257576879500511250128297, 20931338330271163055101602391315623325223860904427973201832184784566097488773, 1954574324880132355431783868495392698894997264747376529310223470792870288803, 2551137710278149502571112114560159376697849893483916552857521579500208583200, 3997814265160290573081282672183091638735659350920634229735367532175023689675 ], [ 20759074837657564809501685143530456377562536015816086555379080667602653298306, 11573288866341175121647407708978273297857024597782918874282176717371576773130, 19475107603336226504587469711392819869087288902355805230614724291289122375846, 21884242265301052283286073107133504985083194336113478618838523331660374213570, 11844625750737259417493690805104254337758743574820507915512371579679338049474, 18479163117067129250021591308069049721232170743585134941796617403156042279597, 4434911559893931929914698652677389633068778061297646529129767359157675249407, 316682746098441691626372255125560321251096997722401729182940832349927288255, 19610390525670030492896894087745165507340241783776573708027658938288182681300, 5840208148535790468526125686220196099566194081164771919666034943299219873755, 3679027218793663842409677356801552901605408436635647286999251784339864591201, 9878321578558671609403512127325051261043472923444011356477587484000484178928, 16646455734597629493777237097088292344110223995728568379569260368267096014288, 14735311379463771264009437608444808852233202023120148855228542005281236140064 ], [ 3066170574229466435407264700502616839626082070514501523679452764935485028736, 7951387307333182634684754650901435973768779794218900331714625086350726274942, 13578824606544430966133042087468301830727811282121948825028360301706303669231, 19848381031896652139349791682530465833719275685855743122849792015759588531339, 6922136549797750291447751953663854475218048098902194660515442295348938322083, 10287261443878564608994021014993200221021609196127927226041534661185500281120, 6329063805909277980282354325384845982783657973381777424581891744521604640994, 11017548748010510224711773916683171526878158646735796493859902304094594577338, 7338335804036221772945379382782674399589206056354184002757176151341198318122, 16538115574966264108203522400275571374556020887608210819563613080068710593180, 5138245976626127736555381649425906350640183768145541963359703291501245587848, 11347291457433539838423910567581114929056891897670787919546976342310334767900, 16731418617609356258989018213857655050257827940403117452476763890174877962606, 5300557287595854140445529914668848275536281916366261035684431572728600543772 ], [ 6573154341426354993599623914164155921131813615298607946435982334364383320793, 16419308144058642981524756443290703631729426627385646905142158478345164404879, 942314767315789144256266064192022265579304275774793342260835421710673918285, 17945712678641984649495876620223190782305382105763957622870181201252059717682, 6497446328454795535775520142893202697197882656922991300092165933292014766725, 4597431274747983679157649737399090093759447324935531801532881928263496852124, 20581664438782214735167492264807215952133504025063870863776714994387749970180, 5854805250432620287068939301087113989827350315462338534819773170350910225622, 13548539273975522227017059057161374261181128673406746320122994151943985128196, 7414800418339434590171697383031637744601564309993253226498272110927128779715, 1052987139013233499761917411027037646861657729931697227519754049539833189269, 657108667626796780066815408290681939596246857020023912757838581820942772606, 19088282520683145597098955555305422198780142332183007920340899996970202127885, 12616611543293706969401642310383814806112402432261338062963427055972449363741 ], [ 9271002136483424788269278316391606491360153732024211579417926107994995432826, 8228171988949250866347662896961764196608750080646539001443256474901139877051, 20240081759615964816136232877050251456333669788276947762731625798225823502998, 3685474186777860155223706676482968796090983045736466861690878558020083034916, 305741399293956298249448376598537769086716682101868856634885453070917344627, 14942830908704142867090451021371809832404069532430585621173997534136021340349, 11873341523902185373029537495825388400298468809112431373607438726587086076801, 16566421774425889929886838459987430622148040878072136298073788804726016806526, 18314173705630320437871113612645566255775444265992974192826331109357704470403, 8597072000455186494551694692524831407069966911367008568012412188890924300508, 12713907619301764178052509321657058919935892208409394514649600000706175319189, 14893305145776480356274920935320977108910444566603040558476174175562031483300, 11027938853766719633497710751595847377263279173227878474215846011660771149283, 6927793728403485743741891409676155921703126599118383623637742555953569891357 ], [ 275116175553159498718561489405169511232715998055900506709208190227728439831, 7338708370982730261395030177227912514214944721567888714384503728042214055309, 2285508597732647746841213906783440647997136124356359059650028586535477309792, 15163443940499746648640851269666923560658903809778640616581862089179343108182, 37868753390676617287004841173348795594362354905038492583057282228528019603, 19475937072595290694509025801956972632863465524774747773770243946674956142538, 1818532521520079200500527816308109106767855745862413136331026404438772138114, 7893556755641665136576228990240239515272703124353568551151593029797349984766, 21843411659343488969197036446870567462789014279182131087406329675847260538394, 13883536936296384480685931731174096875043607202415233199362935327975006076376, 3061885619227488514362869971925298711535995206671454426027635264218303442708, 18477632669759047471715211461337808302603089797347923153039515976242018999984, 4953684980989921770137053964305439167945572062294709110871332076115076441738, 849590699713478394267684876803414882497887483062076673282369901261463387635 ], [ 7481617454708320190331411214970150566519243590120906863698168124347483283307, 3790897889674729687102011235738708037383393765058266352188381434189575086080, 17582850308142585333519054672998882111865339708436809129995518706804527076353, 18961585057625546222763334757505522771740769338010572292783220912986926586854, 17761332237343741278668998123360108574589045018570742689473320560784505694171, 2985768806786881176362869973473950745997650698247163897069614623128281191971, 14099532828736062687388547070054719462342298981811592749594569670955512096417, 11038429458121896617356666499000022639824993159854464409767840206807807728043, 7092464867594165410092487979619486929166817679669939558999555261465867685619, 20690943609696626243672018055336898909740557628366317533030490341400911534771, 11468803355345327303851639215186997122074583511720489615730106184659306943551, 9723340381470060111632263437706139036358918795037011403763820908081655273682, 15929497108714526572140462634902391796285476840034863688822264979709196730555, 10556139316790113226399166507094772235069235781001645893008903131855134732783 ], [ 9679690373149117563754317307037586538394929348733117229177073999196519450461, 13953490152873041611053779700802518995304489998104548903919774028525032867964, 8584860336778813488021026261425560177968889952950706471574873674510806966419, 8400619522468195192079024924375785176686244213372269992523849676384018875300, 16018239095599670975582212156736908990475077583136160880304021421989907078233, 13442762142079759258078337448325782252795445513077684243558458356586404542166, 8012524517439221218249889438165569497775551565363444399021079689755695756644, 18993442931337392722189844722480176040693468853419121807183123246184718322422, 3920077716342530896195446297162279477088824676672184510151991496745985467962, 5663885918690734602622426696143772526257235018784490039324179199552252272203, 11007942216549411481832816505096362871539130535791764225892613523847180067807, 12333277086717649179464584335417603775633093807601488202185840108448843332123, 18845646001611639216437777320622198530894193094859924604338859788769244491906, 4365664869724113934112630479809518948808449158812862195377335314227128146059 ], [ 1895928299034844696630794694609519515092896092191683631304721647222032914779, 19026513891744713045426845531420132126578554294461150386909840193098440147673, 4073281111734161932072345995811001896063226222777392994725894652964051683943, 13362867147840304033834065229457670563442204439046527165143934160967798444725, 9724485076061228092177286932258189815958450833155679889060988975712535081230, 1627333086421877964064603957348348763696708139082607562629629725119997724989, 15641874381988682075545920458678901707167602315586561132909307694310257446023, 11034182059786563285109970430313289917032071817373248775707546493147901388113, 19299574745226772810381056007321573284793444116746272581694295128392282602507, 6482638271546132546782310681506292669989505915370438641175376336582811537739, 5515138970831679245126906315331906152285174207704247085730757090763031968272, 5476746571008230667726688443817396210804752373221945489797046634505665572661, 7666694240010574980777401583687953099995588711474009270339615112182231942529, 5345423812126487230177352826531606752132805611025916574123407915411930666385 ], [ 7211419275788152379372992549185439317698375419836488104253705518694042119228, 9112140750806762434510825375931543886135367141484613422947675423683311130537, 12020406779776320543918475257645763209221278449775176154727249143619468329590, 6961266423823329910790066424248133365666435921221127260870444632539329606224, 3527954161191330198309290076708590175518992377857531220243324230315686986882, 4506493800007416260514839382433205292331764028735360433653631210611507932973, 5530043493028748853396066194331787195114268917530734310055878976603589658986, 6225101949608434111198442012357272827532649788667254718474232856896193900534, 18857681750145313162493356993928966938826030906289025101399379263672964054354, 869004496821135911657110194622810910776043851317139916414752924319830673140, 1563829187789877652048924285544523323087888587074484491222967490033068091506, 3746011388196035005128740753677692387874351474501361202463946309770129429478, 8923361680602360491637539340186330583808472610027697444204036893010926051377, 17386658730777389148551542774423634880430074554050371095211396948875032586750 ], [ 18803497674827878184210135371703804206276128582022416604041787392310845729622, 6590008305704976915857671866558706505394630312395969823040635040879201337002, 2714759247406808259589803854440914533632699567907406761316959511568030744066, 16299600292583383998706243035294548578562168326056377699804434906128380481545, 18030052417377603682453955579175094175373404791176719861146533099419481910116, 8281176924556272137773300347187527516223668703826908452855802099328657344885, 11849913964821118293258226409033507680960291656604016015128854810099746642358, 2718653438901851962181612429288634518502998150085578586248082443515454453331, 17998120665039026798317726060462551095622279047136565816648549826384179735803, 5133986071087432716437635164720916024596119526725252628340805179596147643344, 10436725621240227608920674037516192343160590540839553356331196590007025190330, 15618861474705274368161439159831328775613537777134266634959100526889759124590, 2511040106219966488942941427805413210834998861588095124665874406004322450915, 9256734357641210393451356199893573129989430877284906007481196262323584132500 ], [ 9325238625126515763679853550553375879158552597544709459784109512243397955590, 8484194759795978556088297437107686617328133596604796277228418191688537911573, 7354463117736585470843139230227589188304331389476818932256765377140053168035, 13482530129860761195447497269660263095272961608736579417124458190809007451755, 14565877561081097978808851096191380459292726072163754601747539666057949167693, 2135718143241813932226161801358235289781058013695871838383051572102928884567, 20522747851108608773003772892187458826390403588440155512773881116135635256410, 11218511591600821722003994140994121719832310771637604152054113941332818455369, 16404237709834224719800904205708261378663612035126521203425485585484994986837, 3167586669955731698085513002461997957955073343333183557668566807567186590619, 12910675356590890481798719900077391291951346627685199305549632303581651173802, 20462953503625657093808736208830478011818679863351201550868889073055617578896, 18947108562530644410102590841857357185115081182319111952079371871969663671988, 6652719222291337824561052377450295064566587460338214284424446330320206208978 ], [ 7333723286812204168407439917521565157977670700382476881790986792115201279410, 21462572925415337738214437933606587540653694853107274549824898449394152530908, 6820993392268884858152757378169835647522978080101384568523885945756789014349, 16253055713127198337468919465234896268161918860396508551871391729457324125212, 10110377608880446364161064735161091842938826397512230713135002732708361876777, 6013899729219769410326935661934883558337463050053435907100782150692294649745, 18208889227209298598015138525374980382541030144328510393048300775270787949840, 15191444075449840811990314906356975059662539527217455842253932605838538105879, 19203188682890514423320800755662084436821947463936810212920115637567986869322, 3424855308164288636262956984024538145687254883958282264766019244372264927134, 19586353501601321585672146098476085745700368665390426128801697725086439710122, 15010004828387861046033155948517332272437733117418549079342100218646019702080, 13686339229559293872534012092085760944059315023471369613822812965287369238447, 3695584012986626869153168308549979767804807828687034680677188403817830418810 ], [ 11102327427527201346056529148642207216130990405495165914761901542247835149412, 17544563341965869668707473190805417639220912289969746146554006791986582724590, 4470848226757772603246285686584200798638888970547659211297578619392420918858, 4999887962989142396481351641254451370620928952306237803174890583736074770292, 18696621645163318552472841991871104820660024833640321869898695219244792544787, 16940838088709411711968888146075539661653566927745755478421474505108166140656, 11530916114120676768574532193664705720045810431665651204245333670674998923676, 7355883923626920336916662475522243088902821161113628716197989160163721774248, 11855011297239142909723378707832446926509921514737098047687587969894126468497, 14942813403879667533705178220673159254886774089783887482228941707848831481300, 12982663140753853847528768000921561826340636419307931766400467366396846035169, 7171806600323437636744282845777660095738436086868856062406225133619265520575, 15982491779929281894294451486893882850583039973528579274058985191703359466543, 19910319651211685401050894240685395121165652955380089146603485967076493605680 ], [ 5314337765479745092537090978913989310916802510812096192767666377841447850226, 19811002121850954821192061183148615163420706271800817927960207430256612524059, 18254735365473444026840717290492248863101576601864757410600437101587001057517, 3428844080448214358238191483671878854080864964895729401025193865570307658787, 17688699129722255312471132988267997472426043097741089176095207368928695347323, 4698778325800416923484519718058460264124242609977080857699400967590134848728, 11905991584861721837480962390330989450197421918781662074678555052926188909272, 11195321655863853696452219195252788379254952714823481930861848719672010792417, 7364573423043519994861038175593500896079924196888521130462378149111415036167, 8488161531239994007634631892382512438657593769374020273048837520623507271908, 10948897450624334536526533930990935852623955696383743452358741253735922067160, 7654175296077985337834288232610181411799310934515705881481549241949669590123, 2456818423512317060112219756429819064402183920202453945509918337536940292593, 10561627566351771351550703479997725668661012955063201536370060753602302262655 ], [ 4310089243116651250383251477034324245457116277666484671624575402227833925755, 11882651094700172542567008359015417490389070633573140242127755563781024148099, 9304328383406369649010049197573360507944684656613297568584394172735340111263, 18874624159090765871635243875933482675871258293088886749847315202391523956097, 21295163659036117126535933666532228255134275601226122998452204301238438701469, 12010652807420347304532358791037860496459429689113682253200903987591679627067, 16035147304145989851106586435462674695447030608653337914734493255503105122271, 9396862051344040260236487045030117425080665841603826234795752404308634565281, 9623434193020540057685957851610556657916120473978726845338192370747426064401, 20738972702824723087864078264786214906718601061526079118500228332898388551221, 457108501000029082366810998923133233303603111079376685755578228260824733356, 13918719735797746251051948238671198059940858851588937008268023917020073366433, 19519317439483352367895890468095276150233498159453735432212409926941855183358, 8400170000010792082337905010575114377571921640630709589910201278654198179035 ], [ 9476241965146735006848999585927664857836027675817848342111996150638876938940, 20383112265143113621158547584533108172173014612497300318772355462448750327634, 10370498046215116715134085566322498900073301617448752966999679321197451973184, 20733082136685384602293372077980283048183069753990343452404863587763569081917, 209896847902324756441033880218169809685412620378498856437573937154846479551, 19434208870058033389225349051527401299247475125763108527095891214558119617655, 4154375339831547300427516624109559852426973786711444825735879648391004291098, 2168897082728012692838287354581700563166925732559863316849698306675591131396, 3690054103601385333490512469861728231387681704127049683413276534001532261943, 3997073653940540957268729302105309759820513901669570962308110503858257659002, 1493108383089723041516694658460301260449183718295935886883417227290045091286, 1479721274324005701970059663387618978577823761358404739977258141309872068056, 20291086357406391640638647514048720424247838755446061571102712546958076851767, 6860718845648137601753080432837091439893783461195961430761483584544410630099 ], [ 7929983584961755765377471515178883367433439212271736050025708429355823243624, 10728358412340769313351519567620170787387770135423141966436844748162218854008, 4169855297038740915695363102363044976292665711211255871324667594694964037773, 2424224908982307794171893487036131370038399449016750026546326391873466118335, 1265438250797513961458031163301351393237543067943565114202366151377865506872, 11342865295714982458109220575532930834959120923837779800176462280225501198217, 10415384677581396651184780193811022815145977389536746022901590915883889609878, 5311187015233522007413118391261106264838418369874755037462489089469638365756, 7499079368996193403750547553190134606728655877653629403923945654291953825315, 1743769713774086589463238504150542785039161133276706463569974209707667651575, 5792276842105452143354445764064878932177699791644537942211472215636738768211, 9443070058088199873709166495831389298947366881168483562080569357428781583046, 14451507664847323254023899990839043037382802537389529773382951366995420730648, 7633550475637360595097128986678209600092185294414596687526062925070686318486 ] ]; // 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
7f289691d7705934b5504ae4bd7be283f3465af66f62fc7f1e66f03876b445efdd6104809081527f22a0bebada6ba60c3e190e9e8c2b1420244a14c9e02868b862c7945667416f9a6104a0527f036ab5249fee75e0644ed259d45fbbd0142b638e421b948f5dc00cf3ff14a5306104c0527f1bcf8d4f8bf886d2c7960badc94b3abf6beb4e43571d2b4b0f14928c10e0d5946104e0527f2d8c51b7fa4ea9ea16765377aaae4ae0a416a89b600fc0b8ec35e9e6e5621976610500527f1f2c636b4954a865946d69fed3ecd2bb60a61af38fa31f2a290ae28915d1f6e1610520527f0b412b14d9dddf3f9031ffb51eb3f73602b9e49cfa9bec4a02ec9c0e3020ccc3610540527f0ae9889ae5f4f6021af9e16dd1f2c445ed863fd6a374b329337f2fef4715350d610560527f07f75b300b401d2435b96459d2b64f6f848411f246d8478199dd2351a35c1b5e610580527f195a26806d907b6d9a9a9c235e09a48e94f8eb8da80f0d40bc4143e3d006e6d26105a0527f2d0006337513747c51f8f3e87364d2852113a83e586ef629c88cee6d4cbd422f6105c0527f257aeaec24103ea15e4592c32d0ad9846ff1a2f3a836e0c19947980912b9006b6105e0527f294bead7a3378f80183af735f6bc8529ddc73d9e0a35d594dcf93524403c9e3e610600527f0cf84e9163744a9a65520f4b8cbb4ca35c428d1c4a5789e11f42636c6d1974736106205260809081527f21f43b1ffa301d565dbc37ef1eb2ef669b8a1876e3754b79657b26fe43c845ce6106409081527f1e558b2ca618dfa02f0d640fdd45f56492a577154989cd09523829b5e15f2d62610660527f04db437b7b4fa0f6eea95403dd25c6a674b3e81be98ad4532affe8507ec05380610680527f20376c16b97ad98b8dfaa6f10d42a3c5e264c56018d32b0e8af528db157eb60d6106a0527f234219fd49f941520883c13c1f01ff7b2f7f512a3046f91d33cdc3900ffb9de96106c0527f1d754d84438f79e6b701f7d665d59755a7bcd0b63f7c2da94b737606c16de1d36106e0527f287a08af195521f756271ec64bdc4ca8a7a95fae892c0fd2cf0c148d6c0cb653610700527f0e16af35936b356d5974b385528f6d9a873568eda614ed0e54be4494c2acdefd610720527f0fae7f745efa5884dc82f1595b5c10d931ed6da07b5dc4bd6f99dd5318c7c2a8610740527f21f41494c6685503d748b45672c65d059260bb205113882458c86f6da7ea3813610760527f1ec11e919c80981c8a905161c48caab360994e8f31cfe88536c5ad8b2c360039610780527f14f32ba1f584bafc3aa283f79d5d65e97a6a280c7c51cec192ee9e48d593a2be6107a0527f0cec3b3618ebb60152be2987b910940e79a421d666a71764f25ded99159de90f6107c0527f075a80d650b5c6f8a0b3261ae5ec4c5a1b53762f30c559aaa6c501e207c2514f6107e05260a0527f026c5d81cf4e6cbade3622323c4ee3b4568333e79504044d2ad4d2ba01abefc56108009081527f286bacad6fb92895c85483e837d7c821d3f7bd612ddd932c16d618455ee62a45610820527f11a11b68cb7aa85f42325a3d0fa45e0887719f05c9cd472183b1c7c78eabd0ef610840527f0674f14710e453bc1f9255babc8d2aeb3b2e321c68e6871b54c285e71456be4d610860527f11bf8be1878d5dee6820ec405b079360da81da7b79f29aa54096ae195ea1108d610880527f2a02d0a645dcfcafb2235e7f9ed37df27c3f7cbd5ad11ee831fa17cb36881d3f6108a0527f1e2338342dcdeec5d3ebd82d4b767ed93989d9147ac711dd07d8aebac0962c206108c0527f174c21361611783b0dc90d87a6128cd4d7e427cca10db1d713495d8281ce3dac6108e0527f22654673d8af40026294acb3c0e51f0f367576d83a554bd9ad72de06a796095e610900527f08f410159146e32feb7a585ad437c4a48ff2109d7f74f58e709b66c292e1c690610920527f160928e9343db00c99255a53ea3948b547d0bb68332069c2d5ca632156a53ac8610940527f1b8e0ca895ea976f5d42029c964ea52d622388e90f947cba08b3924b470d84a0610960527f2f21e5bcc52e6d794afbf44a0dcb938554c7c94fbde66c1b7965ebb2d266d6be610980527f106d51a9231260949c37fcb7c8296c246566259829e98ef52683900a433ad7d76109a05260c0527f1f0691902d412d4afe6e49f546ad03d739f42a159af9530d717c01a3e9bc86b76109c09081527f26c15552cf455e161693ea7f01601fed166f79653153fb5beec9e8393c1efde56109e0527f0223f9fa8192ae6be752d29b47e8b8a75e2172fbd4c89cfec400a9766e1430a8610a00527f100341a4e94a5cfffa3c6cfa1be6ac3bf6b0c4fe578f8c99cc4f67e4d7bf4886610a20527f1a9194b8c654ebf4f3cbb607c8bff2ddebaff87b8bdec06745ad4ed802728a6f610a40527f0a7e869e75859fe47e51b3b79ad155670af4e6780d3edd3c13812db0197854d3610a60527f0ef4a576b0bef4d037549aa24282378e13b438fc9bf49efcfd65cf3aa8935d28610a80527f199af24c0e98e72c37d87bfb9386003c2a0192ccf015be777c4305d5eaaf0e81610aa0527f06e7f2d897f05617580ccc132040f3b83f3fe1a496354b33f39d27b15fb2a5fe610ac0527f07968d5b67877cf32da7858c85479a891164a19b1ddc26fdb2772d294addf3b6610ae0527f1b4dc215f06081e276803f1650d67324801c0a4f48d4b4fac9f6650d2fcd901c610b00527f0c5a5f0969147d312118768cd73a762e53d3984088be93e46d8433d129939427610b20527f1a948b5fcbf5918fad1f3c69d9d58c2df72cd9a15ff57a35c86c9e5082ee4090610b40527f0532f7499522ad56592a815a303b33b648fe170e0c2f47d831255298200cd775610b605260e0527f22cce52f921a79b56993baaa1854b37ea74caf7e6f2d957048fe5e5d1e536ce2610b809081527f1ca9ca03dcd6b6539118fc036663b6deae0bdb0df258f18e23613f4e80bd5bca610ba0527f2f7a2d324bace30583592592d82bb970ed33f9753d03dcd3b54a44af04a0f1c0610bc0527f0f6008b6f13bcf8f2663e7392e2538406a7cdf15ad387e2eda92bb1de03f74f0610be0527f06e30762808351c935656ddd7ac3499a2b497991d02f54c178277fce024ce89b610c00527f1a087e883f78b0e1ecbc92dbe9d82258e4c91baac53d71836902953f8e5a6961610c20527f0d35fd011b125ac12fd1d7c655fbb7b1ebc9eb47008676c750907f7768f6d644610c40527f183a077e1a0a2dba1ffcf7e2a490859a5f60d5d04b3599506249b6d534848ba2610c60527f24230c1864237bf6dc8d6b3e40bb277c02dab92e86aa515aaa62b1ad496b8290610c80527f075a995ae152c5f9737f6848a2d5ef93a8e7809981a06834ef8b684390456011610ca0527f2dcfb2766574efd57331146186055ee967cdd14d5efac43389a29605d13d561c610cc0527f05a4a1353e53e1b5622a2200ee1fb2e1a8e224a8ec5554bb670bb377505cb615610ce0527f064cb205829acdaf1af3d45060ffa3433c02d3a7ae61b66ece50967b97e1f04a610d00527f1af278018cfd4d2edc11dd77454ed0cc4ef3ca1dba5b0ba96bb2bdc43f1e8ef0610d2052610100527f23e7488f10d910e129d466443a7adb99fad7ac0b0bb37a51c9d0f1b7c527a98d610d409081527f29594b068af04ce6fe6b248aeb06051d6f66a39d9f3d13cdde5b343f31ec16ea610d60527f1e63fabe17ec748ba86bf78cd84029d23ca6c543ee800179dad25964fae41cca610d80527f2acc46fb9f4ba2abecc49ddb33c0314c7a940bfa021c07d44a73614599995ea1610da0527f0d520400f15c87d18376ebfc03c8ed06b9ed713a654a0024cf310b64175d1064610dc0527f188ef3fd8a2134f2d4237dd7657f410ba5172ae081a6ca117dc21c7ffe71d6bf610de0527f06a71b093737f1ebae5924f2d5f47b8b14526c4831c50f9e9c7c032dc011e511610e00527f175921f58fb9fd90e2a1d2cf951ad606104a1676c9d2e6fc8fee6ea105239035610e20527f236859cb45dff68ffa2524619936a9cb457d2c0defe59b5863607e439369f316610e40527f28e0e101f6b62767f587d7dd8e0a4d4e32fbed3fc65c940d8aa8509bd826e33f610e60527f0158d4f5cd5085c6e4ae2fd1330a52435eb0745d54c7c8a6ad5b7a3cf5333a7a610e80527f05dfca18855acba1a5409f714a77297952277658af5e7d5e3a05bacd0b8005d1610ea0527f1edb9f2871655c1418f9c7b5851dd8b1713d1f9d7d78c9b915b2d3ecb62e7569610ec0527f10d33c3349ddff796b66b2c800a9fdf51d44235d14d74def1b2c112bf88647d0610ee052610120527f0e55341297ed43dfa1312685a260ec51b42ed6c24e46b79900549fd023441282610f009081527f0a1654efc1b702b4ffbcd21a9e0e3323a40e4a136bfa0cf81cf01bd89d433c56610f20527f148f5bd214818a2b59ed67a8d79e54a048f357989e2046b3e7b587dc4893896b610f40527f24d21716ac3c7fa8d8945b7b04479a0b397b8fe46e3424c0db7e1d7d824e40de610f60527f2830e9e432e9bc3e8dc48c98c12ee9081273f5be246347769d0a34e2f0e7ec3f610f80527f012e850e98e970f096522ef6f4f537529f296f7f3ec9ade921780c45fca74e57610fa0527f1eb45ad2eccb950133aec7d4da6d03c301cebe782ba71e3533d5a0879bd6d0c7610fc0527f1ce082f6108befc4c6133865cdf1b35a587868b99c36f59811bd3771a75c3753610fe0527f21d1d3327b86bcb2514eac6f11a77867856f5a2cb24ff4f72f65742854baa0a3611000527f072a1c2e8d55ba7a49807bbf09ad71e000d67b09bba8ea2ec6009086342753a7611020527f1c9b7142435f0c29a9ad5549dcb9ac289104f48d39d4e196025268dfa1b6a255611040527ee7f5e830053d6bd9dbd5a2546f2b38820b7ec18b55b638f189c2cb86598288611060527f0ab8a2d0b81f7a40ac8a6a8bed4df0643df2a4dd4606194c8508595e116f39f3611080527f166b4f313145815f8ab8a09e6fac91e3cfa404438c8c430dda4d121eef70a9bc6110a052610140527f0937ff264a4c22904c66b8466165d9302052f5687326970486277a54f458717b6110c09081527f23d014ce251eb044d74105355f1ae0b5dcdf0ef73fece10777328b86b0bb4d076110e0527f276c1c219fdc62892dd095536db3525c18d0409121171197c99bdd8a95eb2f5a611100527f235d6ab6cef9830493b2c71bacd3782d67eeffacf4aed5bc07c2524203344cd3611120527f1ad0bb296be4e478c61149c736ad66168c2d0ba4410e05513c1af1ebe644b076611140527f0360722094dd4a26a16d8f12264b25accafdc6a3f55736f0de1e55dbdb28d02a611160527f088b276813522c901c6ac134a1ffa00cd61276e1221bbd7ff377d1dba5e1beb1611180527f243cd531b8f9fcb0cd9e8d9418c6e9306b89d96e0136eeaa66ebdb248bfd08f46111a0527f02a12915178a6e7d4a612dbc3a878db9ce7153bdc9130d3df7308c13b2e97fb06111c0527f05819bfdd569b0009e9bd1f9a41c7eb23ec33d8cd37d5d05b705b4511dc09f0e6111e0527f05d2260582a4a391c8180a17189b98a53b831ebced724333194f2f6809571401611200527f185017332cad227b54dca48915a4a78875967f8ed352fd96d5446946a64b4297611220527f08192db4386fcba811f000733a6f28b929be4f9aa1d2140ccc3f9616f82f34cc611240527f1281dc4a2838c70842102a997a6bc26a737209d42266e815738ec3943516e15061126052610160527f279e9dd39bd768a08ad9ceca41993b8e8408d025affd64237b5985ed9a37d52a6112809081527f11bee6efbee9ff1ffe2f060d79bd751d43bfdec4d5fa5e323582f8d735f44c7b6112a0527f1bb75e2ad0bf3e1f255a9e983428b9baa96cfae8bf71d1aa4d3a786235e210656112c0527f28941f264db478bce46c697bc574a5dc0b956d033eb29194de103a9a70bccdeb6112e0527f19d5cfb9c2ace7ec529ea27438d22668f09c2acbdc9c099bbd5554a6f3ae145a611300527f29fbde88fcb5e46ca563fad42cc7e26ddbdc0e655f88057a8a8f6e51354f74db611320527f1dd99423b0d860b8ee34e292b4616f7c870094c265f52cc450f98a575323872e611340527f2400a80de9d38f539c9b0b9580ccb9ae2e382f3092a657ff50a83ea03a4ba7d6611360527f20a5b9553d48bdf8ff66139e723e6a1655823b62add790b62e605d90044bec0e611380527f196df524c0987fe4b832add37f546b835dd259e7c03de7226a43a6a062b4e61c6113a0527f2ea4e4d02236497c570aeac4ea1896e1e3a19343f6e50eadb273cb5a7becdad26113c0527f0800ed797700c5e269e0c1edf4947c65348976d4a67e16ee547c6c870c36e3d76113e0527f09df4796e7cc0d89f1fc722c7d967d4c0baa823f93f9c4d6c7913edd185bc11c611400527f23442bab611ff64c7eb49ab07f32f52008673d80ba54e04bbc5c61ca1f0c383661142052610180527f2f5baea6ca93f7a41762a2b4f5b6c31c4e0d140e422fbe379f2686522dccb0356114409081527f288e0e05b537a48d5470921b9d724c26fb8d2900dc7d6f0741ba2c1a35138c17611460527f24584003a84247aeb78b30e2d8fb4cf7147785647ddeb68a7df6a79ff84fb008611480527f219b35214df5048253b823fcaf329a45a2ae7f959af6539ae7753e3554d289966114a0527f21795fa4312815b80472036b9f35c1495378f172c7157a9440e62ee46692ace66114c0527f1052d93c57b9902620b22e1c29b9106ad076f25f69fed4106736de133d72ecb76114e0527f1948cc83425a81e7f7c6486e0f08b4b412724759ce41f950d65fa5283c31a4c2611500527f26769518d0ab71ba583b0022557cddceec3566637a6c1c519999523b44d953ba611520527f13a68997032013798fc580d466367a6a04502f500f7dcf4c2e6e03e777484908611540527f2668cc07461b1088861db6bf4c03528227a20d2b473e088aff34daa78be83800611560527f0bed18cab0f02716c9ee5e68f2434a241e6784ba03ca69df0edd97dd72038b6c611580527f2e04d93cc4f54309390fe572d6affd4cbb1989ddcf410fb476e3a8681656efaf6115a0527f18b0b7c0a137e1454dd3ca510d220987b5aaa51124e157fa372ec6099a03a7146115c0527f0354150d34ffc1b4ea2bcc2d705f72e2bfac4619f6ba35de7a5c08d5d7ec34b76115e0526101a0527f12c1195df5fc75284ebe217430760ab4862de0255f75dbe24f4fe60f90c3419d6116009081527f03630b0da0e292c1088354c075dd1e00694fc14db1878a5cfacf2b7b797742e5611620527f16d451a52d64de482f4bf60beb30fa565a4e29904042fe36288002bb84325d5a611640527f0664003075b0ef9bfd1573f70b84f7b75ce76563169be92df533d5aeb47ffbe7611660527f0b41ef4deb720d4d2fe7dc11b4483b3d0b226ef5cfd8ba9a4e46bea1018fbb64611680527f298c7227e27ecf7291ff64ebbab81169202697e8e76afbe9fe1504243b4077b36116a0527f0cddb62d67cbb120c38a93a9d10466381bcc71a202ee0a75f1bf952ac1c61a006116c0527f1f251e0231fb968a4b39bd089704ca99438b645cfc29920e0f8f4988f77e95976116e0527f0ec2e8e1aa9376bd31702a93e024f654ed26a324bf744d53271e510a1f7cc2ff611700527f1155f64822affa2c0d2fcd555aa5dad8698731fca61bd3a3d072cf33c1a8d9f8611720527f15699cea496017d4bf9fcf96e5a384e7c105d2ac074571e600afd0e9b4e7e8b2611740527f1e85323381cf7d3ba3431e64e894ce4d693f0c463b6d104dd33dedd7f1b9f081611760527e4b64f1d7c848aa7c28d6a815b7ec34ff2bb76d2d8c25f93265ad8b20b7140b611780527f0dd34779b2145df8b131bfb71ffed5c835d2b696299ed813bb472be2f3a880ea6117a0526101c0527f0e1abda56faf0df6daf6b166c95c5edc97bac1f73d539a4e419e36cae7ee1d926117c09081527f11c1659cf668bedf75fe21edb2ff2b1fc695bbd538c1331845f24839897b62006117e0527f21bdf685c361d30014b4396b358599cefdc9d5f3b464d67a54c9cb2978925710611800527f1b7153446f1040fd153236c214b0b502ccb8c202c54ddfa527132962133d3988611820527f19a23ee53b40796801a094627b87364921ae981e57f9f478ddb3fe9e3050dbf3611840527f0c3793885e6423402d09a54736d9a0fab9f8e5edf858b7be1710b5ee2a46c8ae611860527f1dad8846162762182f95a6360199cd0ccad756cea2e4fbb6f17bf7bb643cc6ea611880527f0185b530295447254ce398130e4f1bac6a4135c8b9be462422bb6ed88d7d81566118a0527f0cc09061f82989f499b935c855c6446ee4c02f2b5ec74205bb2681a3d39cae956118c0527f1e785e3c3ce8c5a93d9a16f466e1df548f855d70d18613fe8dd861f3e4f486c66118e0527f04715136d512b998cab28f4cada627caf8da082e1b11e2438ae4f8ed17b259ec611900527f16b21b75881cfd9f0ae30c2ebb472bcfafd4c09ff390f3a381e2098d9b057cf1611920527f1ce1a91c61b317ca6f871105d6034a1ae73832671555965c2deeb24c5da51ce2611940527f1382891a3df8d5ba54ddcbd4a9061a4574b0a4813c7d5fd49797bcd8ebbda4b6611960526101e0527f28b1699345f2327ed7e3a35dbcac11e9704a2d019568e273b2ddbbdda61b96f16119809081527f1875cf03eaefd3c4a503d2499a9524ba9c8e8b1906511a4a85800ee21ad424b36119a0527f2d1b12c661616bf91e9616cf0dd1823f5e33799035dd1bcb92bbb8bd7b9fb5cd6119c0527f1764a79b21973a65541bb9bf58bae57a63de6e20a207369f85b0ece77b1da3886119e0527f22852209e2034dac637154e40c26004c7d2f8d6b0f2f649fe920d916a0b9608b611a00527f19bad11fd19291c1d7aba146796c8bc076303184293b05257a2e95aa1b35be93611a20527f017ede6c3a4fadb0c3b384fc1bb3ba2515ede2ddf470bbc5279817dccba8486f611a40527f20dc05e84fe2b3674dbf6cfbc4ea1888a95c385a682b198665ea24fe875f9182611a60527f0c6eb30738c6c686153cef7a45b97d5da153ed62a67f725af666c8f545414326611a80527f1b2e0303ea261450c0505cdcf6d8c5a1fe7c840287ff532d632de4cd4b899b07611aa0527f25d247a3eaf394fba18917bc67089efdf773445090ab333538b9db6dd2aa34bc611ac0527f0189a235ce7315920cc9633d5dc1c072cad0ebe0e95a07a0a7f6152bb14345c5611ae0527f118ec9dfcdb51980db3cdbc0b4917ecc57a03dd0c8586ed23145fb8af86e64f9611b00527f2af16757fe4fb59efbf68b60493d51df19d06df73ff34828b9b0805b3a12512c611b2052610200527f0649e85e611b0ea226cd5195e88f479ca348748e3aceb994208fdeca397d1c93611b409081527f0d13a131ca0eb5a309eed385c046002c368bc570ea227bb02cc92be5e30820fd611b60527f2444558ba0ba9ab3e990299dc09f450bae4c4c92829a42c6943c451cc858e346611b80527f24e06233837107b33fc5cb27ac7baf78d48735d71cabebf68bbe8437ec15e57a611ba0527f1f5903dfda34ef89110f00cc07959025cf325ee02f81046cc48105d3e5930bfc611bc0527f20093ac8cbfca0030d78cc010018beb1b3e689d52956baa0c54ceaf858488e22611be0527f2ee9cc8d4c5e47162bf7386e4325e3a513e6d4f4458f5e01fc343e340124c0fd611c00527f1e2f5897ab3f2279bc761e37a8c20cf48a6bb27fb6da5bf0a5f67fca6ad93e1a611c20527f0e9ae19d75c9f500b45f68de80244090eb66f42dab81886a78645cb1bfb27931611c40527f0f78e982ab46a572920bb2e18383e1427da1df92db1f3665498c719a7af869d2611c60527f22c0107166bb0aa5b0885983712566f8e0b4471e69d88ebdb7d0173345a2cee8611c80527f0d8d1c4837d9de3b2d429fe96aa4f29fce440e52141ae4571cb1f1d7735af86c611ca0527f07240e3b2aa1472c3c81dbc49bfb3e866b43f778158a3fd6641a773da5241474611cc0527f037cb0fc644b2a88c90ee66cc4ddb962336347ccaecd1f4fa8eb567c04544655611ce052610220527f11badee113262abf691cc75f28c0236812d76537940e970f4488fbce2ccb46e7611d009081527f0e0fec7749cda728fb17b5b1ff968bd3b6433dd6dd6cc619e8ab2eae099ffb48611d20527f28f906c82568287d2256b56129e8b83944f9ee180627afbc9d510fdb7b392458611d40527f129e691ecb7b6fe77c01d70bf2628fe69e5f6e962f1029ce626a0d1888624145611d60527f2f8d1c3dddbd8cb59cbec15b623aa1309d12221f7c62d956815c924114ec8677611d80527f27db4f836bee8aa950940cc1732aa52d0e741ae355a8c3621ad068c043f77cff611da0527f2005b28ce7c5532ebf6b7e51d10c344c9a9b00836e4fc37f7eb1176d640c1906611dc0527f0aa65efff54d1d497ece96910f6661001fb199d24c3cf997ce1e401788a382ac611de0527f17dbdc878bd81276bd23b35fe31d93f4d7cb65b722e65d58fe039d126524bb4b611e00527f26dadd32b90572e617c96576afcb2fcd9605b1d898b2366fd9a7cd0c23769da9611e20527f2e46b7b8c48234c4466b0be922a9525a8896b2d6cc9651b2f6f291cf2bd72b85611e40527f04523ff71405a30800020b61ac9a1e6b61ca68f9859f6bf1106f2a0fb66d5da3611e60527f05a3e48cdcb56d89222f017078cf35af105ab2b2e2cdb7adc3d71de732d2f220611e80527f08d6aec49dcb622b4b6033438a7b990f6e08a2d41909392a890d6ab2970c4fcb611ea052610240527f2de53850b4466695b93e50172ffcc6ff47c882aa9444bb09652ee9f5a4f43e82611ec09081527f19963fd677971a8f8f1fe5d09bd27ad0676c59c6b99cc2c46d8a886716e16a0a611ee0527f2b0e85311370de1c8442d4216cb8ccff3d36a6765addb8a188408eff04a488a6611f00527f30620acc22c938e923607f077ab953afc8412ab4cd325b812e18b36db9ea03c2611f20527f1a2fd212df4bf20f8e47cfe5c5285a3706f8ab9863ea128054bafa1fe192afc2611f40527f28dad5eeef0e864876e671e4a960e451d5cb11204eb0f7dedb1d1bea322aeaad611f60527f09ce122c5b6d149f0192436aeccf959f73db3968cbe69f6c2dc955c1a8644eff611f80527eb33c6fe57db259f1f62f8df50692e8d8c36a22c77234e0d81dea745254adbf611fa0527f2b5b16738d4e4e8f30d8073c01e34d8a784bc6b41ec8e2afa5c8d2347b145ed4611fc0527f0ce970cfdbc28f9bb3195dd2fb274f9895a29a996aadbdaa4cee11b546cfdfdb611fe0527f0822416fe28cab89c713f9ab14d28a3d22a7033c1ada634ce7928681369e9b61612000527f15d6ee8f939ad0609d6eb842084c6ca07a055e83ae2d1a0109498f8b7ee9bbf0612020527f24cd8f5ffaa9da4f482d9efec43b3e1c77e8eab2f44007269b14614c932ebdd0612040527f2093e404029042625197d41362d07884031eb192890e18ac0b1e4237afe7402061206052610260527f06c7641b87a6aff30a7828f5a61b6b79949489013a23ae8f138bb6458a7279806120809081527f11945363118e8c1728e09565b5ba8e9c322b281d50c81d9ff94a18612ac41f7e6120a0527f1e0557a57f3b98074694b3bc37edf005f0129ba8ab7aeef1346dc1b94cc283ef6120c0527f2be1c91a0c0747ed6b472d5a6103ca79844f6fac466e756e51599951b0ad1c8b6120e0527f0f4dca5aaa01292e52a8a19a994dfb8ae96163872353ec485ccf1a2c6bf2b0a3612100527f16be623636b1118ec0511c5c0aa630833c542c80ca87898c8d8a0c9c6432f920612120527f0dfe1f87f83f760e4779993ebb87b600763a78a1e0022f2a3c083730c09930e2612140527f185bb62bd0f1e1ec17991ed4246cbcadc9d17af7f85d2583b555b293b85cb3ba612160527f103959d3005c53566ecf636f2d99b94266ae10f20d7941d94ab52b1e66c99a2a612180527f24903de01d4c24236f18e0a72f1485b8e8e0eba5385dd2ccf3da36f42f29f29c6121a0527f0b5c24e7cd6e5d92ca2e92b79c3cd608a0cbfe8b2940aca50db477bbbf6761886121c0527f191656e0acf10df4d56c25255747160742762fc2d37e507e563b9c2b2158231c6121e0527f24fda5b8762d28c2cb390432cce54693def5c5d8cf3f1a820bff33763673116e612200527f0bb80254eea5b1630deb61300db47c2e3e9d43c0ae79ac6d8d8e5dacb30b421c61222052610280527f0e88460520595dd83aefc1ea925bc7b76faabbd79339a6862c8b8ae500e61ad96122409081527f244cffc3946a184f713d5239638a2e1d795aeee5ee445c9f9aab6409e735b88f612260527f021554cd4ee080447d929f96556906a5504df942919385bc5e64cedbf2ae394d612280527f27ace9d675fc4a5fbaa1418f1420ae54e57c8343a69843ac97c5ebcc817820326122a0527f0e5d6c9eda47e171d3f5a2edb52448f00acda78580b066fc588b39aa09638a856122c0527f0a2a0dcb9dd824a85d72255623c47308a71ac9c4b4f6bda9d273b1c1f88b629c6122e0527f2d80cf2b46f3ac5285aad169e96b067b01de824253f4156311196ba6e4bc2104612300527f0cf1b3cc75b68e63af37eb275714561af525bfbb82497cd4730215975d8a3cd6612320527f1df43394141f318ee9571c1ed93198d282288da8bcb5b33e3c6f1e9269a76304612340527f1064a0d92da154a1b43895e1833b6bac67e096996e0db5bc1447c30bbdcb5bc3612360527f0253f837b9e9f89777891e37357c8654e1a5d5ea0262afd58136f1c1c969d395612380527f0173e90b1dc6b589a510c7364be31128cacd0baf495fbb9161024b880c18e97e6123a0527f2a3395c5515973f8ebbdf18b8fb573eb46a4e8fc88c2f159cc6be94c7aa35e0d6123c0527f1be4bfc35f47cd93bee0e1adc16a0957f824a9e24f31a32c372e97b6a2f9a71d6123e0526102a0527f147f33857a0febcfe896dc770f9a2a86a7089b55a396afffe4bb21d5321e1d7a6124009081527f1230faf580d4ac8a0a7d8f3fcf457f63ab27cc54c5820739bf6437bc43eaecbb612420527f2cbf7af588268ced22cad9f5a9254d95c5f47127387655ee36dc94d70d139296612440527f0825e78b37cc551183bcb25b98363522c0a801206000c6ded60985718b46ab24612460527ead0b22c9addd5f71d90a7578913c0da692d7bb9230c78d6f6273114df69d73612480527f210957b327089cd3495ba001efc730c8f84d824fdf9448c277d02379b694d0bd6124a0527f1a4012ba18c18efb60b94d7fb0fb750ba948a5c73e55ffe464ebf7acbd04fb816124c0527f24a0432f67e42bc4409433b85588fa6d16dc93432fb633ec1170e1de3d258e7e6124e0527f287d7479896cec61832a3e7e5e257209609c6af97c315bb08473de27be705f83612500527f1301c5336b7f37607888212f40b73bd0aea535cc7148be0f9cddeef1f397b8dc612520527f1c1bd11368695d776b6d4f51d8b9a3ff091dc23b438ad3a8e00f435768543c95612540527f20ed4fde81fe5b8cde1b1b005cc5a470003b8a12d74d4178d03351cfd620c9a4612560527f1861979a4209de561feab4faa20b540fafe14a2f47815d1d6f756882735645e3612580527f0f50fe0714b48545aad0aa47edf4cf85b77edef8420cadbb2ab055537896841d6125a0526102c0527e9bb5d21aeb5bf32e1a0a2c6d2f7a0044c7bae33fa95f6264135534b5aa1a176125c09081527f10398fce470a822d6e5bf4a572fc5aa091e664335a8f0e5f4b82ba80dbd25d8d6125e0527f050d8d517b496e2067860366e267a33cceafe24e53584565511927952e43f160612600527f218634834c0bd7a41a100548c68c54d6d47e30ba6841925ce0afeb3aea683856612620527e156ed62144c5a67173008b02d76e28126ca00a2819c0bb3eb4cc92c196f893612640527f2b0efd5fccfbbd5f77198a0d800e01d63679db7ee5dc4213c4a1e82b47ce07ca612660527f040540c023f617d52c1ccbd2d9e825d8f60a2f6cc6c7e0230f8c259659cdc082612680527f11739844b03202e6faab271c897dfa7bef337a5b0672ab13ebe547f572a089fe6126a0527f304aeed0c9d0c871f87128dbbb634322c5449164a13028e7f8e46ea7eaf5861a6126c0527f1eb1cdadf95c5ae983ef642bfb86f103558afc4571483cb7585a00715580fdd86126e0527f06c4f741b7246e5655a575e85661422ec7b71e79535db2ab86ca6105124a2f14612700527f28d9f82f7cf626d8bf29d5a074bf2e8a64a11e8b415465ec3366cc0e4af15eb0612720527f0af3afb40024843ffe9126a492594cff90682e2c4afa7237bc901e70a081e68a612740527f01e0d9ee7d4bfb5b07b2d9102409de25c281bbbdd10f2bbdb04adf4a2e467df3612760526102e0527f108a7206cd0ab67ebc298481ce73bbff082a5434b01e26d8ec53ea69f7dddf6b6127809081527f08619279b0aa0c5e4f7e0ba18b37dfcb3ab7762debd778e1675539e2023fe0006127a0527f26df8a6518857f2cf15a8dd27eb05fd4854710b80ae479cc3dbb4963dbb614016127c0527f29ebe07739ab8b1f23d828751d533ea3630788c03835c7ade9de2fc725639be66127e0527f27448ecbcaa51b958aee7c6415c041b815de8940e427fe2152c77639f3c5e7db612800527f0699e2a03a056f4a0323541d174c4d8c1d71a7b04c664aeea06aaf2f97849623612820527f1f2c0d82e6d3dbd8f29d81dcba037666a0567564fed3a90a34f4c2a0864fe6a1612840527f18678798666318a2f6c93fc93d788c258f01c5aa450b65f4927ba6308f7a99ab612860527f0fae315f1aa96516b51b9a35b0bf04a303290f7a4b0f107434e88c9b897d8ef3612880527f2dbea8b90191f27ec6c6a71c3b576ccc10b6945a2d651b526b36c86929d7dab36128a0527f195b1cd7777a95a1dccfab7ad95d9815d143fc6d86f974cd07417038811e143f6128c0527f157f37337b54b492a344d0bdd2d2dfd3f27a74d529898ae3243bd532983b58d26128e0527f2337c69e87af024d6cb0d8f29c96ee48114d2e7b2c1535ad6b00e178977380bb612900527f17569028d04252e77d46764676068c2e1d43bee814688c6881424210bee531ef61292052610300527f156682b6b037656dd8a82fd83ca1924074f752a207b2585ae4c9ea6f4c78c75d6129409081527f1ed96542fc65f19260e0a755919c2e24659105c4c9df00ded15f93f442f6887c612960527f12fadbd7a3c4fe425a3f30f0ddb2f375e471a373f27e43c8a494d9678e8e6093612980527f1292950805f2f6b9f28b3182436c2a975dd365a59195dc4df585e87395c7c3a46129a0527f236a0085c40b7af8c4448e830057b33fe8df95a33647c37c55b225bd5f8b1c596129c0527f1db855703240e2f49d63e43c62f8c30b2a39b67bea6e9a9481146c046af276d66129e0527f11b6ed9c39e7cc8f66dc7f9b386ba00528af573aea6d008433d39881470fb564612a00527f29fde8616fbc9e483e1222d447832cb7bc58170c7ec86e8f4de9070e07eacaf6612a20527f08aaaf73c42c827990cd0c64687ae8cfa0b373da849a767ef3b63ca08327663a612a40527f0c85a554dd2ecef748e891cbd90386b5737d945603b56c887986f9a306d7de4b612a60527f18564645c2a77acd8cde744455ead6f28819282b59f662f7da89dec13b7623df612a80527f1b44633048278c6435e1449517b0235bc9f4c2cf39aaf34908726c3dd3a07a1b612aa0527f29aa41f4a0e91cec6a4481c3280a94398f6ff1b0b07b39ab0e6668dde4383082612ac0527f09a6e0f5ddbfbb30481e978e215f67468f31eaf930dca350f0fc53bee83f988b612ae052610320527f04310eb11496a8955d0a91b51aead8dcd1703cdc4b0e7f2f4674ae3e588b595b612b009081527f2a10a00f88b3abcfdb5d1c8dc9f8727d16373ae7fd05b239f7e5bc22909682d9612b20527f0901653987feda97752895523e956cffbcaa8d3f088d280cb19cf4d71f010a67612b40527f1d8b1d6227e7d72dbea884042ee1324bd31a5fbb7ed49b79f04e834245a552b5612b60527f157fdd0e905e98e890291c69bdcdf6307771876bb8288809b44e63bdc934710e612b80527f039909b2ef090b39137e7420aa7ef195656037f3482b4fc10e554341d68ec93d612ba0527f2294fcb6a8d69542b31f9942a59c4f4503e188912dd1cff39640cc2217e1cc87612bc0527f1865202fa3c02e817f2fcf395c446a3eecac5d97950a44ffe1e8d299e064e551612be0527f2aab2c1581a7dde08e01d9efd6c7fdc561b8c7e6fa75020b9534f2d3b35afc0b612c00527f0e550b117eb8b4be6223be3b32b3367819c099e5cee581ef44a2cc483073514b612c20527f0c317541eccfeb5a470e62a4a7183b1b22839e1a1c23bf58b6ee43d1fe87fa10612c40527f0c1bba8cab5dc7f68592841c2f9cee4e068d6791e55f4dd54edf7ecf336cef35612c60527f10f331f64e0bfe4a9226e772e395f992634eeb6219cc239dd5d8e03cbe1f4581612c80527f0bd16714d1d83b871586d6c721608db6150796aa7d942a7d6b7f37e1fe54d591612ca052610340527f0ff184c75453103ce3e832ab21e3f16110827890bdeaef035641417fcb9b2c3c612cc09081527f142549f5302f25b6f4fd1abb1b586555dec7abb108c3d988222356f8845157a9612ce0527f1a934f239cf4d919aa5a54e5706f63ccaedaa2a523aa75b6cb425fccd9b30276612d00527f0f63efea5bb28d9047c8ef3d06ef698f6eb8d69cc2968256b56ba2c6b1aa3250612d20527f07ccc054bd8707ae6a7e1136a7d734ca437bc91640e819bdb1161db6285b8482612d40527f09f695c935d12262fc81ea65c312cab7c604cebf8a7a8e32199912d3fc172f2d612d60527f0c39e4c9610d79d226d090265c7f961ce63aeab2e824e029ce1b89601913496a612d80527f0dc3486866c4ae74c9f7227bb2bc821fe2ea1a265a34e961cfe8e0548f0b2ff6612da0527f29b111d35a7ba7b41a2e65e5412dcceb796b31d0d87b9f1a4d24b028f2377d52612dc0527f01ebd6d03eef5c45e78c52247c3282fcf64558e43ff15e1d39533389bd7a86f4612de0527f037518906b748ee732531e22b29338f4a4f42a0f216226011632c4fc7a592872612e00527f08482ad4d100cefeb5679cb8b4f6af5aa6b87f87d0a7815aebb30da0d927d3e6612e20527f13ba71984e13a4480217ff47b1055dbef0ed7333ff8403935f10785b4d212031612e40527f267080070a80b5f94ea5c4363d2d971036e8446f2c055ca49495145eca1ae9fe612e6052610360527f2992670c4c90a20991d63058dd4a885b9ec25f2307e6dfb364be99f0ab596b56612e809081527f0e91d00167f0fcdc484e4510cea659d39a58ea6d94188082c301d82be3a5beaa612ea0527f06007fd0fb2de248dbc4fe010a14285eb1c67ab1035575cfe2c4a46e7169be02612ec0527f24093f309708216779d4be610fbad6c37027359a6cd9af3253023c94bab25009612ee0527f27dca5e53ccf2bcfabd9f056b2381845a855bf7947d600e6f85117b69e57ab64612f00527f124efae3d5bf327ab6ba6d4526a495aa613a1c141b4ccbe97dce4d2174af4975612f20527f1a32d049a2624f7c385673c88d7fea82a5c517b7fac655774c395cdce73099b6612f40527f0602b40c9255dbac3b084808ab31e76a1f050751bb6775dbada5d84691d27653612f60527f27ca9346b73ccb979a8d2890fd43bf51eedcd0a78af072f64ee41abb954bacfb612f80527f0b59bbaf1fcc4321f763a03b112189c055a31078afd0954b7d7ccf311615d3d0612fa0527f1712fa34ac64c32e7ba17168f04876190ff32077be969a20cf83be9d04ecc5ba612fc0527f2287f65a7cb3a473300d133636ba395a1cfe1b9cfbe68f106f114d46d453ac6e612fe0527f058d32c610ee7b8e0025aa2f8fa532b3a6a45214fd7df4c35ad5112f545fbde3613000527f14772040257c0366286283200970b7ee56d048cf3f6725fc8d9651a8234a659461302052610380527f149de5e4a643c98e7261b75a27baeb89147605258f470c0291bf22880e6a90066130409081527f12c1e251dddced6445c3dcdcfcccc1c36736068f9e1f7bbc4063895df782b115613060527f10427a865028d998dcea094cc2f8d0fa2efbd0040d0b118e4415dae71c92cfa3613080527f1dced774d8572bfb42107f480682ff1c5ef95f657787a06997f53061d44cee6b6130a0527f2033fe9a65b025cd7e27764e34562fbc6391cf8d31623f31b68f03d6a1d1404d6130c0527f04b8c60cbb003fd65b2886da9263ee92021683e1af25189631d1725df8c163576130e0527f2d5f76b195591eca401fbd5d43e2992245ea9a4009a8ed600fcb0962ea5b845a613100527f18cd73d9f8a31eab2560b9f00b08cc4517309f7100c34df4c3aeccbb3df8eb49613120527f244478321b4748aef75677808a6a5d92a6964f298eb5e5337621398b0c1a4355613140527f0700ca5f97215da057c3a4a16a260471ca887e12ab3a9fbaac6a61c67c38fb9b613160527f1c8b2eec6c0535832e1ea214b890bcc72682c5bddb39f4ddf34500a5cb9a81aa613180527f2d3d9f09f802a02b7324b79e9681debd2833f6238b22ae6622ba1a64e744f7906131a0527f29e3aef42dc679892840c82352fa28d9140106d6c2ba6ada66fae52bff965eb46131c0527f0eb54e3e94c92cd24f6ec52eab577e80d8c8e9f2d39d6b8d69503967d9809fd26131e0526103a0527f1036bd833a94dd6a85559c519bb7a2769b6486b00d34996da228c08994f285b26132009081527f2f7362c30b976680185fcb2d6c1a9fc47ce47e77d3af5b773534e2ce7c2063dc613220527f0f148ba271ab4c9b17837d44c14d231fe85b7644462249299a68b506bff87f4d613240527f23eee74e2f9b8ee256ebaa6e03b545afa196f22ef7e96d7255f5e79bbb786c1c613260527f165a455c205655a47926176b91f2d2c02ac5c00ad29b467bfdbd51b0768b3529613280527f0d4bbf22a70348d22efdd5235eb6e682385197b4e17330c46c44ca6d5dfc67916132a0527f2841ddb730006e521446f952117b78effc601d10372438c4ba4f6e2608e9a5106132c0527f21960d7a065af49c4c06053d32596d990c1a43cac1658dad807ae48de098e4176132e0527f2a749e9fc0fea8a55e57cdb05166ad9692c00bf103ac30881c6ea8c6b86c244a613300527f0792663fbe195bacf4bffe700777c5fb07db9bcf94404ce90d0ed74a50febf9e613320527f2b4d7bb4c6dae168809b1e8687e2e668d2680f40733b7d6877b27eaaa2021daa613340527f212f5c9650237c6013810fbf50f8c160395a487a5cd535ddcc85437383d7fd40613360527f1e42318881baf153d5c6a0f3ae7c933daff9cd10c89c0f7d9c1253e65995e7af613380527f082ba05d83761cb163b4ca9d55e5dbb43c74bf3f456988438da2b3e62a90097a6133a0526103c0527f188bb1d3cfb110267f28a328777328ee715c575923e5517216a551b7e4bca4646133c09081527f26c9def697692dbd245316df1b3d3ebc23d2e7f26282bb8c3c77383b633d1fee6133e0527f09e269116a30414bd9701c5e0878caadf29773b5e4c010a7f519d6c8ed4ab64a613400527f0b0dd617d9c5b993d32b538129fa4404c7371453aec2448ad60caedef2521774613420527f2955e9b0087cc084f3750b6474cf9ccc1b91b93088093fb9b65512bb41c7fe13613440527f25742cb05d49c540c0db2fe8cecba3202fa75c3652f8a0632c901284718de2f0613460527f197e4469bc4e63f957318e61dfc0b47f3612c833faa62fbbc758bea7747a919c613480527f10434862eebeac7e95316632cb2a81e786f3148d551e82d4b5f3952dac0e84a86134a0527f1a35b2d833ae99e441f064acd0efe3ec75d0180f0dc898edb2ec4e6104c43d916134c0527f21095529dcc976329670baf3bc91051208b4d62984741144c2795189811c35d46134e0527f1cb3ed4bbd682aa625880beac8855c5fea04d41e00eab4f0d06318c229f650e1613500527f0fdb194388dbc4bbbe4e95fd302d9cf15deba158f7c686da98f0c51b56a9c3bf613520527f2355c510225e1b58ab2af9314c08bd8adff1ada7c9a457c0c1deb47b814f2c2f613540527f2c04d7711fd02ba586d4a50ad99a1723e5bf2916b4b5ecba863947a98fbbbb30613560526103e0527f0bbfceff43f6717beb8ca8fcefb59c672661fb46da69df22870a4c52fa4cd0f26135809081527f2bcca13d376d46c173fc2901c265dc09ad688e67b9726845e03944ee966ec01b6135a0527f285bd066f7c5357304cec840041d33e776badbda4e0007a505004e070b9520ed6135c0527f0794a82f878b218f741d0cb293956b5273b429c885d893d1113d73aa26c1d4236135e0527f271b72ec18a3db9d3d0e838edd70c2ce3869f8dfa7a2990839b8dd9e1172e87b613600527f0a636a0eaaf2172cf943d025179ff1617471d89f89258b34a3bbca00641a9cd8613620527f1a528d6c2a802448da3ad3d59f777313c16a671482e39b8cb7da9ac35c1ff2d8613640527f18c053d772d3b5a8a648244ccc209c808ebe141ba2f9d5650d0da14819aadde1613660527f1048336a6121c302669d43eec43639872901bf281af7a1688aa3d3928ebdd907613680527f12c4211198d7728995d57f5bcc090cf7beca8045d513deb1b175ebb36796f0e46136a0527f1834db39abc7b5ecd1a514dcb9228530e81361aea5811ca208a650daf968e6d86136c0527f10ec1c14ddd45f0d5cc72b4bb6c9b567381cd3f8ff34d9591c48f845ea50846b6136e0527f056e828c137df3632d6225d8c3c7df355ea62f2e0d113a7e36852b6764afb9f1613700527f1759ab5b4dc7063a18dd2b491a4a3d073bfdf8f4d33df3f339a83e3ba2953d7f61372052610400527f09876c8f4e48e48b158ea3f41eb7f19716f44512bf7cdaaeb3915798ce22707b6137409081527f1a45579944f3cb644003ac2430ac63799964bce8f0125b487e5e84f986f46a83613760527f14921030ad6e51af6e9a654d191b8562e8acab6542844de111650de2ce37659f613780527f29baa8a03a66a40d48856ec10f47f554e884258e4eff26ce0f15c6b5171f95816137a0527f2f14a2b03d6b68f4bf5be1acb77702105951d5f13a423c1b21960b0c129fa99d6137c0527f1a8dc9e0aba8f76e0f8bf6db5523758d5ec321d0857a2df1134b5dae2faccf3b6137e0527f2373925e13c17f70c80783a3664e984c082f251bbe3c4698dff5daf3c70e5fdf613800527f14c66f792e18c3133a0ec195583065986f5d8f297f5750ed78aee7b7fb6efaa1613820527f1546abb4feb014cf7206953bcb52e5f16ac8d232723683674bc02854efa9c811613840527f2dd9d7b31522a6b7fb653afd18e987a926fbd5377b5b0e415cf2614bdf0c2635613860527f0102b6d8a26892985e76fd744ab01d06b524f57d634fc0b69a5d91355398d6ac613880527f1ec5b7588982ece0b103edde74a6f327e6ccf694bc534195fe0effc7483f13a16138a0527f2b278acb099ad84fbc96b27d36269ba06a660e2bc9093059a2acb1998cf3f1fe6138c0527f129253e64f00669a4cf7480180edd5c242544581499b9a233f0ce088acf1e4db6138e052610420527f14f35ce5d343461157dbe0adb07355d95d2cd5aa6dba222b6a702af1e325d2bc6139009081527f2d106ec5d71809dff7aec68762661bdfd5dbfe456cba5a7c150c73da2510f752613920527f16ed7e6f631af32c7e9c7884b0ab0cf71a834ddc4c825748eb5d35451d809240613940527f2dd68235d74c633a111bd167dec9a6371b137ae89530106a928c87743b38be3d613960527e76cc22cae0c2544d7e6d49cb00182253dab5dfcf6cbdb378f56b0714b9d4bf613980527f2af75f56bee1cdbf00f1a0af44ee6ca3d7f8b3b42d38f87bf1da869240dc64776139a0527f092f4b09a0af31220825e29d275eeb08977e8d3a6a934cc16a6d562b2eca001a6139c0527f04cb8d5ffe9fe85b21a785e261721288e9b5b75b400545a31d0d53270608b1046139e0527f08287f21c644121d27ec9aa9f50ccbce17e7ebe37a9858da78ca1d207bd9d637613a00527f08d64375d1c8b872172ed0e50612b60c4b049e807f23d6fa8f4e61e06d52047a613a20527f034d11c3fb63ed48fc75af072a1084b3d0982b796c9dbb70c295e4c938688dd6613a40527f03457e18852f8480e869f8aa0665890d85a78c5458b77f682cbde6b7954b55d8613a60527f2cdc590f35d097cd61fc65b0dbaac9cd05916c807ec0e318de09c55d6facb637613a80527f0f2b077d67767da3df753109cb25329348253b3bb8a474b8f2383d269e7af7d3613aa05261044052613c806040527f1188362ee1c47b51ae57ee87cdc133d212b205f43ad871011e82684b3251a168613ac09081527f17b80922192c7ef6e95042838827e749bc017d1a96c6e69f4d945f6a40c80678613ae0527f09380df1270bf5638a0dd4f2c7b7af4a5798b4280a4c98abd97c99272b34488d613b00527f055c100b6e332bb5d2bf6ba8f3f5945bd877926df3eaab055c5d42be090db0bf613b20527f02cc36716e8608d8ddd908e019707e77d50ecaae8f83a61fac66303fe0d98038613b40527f1913d591367d4749326ea822b20c1f015974fcd5ec6d659aedeac7b56f6fb789613b60527f1706e619141f6b4a93840023bb2342e759da6438e07ed974a5f1e3d506144c96613b80527f0bbe067b718cb861fe927716cba85cfc466eed0e9d2c1067bc7f9e356bc5d23c613ba0527f1094541933220c2bef5ec7afe91782ec245208d58f93a08ec25eb59710a73623613bc0527f03daf04d7a256119a10ba5f6653564dff54f8eb78577360ac477abab5ce87bf7613be0527f0cce5000e4686fab8ca621f1c65dda94eb8b5892b1aff79a9a5eb0a2e65efd53613c00527f14e0969768884cab782cafd4b81555a818559c4835fb6821ec46fd08ea418ac6613c20527f1ff343732becbc72450b2faedef7112b951edf2ee03bebe4b71365755e6d5518613c40527f10e06fbbc2176bff93433750bcbfec05aea120f193a1e4c5bf5993e098916f96613c60526104605261418a90600090602061419d565b5034801561419757600080fd5b50614267565b6101c0830191839082156141d9579160200282015b828111156141d95782516141c9908390600e6141e9565b50916020019190600e01906141b2565b506141e5929150614223565b5090565b82600e8101928215614217579160200282015b828111156142175782518255916020019190600101906141fc565b506141e5929150614240565b808211156141e55760006142378282614255565b50600e01614223565b5b808211156141e55760008155600101614241565b5061426490600e810190614240565b50565b61059a806142766000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063a23f019914610030575b600080fd5b61004361003e3660046104ca565b610057565b604051901515815260200160405180910390f35b6000808061006660018561052d565b602081106100765761007661054e565b604080516101c081019182905292600e92830201919082845b81548152602001906001019080831161008f575050505050905061043c565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181106100df576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa915081610115576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa91505080610146576000805260206000f35b5050505050565b600060808601600087016080890151815260a08901516020820152610180600088013560e08b015160c08c0151846100e2565b61019a60208801356101208b01516101008c0151846100e2565b6101b460408801356101608b01516101408c0151846100e2565b6101ce60608801356101a08b01516101808c0151846100e2565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f245229d9b076b3c0e8a4d70bde8c1cccffa08a9fae7557b165b3b0dbd653e2c760c08201527f253ec85988dbb84e46e94b5efa3373b47a000b4ac6c86b2d4b798d274a18230260e08201527f07090a82e8fabbd39299be24705b92cf208ee8b3487f6f2b39ff27978a29a1db6101008201527f2424bcc1f60a5472685fd50705b2809626e170120acaf441e133a2bd5e61d2446101208201527f0ae1135cffdaf227c5dc266740607aa930bc3bd92ddc2b135086d9da2dfd3e2a6101408201527f2b86859fd3d55c9d150fb3f0aeba798826493dd73d357ab0f9fdaced9fc81829610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa61022082015284356102408201526020850135610260820152875161028082015260208801516102a082015260408801516102c082015260608801516102e08201526020816103008360086107d05a03fa905116979650505050505050565b604051610380810160405261045460008601356100ae565b61046160208601356100ae565b61046e60408601356100ae565b61047b60608601356100ae565b61048860808601356100ae565b610496828287898b8d61014d565b90508060005260206000f35b80604081018310156104b357600080fd5b92915050565b80608081018310156104b357600080fd5b60008060008060006101a086880312156104e357600080fd5b6104ed87876104a2565b94506104fc87604088016104b9565b935061050b8760c088016104a2565b925061051b8761010088016104b9565b94979396509194610180013592915050565b818103818111156104b357634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fdfea264697066735822122069b68858a5894631c4248a5b25681d43484317fb42ba879453f0853679a3e44864736f6c63430008170033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063a23f019914610030575b600080fd5b61004361003e3660046104ca565b610057565b604051901515815260200160405180910390f35b6000808061006660018561052d565b602081106100765761007661054e565b604080516101c081019182905292600e92830201919082845b81548152602001906001019080831161008f575050505050905061043c565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181106100df576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa915081610115576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa91505080610146576000805260206000f35b5050505050565b600060808601600087016080890151815260a08901516020820152610180600088013560e08b015160c08c0151846100e2565b61019a60208801356101208b01516101008c0151846100e2565b6101b460408801356101608b01516101408c0151846100e2565b6101ce60608801356101a08b01516101808c0151846100e2565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f245229d9b076b3c0e8a4d70bde8c1cccffa08a9fae7557b165b3b0dbd653e2c760c08201527f253ec85988dbb84e46e94b5efa3373b47a000b4ac6c86b2d4b798d274a18230260e08201527f07090a82e8fabbd39299be24705b92cf208ee8b3487f6f2b39ff27978a29a1db6101008201527f2424bcc1f60a5472685fd50705b2809626e170120acaf441e133a2bd5e61d2446101208201527f0ae1135cffdaf227c5dc266740607aa930bc3bd92ddc2b135086d9da2dfd3e2a6101408201527f2b86859fd3d55c9d150fb3f0aeba798826493dd73d357ab0f9fdaced9fc81829610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa61022082015284356102408201526020850135610260820152875161028082015260208801516102a082015260408801516102c082015260608801516102e08201526020816103008360086107d05a03fa905116979650505050505050565b604051610380810160405261045460008601356100ae565b61046160208601356100ae565b61046e60408601356100ae565b61047b60608601356100ae565b61048860808601356100ae565b610496828287898b8d61014d565b90508060005260206000f35b80604081018310156104b357600080fd5b92915050565b80608081018310156104b357600080fd5b60008060008060006101a086880312156104e357600080fd5b6104ed87876104a2565b94506104fc87604088016104b9565b935061050b8760c088016104a2565b925061051b8761010088016104b9565b94979396509194610180013592915050565b818103818111156104b357634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fdfea264697066735822122069b68858a5894631c4248a5b25681d43484317fb42ba879453f0853679a3e44864736f6c63430008170033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
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.