-
Notifications
You must be signed in to change notification settings - Fork 40
/
Copy pathgenesis-block.json
1 lines (1 loc) · 102 KB
/
genesis-block.json
1
{"parentHash":"0000000000000000000000000000000000000000000000000000000000000000","unclesHash":"1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","coinbase":{"access":true,"orgName":"00000000000000000000"},"accountInfo":[{"balance":1809251394333065553493296640760748560207343510400633813116524750123642650624,"address":"e1fd0d4a52b75a694de8b55528ad48e2e2cf7859"},{"balance":509,"address":"0000000000000000000000000000000000000509","storage":[["2e6f776e6572","d6039474f014fef932d2728c6c7e2b4d3b88ac37a7e1d0"],["2e61646472657373546f436572744d61703c613a373466303134666566393332643237323863366337653262346433623838616333376137653164303e","d603940000000000000000000000000000000000001337"],["2e61646472657373546f436572744d61703c613a343466316238633838626531333032313830366531633361376132643532303461316264613537613e","d603947aa5bda104522d7a3a1c6e802130e18bc8b8f144"],["2e61646472657373546f436572744d61703c613a646339333135346362666133396234313338623135613839323163663433613837363265616362643e","d60394bdac2e76a843cf21895ab138419ba3bf4c1593dc"],["2e61646472657373546f436572744d61703c613a383839663162376139616431323134316233656536353531646165356131396361633139643262653e","d60394bed219ac9ca1e5da5165eeb34121d19a7a1b9f88"],["2e61646472657373546f436572744d61703c613a643462333465316364643135393264323636656339356261663931393561633063383062386434613e","d603944a8d0bc8c05a19f9ba95ec66d29215dd1c4eb3d4"],["2e61646472657373546f436572744d61703c613a633739343962383365366566646566626235386631646262613662336466616333333434643461363e","d60394a6d44433acdfb3a6bb1d8fb5fbdeefe6839b94c7"]],"codeHash":{"kind":"SolidVM","name":"CertificateRegistry","digest":"a879af150c8a6bc7809602f76b985ca942e1860c13a36c32a4c652bc0a4ef1ff"}},{"balance":1337,"address":"0000000000000000000000000000000000001337","storage":[["2e6f776e6572","d603940000000000000000000000000000000000000509"],["2e7573657241646472657373","d6039474f014fef932d2728c6c7e2b4d3b88ac37a7e1d0"],["2e636f6d6d6f6e4e616d65","c7018541646d696e"],["2e636f756e747279","c50183555341"],["2e6f7267616e697a6174696f6e","cb0189426c6f636b41707073"],["2e67726f7570","cd018b456e67696e656572696e67"],["2e6f7267616e697a6174696f6e616c556e6974","cd018b456e67696e656572696e67"],["2e7075626c69634b6579","f8b101b8ae2d2d2d2d2d424547494e205055424c4943204b45592d2d2d2d2d0a4d465977454159484b6f5a497a6a3043415159464b34454541416f445167414555684a5234782b775a69582b785a4b326d2f70774e343063764353305541375a0a30444237736e79355a6e4e4c7734334a674b7a30555244593279594f506b686f49417078464b395555334263344252414e44576d64513d3d0a2d2d2d2d2d454e44205055424c4943204b45592d2d2d2d2d0a"],["2e6365727469666963617465537472696e67","f9025b01b902572d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949426a54434341544b674177494241674952414f50506b566f42702f476e775a475233326a63496a7777444159494b6f5a497a6a304541774946414442490a4d5134774441594456515144444156425a473170626a45534d424147413155454367774a516d7876593274426348427a4d525177456759445651514c444174460a626d6470626d566c636d6c755a7a454d4d416f47413155454267774456564e424d423458445449794d4451794d4445334e5463784d316f584454497a4d4451790a4d4445334e5463784d316f775344454f4d41774741315545417777465157527461573478456a415142674e5642416f4d43554a7362324e7251584277637a45550a4d424947413155454377774c5257356e6157356c5a584a70626d63784444414b42674e564241594d41315654515442574d42414742797147534d3439416745470a425375424241414b413049414246495355654d667347596c2f735753747076366344654e484c776b7446414f3264417765374a3875575a7a53384f4e795943730a39464551324e736d446a35496143414b6352537656464e77584f415551445131706e5577444159494b6f5a497a6a30454177494641414e4841444245416941380a5230554552515a624633714a55743541305a4666325a6d42306c2f5a506a49764d333833674f46337877496762786251384e4c6b444565326d574a2f7161346e0a4e3874784b633847395232375a594155757a31357a46303d0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a"],["2e697356616c6964","c20201"],["2e706172656e74","d603940000000000000000000000000000000000000000"]],"codeHash":{"kind":"SolidVM","name":"Certificate","digest":"a879af150c8a6bc7809602f76b985ca942e1860c13a36c32a4c652bc0a4ef1ff"}},{"balance":0,"address":"7aa5bda104522d7a3a1c6e802130e18bc8b8f144","storage":[["2e6f776e6572","d603940000000000000000000000000000000000000509"],["2e7573657241646472657373","d6039444f1b8c88be13021806e1c3a7a2d5204a1bda57a"],["2e636f6d6d6f6e4e616d65","c901874e6f64654f6e65"],["2e636f756e747279","c50183555341"],["2e6f7267616e697a6174696f6e","cb0189426c6f636b41707073"],["2e67726f7570","c901874d657263617461"],["2e6f7267616e697a6174696f6e616c556e6974","c901874d657263617461"],["2e7075626c69634b6579","f8b101b8ae2d2d2d2d2d424547494e205055424c4943204b45592d2d2d2d2d0a4d465977454159484b6f5a497a6a3043415159464b34454541416f445167414573525255524b7479645951673664374a334347317172433454745833435764370a6e70762b5233754e2f38324f6d6f677a68326e3230616c597777593249466b3955453972546778573979707371592b75664f6b7574773d3d0a2d2d2d2d2d454e44205055424c4943204b45592d2d2d2d2d0a"],["2e6365727469666963617465537472696e67","f904b201b904ae2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949426a44434341544367417749424167495241493532657a43626d676f685a2b745a48392b7934694977444159494b6f5a497a6a304541774946414442490a4d5134774441594456515144444156425a473170626a45534d424147413155454367774a516d7876593274426348427a4d525177456759445651514c444174460a626d6470626d566c636d6c755a7a454d4d416f47413155454267774456564e424d4234584454497a4d4449784d4449784d6a517a4f566f58445449304d4449780a4d4449784d6a517a4f566f77526a45514d4134474131554541777748546d396b5a5539755a5445534d424147413155454367774a516d7876593274426348427a0a4d524177446759445651514c4441644e5a584a6a595852684d517777436759445651514744414e5655304577566a415142676371686b6a4f50514942426755720a6751514143674e43414153784646524571334a316843447033736e6349625771734c684f3166634a5a3375656d2f35486534332f7a59366169444f48616662520a71566a44426a5967575431515432744f444662334b6d79706a363538365336334d41774743437147534d343942414d43425141445341417752514968415031770a4d464d75516d697a4837696a6d5a5a32434e744755624a775934534c454a396366376858737275394169416a77354d66412b6374465252563077426471744f720a2f516e4669374958796b6e3949652b2f2f6835395a673d3d0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949426a54434341544b674177494241674952414f50506b566f42702f476e775a475233326a63496a7777444159494b6f5a497a6a304541774946414442490a4d5134774441594456515144444156425a473170626a45534d424147413155454367774a516d7876593274426348427a4d525177456759445651514c444174460a626d6470626d566c636d6c755a7a454d4d416f47413155454267774456564e424d423458445449794d4451794d4445334e5463784d316f584454497a4d4451790a4d4445334e5463784d316f775344454f4d41774741315545417777465157527461573478456a415142674e5642416f4d43554a7362324e7251584277637a45550a4d424947413155454377774c5257356e6157356c5a584a70626d63784444414b42674e564241594d41315654515442574d42414742797147534d3439416745470a425375424241414b413049414246495355654d667347596c2f735753747076366344654e484c776b7446414f3264417765374a3875575a7a53384f4e795943730a39464551324e736d446a35496143414b6352537656464e77584f415551445131706e5577444159494b6f5a497a6a30454177494641414e4841444245416941380a5230554552515a624633714a55743541305a4666325a6d42306c2f5a506a49764d333833674f46337877496762786251384e4c6b444565326d574a2f7161346e0a4e3874784b633847395232375a594155757a31357a46303d0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a"],["2e697356616c6964","c20201"],["2e706172656e74","d6039474f014fef932d2728c6c7e2b4d3b88ac37a7e1d0"]],"codeHash":{"kind":"SolidVM","name":"Certificate","digest":"a879af150c8a6bc7809602f76b985ca942e1860c13a36c32a4c652bc0a4ef1ff"}},{"balance":0,"address":"bdac2e76a843cf21895ab138419ba3bf4c1593dc","storage":[["2e6f776e6572","d603940000000000000000000000000000000000000509"],["2e7573657241646472657373","d60394dc93154cbfa39b4138b15a8921cf43a8762eacbd"],["2e636f6d6d6f6e4e616d65","c901874e6f646554776f"],["2e636f756e747279","c50183555341"],["2e6f7267616e697a6174696f6e","cb0189426c6f636b41707073"],["2e67726f7570","c901874d657263617461"],["2e6f7267616e697a6174696f6e616c556e6974","c901874d657263617461"],["2e7075626c69634b6579","f8b101b8ae2d2d2d2d2d424547494e205055424c4943204b45592d2d2d2d2d0a4d465977454159484b6f5a497a6a3043415159464b34454541416f445167414578306734466d6648753255374b436e3361587a49556f37566d363241546837420a5536592b73722b3244536a543142766835763371616c425a5756336f54762b4d4375345a5837565535376f44764b497a777442486c673d3d0a2d2d2d2d2d454e44205055424c4943204b45592d2d2d2d2d0a"],["2e6365727469666963617465537472696e67","f904ae01b904aa2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d494942696a434341532b67417749424167495161484644354b66766456653133356b67667a6d65766a414d42676771686b6a4f50515144416755414d4567780a446a414d42674e5642414d4d4255466b62576c754d524977454159445651514b44416c436247396a6130467763484d784644415342674e564241734d433056750a5a326c755a5756796157356e4d517777436759445651514744414e56553045774868634e4d6a4d774d6a45774d6a45794e444d355768634e4d6a51774d6a45770a4d6a45794e444d35576a42474d52417744675944565151444441644f6232526c564864764d524977454159445651514b44416c436247396a6130467763484d780a4544414f42674e564241734d4230316c636d4e68644745784444414b42674e564241594d41315654515442574d42414742797147534d343941674547425375420a4241414b41304941424d64494f425a6e7837746c4f79677039326c3879464b4f315a75746745346577564f6d50724b2f7467306f3039516234656239366d70510a57566c643645372f6a41727547562b31564f6536413779694d384c5152355977444159494b6f5a497a6a30454177494641414e4841444245416941694b5146650a626c75444c504333706948724a686179586b70557a477534514f514363314e766358525337514967614d667a6365592f6671306565656c4f326b6f686e6469330a6353634835764475544d314b544b4a4e646a383d0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949426a54434341544b674177494241674952414f50506b566f42702f476e775a475233326a63496a7777444159494b6f5a497a6a304541774946414442490a4d5134774441594456515144444156425a473170626a45534d424147413155454367774a516d7876593274426348427a4d525177456759445651514c444174460a626d6470626d566c636d6c755a7a454d4d416f47413155454267774456564e424d423458445449794d4451794d4445334e5463784d316f584454497a4d4451790a4d4445334e5463784d316f775344454f4d41774741315545417777465157527461573478456a415142674e5642416f4d43554a7362324e7251584277637a45550a4d424947413155454377774c5257356e6157356c5a584a70626d63784444414b42674e564241594d41315654515442574d42414742797147534d3439416745470a425375424241414b413049414246495355654d667347596c2f735753747076366344654e484c776b7446414f3264417765374a3875575a7a53384f4e795943730a39464551324e736d446a35496143414b6352537656464e77584f415551445131706e5577444159494b6f5a497a6a30454177494641414e4841444245416941380a5230554552515a624633714a55743541305a4666325a6d42306c2f5a506a49764d333833674f46337877496762786251384e4c6b444565326d574a2f7161346e0a4e3874784b633847395232375a594155757a31357a46303d0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a"],["2e697356616c6964","c20201"],["2e706172656e74","d6039474f014fef932d2728c6c7e2b4d3b88ac37a7e1d0"]],"codeHash":{"kind":"SolidVM","name":"Certificate","digest":"a879af150c8a6bc7809602f76b985ca942e1860c13a36c32a4c652bc0a4ef1ff"}},{"balance":0,"address":"bed219ac9ca1e5da5165eeb34121d19a7a1b9f88","storage":[["2e6f776e6572","d603940000000000000000000000000000000000000509"],["2e7573657241646472657373","d60394889f1b7a9ad12141b3ee6551dae5a19cac19d2be"],["2e636f6d6d6f6e4e616d65","cb01894e6f64655468726565"],["2e636f756e747279","c50183555341"],["2e6f7267616e697a6174696f6e","cb0189426c6f636b41707073"],["2e67726f7570","c901874d657263617461"],["2e6f7267616e697a6174696f6e616c556e6974","c901874d657263617461"],["2e7075626c69634b6579","f8b101b8ae2d2d2d2d2d424547494e205055424c4943204b45592d2d2d2d2d0a4d465977454159484b6f5a497a6a3043415159464b34454541416f4451674145694335476b48374c55513174335379476c74526f5673667463784b532f7377710a2f76666d53703670724e434a6468327a3378564b4977772b5279754f30767544775839615661616a2f5357434345327a4161683344773d3d0a2d2d2d2d2d454e44205055424c4943204b45592d2d2d2d2d0a"],["2e6365727469666963617465537472696e67","f904b201b904ae2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949426a44434341544767417749424167495148336d522f525874564158464c45797a42715a754b44414d42676771686b6a4f50515144416755414d4567780a446a414d42674e5642414d4d4255466b62576c754d524977454159445651514b44416c436247396a6130467763484d784644415342674e564241734d433056750a5a326c755a5756796157356e4d517777436759445651514744414e56553045774868634e4d6a4d774d6a45774d6a45794e4451775768634e4d6a51774d6a45770a4d6a45794e445177576a42494d524977454159445651514444416c4f6232526c564768795a575578456a415142674e5642416f4d43554a7362324e72515842770a637a45514d413447413155454377774854575679593246305954454d4d416f47413155454267774456564e424d465977454159484b6f5a497a6a3043415159460a4b34454541416f4451674145694335476b48374c55513174335379476c74526f5673667463784b532f7377712f76666d53703670724e434a6468327a3378564b0a4977772b5279754f30767544775839615661616a2f5357434345327a41616833447a414d42676771686b6a4f5051514441675541413063414d4551434942302f0a70302b3673507666364a524a6d412f304f42414450702f6f45505a436c444a444333596c656653344169415873645a5a7931745a6179303133554549655337370a67657849522b6778776561706472486a5536583173773d3d0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949426a54434341544b674177494241674952414f50506b566f42702f476e775a475233326a63496a7777444159494b6f5a497a6a304541774946414442490a4d5134774441594456515144444156425a473170626a45534d424147413155454367774a516d7876593274426348427a4d525177456759445651514c444174460a626d6470626d566c636d6c755a7a454d4d416f47413155454267774456564e424d423458445449794d4451794d4445334e5463784d316f584454497a4d4451790a4d4445334e5463784d316f775344454f4d41774741315545417777465157527461573478456a415142674e5642416f4d43554a7362324e7251584277637a45550a4d424947413155454377774c5257356e6157356c5a584a70626d63784444414b42674e564241594d41315654515442574d42414742797147534d3439416745470a425375424241414b413049414246495355654d667347596c2f735753747076366344654e484c776b7446414f3264417765374a3875575a7a53384f4e795943730a39464551324e736d446a35496143414b6352537656464e77584f415551445131706e5577444159494b6f5a497a6a30454177494641414e4841444245416941380a5230554552515a624633714a55743541305a4666325a6d42306c2f5a506a49764d333833674f46337877496762786251384e4c6b444565326d574a2f7161346e0a4e3874784b633847395232375a594155757a31357a46303d0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a"],["2e697356616c6964","c20201"],["2e706172656e74","d6039474f014fef932d2728c6c7e2b4d3b88ac37a7e1d0"]],"codeHash":{"kind":"SolidVM","name":"Certificate","digest":"a879af150c8a6bc7809602f76b985ca942e1860c13a36c32a4c652bc0a4ef1ff"}},{"balance":0,"address":"4a8d0bc8c05a19f9ba95ec66d29215dd1c4eb3d4","storage":[["2e6f776e6572","d603940000000000000000000000000000000000000509"],["2e7573657241646472657373","d60394d4b34e1cdd1592d266ec95baf9195ac0c80b8d4a"],["2e636f6d6d6f6e4e616d65","ca01884e6f6465466f7572"],["2e636f756e747279","c50183555341"],["2e6f7267616e697a6174696f6e","cb0189426c6f636b41707073"],["2e67726f7570","c901874d657263617461"],["2e6f7267616e697a6174696f6e616c556e6974","c901874d657263617461"],["2e7075626c69634b6579","f8b101b8ae2d2d2d2d2d424547494e205055424c4943204b45592d2d2d2d2d0a4d465977454159484b6f5a497a6a3043415159464b34454541416f445167414553312b76707849344e4e317043563950655433526e6471716c7648304c4834420a716365564e2b346c6278653050766d4a4d3544786168517a614d59514d48636b70576434534f67734a5a3355715734635579616d44513d3d0a2d2d2d2d2d454e44205055424c4943204b45592d2d2d2d2d0a"],["2e6365727469666963617465537472696e67","f904b201b904ae2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949426a544343415447674177494241674952414e59363879426f646a346c4d7374526a7954422b4f6777444159494b6f5a497a6a304541774946414442490a4d5134774441594456515144444156425a473170626a45534d424147413155454367774a516d7876593274426348427a4d525177456759445651514c444174460a626d6470626d566c636d6c755a7a454d4d416f47413155454267774456564e424d4234584454497a4d4449784d4449784d6a51304d466f58445449304d4449780a4d4449784d6a51304d466f77527a45524d4138474131554541777749546d396b5a555a7664584978456a415142674e5642416f4d43554a7362324e72515842770a637a45514d413447413155454377774854575679593246305954454d4d416f47413155454267774456564e424d465977454159484b6f5a497a6a3043415159460a4b34454541416f445167414553312b76707849344e4e317043563950655433526e6471716c7648304c483442716365564e2b346c6278653050766d4a4d3544780a6168517a614d59514d48636b70576434534f67734a5a3355715734635579616d4454414d42676771686b6a4f5051514441675541413067414d4555434951446c0a727a722b3553476a2b4243426c644a504173636e703777385441314c45786f48664166365a6c7863325149674133496c355258544c75524446682f49735059730a35464e486f6739736739416532623076473046674953633d0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949426a54434341544b674177494241674952414f50506b566f42702f476e775a475233326a63496a7777444159494b6f5a497a6a304541774946414442490a4d5134774441594456515144444156425a473170626a45534d424147413155454367774a516d7876593274426348427a4d525177456759445651514c444174460a626d6470626d566c636d6c755a7a454d4d416f47413155454267774456564e424d423458445449794d4451794d4445334e5463784d316f584454497a4d4451790a4d4445334e5463784d316f775344454f4d41774741315545417777465157527461573478456a415142674e5642416f4d43554a7362324e7251584277637a45550a4d424947413155454377774c5257356e6157356c5a584a70626d63784444414b42674e564241594d41315654515442574d42414742797147534d3439416745470a425375424241414b413049414246495355654d667347596c2f735753747076366344654e484c776b7446414f3264417765374a3875575a7a53384f4e795943730a39464551324e736d446a35496143414b6352537656464e77584f415551445131706e5577444159494b6f5a497a6a30454177494641414e4841444245416941380a5230554552515a624633714a55743541305a4666325a6d42306c2f5a506a49764d333833674f46337877496762786251384e4c6b444565326d574a2f7161346e0a4e3874784b633847395232375a594155757a31357a46303d0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a"],["2e697356616c6964","c20201"],["2e706172656e74","d6039474f014fef932d2728c6c7e2b4d3b88ac37a7e1d0"]],"codeHash":{"kind":"SolidVM","name":"Certificate","digest":"a879af150c8a6bc7809602f76b985ca942e1860c13a36c32a4c652bc0a4ef1ff"}},{"balance":0,"address":"a6d44433acdfb3a6bb1d8fb5fbdeefe6839b94c7","storage":[["2e6f776e6572","d603940000000000000000000000000000000000000509"],["2e7573657241646472657373","d60394c7949b83e6efdefbb58f1dbba6b3dfac3344d4a6"],["2e636f6d6d6f6e4e616d65","d30191426c6f636b4170707320537570706f7274"],["2e636f756e747279","c50183555341"],["2e6f7267616e697a6174696f6e","cb0189426c6f636b41707073"],["2e67726f7570","c901874d657263617461"],["2e6f7267616e697a6174696f6e616c556e6974","c901874d657263617461"],["2e7075626c69634b6579","f8b101b8ae2d2d2d2d2d424547494e205055424c4943204b45592d2d2d2d2d0a4d465977454159484b6f5a497a6a3043415159464b34454541416f4451674145755169464258386f376d7173744c356d41504d5664594363533735666d6e6d790a5a5a6f596b6f687252755832706439474d526664564c46757442776f415147474d4e774a4a6238442f5a3462666272793832747852513d3d0a2d2d2d2d2d454e44205055424c4943204b45592d2d2d2d2d0a"],["2e6365727469666963617465537472696e67","f904be01b904ba2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949426c54434341546d6741774942416749514e4c74523761773648543262316157744d416e387244414d42676771686b6a4f50515144416755414d4567780a446a414d42674e5642414d4d4255466b62576c754d524977454159445651514b44416c436247396a6130467763484d784644415342674e564241734d433056750a5a326c755a5756796157356e4d517777436759445651514744414e56553045774868634e4d6a4d774d6a45774d6a45794e4451785768634e4d6a51774d6a45770a4d6a45794e445178576a42514d526f774741594456515144444246436247396a6130467763484d675533567763473979644445534d424147413155454367774a0a516d7876593274426348427a4d524177446759445651514c4441644e5a584a6a595852684d517777436759445651514744414e5655304577566a4151426763710a686b6a4f50514942426755726751514143674e43414153354349554666796a7561717930766d594138785631674a784c766c2b6165624a6c6d686953694774470a3566616c333059784639315573573630484367424159597733416b6c767750396e68743975764c7a613346464d41774743437147534d343942414d43425141440a5341417752514968414a6a344d4635707278715743306b63444964674f7052534c51596d6d346a5039674a4c4b4f5962625644694169414e5a533852366355770a526d354b31683273565a39485461495249666a4252424b496962702b34694d7a46413d3d0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949426a54434341544b674177494241674952414f50506b566f42702f476e775a475233326a63496a7777444159494b6f5a497a6a304541774946414442490a4d5134774441594456515144444156425a473170626a45534d424147413155454367774a516d7876593274426348427a4d525177456759445651514c444174460a626d6470626d566c636d6c755a7a454d4d416f47413155454267774456564e424d423458445449794d4451794d4445334e5463784d316f584454497a4d4451790a4d4445334e5463784d316f775344454f4d41774741315545417777465157527461573478456a415142674e5642416f4d43554a7362324e7251584277637a45550a4d424947413155454377774c5257356e6157356c5a584a70626d63784444414b42674e564241594d41315654515442574d42414742797147534d3439416745470a425375424241414b413049414246495355654d667347596c2f735753747076366344654e484c776b7446414f3264417765374a3875575a7a53384f4e795943730a39464551324e736d446a35496143414b6352537656464e77584f415551445131706e5577444159494b6f5a497a6a30454177494641414e4841444245416941380a5230554552515a624633714a55743541305a4666325a6d42306c2f5a506a49764d333833674f46337877496762786251384e4c6b444565326d574a2f7161346e0a4e3874784b633847395232375a594155757a31357a46303d0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a"],["2e697356616c6964","c20201"],["2e706172656e74","d6039474f014fef932d2728c6c7e2b4d3b88ac37a7e1d0"]],"codeHash":{"kind":"SolidVM","name":"Certificate","digest":"a879af150c8a6bc7809602f76b985ca942e1860c13a36c32a4c652bc0a4ef1ff"}},{"balance":1707817106289403472925302664653978454636093876651603025325876069,"address":"0000000000000000000000000000000000000100","storage":[["2e6f776e6572","d703d59474f014fef932d2728c6c7e2b4d3b88ac37a7e1d0"],["2e76616c696461746f72436f756e74","c20004"],["2e61646d696e436f756e74","c20003"],["2e76616c696461746f724d61703c22426c6f636b41707073223e3c224d657263617461223e3c224e6f64654f6e65223e","d703d5940000000000000000000056616c696461746f7273"],["2e76616c696461746f724d61703c22426c6f636b41707073223e3c224d657263617461223e3c224e6f646554776f223e","d703d5940000000000000000000056616c696461746f7274"],["2e76616c696461746f724d61703c22426c6f636b41707073223e3c224d657263617461223e3c224e6f64655468726565223e","d703d5940000000000000000000056616c696461746f7275"],["2e76616c696461746f724d61703c22426c6f636b41707073223e3c224d657263617461223e3c224e6f6465466f7572223e","d703d5940000000000000000000056616c696461746f7276"],["2e61646d696e4d61703c22426c6f636b41707073223e3c224d657263617461223e3c224b696572656e204a616d65732d4c7562696e223e","d703d594000000000000000000000000000041646d696e73"],["2e61646d696e4d61703c22426c6f636b41707073223e3c224d657263617461223e3c22566963746f7220576f6e67223e","d703d594000000000000000000000000000041646d696e74"],["2e61646d696e4d61703c22426c6f636b41707073223e3c224d657263617461223e3c224a616d657320486f726d757a64696172223e","d703d594000000000000000000000000000041646d696e75"]],"codeHash":{"kind":"SolidVM","name":"MercataGovernance","digest":"13c7823f773d9efdfdce2875f60a70bcfba6877a74b95fbfe052058d69b7ac94"}},{"balance":0,"address":"0000000000000000000056616c696461746f7273","storage":[["2e6f776e6572","d703d5940000000000000000000000000000000000000100"],["2e6f7267","cb0189426c6f636b41707073"],["2e6f7267556e6974","c901874d657263617461"],["2e636f6d6d6f6e4e616d65","c901874e6f64654f6e65"],["2e6973416374697665","c20201"]],"codeHash":{"kind":"SolidVM","name":"MercataValidator","digest":"13c7823f773d9efdfdce2875f60a70bcfba6877a74b95fbfe052058d69b7ac94"}},{"balance":0,"address":"0000000000000000000056616c696461746f7274","storage":[["2e6f776e6572","d703d5940000000000000000000000000000000000000100"],["2e6f7267","cb0189426c6f636b41707073"],["2e6f7267556e6974","c901874d657263617461"],["2e636f6d6d6f6e4e616d65","c901874e6f646554776f"],["2e6973416374697665","c20201"]],"codeHash":{"kind":"SolidVM","name":"MercataValidator","digest":"13c7823f773d9efdfdce2875f60a70bcfba6877a74b95fbfe052058d69b7ac94"}},{"balance":0,"address":"0000000000000000000056616c696461746f7275","storage":[["2e6f776e6572","d703d5940000000000000000000000000000000000000100"],["2e6f7267","cb0189426c6f636b41707073"],["2e6f7267556e6974","c901874d657263617461"],["2e636f6d6d6f6e4e616d65","cb01894e6f64655468726565"],["2e6973416374697665","c20201"]],"codeHash":{"kind":"SolidVM","name":"MercataValidator","digest":"13c7823f773d9efdfdce2875f60a70bcfba6877a74b95fbfe052058d69b7ac94"}},{"balance":0,"address":"0000000000000000000056616c696461746f7276","storage":[["2e6f776e6572","d703d5940000000000000000000000000000000000000100"],["2e6f7267","cb0189426c6f636b41707073"],["2e6f7267556e6974","c901874d657263617461"],["2e636f6d6d6f6e4e616d65","ca01884e6f6465466f7572"],["2e6973416374697665","c20201"]],"codeHash":{"kind":"SolidVM","name":"MercataValidator","digest":"13c7823f773d9efdfdce2875f60a70bcfba6877a74b95fbfe052058d69b7ac94"}},{"balance":0,"address":"000000000000000000000000000041646d696e73","storage":[["2e6f776e6572","d703d5940000000000000000000000000000000000000100"],["2e6f7267","cb0189426c6f636b41707073"],["2e6f7267556e6974","c901874d657263617461"],["2e636f6d6d6f6e4e616d65","d401924b696572656e204a616d65732d4c7562696e"],["2e6973416374697665","c20201"]],"codeHash":{"kind":"SolidVM","name":"MercataAdmin","digest":"13c7823f773d9efdfdce2875f60a70bcfba6877a74b95fbfe052058d69b7ac94"}},{"balance":0,"address":"000000000000000000000000000041646d696e74","storage":[["2e6f776e6572","d703d5940000000000000000000000000000000000000100"],["2e6f7267","cb0189426c6f636b41707073"],["2e6f7267556e6974","c901874d657263617461"],["2e636f6d6d6f6e4e616d65","cd018b566963746f7220576f6e67"],["2e6973416374697665","c20201"]],"codeHash":{"kind":"SolidVM","name":"MercataAdmin","digest":"13c7823f773d9efdfdce2875f60a70bcfba6877a74b95fbfe052058d69b7ac94"}},{"balance":0,"address":"000000000000000000000000000041646d696e75","storage":[["2e6f776e6572","d703d5940000000000000000000000000000000000000100"],["2e6f7267","cb0189426c6f636b41707073"],["2e6f7267556e6974","c901874d657263617461"],["2e636f6d6d6f6e4e616d65","d201904a616d657320486f726d757a64696172"],["2e6973416374697665","c20201"]],"codeHash":{"kind":"SolidVM","name":"MercataAdmin","digest":"13c7823f773d9efdfdce2875f60a70bcfba6877a74b95fbfe052058d69b7ac94"}}],"codeInfo":[{"name":"CertificateRegistry","src":"\ncontract Certificate {\n address owner; // The CertificateRegistry Contract\n\n address public userAddress;\n address public parent;\n address[] public children;\n\n \n // Store all the fields of a certificate in a Cirrus record\n string public commonName;\n string public country;\n string public organization;\n string public group;\n string public organizationalUnit;\n string public publicKey;\n string public certificateString;\n bool public isValid;\n\n constructor(string _certificateString) {\n owner = msg.sender;\n\n mapping(string => string) parsedCert = parseCert(_certificateString);\n\n userAddress = address(parsedCert[\"userAddress\"]);\n commonName = parsedCert[\"commonName\"];\n organization = parsedCert[\"organization\"];\n group = parsedCert[\"group\"];\n organizationalUnit = parsedCert[\"organizationalUnit\"];\n country = parsedCert[\"country\"];\n publicKey = parsedCert[\"publicKey\"];\n certificateString = parsedCert[\"certString\"];\n isValid = true;\n parent = address(parsedCert[\"parent\"]);\n children = [];\n }\n \n function addChild(address _child) public {\n require((msg.sender == owner || msg.sender == parent),\"You don't have permission to CALL addChild!\");\n \n children.push(_child);\n }\n \n function revoke() public returns (int){\n require(msg.sender == owner,\"You don't have permission to CALL revoke!\");\n\n isValid = false;\n return children.length;\n }\n \n function getChild(int index) public returns (address){\n require(msg.sender == owner,\"You don't have permission to get children!\");\n \n return children[index];\n }\n}\n\ncontract CertificateRegistry {\n // The registry maintains a list and mapping of all the certificates\n // We need the extra array in order for us to iterate through our certificates.\n // Solidity mappings are non-iterable.\n mapping(address => address) addressToCertMap;\n address public owner;\n\n event CertificateRegistered(string certificate);\n event CertificateRevoked(address userAddress);\n \n function registerCertificate(string newCertificateString) returns (int) {\n mapping(string => string) parsedCert = parseCert(newCertificateString);\n address parentUserAddress = address(parsedCert[\"parent\"]);\n Certificate parentContract = Certificate(addressToCertMap[account(parentUserAddress)]);\n \n if (address(parentContract) != address(0) && parentContract.isValid() && verifyCertSignedBy(newCertificateString, parentContract.publicKey())) {\n // Create the new Certificate record\n Certificate c = new Certificate(newCertificateString);\n\n if (parentUserAddress != address(0x0)){\n parentContract.addChild(c.userAddress()); \n }\n\n addressToCertMap[c.userAddress()] = address(c);\n emit CertificateRegistered(newCertificateString);\n return 200; // 200 = HTTP Status OK\n }\n return 400;\n }\n\n function getUserCert(address _address) returns (Certificate) {\n return Certificate(addressToCertMap[account(_address)]);\n }\n \n function getCertByAddress(address _address) returns (Certificate) {\n return Certificate(getCertByAccount(account(_address)));\n }\n \n function getCertByAccount(address _account) returns (Certificate) {\n return Certificate(addressToCertMap[account(_account)]);\n }\n \n function revokeCert(address userAddress){\n Certificate myCert = Certificate(addressToCertMap[account(userAddress)]);\n require(isChild(tx.certificate, myCert.userAddress()), \"You don't have permission to revoke!\");\n\n int childrenLength = myCert.revoke();\n for (int i = 0; i < childrenLength; i += 1) {\n revokeCert(myCert.getChild(i));\n }\n \n emit CertificateRevoked(userAddress);\n }\n \n function isChild(string pCert, address certUserAddress) returns (bool) {\n Certificate myCert = Certificate(addressToCertMap[account(certUserAddress)]);\n address parentUserAddress = myCert.parent();\n if(myCert.parent() != address(0x0) && pCert == Certificate(addressToCertMap[account(parentUserAddress)]).certificateString()){\n return true;\n }\n \n if(myCert.parent() != address(0x0)){\n return isChild(pCert, parentUserAddress);\n }\n \n return false;\n }\n}","code":"0a636f6e7472616374204365727469666963617465207b0a2020202061646472657373206f776e65723b20202f2f20546865204365727469666963617465526567697374727920436f6e74726163740a0a2020202061646472657373207075626c69632075736572416464726573733b0a2020202061646472657373207075626c696320706172656e743b0a20202020616464726573735b5d207075626c6963206368696c6472656e3b0a0a202020200a202020202f2f2053746f726520616c6c20746865206669656c6473206f66206120636572746966696361746520696e206120436972727573207265636f72640a20202020737472696e67207075626c696320636f6d6d6f6e4e616d653b0a20202020737472696e67207075626c696320636f756e7472793b0a20202020737472696e67207075626c6963206f7267616e697a6174696f6e3b0a20202020737472696e67207075626c69632067726f75703b0a20202020737472696e67207075626c6963206f7267616e697a6174696f6e616c556e69743b0a20202020737472696e67207075626c6963207075626c69634b65793b0a20202020737472696e67207075626c6963206365727469666963617465537472696e673b0a20202020626f6f6c207075626c696320697356616c69643b0a0a20202020636f6e7374727563746f7228737472696e67205f6365727469666963617465537472696e6729207b0a20202020202020206f776e6572203d206d73672e73656e6465723b0a0a20202020202020206d617070696e6728737472696e67203d3e20737472696e67292070617273656443657274203d20706172736543657274285f6365727469666963617465537472696e67293b0a0a20202020202020207573657241646472657373203d206164647265737328706172736564436572745b227573657241646472657373225d293b0a2020202020202020636f6d6d6f6e4e616d65203d20706172736564436572745b22636f6d6d6f6e4e616d65225d3b0a20202020202020206f7267616e697a6174696f6e203d20706172736564436572745b226f7267616e697a6174696f6e225d3b0a202020202020202067726f7570203d20706172736564436572745b2267726f7570225d3b0a20202020202020206f7267616e697a6174696f6e616c556e6974203d20706172736564436572745b226f7267616e697a6174696f6e616c556e6974225d3b0a2020202020202020636f756e747279203d20706172736564436572745b22636f756e747279225d3b0a20202020202020207075626c69634b6579203d20706172736564436572745b227075626c69634b6579225d3b0a20202020202020206365727469666963617465537472696e67203d20706172736564436572745b2263657274537472696e67225d3b0a2020202020202020697356616c6964203d20747275653b0a2020202020202020706172656e74203d206164647265737328706172736564436572745b22706172656e74225d293b0a20202020202020206368696c6472656e203d205b5d3b0a202020207d0a202020200a2020202066756e6374696f6e206164644368696c642861646472657373205f6368696c6429207075626c6963207b0a20202020202020207265717569726528286d73672e73656e646572203d3d206f776e6572207c7c206d73672e73656e646572203d3d20706172656e74292c22596f7520646f6e27742068617665207065726d697373696f6e20746f2043414c4c206164644368696c642122293b0a20202020202020200a20202020202020206368696c6472656e2e70757368285f6368696c64293b0a202020207d0a202020200a2020202066756e6374696f6e207265766f6b652829207075626c69632072657475726e732028696e74297b0a202020202020202072657175697265286d73672e73656e646572203d3d206f776e65722c22596f7520646f6e27742068617665207065726d697373696f6e20746f2043414c4c207265766f6b652122293b0a0a2020202020202020697356616c6964203d2066616c73653b0a202020202020202072657475726e206368696c6472656e2e6c656e6774683b0a202020207d0a202020200a2020202066756e6374696f6e206765744368696c6428696e7420696e64657829207075626c69632072657475726e73202861646472657373297b0a202020202020202072657175697265286d73672e73656e646572203d3d206f776e65722c22596f7520646f6e27742068617665207065726d697373696f6e20746f20676574206368696c6472656e2122293b0a20202020202020200a202020202020202072657475726e206368696c6472656e5b696e6465785d3b0a202020207d0a7d0a0a636f6e74726163742043657274696669636174655265676973747279207b0a202020202f2f20546865207265676973747279206d61696e7461696e732061206c69737420616e64206d617070696e67206f6620616c6c20746865206365727469666963617465730a202020202f2f205765206e6565642074686520657874726120617272617920696e206f7264657220666f7220757320746f2069746572617465207468726f756768206f7572206365727469666963617465732e0a202020202f2f20536f6c6964697479206d617070696e677320617265206e6f6e2d6974657261626c652e0a202020206d617070696e672861646472657373203d3e2061646472657373292061646472657373546f436572744d61703b0a2020202061646472657373207075626c6963206f776e65723b0a0a202020206576656e742043657274696669636174655265676973746572656428737472696e67206365727469666963617465293b0a202020206576656e742043657274696669636174655265766f6b65642861646472657373207573657241646472657373293b0a202020200a2020202066756e6374696f6e207265676973746572436572746966696361746528737472696e67206e65774365727469666963617465537472696e67292072657475726e732028696e7429207b0a20202020202020206d617070696e6728737472696e67203d3e20737472696e67292070617273656443657274203d20706172736543657274286e65774365727469666963617465537472696e67293b0a20202020202020206164647265737320706172656e745573657241646472657373203d206164647265737328706172736564436572745b22706172656e74225d293b0a2020202020202020436572746966696361746520706172656e74436f6e7472616374203d2043657274696669636174652861646472657373546f436572744d61705b6163636f756e7428706172656e745573657241646472657373295d293b0a20202020202020200a2020202020202020696620286164647265737328706172656e74436f6e74726163742920213d206164647265737328302920262620706172656e74436f6e74726163742e697356616c6964282920262620766572696679436572745369676e65644279286e65774365727469666963617465537472696e672c20706172656e74436f6e74726163742e7075626c69634b657928292929207b0a2020202020202020202020202f2f2043726561746520746865206e6577204365727469666963617465207265636f72640a20202020202020202020202043657274696669636174652063203d206e6577204365727469666963617465286e65774365727469666963617465537472696e67293b0a0a20202020202020202020202069662028706172656e74557365724164647265737320213d20616464726573732830783029297b0a20202020202020202020202020202020706172656e74436f6e74726163742e6164644368696c6428632e75736572416464726573732829293b202020200a2020202020202020202020207d0a0a20202020202020202020202061646472657373546f436572744d61705b632e757365724164647265737328295d203d20616464726573732863293b0a202020202020202020202020656d697420436572746966696361746552656769737465726564286e65774365727469666963617465537472696e67293b0a20202020202020202020202072657475726e203230303b202f2f20323030203d204854545020537461747573204f4b0a20202020202020207d0a202020202020202072657475726e203430303b0a202020207d0a0a2020202066756e6374696f6e2067657455736572436572742861646472657373205f61646472657373292072657475726e732028436572746966696361746529207b0a202020202020202072657475726e2043657274696669636174652861646472657373546f436572744d61705b6163636f756e74285f61646472657373295d293b0a202020207d0a202020200a2020202066756e6374696f6e20676574436572744279416464726573732861646472657373205f61646472657373292072657475726e732028436572746966696361746529207b0a202020202020202072657475726e204365727469666963617465286765744365727442794163636f756e74286163636f756e74285f616464726573732929293b0a202020207d0a202020200a2020202066756e6374696f6e206765744365727442794163636f756e742861646472657373205f6163636f756e74292072657475726e732028436572746966696361746529207b0a202020202020202072657475726e2043657274696669636174652861646472657373546f436572744d61705b6163636f756e74285f6163636f756e74295d293b0a202020207d0a202020200a2020202066756e6374696f6e207265766f6b65436572742861646472657373207573657241646472657373297b0a20202020202020204365727469666963617465206d7943657274203d2043657274696669636174652861646472657373546f436572744d61705b6163636f756e74287573657241646472657373295d293b0a2020202020202020726571756972652869734368696c642874782e63657274696669636174652c206d79436572742e75736572416464726573732829292c2022596f7520646f6e27742068617665207065726d697373696f6e20746f207265766f6b652122293b0a0a2020202020202020696e74206368696c6472656e4c656e677468203d206d79436572742e7265766f6b6528293b0a2020202020202020666f722028696e742069203d20303b2069203c206368696c6472656e4c656e6774683b2069202b3d203129207b0a2020202020202020202020207265766f6b6543657274286d79436572742e6765744368696c64286929293b0a20202020202020207d0a20202020202020200a2020202020202020656d69742043657274696669636174655265766f6b6564287573657241646472657373293b0a202020207d0a202020200a2020202066756e6374696f6e2069734368696c6428737472696e672070436572742c206164647265737320636572745573657241646472657373292072657475726e732028626f6f6c29207b0a20202020202020204365727469666963617465206d7943657274203d2043657274696669636174652861646472657373546f436572744d61705b6163636f756e7428636572745573657241646472657373295d293b0a20202020202020206164647265737320706172656e745573657241646472657373203d206d79436572742e706172656e7428293b0a20202020202020206966286d79436572742e706172656e74282920213d20616464726573732830783029202626207043657274203d3d202043657274696669636174652861646472657373546f436572744d61705b6163636f756e7428706172656e745573657241646472657373295d292e6365727469666963617465537472696e672829297b0a20202020202020202020202072657475726e20747275653b0a20202020202020207d0a20202020202020200a20202020202020206966286d79436572742e706172656e74282920213d20616464726573732830783029297b0a20202020202020202020202072657475726e2069734368696c642870436572742c20706172656e745573657241646472657373293b0a20202020202020207d0a20202020202020200a202020202020202072657475726e2066616c73653b0a202020207d0a7d"},{"name":"MercataGovernance","src":"\ncontract Certificate {\n address owner; // The CertificateRegistry Contract\n\n address public userAddress;\n address public parent;\n address[] public children;\n\n \n // Store all the fields of a certificate in a Cirrus record\n string public commonName;\n string public country;\n string public organization;\n string public group;\n string public organizationalUnit;\n string public publicKey;\n string public certificateString;\n bool public isValid;\n\n constructor(string _certificateString) {\n owner = msg.sender;\n\n mapping(string => string) parsedCert = parseCert(_certificateString);\n\n userAddress = address(parsedCert[\"userAddress\"]);\n commonName = parsedCert[\"commonName\"];\n organization = parsedCert[\"organization\"];\n group = parsedCert[\"group\"];\n organizationalUnit = parsedCert[\"organizationalUnit\"];\n country = parsedCert[\"country\"];\n publicKey = parsedCert[\"publicKey\"];\n certificateString = parsedCert[\"certString\"];\n isValid = true;\n parent = address(parsedCert[\"parent\"]);\n children = [];\n }\n \n function addChild(address _child) public {\n require((msg.sender == owner || msg.sender == parent),\"You don't have permission to CALL addChild!\");\n \n children.push(_child);\n }\n \n function revoke() public returns (int){\n require(msg.sender == owner,\"You don't have permission to CALL revoke!\");\n\n isValid = false;\n return children.length;\n }\n \n function getChild(int index) public returns (address){\n require(msg.sender == owner,\"You don't have permission to get children!\");\n \n return children[index];\n }\n}\n\ncontract CertificateRegistry {\n // The registry maintains a list and mapping of all the certificates\n // We need the extra array in order for us to iterate through our certificates.\n // Solidity mappings are non-iterable.\n mapping(address => address) addressToCertMap;\n address public owner;\n\n event CertificateRegistered(string certificate);\n event CertificateRevoked(address userAddress);\n \n function registerCertificate(string newCertificateString) returns (int) {\n mapping(string => string) parsedCert = parseCert(newCertificateString);\n address parentUserAddress = address(parsedCert[\"parent\"]);\n Certificate parentContract = Certificate(addressToCertMap[account(parentUserAddress)]);\n \n if (address(parentContract) != address(0) && parentContract.isValid() && verifyCertSignedBy(newCertificateString, parentContract.publicKey())) {\n // Create the new Certificate record\n Certificate c = new Certificate(newCertificateString);\n\n if (parentUserAddress != address(0x0)){\n parentContract.addChild(c.userAddress()); \n }\n\n addressToCertMap[c.userAddress()] = address(c);\n emit CertificateRegistered(newCertificateString);\n return 200; // 200 = HTTP Status OK\n }\n return 400;\n }\n\n function getUserCert(address _address) returns (Certificate) {\n return Certificate(addressToCertMap[account(_address)]);\n }\n \n function getCertByAddress(address _address) returns (Certificate) {\n return Certificate(getCertByAccount(account(_address)));\n }\n \n function getCertByAccount(address _account) returns (Certificate) {\n return Certificate(addressToCertMap[account(_account)]);\n }\n \n function revokeCert(address userAddress){\n Certificate myCert = Certificate(addressToCertMap[account(userAddress)]);\n require(isChild(tx.certificate, myCert.userAddress()), \"You don't have permission to revoke!\");\n\n int childrenLength = myCert.revoke();\n for (int i = 0; i < childrenLength; i += 1) {\n revokeCert(myCert.getChild(i));\n }\n \n emit CertificateRevoked(userAddress);\n }\n \n function isChild(string pCert, address certUserAddress) returns (bool) {\n Certificate myCert = Certificate(addressToCertMap[account(certUserAddress)]);\n address parentUserAddress = myCert.parent();\n if(myCert.parent() != address(0x0) && pCert == Certificate(addressToCertMap[account(parentUserAddress)]).certificateString()){\n return true;\n }\n \n if(myCert.parent() != address(0x0)){\n return isChild(pCert, parentUserAddress);\n }\n \n return false;\n }\n}\n\n\ncontract MercataValidator {\n address public owner;\n\n string public org;\n string public orgUnit;\n string public commonName;\n\n bool public isActive;\n\n uint public votedInTime;\n uint public votedOutTime;\n\n constructor(string _org, string _orgUnit, string _commonName) {\n owner = msg.sender;\n org = _org;\n orgUnit = _orgUnit;\n commonName = _commonName;\n isActive = true;\n votedInTime = block.timestamp;\n }\n\n function deactivate() {\n require(msg.sender == owner, \"Only the contract's owner can call deactivate.\");\n isActive = false;\n votedOutTime = block.timestamp;\n }\n}\n\ncontract MercataAdmin {\n address public owner;\n\n string public org;\n string public orgUnit;\n string public commonName;\n\n bool public isActive;\n\n uint public votedInTime;\n uint public votedOutTime;\n\n constructor(string _org, string _orgUnit, string _commonName) {\n owner = msg.sender;\n org = _org;\n orgUnit = _orgUnit;\n commonName = _commonName;\n isActive = true;\n votedInTime = block.timestamp;\n }\n\n function deactivate() {\n require(msg.sender == owner, \"Only the contract's owner can call deactivate.\");\n isActive = false;\n votedOutTime = block.timestamp;\n }\n}\n\ncontract MercataValidatorVote {\n\n address public owner;\n\n string public recipientOrg;\n string public recipientOrgUnit;\n string public recipientCommonName;\n\n string public voterOrg;\n string public voterOrgUnit;\n string public voterCommonName;\n\n bool public voteDirection;\n\n bool public isActive;\n bool public isFinal;\n\n uint public voteTimestamp;\n uint public deactivationTimestamp;\n uint public finalizationTimestamp;\n\n constructor(string _voterOrg, string _voterOrgUnit, string _voterCommonName,\n string _recipientOrg, string _recipientOrgUnit, string _recipientCommonName,\n bool _voteDirection) {\n owner = msg.sender;\n voterOrg = _voterOrg;\n voterOrgUnit = _voterOrgUnit;\n voterCommonName = _voterCommonName;\n recipientOrg = _recipientOrg;\n recipientOrgUnit = _recipientOrgUnit;\n recipientCommonName = _recipientCommonName;\n voteDirection = _voteDirection;\n isActive = true;\n voteTimestamp = block.timestamp;\n }\n\n function deactivate() {\n require(msg.sender == owner, \"Only the contract's owner can call deactivate.\");\n isActive = false;\n deactivationTimestamp = block.timestamp;\n }\n\n function changeVote(bool _voteDirection) {\n require(msg.sender == owner, \"Only the contract's owner can call deactivate.\");\n voteDirection = _voteDirection;\n voteTimestamp = block.timestamp;\n }\n\n function finalize() {\n require(msg.sender == owner, \"Only the contract's owner can call deactivate.\");\n isActive = false;\n isFinal = true;\n deactivationTimestamp = block.timestamp;\n finalizationTimestamp = block.timestamp;\n }\n}\n\ncontract MercataAdminVote {\n\n address public owner;\n\n string public recipientOrg;\n string public recipientOrgUnit;\n string public recipientCommonName;\n\n string public voterOrg;\n string public voterOrgUnit;\n string public voterCommonName;\n\n bool public voteDirection;\n\n bool public isActive;\n bool public isFinal;\n\n uint public voteTimestamp;\n uint public deactivationTimestamp;\n uint public finalizationTimestamp;\n\n constructor(string _voterOrg, string _voterOrgUnit, string _voterCommonName,\n string _recipientOrg, string _recipientOrgUnit, string _recipientCommonName,\n bool _voteDirection) {\n owner = msg.sender;\n voterOrg = _voterOrg;\n voterOrgUnit = _voterOrgUnit;\n voterCommonName = _voterCommonName;\n recipientOrg = _recipientOrg;\n recipientOrgUnit = _recipientOrgUnit;\n recipientCommonName = _recipientCommonName;\n voteDirection = _voteDirection;\n isActive = true;\n voteTimestamp = block.timestamp;\n }\n\n function deactivate() {\n require(msg.sender == owner, \"Only the contract's owner can call deactivate.\");\n isActive = false;\n deactivationTimestamp = block.timestamp;\n }\n\n function finalize() {\n require(msg.sender == owner, \"Only the contract's owner can call deactivate.\");\n isActive = false;\n isFinal = true;\n deactivationTimestamp = block.timestamp;\n finalizationTimestamp = block.timestamp;\n }\n}\n\ncontract MercataGovernance {\n mapping (string => mapping (string => mapping (string => MercataValidator))) validatorMap;\n uint validatorCount;\n\n mapping (string => mapping (string => mapping (string => MercataAdmin))) adminMap;\n uint adminCount;\n\n mapping (string => mapping (string => mapping (string => mapping (string => mapping (string => mapping (string => uint)))))) validatorVoteMap;\n mapping (string => mapping (string => mapping (string => MercataValidatorVote[]))) validatorVotes;\n mapping (string => mapping (string => mapping (string => uint))) validatorVoteCountMap;\n\n mapping (string => mapping (string => mapping (string => mapping (string => mapping (string => mapping (string => uint)))))) adminVoteMap;\n mapping (string => mapping (string => mapping (string => MercataAdminVote[]))) adminVotes;\n mapping (string => mapping (string => mapping (string => uint))) adminVoteCountMap;\n\n address public owner;\n\n event ValidatorAdded(string org, string orgUnit, string commonName);\n event ValidatorRemoved(string org, string orgUnit, string commonName);\n \n function voteToAddValidator(string _org, string _orgUnit, string _commonName) {\n Certificate c = CertificateRegistry(address(0x509)).getUserCert(tx.origin);\n require(address(c) != address(0), \"Voting to add a validator requires having a valid X.509 certificate\");\n require(c.isValid(), \"Voting to add a validator requires having a valid X.509 certificate\");\n string originOrg = c.organization();\n string originUnit = c.organizationalUnit();\n string originName = c.commonName();\n\n MercataAdmin a = adminMap[originOrg][originUnit][originName];\n require(address(a) != address(0), \"Only registered network admins can vote for validators\");\n require(a.isActive(), \"Only registered network admins can vote for validators\");\n \n MercataValidator v = validatorMap[_org][_orgUnit][_commonName];\n require(address(v) == address(0), \"Votes to add cannot be counted for current validators\");\n \n uint voteIndex = validatorVoteMap[_org][_orgUnit][_commonName][originOrg][originUnit][originName];\n require(voteIndex == 0, \"Vote to add already cast for \" + _org + \" \" + _orgUnit + \" \" + _commonName);\n MercataValidatorVote newVote = new MercataValidatorVote(originOrg, originUnit, originName, _org, _orgUnit, _commonName, true);\n uint voteCount = validatorVoteCountMap[_org][_orgUnit][_commonName] + 1;\n validatorVoteCountMap[_org][_orgUnit][_commonName] = voteCount;\n validatorVotes[_org][_orgUnit][_commonName].push(newVote);\n validatorVoteMap[_org][_orgUnit][_commonName][originOrg][originUnit][originName] = validatorVotes[_org][_orgUnit][_commonName].length;\n\n uint newVoteCount = validatorVoteCountMap[_org][_orgUnit][_commonName];\n if (newVoteCount >= ((2 * adminCount) / 3) + 1) {\n MercataValidatorVote[] votes = validatorVotes[_org][_orgUnit][_commonName];\n for (uint i = 0; i < votes.length; i++) {\n votes[i].finalize();\n string voteOrg = votes[i].voterOrg();\n string voteUnit = votes[i].voterOrgUnit();\n string voteName = votes[i].voterCommonName();\n validatorVoteMap[_org][_orgUnit][_commonName][voteOrg][voteUnit][voteName] = 0;\n votes[i] = MercataValidatorVote(address(0));\n }\n validatorVotes[_org][_orgUnit][_commonName].length = 0;\n validatorVoteCountMap[_org][_orgUnit][_commonName] = 0;\n MercataValidator newValidator = new MercataValidator(_org, _orgUnit, _commonName);\n validatorMap[_org][_orgUnit][_commonName] = newValidator;\n validatorCount++;\n emit ValidatorAdded(_org, _orgUnit, _commonName);\n }\n }\n \n function voteToRemoveValidator(string _org, string _orgUnit, string _commonName) {\n Certificate c = CertificateRegistry(address(0x509)).getUserCert(tx.origin);\n require(address(c) != address(0), \"Voting to add a validator requires having a valid X.509 certificate\");\n require(c.isValid(), \"Voting to add a validator requires having a valid X.509 certificate\");\n string originOrg = c.organization();\n string originUnit = c.organizationalUnit();\n string originName = c.commonName();\n\n MercataAdmin a = adminMap[originOrg][originUnit][originName];\n require(address(a) != address(0), \"Only registered network admins can vote for validators\");\n require(a.isActive(), \"Only registered network admins can vote for validators\");\n \n MercataValidator v = validatorMap[_org][_orgUnit][_commonName];\n require(address(v) != address(0), \"Votes to remove can only be counted for current validators\");\n \n uint voteIndex = validatorVoteMap[_org][_orgUnit][_commonName][originOrg][originUnit][originName];\n require(voteIndex == 0, \"Vote to add already cast for \" + _org + \" \" + _orgUnit + \" \" + _commonName);\n MercataValidatorVote newVote = new MercataValidatorVote(originOrg, originUnit, originName, _org, _orgUnit, _commonName, false);\n uint voteCount = validatorVoteCountMap[_org][_orgUnit][_commonName] + 1;\n validatorVoteCountMap[_org][_orgUnit][_commonName] = voteCount;\n validatorVotes[_org][_orgUnit][_commonName].push(newVote);\n validatorVoteMap[_org][_orgUnit][_commonName][originOrg][originUnit][originName] = validatorVotes[_org][_orgUnit][_commonName].length;\n\n uint newVoteCount = validatorVoteCountMap[_org][_orgUnit][_commonName];\n if (newVoteCount >= ((2 * adminCount) / 3) + 1) {\n MercataValidatorVote[] votes = validatorVotes[_org][_orgUnit][_commonName];\n for (uint i = 0; i < votes.length; i++) {\n votes[i].finalize();\n string voteOrg = votes[i].voterOrg();\n string voteUnit = votes[i].voterOrgUnit();\n string voteName = votes[i].voterCommonName();\n validatorVoteMap[_org][_orgUnit][_commonName][voteOrg][voteUnit][voteName] = 0;\n votes[i] = MercataValidatorVote(address(0));\n }\n validatorVotes[_org][_orgUnit][_commonName].length = 0;\n validatorVoteCountMap[_org][_orgUnit][_commonName] = 0;\n v.deactivate();\n validatorMap[_org][_orgUnit][_commonName] = MercataValidator(address(0));\n validatorCount--;\n emit ValidatorRemoved(_org, _orgUnit, _commonName);\n }\n }\n \n function voteToAddAdmin(string _org, string _orgUnit, string _commonName) {\n Certificate c = CertificateRegistry(address(0x509)).getUserCert(tx.origin);\n require(address(c) != address(0), \"Voting to add a network admin requires having a valid X.509 certificate\");\n require(c.isValid(), \"Voting to add an admin requires having a valid X.509 certificate\");\n string originOrg = c.organization();\n string originUnit = c.organizationalUnit();\n string originName = c.commonName();\n\n MercataAdmin a = adminMap[originOrg][originUnit][originName];\n require(address(a) != address(0), \"Only registered network admins can vote for admins\");\n require(a.isActive(), \"Only registered network admins can vote for admins\");\n \n MercataAdmin v = adminMap[_org][_orgUnit][_commonName];\n require(address(v) == address(0), \"Votes to add cannot be counted for current admins\");\n \n uint voteIndex = adminVoteMap[_org][_orgUnit][_commonName][originOrg][originUnit][originName];\n require(voteIndex == 0, \"Vote to add already cast for \" + _org + \" \" + _orgUnit + \" \" + _commonName);\n MercataAdminVote newVote = new MercataAdminVote(originOrg, originUnit, originName, _org, _orgUnit, _commonName, true);\n uint voteCount = adminVoteCountMap[_org][_orgUnit][_commonName] + 1;\n adminVoteCountMap[_org][_orgUnit][_commonName] = voteCount;\n adminVotes[_org][_orgUnit][_commonName].push(newVote);\n adminVoteMap[_org][_orgUnit][_commonName][originOrg][originUnit][originName] = adminVotes[_org][_orgUnit][_commonName].length;\n\n uint newVoteCount = adminVoteCountMap[_org][_orgUnit][_commonName];\n if (newVoteCount >= ((2 * adminCount) / 3) + 1) {\n MercataAdminVote[] votes = adminVotes[_org][_orgUnit][_commonName];\n for (uint i = 0; i < votes.length; i++) {\n votes[i].finalize();\n string voteOrg = votes[i].voterOrg();\n string voteUnit = votes[i].voterOrgUnit();\n string voteName = votes[i].voterCommonName();\n adminVoteMap[_org][_orgUnit][_commonName][voteOrg][voteUnit][voteName] = 0;\n votes[i] = MercataAdminVote(address(0));\n }\n adminVotes[_org][_orgUnit][_commonName].length = 0;\n adminVoteCountMap[_org][_orgUnit][_commonName] = 0;\n MercataAdmin newAdmin = new MercataAdmin(_org, _orgUnit, _commonName);\n adminMap[_org][_orgUnit][_commonName] = newAdmin;\n adminCount++;\n }\n }\n \n function voteToRemoveAdmin(string _org, string _orgUnit, string _commonName) {\n Certificate c = CertificateRegistry(address(0x509)).getUserCert(tx.origin);\n require(address(c) != address(0), \"Voting to add an admin requires having a valid X.509 certificate\");\n require(c.isValid(), \"Voting to add an admin requires having a valid X.509 certificate\");\n string originOrg = c.organization();\n string originUnit = c.organizationalUnit();\n string originName = c.commonName();\n\n MercataAdmin a = adminMap[originOrg][originUnit][originName];\n require(address(a) != address(0), \"Only registered network admins can vote for admins\");\n require(a.isActive(), \"Only registered network admins can vote for admins\");\n \n MercataAdmin v = adminMap[_org][_orgUnit][_commonName];\n require(address(v) != address(0), \"Votes to remove can only be counted for current admins\");\n \n uint voteIndex = adminVoteMap[_org][_orgUnit][_commonName][originOrg][originUnit][originName];\n require(voteIndex == 0, \"Vote to add already cast for \" + _org + \" \" + _orgUnit + \" \" + _commonName);\n MercataAdminVote newVote = new MercataAdminVote(originOrg, originUnit, originName, _org, _orgUnit, _commonName, false);\n uint voteCount = adminVoteCountMap[_org][_orgUnit][_commonName] + 1;\n adminVoteCountMap[_org][_orgUnit][_commonName] = voteCount;\n adminVotes[_org][_orgUnit][_commonName].push(newVote);\n adminVoteMap[_org][_orgUnit][_commonName][originOrg][originUnit][originName] = adminVotes[_org][_orgUnit][_commonName].length;\n\n uint newVoteCount = adminVoteCountMap[_org][_orgUnit][_commonName];\n if (newVoteCount >= ((2 * adminCount) / 3) + 1) {\n MercataAdminVote[] votes = adminVotes[_org][_orgUnit][_commonName];\n for (uint i = 0; i < votes.length; i++) {\n votes[i].finalize();\n string voteOrg = votes[i].voterOrg();\n string voteUnit = votes[i].voterOrgUnit();\n string voteName = votes[i].voterCommonName();\n adminVoteMap[_org][_orgUnit][_commonName][voteOrg][voteUnit][voteName] = 0;\n votes[i] = MercataAdminVote(address(0));\n }\n adminVotes[_org][_orgUnit][_commonName].length = 0;\n adminVoteCountMap[_org][_orgUnit][_commonName] = 0;\n v.deactivate();\n adminMap[_org][_orgUnit][_commonName] = MercataAdmin(address(0));\n adminCount--;\n }\n }\n}","code":"0a636f6e7472616374204365727469666963617465207b0a2020202061646472657373206f776e65723b20202f2f20546865204365727469666963617465526567697374727920436f6e74726163740a0a2020202061646472657373207075626c69632075736572416464726573733b0a2020202061646472657373207075626c696320706172656e743b0a20202020616464726573735b5d207075626c6963206368696c6472656e3b0a0a202020200a202020202f2f2053746f726520616c6c20746865206669656c6473206f66206120636572746966696361746520696e206120436972727573207265636f72640a20202020737472696e67207075626c696320636f6d6d6f6e4e616d653b0a20202020737472696e67207075626c696320636f756e7472793b0a20202020737472696e67207075626c6963206f7267616e697a6174696f6e3b0a20202020737472696e67207075626c69632067726f75703b0a20202020737472696e67207075626c6963206f7267616e697a6174696f6e616c556e69743b0a20202020737472696e67207075626c6963207075626c69634b65793b0a20202020737472696e67207075626c6963206365727469666963617465537472696e673b0a20202020626f6f6c207075626c696320697356616c69643b0a0a20202020636f6e7374727563746f7228737472696e67205f6365727469666963617465537472696e6729207b0a20202020202020206f776e6572203d206d73672e73656e6465723b0a0a20202020202020206d617070696e6728737472696e67203d3e20737472696e67292070617273656443657274203d20706172736543657274285f6365727469666963617465537472696e67293b0a0a20202020202020207573657241646472657373203d206164647265737328706172736564436572745b227573657241646472657373225d293b0a2020202020202020636f6d6d6f6e4e616d65203d20706172736564436572745b22636f6d6d6f6e4e616d65225d3b0a20202020202020206f7267616e697a6174696f6e203d20706172736564436572745b226f7267616e697a6174696f6e225d3b0a202020202020202067726f7570203d20706172736564436572745b2267726f7570225d3b0a20202020202020206f7267616e697a6174696f6e616c556e6974203d20706172736564436572745b226f7267616e697a6174696f6e616c556e6974225d3b0a2020202020202020636f756e747279203d20706172736564436572745b22636f756e747279225d3b0a20202020202020207075626c69634b6579203d20706172736564436572745b227075626c69634b6579225d3b0a20202020202020206365727469666963617465537472696e67203d20706172736564436572745b2263657274537472696e67225d3b0a2020202020202020697356616c6964203d20747275653b0a2020202020202020706172656e74203d206164647265737328706172736564436572745b22706172656e74225d293b0a20202020202020206368696c6472656e203d205b5d3b0a202020207d0a202020200a2020202066756e6374696f6e206164644368696c642861646472657373205f6368696c6429207075626c6963207b0a20202020202020207265717569726528286d73672e73656e646572203d3d206f776e6572207c7c206d73672e73656e646572203d3d20706172656e74292c22596f7520646f6e27742068617665207065726d697373696f6e20746f2043414c4c206164644368696c642122293b0a20202020202020200a20202020202020206368696c6472656e2e70757368285f6368696c64293b0a202020207d0a202020200a2020202066756e6374696f6e207265766f6b652829207075626c69632072657475726e732028696e74297b0a202020202020202072657175697265286d73672e73656e646572203d3d206f776e65722c22596f7520646f6e27742068617665207065726d697373696f6e20746f2043414c4c207265766f6b652122293b0a0a2020202020202020697356616c6964203d2066616c73653b0a202020202020202072657475726e206368696c6472656e2e6c656e6774683b0a202020207d0a202020200a2020202066756e6374696f6e206765744368696c6428696e7420696e64657829207075626c69632072657475726e73202861646472657373297b0a202020202020202072657175697265286d73672e73656e646572203d3d206f776e65722c22596f7520646f6e27742068617665207065726d697373696f6e20746f20676574206368696c6472656e2122293b0a20202020202020200a202020202020202072657475726e206368696c6472656e5b696e6465785d3b0a202020207d0a7d0a0a636f6e74726163742043657274696669636174655265676973747279207b0a202020202f2f20546865207265676973747279206d61696e7461696e732061206c69737420616e64206d617070696e67206f6620616c6c20746865206365727469666963617465730a202020202f2f205765206e6565642074686520657874726120617272617920696e206f7264657220666f7220757320746f2069746572617465207468726f756768206f7572206365727469666963617465732e0a202020202f2f20536f6c6964697479206d617070696e677320617265206e6f6e2d6974657261626c652e0a202020206d617070696e672861646472657373203d3e2061646472657373292061646472657373546f436572744d61703b0a2020202061646472657373207075626c6963206f776e65723b0a0a202020206576656e742043657274696669636174655265676973746572656428737472696e67206365727469666963617465293b0a202020206576656e742043657274696669636174655265766f6b65642861646472657373207573657241646472657373293b0a202020200a2020202066756e6374696f6e207265676973746572436572746966696361746528737472696e67206e65774365727469666963617465537472696e67292072657475726e732028696e7429207b0a20202020202020206d617070696e6728737472696e67203d3e20737472696e67292070617273656443657274203d20706172736543657274286e65774365727469666963617465537472696e67293b0a20202020202020206164647265737320706172656e745573657241646472657373203d206164647265737328706172736564436572745b22706172656e74225d293b0a2020202020202020436572746966696361746520706172656e74436f6e7472616374203d2043657274696669636174652861646472657373546f436572744d61705b6163636f756e7428706172656e745573657241646472657373295d293b0a20202020202020200a2020202020202020696620286164647265737328706172656e74436f6e74726163742920213d206164647265737328302920262620706172656e74436f6e74726163742e697356616c6964282920262620766572696679436572745369676e65644279286e65774365727469666963617465537472696e672c20706172656e74436f6e74726163742e7075626c69634b657928292929207b0a2020202020202020202020202f2f2043726561746520746865206e6577204365727469666963617465207265636f72640a20202020202020202020202043657274696669636174652063203d206e6577204365727469666963617465286e65774365727469666963617465537472696e67293b0a0a20202020202020202020202069662028706172656e74557365724164647265737320213d20616464726573732830783029297b0a20202020202020202020202020202020706172656e74436f6e74726163742e6164644368696c6428632e75736572416464726573732829293b202020200a2020202020202020202020207d0a0a20202020202020202020202061646472657373546f436572744d61705b632e757365724164647265737328295d203d20616464726573732863293b0a202020202020202020202020656d697420436572746966696361746552656769737465726564286e65774365727469666963617465537472696e67293b0a20202020202020202020202072657475726e203230303b202f2f20323030203d204854545020537461747573204f4b0a20202020202020207d0a202020202020202072657475726e203430303b0a202020207d0a0a2020202066756e6374696f6e2067657455736572436572742861646472657373205f61646472657373292072657475726e732028436572746966696361746529207b0a202020202020202072657475726e2043657274696669636174652861646472657373546f436572744d61705b6163636f756e74285f61646472657373295d293b0a202020207d0a202020200a2020202066756e6374696f6e20676574436572744279416464726573732861646472657373205f61646472657373292072657475726e732028436572746966696361746529207b0a202020202020202072657475726e204365727469666963617465286765744365727442794163636f756e74286163636f756e74285f616464726573732929293b0a202020207d0a202020200a2020202066756e6374696f6e206765744365727442794163636f756e742861646472657373205f6163636f756e74292072657475726e732028436572746966696361746529207b0a202020202020202072657475726e2043657274696669636174652861646472657373546f436572744d61705b6163636f756e74285f6163636f756e74295d293b0a202020207d0a202020200a2020202066756e6374696f6e207265766f6b65436572742861646472657373207573657241646472657373297b0a20202020202020204365727469666963617465206d7943657274203d2043657274696669636174652861646472657373546f436572744d61705b6163636f756e74287573657241646472657373295d293b0a2020202020202020726571756972652869734368696c642874782e63657274696669636174652c206d79436572742e75736572416464726573732829292c2022596f7520646f6e27742068617665207065726d697373696f6e20746f207265766f6b652122293b0a0a2020202020202020696e74206368696c6472656e4c656e677468203d206d79436572742e7265766f6b6528293b0a2020202020202020666f722028696e742069203d20303b2069203c206368696c6472656e4c656e6774683b2069202b3d203129207b0a2020202020202020202020207265766f6b6543657274286d79436572742e6765744368696c64286929293b0a20202020202020207d0a20202020202020200a2020202020202020656d69742043657274696669636174655265766f6b6564287573657241646472657373293b0a202020207d0a202020200a2020202066756e6374696f6e2069734368696c6428737472696e672070436572742c206164647265737320636572745573657241646472657373292072657475726e732028626f6f6c29207b0a20202020202020204365727469666963617465206d7943657274203d2043657274696669636174652861646472657373546f436572744d61705b6163636f756e7428636572745573657241646472657373295d293b0a20202020202020206164647265737320706172656e745573657241646472657373203d206d79436572742e706172656e7428293b0a20202020202020206966286d79436572742e706172656e74282920213d20616464726573732830783029202626207043657274203d3d202043657274696669636174652861646472657373546f436572744d61705b6163636f756e7428706172656e745573657241646472657373295d292e6365727469666963617465537472696e672829297b0a20202020202020202020202072657475726e20747275653b0a20202020202020207d0a20202020202020200a20202020202020206966286d79436572742e706172656e74282920213d20616464726573732830783029297b0a20202020202020202020202072657475726e2069734368696c642870436572742c20706172656e745573657241646472657373293b0a20202020202020207d0a20202020202020200a202020202020202072657475726e2066616c73653b0a202020207d0a7d0a0a0a636f6e7472616374204d65726361746156616c696461746f72207b0a2020202061646472657373207075626c6963206f776e65723b0a0a20202020737472696e67207075626c6963206f72673b0a20202020737472696e67207075626c6963206f7267556e69743b0a20202020737472696e67207075626c696320636f6d6d6f6e4e616d653b0a0a20202020626f6f6c207075626c69632069734163746976653b0a0a2020202075696e74207075626c696320766f746564496e54696d653b0a2020202075696e74207075626c696320766f7465644f757454696d653b0a0a20202020636f6e7374727563746f7228737472696e67205f6f72672c20737472696e67205f6f7267556e69742c20737472696e67205f636f6d6d6f6e4e616d6529207b0a20202020202020206f776e6572203d206d73672e73656e6465723b0a20202020202020206f7267203d205f6f72673b0a20202020202020206f7267556e6974203d205f6f7267556e69743b0a2020202020202020636f6d6d6f6e4e616d65203d205f636f6d6d6f6e4e616d653b0a20202020202020206973416374697665203d20747275653b0a2020202020202020766f746564496e54696d65203d20626c6f636b2e74696d657374616d703b0a202020207d0a0a2020202066756e6374696f6e20646561637469766174652829207b0a202020202020202072657175697265286d73672e73656e646572203d3d206f776e65722c20224f6e6c792074686520636f6e74726163742773206f776e65722063616e2063616c6c20646561637469766174652e22293b0a20202020202020206973416374697665203d2066616c73653b0a2020202020202020766f7465644f757454696d65203d20626c6f636b2e74696d657374616d703b0a202020207d0a7d0a0a636f6e7472616374204d65726361746141646d696e207b0a2020202061646472657373207075626c6963206f776e65723b0a0a20202020737472696e67207075626c6963206f72673b0a20202020737472696e67207075626c6963206f7267556e69743b0a20202020737472696e67207075626c696320636f6d6d6f6e4e616d653b0a0a20202020626f6f6c207075626c69632069734163746976653b0a0a2020202075696e74207075626c696320766f746564496e54696d653b0a2020202075696e74207075626c696320766f7465644f757454696d653b0a0a20202020636f6e7374727563746f7228737472696e67205f6f72672c20737472696e67205f6f7267556e69742c20737472696e67205f636f6d6d6f6e4e616d6529207b0a20202020202020206f776e6572203d206d73672e73656e6465723b0a20202020202020206f7267203d205f6f72673b0a20202020202020206f7267556e6974203d205f6f7267556e69743b0a2020202020202020636f6d6d6f6e4e616d65203d205f636f6d6d6f6e4e616d653b0a20202020202020206973416374697665203d20747275653b0a2020202020202020766f746564496e54696d65203d20626c6f636b2e74696d657374616d703b0a202020207d0a0a2020202066756e6374696f6e20646561637469766174652829207b0a202020202020202072657175697265286d73672e73656e646572203d3d206f776e65722c20224f6e6c792074686520636f6e74726163742773206f776e65722063616e2063616c6c20646561637469766174652e22293b0a20202020202020206973416374697665203d2066616c73653b0a2020202020202020766f7465644f757454696d65203d20626c6f636b2e74696d657374616d703b0a202020207d0a7d0a0a636f6e7472616374204d65726361746156616c696461746f72566f7465207b0a0a2020202061646472657373207075626c6963206f776e65723b0a0a20202020737472696e67207075626c696320726563697069656e744f72673b0a20202020737472696e67207075626c696320726563697069656e744f7267556e69743b0a20202020737472696e67207075626c696320726563697069656e74436f6d6d6f6e4e616d653b0a0a20202020737472696e67207075626c696320766f7465724f72673b0a20202020737472696e67207075626c696320766f7465724f7267556e69743b0a20202020737472696e67207075626c696320766f746572436f6d6d6f6e4e616d653b0a0a20202020626f6f6c207075626c696320766f7465446972656374696f6e3b0a0a20202020626f6f6c207075626c69632069734163746976653b0a20202020626f6f6c207075626c696320697346696e616c3b0a0a2020202075696e74207075626c696320766f746554696d657374616d703b0a2020202075696e74207075626c696320646561637469766174696f6e54696d657374616d703b0a2020202075696e74207075626c69632066696e616c697a6174696f6e54696d657374616d703b0a0a20202020636f6e7374727563746f7228737472696e67205f766f7465724f72672c20737472696e67205f766f7465724f7267556e69742c20737472696e67205f766f746572436f6d6d6f6e4e616d652c0a20202020202020202020202020202020737472696e67205f726563697069656e744f72672c20737472696e67205f726563697069656e744f7267556e69742c20737472696e67205f726563697069656e74436f6d6d6f6e4e616d652c0a20202020202020202020202020202020626f6f6c205f766f7465446972656374696f6e29207b0a20202020202020206f776e6572203d206d73672e73656e6465723b0a2020202020202020766f7465724f7267203d205f766f7465724f72673b0a2020202020202020766f7465724f7267556e6974203d205f766f7465724f7267556e69743b0a2020202020202020766f746572436f6d6d6f6e4e616d65203d205f766f746572436f6d6d6f6e4e616d653b0a2020202020202020726563697069656e744f7267203d205f726563697069656e744f72673b0a2020202020202020726563697069656e744f7267556e6974203d205f726563697069656e744f7267556e69743b0a2020202020202020726563697069656e74436f6d6d6f6e4e616d65203d205f726563697069656e74436f6d6d6f6e4e616d653b0a2020202020202020766f7465446972656374696f6e203d205f766f7465446972656374696f6e3b0a20202020202020206973416374697665203d20747275653b0a2020202020202020766f746554696d657374616d70203d20626c6f636b2e74696d657374616d703b0a202020207d0a0a2020202066756e6374696f6e20646561637469766174652829207b0a202020202020202072657175697265286d73672e73656e646572203d3d206f776e65722c20224f6e6c792074686520636f6e74726163742773206f776e65722063616e2063616c6c20646561637469766174652e22293b0a20202020202020206973416374697665203d2066616c73653b0a2020202020202020646561637469766174696f6e54696d657374616d70203d20626c6f636b2e74696d657374616d703b0a202020207d0a0a2020202066756e6374696f6e206368616e6765566f746528626f6f6c205f766f7465446972656374696f6e29207b0a202020202020202072657175697265286d73672e73656e646572203d3d206f776e65722c20224f6e6c792074686520636f6e74726163742773206f776e65722063616e2063616c6c20646561637469766174652e22293b0a2020202020202020766f7465446972656374696f6e203d205f766f7465446972656374696f6e3b0a2020202020202020766f746554696d657374616d70203d20626c6f636b2e74696d657374616d703b0a202020207d0a0a2020202066756e6374696f6e2066696e616c697a652829207b0a202020202020202072657175697265286d73672e73656e646572203d3d206f776e65722c20224f6e6c792074686520636f6e74726163742773206f776e65722063616e2063616c6c20646561637469766174652e22293b0a20202020202020206973416374697665203d2066616c73653b0a2020202020202020697346696e616c203d20747275653b0a2020202020202020646561637469766174696f6e54696d657374616d70203d20626c6f636b2e74696d657374616d703b0a202020202020202066696e616c697a6174696f6e54696d657374616d70203d20626c6f636b2e74696d657374616d703b0a202020207d0a7d0a0a636f6e7472616374204d65726361746141646d696e566f7465207b0a0a2020202061646472657373207075626c6963206f776e65723b0a0a20202020737472696e67207075626c696320726563697069656e744f72673b0a20202020737472696e67207075626c696320726563697069656e744f7267556e69743b0a20202020737472696e67207075626c696320726563697069656e74436f6d6d6f6e4e616d653b0a0a20202020737472696e67207075626c696320766f7465724f72673b0a20202020737472696e67207075626c696320766f7465724f7267556e69743b0a20202020737472696e67207075626c696320766f746572436f6d6d6f6e4e616d653b0a0a20202020626f6f6c207075626c696320766f7465446972656374696f6e3b0a0a20202020626f6f6c207075626c69632069734163746976653b0a20202020626f6f6c207075626c696320697346696e616c3b0a0a2020202075696e74207075626c696320766f746554696d657374616d703b0a2020202075696e74207075626c696320646561637469766174696f6e54696d657374616d703b0a2020202075696e74207075626c69632066696e616c697a6174696f6e54696d657374616d703b0a0a20202020636f6e7374727563746f7228737472696e67205f766f7465724f72672c20737472696e67205f766f7465724f7267556e69742c20737472696e67205f766f746572436f6d6d6f6e4e616d652c0a20202020202020202020202020202020737472696e67205f726563697069656e744f72672c20737472696e67205f726563697069656e744f7267556e69742c20737472696e67205f726563697069656e74436f6d6d6f6e4e616d652c0a20202020202020202020202020202020626f6f6c205f766f7465446972656374696f6e29207b0a20202020202020206f776e6572203d206d73672e73656e6465723b0a2020202020202020766f7465724f7267203d205f766f7465724f72673b0a2020202020202020766f7465724f7267556e6974203d205f766f7465724f7267556e69743b0a2020202020202020766f746572436f6d6d6f6e4e616d65203d205f766f746572436f6d6d6f6e4e616d653b0a2020202020202020726563697069656e744f7267203d205f726563697069656e744f72673b0a2020202020202020726563697069656e744f7267556e6974203d205f726563697069656e744f7267556e69743b0a2020202020202020726563697069656e74436f6d6d6f6e4e616d65203d205f726563697069656e74436f6d6d6f6e4e616d653b0a2020202020202020766f7465446972656374696f6e203d205f766f7465446972656374696f6e3b0a20202020202020206973416374697665203d20747275653b0a2020202020202020766f746554696d657374616d70203d20626c6f636b2e74696d657374616d703b0a202020207d0a0a2020202066756e6374696f6e20646561637469766174652829207b0a202020202020202072657175697265286d73672e73656e646572203d3d206f776e65722c20224f6e6c792074686520636f6e74726163742773206f776e65722063616e2063616c6c20646561637469766174652e22293b0a20202020202020206973416374697665203d2066616c73653b0a2020202020202020646561637469766174696f6e54696d657374616d70203d20626c6f636b2e74696d657374616d703b0a202020207d0a0a2020202066756e6374696f6e2066696e616c697a652829207b0a202020202020202072657175697265286d73672e73656e646572203d3d206f776e65722c20224f6e6c792074686520636f6e74726163742773206f776e65722063616e2063616c6c20646561637469766174652e22293b0a20202020202020206973416374697665203d2066616c73653b0a2020202020202020697346696e616c203d20747275653b0a2020202020202020646561637469766174696f6e54696d657374616d70203d20626c6f636b2e74696d657374616d703b0a202020202020202066696e616c697a6174696f6e54696d657374616d70203d20626c6f636b2e74696d657374616d703b0a202020207d0a7d0a0a636f6e7472616374204d657263617461476f7665726e616e6365207b0a202020206d617070696e672028737472696e67203d3e206d617070696e672028737472696e67203d3e206d617070696e672028737472696e67203d3e204d65726361746156616c696461746f722929292076616c696461746f724d61703b0a2020202075696e742076616c696461746f72436f756e743b0a0a202020206d617070696e672028737472696e67203d3e206d617070696e672028737472696e67203d3e206d617070696e672028737472696e67203d3e204d65726361746141646d696e2929292061646d696e4d61703b0a2020202075696e742061646d696e436f756e743b0a0a202020206d617070696e672028737472696e67203d3e206d617070696e672028737472696e67203d3e206d617070696e672028737472696e67203d3e206d617070696e672028737472696e67203d3e206d617070696e672028737472696e67203d3e206d617070696e672028737472696e67203d3e2075696e742929292929292076616c696461746f72566f74654d61703b0a202020206d617070696e672028737472696e67203d3e206d617070696e672028737472696e67203d3e206d617070696e672028737472696e67203d3e204d65726361746156616c696461746f72566f74655b5d2929292076616c696461746f72566f7465733b0a202020206d617070696e672028737472696e67203d3e206d617070696e672028737472696e67203d3e206d617070696e672028737472696e67203d3e2075696e742929292076616c696461746f72566f7465436f756e744d61703b0a0a202020206d617070696e672028737472696e67203d3e206d617070696e672028737472696e67203d3e206d617070696e672028737472696e67203d3e206d617070696e672028737472696e67203d3e206d617070696e672028737472696e67203d3e206d617070696e672028737472696e67203d3e2075696e742929292929292061646d696e566f74654d61703b0a202020206d617070696e672028737472696e67203d3e206d617070696e672028737472696e67203d3e206d617070696e672028737472696e67203d3e204d65726361746141646d696e566f74655b5d2929292061646d696e566f7465733b0a202020206d617070696e672028737472696e67203d3e206d617070696e672028737472696e67203d3e206d617070696e672028737472696e67203d3e2075696e742929292061646d696e566f7465436f756e744d61703b0a0a2020202061646472657373207075626c6963206f776e65723b0a0a202020206576656e742056616c696461746f72416464656428737472696e67206f72672c20737472696e67206f7267556e69742c20737472696e6720636f6d6d6f6e4e616d65293b0a202020206576656e742056616c696461746f7252656d6f76656428737472696e67206f72672c20737472696e67206f7267556e69742c20737472696e6720636f6d6d6f6e4e616d65293b0a202020200a2020202066756e6374696f6e20766f7465546f41646456616c696461746f7228737472696e67205f6f72672c20737472696e67205f6f7267556e69742c20737472696e67205f636f6d6d6f6e4e616d6529207b0a202020202020202043657274696669636174652063203d2043657274696669636174655265676973747279286164647265737328307835303929292e67657455736572436572742874782e6f726967696e293b0a202020202020202072657175697265286164647265737328632920213d20616464726573732830292c2022566f74696e6720746f2061646420612076616c696461746f7220726571756972657320686176696e6720612076616c696420582e35303920636572746966696361746522293b0a20202020202020207265717569726528632e697356616c696428292c2022566f74696e6720746f2061646420612076616c696461746f7220726571756972657320686176696e6720612076616c696420582e35303920636572746966696361746522293b0a2020202020202020737472696e67206f726967696e4f7267203d20632e6f7267616e697a6174696f6e28293b0a2020202020202020737472696e67206f726967696e556e6974203d20632e6f7267616e697a6174696f6e616c556e697428293b0a2020202020202020737472696e67206f726967696e4e616d65203d20632e636f6d6d6f6e4e616d6528293b0a0a20202020202020204d65726361746141646d696e2061203d2061646d696e4d61705b6f726967696e4f72675d5b6f726967696e556e69745d5b6f726967696e4e616d655d3b0a202020202020202072657175697265286164647265737328612920213d20616464726573732830292c20224f6e6c792072656769737465726564206e6574776f726b2061646d696e732063616e20766f746520666f722076616c696461746f727322293b0a20202020202020207265717569726528612e697341637469766528292c20224f6e6c792072656769737465726564206e6574776f726b2061646d696e732063616e20766f746520666f722076616c696461746f727322293b0a20202020202020200a20202020202020204d65726361746156616c696461746f722076203d2076616c696461746f724d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d3b0a2020202020202020726571756972652861646472657373287629203d3d20616464726573732830292c2022566f74657320746f206164642063616e6e6f7420626520636f756e74656420666f722063757272656e742076616c696461746f727322293b0a20202020202020200a202020202020202075696e7420766f7465496e646578203d2076616c696461746f72566f74654d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d5b6f726967696e4f72675d5b6f726967696e556e69745d5b6f726967696e4e616d655d3b0a20202020202020207265717569726528766f7465496e646578203d3d20302c2022566f746520746f2061646420616c7265616479206361737420666f722022202b205f6f7267202b20222022202b205f6f7267556e6974202b20222022202b205f636f6d6d6f6e4e616d65293b0a20202020202020204d65726361746156616c696461746f72566f7465206e6577566f7465203d206e6577204d65726361746156616c696461746f72566f7465286f726967696e4f72672c206f726967696e556e69742c206f726967696e4e616d652c205f6f72672c205f6f7267556e69742c205f636f6d6d6f6e4e616d652c2074727565293b0a202020202020202075696e7420766f7465436f756e74203d2076616c696461746f72566f7465436f756e744d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d202b20313b0a202020202020202076616c696461746f72566f7465436f756e744d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d203d20766f7465436f756e743b0a202020202020202076616c696461746f72566f7465735b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d2e70757368286e6577566f7465293b0a202020202020202076616c696461746f72566f74654d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d5b6f726967696e4f72675d5b6f726967696e556e69745d5b6f726967696e4e616d655d203d2076616c696461746f72566f7465735b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d2e6c656e6774683b0a0a202020202020202075696e74206e6577566f7465436f756e74203d2076616c696461746f72566f7465436f756e744d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d3b0a2020202020202020696620286e6577566f7465436f756e74203e3d20282832202a2061646d696e436f756e7429202f203329202b203129207b0a2020202020202020202020204d65726361746156616c696461746f72566f74655b5d20766f746573203d2076616c696461746f72566f7465735b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d3b0a202020202020202020202020666f72202875696e742069203d20303b2069203c20766f7465732e6c656e6774683b20692b2b29207b0a20202020202020202020202020202020766f7465735b695d2e66696e616c697a6528293b0a20202020202020202020202020202020737472696e6720766f74654f7267203d20766f7465735b695d2e766f7465724f726728293b0a20202020202020202020202020202020737472696e6720766f7465556e6974203d20766f7465735b695d2e766f7465724f7267556e697428293b0a20202020202020202020202020202020737472696e6720766f74654e616d65203d20766f7465735b695d2e766f746572436f6d6d6f6e4e616d6528293b0a2020202020202020202020202020202076616c696461746f72566f74654d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d5b766f74654f72675d5b766f7465556e69745d5b766f74654e616d655d203d20303b0a20202020202020202020202020202020766f7465735b695d203d204d65726361746156616c696461746f72566f74652861646472657373283029293b0a2020202020202020202020207d0a20202020202020202020202076616c696461746f72566f7465735b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d2e6c656e677468203d20303b0a20202020202020202020202076616c696461746f72566f7465436f756e744d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d203d20303b0a2020202020202020202020204d65726361746156616c696461746f72206e657756616c696461746f72203d206e6577204d65726361746156616c696461746f72285f6f72672c205f6f7267556e69742c205f636f6d6d6f6e4e616d65293b0a20202020202020202020202076616c696461746f724d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d203d206e657756616c696461746f723b0a20202020202020202020202076616c696461746f72436f756e742b2b3b0a202020202020202020202020656d69742056616c696461746f724164646564285f6f72672c205f6f7267556e69742c205f636f6d6d6f6e4e616d65293b0a20202020202020207d0a202020207d0a202020200a2020202066756e6374696f6e20766f7465546f52656d6f766556616c696461746f7228737472696e67205f6f72672c20737472696e67205f6f7267556e69742c20737472696e67205f636f6d6d6f6e4e616d6529207b0a202020202020202043657274696669636174652063203d2043657274696669636174655265676973747279286164647265737328307835303929292e67657455736572436572742874782e6f726967696e293b0a202020202020202072657175697265286164647265737328632920213d20616464726573732830292c2022566f74696e6720746f2061646420612076616c696461746f7220726571756972657320686176696e6720612076616c696420582e35303920636572746966696361746522293b0a20202020202020207265717569726528632e697356616c696428292c2022566f74696e6720746f2061646420612076616c696461746f7220726571756972657320686176696e6720612076616c696420582e35303920636572746966696361746522293b0a2020202020202020737472696e67206f726967696e4f7267203d20632e6f7267616e697a6174696f6e28293b0a2020202020202020737472696e67206f726967696e556e6974203d20632e6f7267616e697a6174696f6e616c556e697428293b0a2020202020202020737472696e67206f726967696e4e616d65203d20632e636f6d6d6f6e4e616d6528293b0a0a20202020202020204d65726361746141646d696e2061203d2061646d696e4d61705b6f726967696e4f72675d5b6f726967696e556e69745d5b6f726967696e4e616d655d3b0a202020202020202072657175697265286164647265737328612920213d20616464726573732830292c20224f6e6c792072656769737465726564206e6574776f726b2061646d696e732063616e20766f746520666f722076616c696461746f727322293b0a20202020202020207265717569726528612e697341637469766528292c20224f6e6c792072656769737465726564206e6574776f726b2061646d696e732063616e20766f746520666f722076616c696461746f727322293b0a20202020202020200a20202020202020204d65726361746156616c696461746f722076203d2076616c696461746f724d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d3b0a202020202020202072657175697265286164647265737328762920213d20616464726573732830292c2022566f74657320746f2072656d6f76652063616e206f6e6c7920626520636f756e74656420666f722063757272656e742076616c696461746f727322293b0a20202020202020200a202020202020202075696e7420766f7465496e646578203d2076616c696461746f72566f74654d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d5b6f726967696e4f72675d5b6f726967696e556e69745d5b6f726967696e4e616d655d3b0a20202020202020207265717569726528766f7465496e646578203d3d20302c2022566f746520746f2061646420616c7265616479206361737420666f722022202b205f6f7267202b20222022202b205f6f7267556e6974202b20222022202b205f636f6d6d6f6e4e616d65293b0a20202020202020204d65726361746156616c696461746f72566f7465206e6577566f7465203d206e6577204d65726361746156616c696461746f72566f7465286f726967696e4f72672c206f726967696e556e69742c206f726967696e4e616d652c205f6f72672c205f6f7267556e69742c205f636f6d6d6f6e4e616d652c2066616c7365293b0a202020202020202075696e7420766f7465436f756e74203d2076616c696461746f72566f7465436f756e744d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d202b20313b0a202020202020202076616c696461746f72566f7465436f756e744d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d203d20766f7465436f756e743b0a202020202020202076616c696461746f72566f7465735b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d2e70757368286e6577566f7465293b0a202020202020202076616c696461746f72566f74654d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d5b6f726967696e4f72675d5b6f726967696e556e69745d5b6f726967696e4e616d655d203d2076616c696461746f72566f7465735b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d2e6c656e6774683b0a0a202020202020202075696e74206e6577566f7465436f756e74203d2076616c696461746f72566f7465436f756e744d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d3b0a2020202020202020696620286e6577566f7465436f756e74203e3d20282832202a2061646d696e436f756e7429202f203329202b203129207b0a2020202020202020202020204d65726361746156616c696461746f72566f74655b5d20766f746573203d2076616c696461746f72566f7465735b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d3b0a202020202020202020202020666f72202875696e742069203d20303b2069203c20766f7465732e6c656e6774683b20692b2b29207b0a20202020202020202020202020202020766f7465735b695d2e66696e616c697a6528293b0a20202020202020202020202020202020737472696e6720766f74654f7267203d20766f7465735b695d2e766f7465724f726728293b0a20202020202020202020202020202020737472696e6720766f7465556e6974203d20766f7465735b695d2e766f7465724f7267556e697428293b0a20202020202020202020202020202020737472696e6720766f74654e616d65203d20766f7465735b695d2e766f746572436f6d6d6f6e4e616d6528293b0a2020202020202020202020202020202076616c696461746f72566f74654d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d5b766f74654f72675d5b766f7465556e69745d5b766f74654e616d655d203d20303b0a20202020202020202020202020202020766f7465735b695d203d204d65726361746156616c696461746f72566f74652861646472657373283029293b0a2020202020202020202020207d0a20202020202020202020202076616c696461746f72566f7465735b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d2e6c656e677468203d20303b0a20202020202020202020202076616c696461746f72566f7465436f756e744d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d203d20303b0a202020202020202020202020762e6465616374697661746528293b0a20202020202020202020202076616c696461746f724d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d203d204d65726361746156616c696461746f722861646472657373283029293b0a20202020202020202020202076616c696461746f72436f756e742d2d3b0a202020202020202020202020656d69742056616c696461746f7252656d6f766564285f6f72672c205f6f7267556e69742c205f636f6d6d6f6e4e616d65293b0a20202020202020207d0a202020207d0a202020200a2020202066756e6374696f6e20766f7465546f41646441646d696e28737472696e67205f6f72672c20737472696e67205f6f7267556e69742c20737472696e67205f636f6d6d6f6e4e616d6529207b0a202020202020202043657274696669636174652063203d2043657274696669636174655265676973747279286164647265737328307835303929292e67657455736572436572742874782e6f726967696e293b0a202020202020202072657175697265286164647265737328632920213d20616464726573732830292c2022566f74696e6720746f206164642061206e6574776f726b2061646d696e20726571756972657320686176696e6720612076616c696420582e35303920636572746966696361746522293b0a20202020202020207265717569726528632e697356616c696428292c2022566f74696e6720746f2061646420616e2061646d696e20726571756972657320686176696e6720612076616c696420582e35303920636572746966696361746522293b0a2020202020202020737472696e67206f726967696e4f7267203d20632e6f7267616e697a6174696f6e28293b0a2020202020202020737472696e67206f726967696e556e6974203d20632e6f7267616e697a6174696f6e616c556e697428293b0a2020202020202020737472696e67206f726967696e4e616d65203d20632e636f6d6d6f6e4e616d6528293b0a0a20202020202020204d65726361746141646d696e2061203d2061646d696e4d61705b6f726967696e4f72675d5b6f726967696e556e69745d5b6f726967696e4e616d655d3b0a202020202020202072657175697265286164647265737328612920213d20616464726573732830292c20224f6e6c792072656769737465726564206e6574776f726b2061646d696e732063616e20766f746520666f722061646d696e7322293b0a20202020202020207265717569726528612e697341637469766528292c20224f6e6c792072656769737465726564206e6574776f726b2061646d696e732063616e20766f746520666f722061646d696e7322293b0a20202020202020200a20202020202020204d65726361746141646d696e2076203d2061646d696e4d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d3b0a2020202020202020726571756972652861646472657373287629203d3d20616464726573732830292c2022566f74657320746f206164642063616e6e6f7420626520636f756e74656420666f722063757272656e742061646d696e7322293b0a20202020202020200a202020202020202075696e7420766f7465496e646578203d2061646d696e566f74654d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d5b6f726967696e4f72675d5b6f726967696e556e69745d5b6f726967696e4e616d655d3b0a20202020202020207265717569726528766f7465496e646578203d3d20302c2022566f746520746f2061646420616c7265616479206361737420666f722022202b205f6f7267202b20222022202b205f6f7267556e6974202b20222022202b205f636f6d6d6f6e4e616d65293b0a20202020202020204d65726361746141646d696e566f7465206e6577566f7465203d206e6577204d65726361746141646d696e566f7465286f726967696e4f72672c206f726967696e556e69742c206f726967696e4e616d652c205f6f72672c205f6f7267556e69742c205f636f6d6d6f6e4e616d652c2074727565293b0a202020202020202075696e7420766f7465436f756e74203d2061646d696e566f7465436f756e744d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d202b20313b0a202020202020202061646d696e566f7465436f756e744d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d203d20766f7465436f756e743b0a202020202020202061646d696e566f7465735b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d2e70757368286e6577566f7465293b0a202020202020202061646d696e566f74654d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d5b6f726967696e4f72675d5b6f726967696e556e69745d5b6f726967696e4e616d655d203d2061646d696e566f7465735b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d2e6c656e6774683b0a0a202020202020202075696e74206e6577566f7465436f756e74203d2061646d696e566f7465436f756e744d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d3b0a2020202020202020696620286e6577566f7465436f756e74203e3d20282832202a2061646d696e436f756e7429202f203329202b203129207b0a2020202020202020202020204d65726361746141646d696e566f74655b5d20766f746573203d2061646d696e566f7465735b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d3b0a202020202020202020202020666f72202875696e742069203d20303b2069203c20766f7465732e6c656e6774683b20692b2b29207b0a20202020202020202020202020202020766f7465735b695d2e66696e616c697a6528293b0a20202020202020202020202020202020737472696e6720766f74654f7267203d20766f7465735b695d2e766f7465724f726728293b0a20202020202020202020202020202020737472696e6720766f7465556e6974203d20766f7465735b695d2e766f7465724f7267556e697428293b0a20202020202020202020202020202020737472696e6720766f74654e616d65203d20766f7465735b695d2e766f746572436f6d6d6f6e4e616d6528293b0a2020202020202020202020202020202061646d696e566f74654d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d5b766f74654f72675d5b766f7465556e69745d5b766f74654e616d655d203d20303b0a20202020202020202020202020202020766f7465735b695d203d204d65726361746141646d696e566f74652861646472657373283029293b0a2020202020202020202020207d0a20202020202020202020202061646d696e566f7465735b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d2e6c656e677468203d20303b0a20202020202020202020202061646d696e566f7465436f756e744d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d203d20303b0a2020202020202020202020204d65726361746141646d696e206e657741646d696e203d206e6577204d65726361746141646d696e285f6f72672c205f6f7267556e69742c205f636f6d6d6f6e4e616d65293b0a20202020202020202020202061646d696e4d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d203d206e657741646d696e3b0a20202020202020202020202061646d696e436f756e742b2b3b0a20202020202020207d0a202020207d0a202020200a2020202066756e6374696f6e20766f7465546f52656d6f766541646d696e28737472696e67205f6f72672c20737472696e67205f6f7267556e69742c20737472696e67205f636f6d6d6f6e4e616d6529207b0a202020202020202043657274696669636174652063203d2043657274696669636174655265676973747279286164647265737328307835303929292e67657455736572436572742874782e6f726967696e293b0a202020202020202072657175697265286164647265737328632920213d20616464726573732830292c2022566f74696e6720746f2061646420616e2061646d696e20726571756972657320686176696e6720612076616c696420582e35303920636572746966696361746522293b0a20202020202020207265717569726528632e697356616c696428292c2022566f74696e6720746f2061646420616e2061646d696e20726571756972657320686176696e6720612076616c696420582e35303920636572746966696361746522293b0a2020202020202020737472696e67206f726967696e4f7267203d20632e6f7267616e697a6174696f6e28293b0a2020202020202020737472696e67206f726967696e556e6974203d20632e6f7267616e697a6174696f6e616c556e697428293b0a2020202020202020737472696e67206f726967696e4e616d65203d20632e636f6d6d6f6e4e616d6528293b0a0a20202020202020204d65726361746141646d696e2061203d2061646d696e4d61705b6f726967696e4f72675d5b6f726967696e556e69745d5b6f726967696e4e616d655d3b0a202020202020202072657175697265286164647265737328612920213d20616464726573732830292c20224f6e6c792072656769737465726564206e6574776f726b2061646d696e732063616e20766f746520666f722061646d696e7322293b0a20202020202020207265717569726528612e697341637469766528292c20224f6e6c792072656769737465726564206e6574776f726b2061646d696e732063616e20766f746520666f722061646d696e7322293b0a20202020202020200a20202020202020204d65726361746141646d696e2076203d2061646d696e4d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d3b0a202020202020202072657175697265286164647265737328762920213d20616464726573732830292c2022566f74657320746f2072656d6f76652063616e206f6e6c7920626520636f756e74656420666f722063757272656e742061646d696e7322293b0a20202020202020200a202020202020202075696e7420766f7465496e646578203d2061646d696e566f74654d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d5b6f726967696e4f72675d5b6f726967696e556e69745d5b6f726967696e4e616d655d3b0a20202020202020207265717569726528766f7465496e646578203d3d20302c2022566f746520746f2061646420616c7265616479206361737420666f722022202b205f6f7267202b20222022202b205f6f7267556e6974202b20222022202b205f636f6d6d6f6e4e616d65293b0a20202020202020204d65726361746141646d696e566f7465206e6577566f7465203d206e6577204d65726361746141646d696e566f7465286f726967696e4f72672c206f726967696e556e69742c206f726967696e4e616d652c205f6f72672c205f6f7267556e69742c205f636f6d6d6f6e4e616d652c2066616c7365293b0a202020202020202075696e7420766f7465436f756e74203d2061646d696e566f7465436f756e744d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d202b20313b0a202020202020202061646d696e566f7465436f756e744d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d203d20766f7465436f756e743b0a202020202020202061646d696e566f7465735b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d2e70757368286e6577566f7465293b0a202020202020202061646d696e566f74654d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d5b6f726967696e4f72675d5b6f726967696e556e69745d5b6f726967696e4e616d655d203d2061646d696e566f7465735b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d2e6c656e6774683b0a0a202020202020202075696e74206e6577566f7465436f756e74203d2061646d696e566f7465436f756e744d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d3b0a2020202020202020696620286e6577566f7465436f756e74203e3d20282832202a2061646d696e436f756e7429202f203329202b203129207b0a2020202020202020202020204d65726361746141646d696e566f74655b5d20766f746573203d2061646d696e566f7465735b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d3b0a202020202020202020202020666f72202875696e742069203d20303b2069203c20766f7465732e6c656e6774683b20692b2b29207b0a20202020202020202020202020202020766f7465735b695d2e66696e616c697a6528293b0a20202020202020202020202020202020737472696e6720766f74654f7267203d20766f7465735b695d2e766f7465724f726728293b0a20202020202020202020202020202020737472696e6720766f7465556e6974203d20766f7465735b695d2e766f7465724f7267556e697428293b0a20202020202020202020202020202020737472696e6720766f74654e616d65203d20766f7465735b695d2e766f746572436f6d6d6f6e4e616d6528293b0a2020202020202020202020202020202061646d696e566f74654d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d5b766f74654f72675d5b766f7465556e69745d5b766f74654e616d655d203d20303b0a20202020202020202020202020202020766f7465735b695d203d204d65726361746141646d696e566f74652861646472657373283029293b0a2020202020202020202020207d0a20202020202020202020202061646d696e566f7465735b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d2e6c656e677468203d20303b0a20202020202020202020202061646d696e566f7465436f756e744d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d203d20303b0a202020202020202020202020762e6465616374697661746528293b0a20202020202020202020202061646d696e4d61705b5f6f72675d5b5f6f7267556e69745d5b5f636f6d6d6f6e4e616d655d203d204d65726361746141646d696e2861646472657373283029293b0a20202020202020202020202061646d696e436f756e742d2d3b0a20202020202020207d0a202020207d0a7d"}],"transactionRoot":"56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","receiptsRoot":"56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","logBloom":"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":8192,"number":0,"gasLimit":22517998136852480000000000000000,"gasUsed":0,"timestamp":"1970-01-01T00:00:00Z","extraData":0,"mixHash":"0000000000000000000000000000000000000000000000000000000000000000","nonce":42}