@verify-network/contracts 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +114 -2
  3. package/contracts/IDirectVrfReceiver.sol +17 -0
  4. package/contracts/IVerifyNetworkRouter.sol +40 -0
  5. package/contracts/IVrfReceiver.sol +14 -0
  6. package/dist/abi/Balances.d.ts +32 -0
  7. package/dist/abi/Balances.js +36 -0
  8. package/dist/abi/BalancesFacet.d.ts +110 -0
  9. package/dist/abi/BalancesFacet.js +130 -0
  10. package/dist/abi/Config.d.ts +12 -0
  11. package/dist/abi/Config.js +12 -0
  12. package/dist/abi/ConfigFacet.d.ts +360 -0
  13. package/dist/abi/ConfigFacet.js +412 -0
  14. package/dist/abi/ECVRFVerifier.d.ts +34 -0
  15. package/dist/abi/ECVRFVerifier.js +38 -0
  16. package/dist/abi/IDirectVrfReceiver.d.ts +26 -0
  17. package/dist/abi/IDirectVrfReceiver.js +31 -0
  18. package/dist/abi/IECVRFVerifier.d.ts +30 -0
  19. package/dist/abi/IECVRFVerifier.js +34 -0
  20. package/dist/abi/IEnclaveAttestationVerifier.d.ts +26 -0
  21. package/dist/abi/IEnclaveAttestationVerifier.js +30 -0
  22. package/dist/abi/INitroEnclaveVerifier.d.ts +806 -0
  23. package/dist/abi/INitroEnclaveVerifier.js +941 -0
  24. package/dist/abi/INitroProofVerifier.d.ts +81 -0
  25. package/dist/abi/INitroProofVerifier.js +95 -0
  26. package/dist/abi/ISP1Verifier.d.ts +22 -0
  27. package/dist/abi/ISP1Verifier.js +26 -0
  28. package/dist/abi/ISP1VerifierWithHash.d.ts +32 -0
  29. package/dist/abi/ISP1VerifierWithHash.js +36 -0
  30. package/dist/abi/IVerifyNetworkRouter.d.ts +74 -0
  31. package/dist/abi/IVerifyNetworkRouter.js +80 -0
  32. package/dist/abi/IVrfReceiver.d.ts +22 -0
  33. package/dist/abi/IVrfReceiver.js +26 -0
  34. package/dist/abi/NitroAttestationVerifier.d.ts +252 -0
  35. package/dist/abi/NitroAttestationVerifier.js +286 -0
  36. package/dist/abi/NitroEnclaveVerifier.d.ts +985 -0
  37. package/dist/abi/NitroEnclaveVerifier.js +1146 -0
  38. package/dist/abi/Nodes.d.ts +60 -0
  39. package/dist/abi/Nodes.js +74 -0
  40. package/dist/abi/NodesFacet.d.ts +449 -0
  41. package/dist/abi/NodesFacet.js +513 -0
  42. package/dist/abi/Ownable.d.ts +117 -0
  43. package/dist/abi/Ownable.js +132 -0
  44. package/dist/abi/Requests.d.ts +16 -0
  45. package/dist/abi/Requests.js +16 -0
  46. package/dist/abi/Router.d.ts +343 -0
  47. package/dist/abi/Router.js +405 -0
  48. package/dist/abi/RouterInit.d.ts +40 -0
  49. package/dist/abi/RouterInit.js +45 -0
  50. package/dist/abi/SP1Verifier.d.ts +140 -0
  51. package/dist/abi/SP1Verifier.js +159 -0
  52. package/dist/abi/TrustedNodeEnclaveKeyVerifier.d.ts +130 -0
  53. package/dist/abi/TrustedNodeEnclaveKeyVerifier.js +146 -0
  54. package/dist/abi/VRF.d.ts +74 -0
  55. package/dist/abi/VRF.js +82 -0
  56. package/dist/abi/Verifier.d.ts +54 -0
  57. package/dist/abi/Verifier.js +60 -0
  58. package/dist/abi/VrfFacet.d.ts +906 -0
  59. package/dist/abi/VrfFacet.js +1090 -0
  60. package/dist/artifacts.d.ts +2385 -0
  61. package/dist/artifacts.js +78 -0
  62. package/dist/diamond.d.ts +51 -0
  63. package/dist/diamond.js +60 -0
  64. package/package.json +50 -4
@@ -0,0 +1,78 @@
1
+ import BalancesFacet_default from "./abi/BalancesFacet.js";
2
+ import ConfigFacet_default from "./abi/ConfigFacet.js";
3
+ import ECVRFVerifier_default from "./abi/ECVRFVerifier.js";
4
+ import NodesFacet_default from "./abi/NodesFacet.js";
5
+ import Router_default from "./abi/Router.js";
6
+ import RouterInit_default from "./abi/RouterInit.js";
7
+ import TrustedNodeEnclaveKeyVerifier_default from "./abi/TrustedNodeEnclaveKeyVerifier.js";
8
+ import VrfFacet_default from "./abi/VrfFacet.js";
9
+ //#region bytecode/BalancesFacet.ts
10
+ const bytecode$7 = "0x608080604052346015576102b5908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806370a0823114610206578063f340fa01146101945763f3fef3a31461003a575f80fd5b3461019057604036600319011261019057610053610249565b60243590335f525f5160206102605f395f51905f5260205260405f20548083116101755782810390811161016157335f525f5160206102605f395f51905f5260205260405f20555f80808085855af13d1561015c573d67ffffffffffffffff81116101485760405190601f8101601f19908116603f0116820167ffffffffffffffff8111838210176101485760405281525f60203d92013e5b1561012b576040519182526001600160a01b03169033907fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb90602090a3005b630e21dcbb60e11b5f5260018060a01b031660045260245260445ffd5b634e487b7160e01b5f52604160045260245ffd5b6100ec565b634e487b7160e01b5f52601160045260245ffd5b905063db42144d60e01b5f523360045260245260445260645ffd5b5f80fd5b6020366003190112610190576001600160a01b036101b0610249565b16805f525f5160206102605f395f51905f5260205260405f208054903482018092116101615755604051903482527f8752a472e571a816aea92eec8dae9baf628e840f4929fbcc2d155e6233ff68a760203393a3005b346101905760203660031901126101905761021f610249565b60018060a01b03165f525f5160206102605f395f51905f52602052602060405f2054604051908152f35b600435906001600160a01b03821682036101905756fe20d409567c11d0919b4e92edadabde986fedc1be9872cbd35d9bd2797c19df01a26469706673582212203ae267ea67fb24b8a8bceb48d2a60f59254303d14787f01c3b1413cf180eb80f64736f6c63430008240033";
11
+ //#endregion
12
+ //#region bytecode/ConfigFacet.ts
13
+ const bytecode$6 = "0x60808060405234601557610b5c908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f5f3560e01c8063248a9ca3146108255780632f2ff15d1461071a5780633c36ccb614610541578063611a212e146105045780637ce914111461044057806382f6f608146103a55780638bb9c5bf146103875780639010d07c1461031957806391d14854146102c2578063a9b90c9714610223578063b4b3c5a0146101db578063ca15c873146101a5578063d547741f14610160578063de44e94a146101185763f73ad1ee146100bf575f80fd5b34610115576020366003190112610115576004356100db610907565b8015610106577f932f5a960894e1533b50dc61a5ed814ad5141d345b5c48c89b71c631b170bc6b5580f35b631d87408560e31b8252600482fd5b80fd5b50346101155780600319360112610115577f932f5a960894e1533b50dc61a5ed814ad5141d345b5c48c89b71c631b170bc6d546040516001600160a01b039091168152602090f35b5034610115576101a261017236610864565b9061019d610198825f525f516020610b075f395f51905f52602052600260405f20015490565b610953565b6109ca565b80f35b503461011557602036600319011261011557604060209160043581525f516020610b075f395f51905f5283522054604051908152f35b50346101155780600319360112610115577f932f5a960894e1533b50dc61a5ed814ad5141d345b5c48c89b71c631b170bc6c546040516001600160a01b039091168152602090f35b5034610115576020366003190112610115576004356001600160a01b038116908190036102be57610252610907565b6001600160a01b0390610264906109a0565b166bffffffffffffffffffffffff60a01b7f932f5a960894e1533b50dc61a5ed814ad5141d345b5c48c89b71c631b170bc6d5416177f932f5a960894e1533b50dc61a5ed814ad5141d345b5c48c89b71c631b170bc6d5580f35b5080fd5b50346101155761030f60209160406102d936610864565b9083525f516020610b075f395f51905f52855291206001600160a01b039091165f90815260019091016020526040902054151590565b6040519015158152f35b5034610115576040366003190112610115576024359060043581525f516020610b075f395f51905f526020526040812090815483101561037857602061035f8484610add565b905460405160039290921b1c6001600160a01b03168152f35b63e637bf3b60e01b8152600490fd5b5034610115576020366003190112610115576101a2336004356109ca565b5034610115576020366003190112610115576004356001600160a01b038116908190036102be576103d4610907565b6001600160a01b03906103e6906109a0565b166bffffffffffffffffffffffff60a01b7f932f5a960894e1533b50dc61a5ed814ad5141d345b5c48c89b71c631b170bc6c5416177f932f5a960894e1533b50dc61a5ed814ad5141d345b5c48c89b71c631b170bc6c5580f35b5034610115578060031936011261011557608061045b6108e7565b828152826020820152826040820152826060820152015260a061047c6108e7565b63ffffffff7f932f5a960894e1533b50dc61a5ed814ad5141d345b5c48c89b71c631b170bc6a548161ffff8216938481528160208201818560101c168152816040840191818760301c1683528160806060870196828a60501c168852019760701c16875260405198895251166020880152511660408601525116606084015251166080820152f35b503461011557806003193601126101155760207f932f5a960894e1533b50dc61a5ed814ad5141d345b5c48c89b71c631b170bc6b54604051908152f35b50346101155760a03660031901126101155761055b610907565b61056361088a565b63ffffffff8061057161089d565b1691161161070b5762d59f8063ffffffff61058a61089d565b16116106e457606461ffff61059d6108d6565b16116106c1576105ab6108b0565b63ffffffff806105b96108c3565b169116106106935761ffff6105cc6108d6565b167f932f5a960894e1533b50dc61a5ed814ad5141d345b5c48c89b71c631b170bc6a549065ffffffff00006105ff6108b0565b60101b169069ffffffff0000000000006106176108c3565b60301b169063ffffffff60501b61062c61088a565b60501b169263ffffffff60701b61064161089d565b60701b169463ffffffff60701b199263ffffffff60501b199169ffffffffffffffffffff1916171617161717177f932f5a960894e1533b50dc61a5ed814ad5141d345b5c48c89b71c631b170bc6a5580f35b60449063ffffffff6106a36108b0565b816106ac6108c3565b6376c534e360e01b8552911660045216602452fd5b60449061ffff6106cf6108d6565b634d7b550560e01b8352166004526064602452fd5b60449063ffffffff6106f461089d565b63bdf0b65f60e01b83521660045262d59f80602452fd5b6302b87b6760e01b8152600490fd5b346108215761072836610864565b61074d610198835f525f516020610b075f395f51905f52602052600260405f20015490565b815f525f516020610b075f395f51905f5260205260405f209060018060a01b03169061078782826001915f520160205260405f2054151590565b156107b6575b5033917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4005b80546801000000000000000081101561080d576107f36107dd826001869401855584610add565b819391549060031b91821b915f19901b19161790565b90556001815491835f520160205260405f2055600161078d565b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b3461082157602036600319011261082157602061085c6004355f525f516020610b075f395f51905f52602052600260405f20015490565b604051908152f35b604090600319011261082157600435906024356001600160a01b03811681036108215790565b60643563ffffffff811681036108215790565b60843563ffffffff811681036108215790565b60243563ffffffff811681036108215790565b60443563ffffffff811681036108215790565b60043561ffff811681036108215790565b6040519060a0820182811067ffffffffffffffff82111761080d57604052565b335f9081527f66284c0762af713e202e0524bbf74efcdaa2baaf6286c0a3c4935fba6071c33160205260409020541561093c57565b630c4705d560e01b5f525f6004523360245260445ffd5b805f525f516020610b075f395f51905f526020526109823360405f206001915f520160205260405f2054151590565b1561098a5750565b630c4705d560e01b5f526004523360245260445ffd5b803b156109aa5790565b632f19278760e11b5f9081526001600160a01b0391909116600452602490fd5b90811580610acb575b610abc57815f525f516020610b075f395f51905f5260205260405f209060018060a01b0316906001810190825f528160205260405f205480610a3b575b50505033917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4565b610a495f1983540183610add565b90549060031b1c80610a616107dd5f19850186610add565b90555f528260205260405f205580548015610aa8575f190190610a848282610add565b8154905f199060031b1b1916905555815f526020525f604081205560015f80610a10565b634e487b7160e01b5f52603160045260245ffd5b637c35a93960e01b5f5260045ffd5b506001600160a01b03811633146109d3565b8054821015610af2575f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffdfe409a779b06f7ed4482e4a4bbaf0e0febf249036642c5bc5fb6c71bf2a72d5d00a26469706673582212204f63210ee3a949389c73ced027f424cfdc96e1163c31673d19e8dbe059b6189f64736f6c63430008240033";
14
+ //#endregion
15
+ //#region bytecode/ECVRFVerifier.ts
16
+ const bytecode$5 = "0x608080604052346015576111ff908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c63bbe95b4c14610024575f80fd5b346100a25760e03660031901126100a257366044116100a2573660c4116100a25760c43567ffffffffffffffff81116100a257366023820112156100a257806004013567ffffffffffffffff81116100a25736602482840101116100a257602461008e92016101af565b604080519215158352602083019190915290f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176100dc57604052565b6100a6565b906100ef60405192836100ba565b565b9190604051926101026040856100ba565b8390604081019283116100a257905b82821061011d57505050565b8135815260209182019101610111565b91906040519261013e6080856100ba565b8390608081019283116100a257905b82821061015957505050565b813581526020918201910161014d565b92919267ffffffffffffffff82116100dc5760405191610193601f8201601f1916602001846100ba565b8294818452818301116100a2578281602093845f960137010152565b906101ca6101d0926101c23660046100f1565b923691610169565b9061034f565b9091156102ab5760a4359170014551231950b75fc4402da1732fc9bebe1983101561029c576102389261028a916102869181608435956102238161021b600435602435908b88610409565b96909561049b565b604435998a99929691926064359a8b9161049b565b92909161024560406100e1565b968752602087015261025760806100e1565b9687526020870152604086015260608501526102743660046100f1565b9061028036604461012d565b926104a9565b1590565b61029c57610297916105ae565b600191565b6309bde33960e01b5f5260045ffd5b50505f905f90565b805191908290602001825e015f815290565b607f60f91b8152600160f81b60018201526102ee92916102e891600201906102b3565b906102b3565b90565b634e487b7160e01b5f52601160045260245ffd5b60ff1660ff81146103165760010190565b6102f1565b61032890600293926102b3565b60f89190911b6001600160f81b03191681525f60018201520190565b6040513d5f823e3d90fd5b6103696103899161036281519160200190565b519061061f565b61037b604051938492602084016102c5565b03601f1981018352826100ba565b5f5b603260ff8216106103a05750505f905f905f90565b60205f6103c66040516103ba8161037b878988840161031b565b604051918280926102b3565b039060025afa15610404575f516103dc81610656565b6103e681836106b8565b6103fa5750506103f590610305565b61038b565b6001949193509150565b610344565b61046e9192936104666104607f483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b87f79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179861046095610a06565b91610a8a565b959094610a06565b6401000003d01903926401000003d019841161031657610497936401000003d019900692610957565b9091565b916104609161049793610a06565b949193929060608201805196906104e161028660408601998a51996104d081519160200190565b518a519160208c019c8d5194610795565b908115610590575b508015610563575b610558576fffffffffffffffffffffffffffffffff956105509561053061054a9680519061051f8160200190565b516040820151916060015192610728565b95909461053f82519260200190565b5192519351946108ce565b60801c90565b915191161490565b505050505050505f90565b5061058b610286885185516105788760200190565b5160408901519160608a015b5193610867565b6104f1565b6105a891506102869051865185856105848a60200190565b5f6104e9565b6105fb6105e96103ba60016105c66020965f9661061f565b604051607f60f91b88820152600360f81b602182015293849160228301906102b3565b86815203601e198101845201826100ba565b039060025afa15610404575f5190565b634e487b7160e01b5f52601260045260245ffd5b906001166002019081600211610316576040519160ff60f81b9060f81b1660208301526021820152602181526102ee6041826100ba565b61068b9063400000f4600160fe1b03906401000003d01990816007815f840908906401000003d0199081818009900908610c87565b60028101808211610316576001166106a05790565b6401000003d019036401000003d01981116103165790565b80158015610718575b8015610710575b8015610700575b6106fa576401000003d01990818180090960076401000003d0199108906401000003d0199080091490565b50505f90565b506401000003d0198210156106cf565b5081156106c8565b506401000003d0198110156106c1565b91926401000003d01903916401000003d019831161031657610497936401000003d019935f9390859006926109ba565b70014551231950b75fc4402da1732fc9bebe19039070014551231950b75fc4402da1732fc9bebe19821161031657565b9190820391821161031657565b9160ff9160209460016107c96107ae5f979a999a610758565b70014551231950b75fc4402da1732fc9bebe19900693610758565b70014551231950b75fc4402da1732fc9bebe19900691161515851461085f57601c925b60405194859460808601948370014551231950b75fc4402da1732fc9bebe1991098652168785015280604085015270014551231950b75fc4402da1732fc9bebe1991096060830152838052039060015afa156104045761084e905f5192610c1a565b6001600160a01b0390811691161490565b601b926107ec565b9293926020925f926080929091600116156108c657601c915b60ff60405193868552168684015280604084015270014551231950b75fc4402da1732fc9bebe199109606082015282805260015afa156104045761084e905f5192610c1a565b601b91610880565b6102e8946102e85f986102e861091060209c61090a6109339c6109046103ba9c6108fe60019d9c6105e99c61061f565b9b61061f565b9761061f565b9361061f565b93604051998a97607f60f91b8f8a01528960f91b60218a015260228901906102b3565b039060025afa15610404575f51806040515290565b8115610952570490565b61060b565b92909180840361099d57506401000003d0199082086109785750505f905f90565b610497915f61098e926401000003d019926110bb565b905b6401000003d01992610b86565b610497936109b4936401000003d019939291610d91565b90610990565b939493909290918083036109f65750831561095257839083086109e157505050505f905f90565b610497936109f09284926110bb565b91610b86565b61049795506109f0938593610d91565b929091926001908015610a80575f94600194869392805b610a2a5750505050929190565b60018116610a55575b905f610a4c9260011c9485946401000003d01993611131565b92909293610a1d565b93610a71908484845f9a610a4c969c6401000003d01995610f27565b90989097509094909150610a33565b5050909190600190565b919291908315158481610b75575b5080610b6d575b15610b37575f936401000003d019856001835b610ae057505050506401000003d01984800991826401000003d0199109936401000003d01992839109900990565b610aed8484999599610948565b92819261095257610b29610b14610b2f936401000003d0199087096401000003d019610788565b5f966401000003d019919008939980956111b6565b90610788565b929083610ab2565b60405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b210373ab6b132b960911b6044820152606490fd5b506001610a9f565b6401000003d019141590505f610a98565b91939291841515838682610c0f575b505080610c06575b15610b37575f9483159081856001835b610bca575050505061095257829081808780098092099509900990565b610bd784839b959b610948565b91819361095257610b2989610bf281610bfe95870982610788565b5f9708949b80946111b6565b929183610bad565b50821515610b9d565b14159050835f610b95565b6040519160208301918252604083015260408252610c396060836100ba565b905190206001600160a01b031690565b15610c5057565b60405162461bcd60e51b815260206004820152600f60248201526e4d6f64756c7573206973207a65726f60881b6044820152606490fd5b610c916001610c49565b80156106fa578115610d2857600191600160ff1b9190825b610cb35750505090565b9091926401000003d019908483161515840a906401000003d019908009096401000003d01990600185901c83161515840a9082908009096401000003d01990600285901c83161515840a9082908009096401000003d01990600385901c83161515840a9082908009099260041c919082610ca9565b5050600190565b60405190610d3e6080836100ba565b6080368337565b15610d4c57565b60405162461bcd60e51b815260206004820152601e60248201527f557365206a6163446f75626c652066756e6374696f6e20696e737465616400006044820152606490fd5b9391909492841580610f1f575b610f1357811580610f0b575b610f0057610db6610d2f565b958315610952578380938160018009808a529882808b6001099460208301958652604083018c81529a82808e6001099160608601928352610df760806100e1565b9d5190098c5251900960208a0152519009604087015251900960608401528251936040840194855114801590610eee575b610e3190610d45565b81610e3a610d2f565b9551610e47865183610788565b90088552816060850151610ee38288818060208b0195610e68875183610788565b900899602083019a8b5281808c8180808089518a5190099360408a01948552610e988286518c5190099a60600190565b998a52518009610ea9895183610788565b9008610ebf828088518651900960020983610788565b90089d51935190519009610ed38d83610788565b9008900993519051900983610788565b900894510991929190565b50602084015160608501511415610e28565b505050909190600190565b508015610daa565b90945092506001919050565b508515610d9e565b96949695939091958015806110b3575b6110a75783158061109f575b61109457610f4f610d2f565b9285156109525788948694858093818c800983528183518d0995602084019687528280604086019b81818009808e5290099160608601928352610f9260806100e1565b9b5190098a5251900960208801525190096040850152519009606082015281815195610fbe8360400190565b96875114801590611082575b610fd390610d45565b81610fdc610d2f565b9751610fe9855183610788565b90088752816060840151611075828a818060208a019561100a875183610788565b90089860208301998a5281808b8180808089518a5190099360408a0194855261103a8286518c5190099a60600190565b998a5251800961104b895183610788565b9008611061828088518651900960020983610788565b90089c51935190519009610ed38c83610788565b9008965192969509900990565b50602083015160608401511415610fca565b935050945050929190565b508115610f43565b50959450509050929190565b508215610f37565b9391939290928115610952578180858009918180808060018009998180808988096004099b80099009928009600309088286800883038381116103165783908183800908808403928484116103165784809180096008098403848111610316578460019381809681959b08900908940960020990565b90939194929480156111ae57821561095257828086800992818080808680099a8180808a88096004099c800990099280096003090891838780088403848111610316578490818580090890818503908582116103165785809180096008098503908582116103165785948580949281939b08900908940960020990565b909450919050565b818102929181159184041417156103165756fea2646970667358221220472f744a2363fd92f99dba3ecbbb97153b44c6d04ec4a801a06dee78e0d4697c64736f6c63430008240033";
17
+ //#endregion
18
+ //#region bytecode/NodesFacet.ts
19
+ const bytecode$4 = "0x60808060405234601557611251908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c90816307f1965114610e0e5750806328cb1e3814610c665780632eb1ef5c14610c335780634262336014610c0757806345848851146109eb5780634a4c84d3146108d55780634b893642146107bb5780635e8af8d21461072d5780637534081514610704578063788fa386146106c8578063a26fd1c314610328578063bffbe61c146102225763c23a5cea146100ab575f80fd5b3461021e57602036600319011261021e576100c4610ece565b6100cd81611088565b5460f81c600381101561020a576002036101ea5764ffffffffff6100f082610f88565b54166201518081018091116101d6578042106101b4575061011081610fc0565b546001600160a01b0382165f8181525f5160206111dc5f395f51905f52602052604081208190559192909161014482610fc0565b5561014e81610ff8565b5f5b600281106101a757505061016390610f88565b805464ffffffffff1916905561017982336110cd565b6040519182527fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda360203393a3005b5f82820155600101610150565b63759dfc1560e01b5f9081526001600160a01b03909216600452602452604490fd5b634e487b7160e01b5f52601160045260245ffd5b6364f5c6e160e01b5f9081526001600160a01b0391909116600452602490fd5b634e487b7160e01b5f52602160045260245ffd5b5f80fd5b3461021e57602036600319011261021e5761023b610ece565b5f608060405161024a81610f12565b828152826020820152826040820152826060820152015260018060a01b03165f525f5160206111dc5f395f51905f5260205260405f206040519061028d82610f12565b5460018060a01b03811682526020820164ffffffffff8260a01c168152604083019163ffffffff8160c81c168352606084019061ffff8160e81c16825260f81c916080850193600384101561020a5764ffffffffff63ffffffff9261ffff9587526040519760018060a01b0390511688525116602087015251166040850152511660608301525190600382101561020a5760a0916080820152f35b606036600319011261021e573660441161021e5760443567ffffffffffffffff811161021e5761035c903690600401610ee4565b610364611138565b156106b9577f932f5a960894e1533b50dc61a5ed814ad5141d345b5c48c89b71c631b170bc6b548034036106a3576103f86020848460018060a01b037f932f5a960894e1533b50dc61a5ed814ad5141d345b5c48c89b71c631b170bc6c5416905f60405180968195829463771afe0160e11b8452336004850152604060046024860137608060648501526084840191611068565b03925af1908115610698575f9161065d575b501561064e57604051602081016004358152602435604083015260408252610433606083610f2e565b905190206001600160a01b03165f8181525f5160206111dc5f395f51905f52602052604090205460f81c600381101561020a5761063c5760405161047681610f12565b3381526020810164ffffffffff4216815260408201905f8252606083015f8152608084019260018452855f525f5160206111dc5f395f51905f5260205260405f209460018060a01b039051169285549064ffffffffff60a01b905160a01b169163ffffffff60c81b905160c81b169261ffff60e81b905160e81b169361ffff60e81b199162ffffff60e81b161716171717825551600381101561020a5781546001600160f81b031660f89190911b6001600160f81b0319161790555f5160206111fc5f395f51905f525463ffffffff9081169061055283610f50565b911663ffffffff198254161790555f5160206111fc5f395f51905f52546801000000000000000081101561062857816105a08260016105c494015f5160206111fc5f395f51905f5255611197565b81546001600160a01b0393841660039290921b91821b9390911b1916919091179055565b346105ce82610fc0565b556105d881610ff8565b60045f5b600281106106145783604051903482527ff22e9632bbbe87913fdb2f413389be6b979d648eebfe4dc4d1c9fa2b14b84d6060203393a3005b6001906020833593019281850155016105dc565b634e487b7160e01b5f52604160045260245ffd5b63295548e560e01b5f5260045260245ffd5b638614ce0960e01b5f5260045ffd5b90506020813d602011610690575b8161067860209383610f2e565b8101031261021e5751801515810361021e578161040a565b3d915061066b565b6040513d5f823e3d90fd5b630239dc1360e61b5f523460045260245260445ffd5b63798be76760e01b5f5260045ffd5b3461021e575f36600319011261021e5760207f7103b4d0a53003ec91f983abf6fa980e867f1e66bd497d2fb88c0b44a170b76854604051908152f35b3461021e575f36600319011261021e5760205f5160206111fc5f395f51905f5254604051908152f35b3461021e57602036600319011261021e57610746610ece565b6107616040918280516107598282610f2e565b369037610ff8565b8151905f825b600282106107a55750505061077c8282610f2e565b8151905f825b6002821061078f57505050f35b6020806001928551815201930191019091610782565b6001602081928554815201930191019091610767565b3461021e57602036600319011261021e5761080f6107d7610ece565b6001600160a01b03165f9081527f7103b4d0a53003ec91f983abf6fa980e867f1e66bd497d2fb88c0b44a170b76a6020526040902090565b6040515f82549261081f84611030565b9081845260208401946001811690815f146108b85750600114610878575b8460408561084d81870382610f2e565b8151928391602083525180918160208501528484015e5f828201840152601f01601f19168101030190f35b5f90815260208120939250905b80821061089e5750909150810160200161084d8261083d565b919260018160209254838588010152019101909291610885565b60ff191686525050151560051b8201602001905061084d8261083d565b3461021e57604036600319011261021e576108ee610ece565b335f9081527f66284c0762af713e202e0524bbf74efcdaa2baaf6286c0a3c4935fba6071c33160205260409020546024359190156109d4577f7103b4d0a53003ec91f983abf6fa980e867f1e66bd497d2fb88c0b44a170b768548083116109bd578281039081116101d6577f52fec009a7bb363351e19fc7928d085c142e7a33b3d503de4dab2aa393f9ad77916020917f7103b4d0a53003ec91f983abf6fa980e867f1e66bd497d2fb88c0b44a170b768556109aa84826110cd565b6040519384526001600160a01b031692a2005b9050633b7202ef60e21b5f5260045260245260445ffd5b630c4705d560e01b5f525f6004523360245260445ffd5b3461021e57604036600319011261021e57610a04610ece565b60243567ffffffffffffffff811161021e57610a24903690600401610ee4565b90610a2e83611088565b506101008211610bee576001600160a01b0383165f9081527f7103b4d0a53003ec91f983abf6fa980e867f1e66bd497d2fb88c0b44a170b76a6020526040902067ffffffffffffffff831161062857610a878154611030565b601f8111610b9d575b50825f601f8211600114610b0f57917f01731cfe0ef883d89f736657c7a2426b89be634d88ee58657a91db4394e98cfd9391610aff935f91610b04575b508560011b905f198760031b1c19161790555b60405191829160208352339660018060a01b0316956020840191611068565b0390a3005b905082013587610acd565b5f8381526020812092508590601f198216905b818110610b825750917f01731cfe0ef883d89f736657c7a2426b89be634d88ee58657a91db4394e98cfd959391610aff959310610b69575b5050600185811b019055610ae0565b8301355f19600388901b60f8161c191690558680610b5a565b86840135855560019094019360209384019388935001610b22565b83811115610a9057815f5260205f20601f850160051c9060208610610be6575b81601f9101920160051c03905f5b828110610bd9575050610a90565b5f82820155600101610bcb565b5f9150610bbd565b5063859641b160e01b5f5260045261010060245260445ffd5b3461021e57602036600319011261021e576020610c2a610c25610ece565b610fc0565b54604051908152f35b3461021e57602036600319011261021e57602064ffffffffff610c5c610c57610ece565b610f88565b5416604051908152f35b3461021e57602036600319011261021e57610c7f610ece565b610c8881611088565b5460f81c600381101561020a57600103610dee5763ffffffff610caa82610f50565b54165f5160206111fc5f395f51905f52545f1981019081116101d657808203610da4575b50505f5160206111fc5f395f51905f52548015610d90575f1901610cf181611197565b81546001600160a01b0360039290921b82901b19169091555f5160206111fc5f395f51905f529190915581165f8181525f5160206111dc5f395f51905f526020526040902080546001600160f81b0316600160f91b17905590610d5390610f88565b805464ffffffffff19164264ffffffffff1617905533907f25506670d438786dfea1245a3c94cb6d555e9d58ffabbc37e8bd84cce342e4985f80a3005b634e487b7160e01b5f52603160045260245ffd5b610dd9610db563ffffffff92611197565b905460039190911b1c6001600160a01b0316610dd4816105a086611197565b610f50565b911663ffffffff198254161790558180610cce565b6303398f4160e51b5f9081526001600160a01b0391909116600452602490fd5b3461021e575f36600319011261021e575f5160206111fc5f395f51905f5254908181526020810180925f5160206111fc5f395f51905f525f5260205f20905f5b818110610eaf5750505081610e64910382610f2e565b604051918291602083019060208452518091526040830191905f5b818110610e8d575050500390f35b82516001600160a01b0316845285945060209384019390920191600101610e7f565b82546001600160a01b0316845260209093019260019283019201610e4e565b600435906001600160a01b038216820361021e57565b9181601f8401121561021e5782359167ffffffffffffffff831161021e576020838186019501011161021e57565b60a0810190811067ffffffffffffffff82111761062857604052565b90601f8019910116810190811067ffffffffffffffff82111761062857604052565b6001600160a01b03165f9081527f7103b4d0a53003ec91f983abf6fa980e867f1e66bd497d2fb88c0b44a170b7696020526040902090565b6001600160a01b03165f9081527f7103b4d0a53003ec91f983abf6fa980e867f1e66bd497d2fb88c0b44a170b7676020526040902090565b6001600160a01b03165f9081527f7103b4d0a53003ec91f983abf6fa980e867f1e66bd497d2fb88c0b44a170b7656020526040902090565b6001600160a01b03165f9081527f7103b4d0a53003ec91f983abf6fa980e867f1e66bd497d2fb88c0b44a170b7666020526040902090565b90600182811c9216801561105e575b602083101461104a57565b634e487b7160e01b5f52602260045260245ffd5b91607f169161103f565b908060209392818452848401375f828201840152601f01601f1916010190565b6001600160a01b039081165f8181525f5160206111dc5f395f51905f526020526040902080549093921633036110bb5750565b633b63649d60e11b5f5260045260245ffd5b5f80808085855af13d15611133573d67ffffffffffffffff81116106285760405190611103601f8201601f191660200183610f2e565b81525f60203d92013e5b15611116575050565b630e21dcbb60e11b5f5260018060a01b031660045260245260445ffd5b61110d565b60243560043570014551231950b75fc4402da1732fc9bebe198110801590611187575b611181576401000003d019906007908290818180090908906401000003d0199080091490565b50505f90565b506401000003d01982101561115b565b5f5160206111fc5f395f51905f52548110156111c7575f5160206111fc5f395f51905f525f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffdfe7103b4d0a53003ec91f983abf6fa980e867f1e66bd497d2fb88c0b44a170b7637103b4d0a53003ec91f983abf6fa980e867f1e66bd497d2fb88c0b44a170b764a2646970667358221220e9aad1b6417ca49ccbf5c6007d3154b69440621c0bf5bf69417f0cd69ee5f0d864736f6c63430008240033";
20
+ //#endregion
21
+ //#region bytecode/Router.ts
22
+ const bytecode$3 = "0x6080604052346102875761025e6100146102e8565b61002c6100208261033c565b632c40805960e01b9052565b6101d56101c961003c6001610306565b61005661004a60018661034e565b639142376560e01b9052565b632f40adcf60e21b5f525f5160206123845f395f51905f526020527f2de04b09b31861ec8d744fd1bfe2904fc9ab3890fe7ec6d0f7c4b941ed8d5822805460ff191660011790556100bf6100b36100ac83610306565b928661034e565b6307e4c70760e21b9052565b6307e4c70760e21b5f525f5160206123845f395f51905f526020527f6c1339b8848595ebb2d0eb2c445356084ad3fc2fe46b7898f4abf3e0d5b280c2805460ff191660011790556101216101156100ac83610306565b637a0ed62760e01b9052565b61013c6101306100ac83610306565b6356fe50af60e11b9052565b61015761014b6100ac83610306565b6314bbdacb60e21b9052565b6101726101666100ac83610306565b6366ffd66360e11b9052565b6348e2b09360e01b5f525f5160206123845f395f51905f526020527f7661afff1a97d0ec2e1a9ce3077c6e2019badf127f248508204a29c4f830a08b805460ff191660011790556101c281610306565b508361034e565b6301ffc9a760e01b9052565b6301ffc9a760e01b5f525f5160206123845f395f51905f526020527fa8f5d028d766a70d3486bcf0e3a439c4887bbbbcbedea7130e385c503d65c974805460ff19166001179055610224610362565b9061022d61029f565b308152905f602083015260408201526102458261033c565b5261024f8161033c565b506102586103e5565b90610605565b610267336104b1565b610270336103f5565b610278610479565b6040516115989081610d8c8239f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b60405190606082016001600160401b038111838210176102be57604052565b61028b565b6040519190601f01601f191682016001600160401b038111838210176102be57604052565b610120906102f5826102c3565b6008815291601f1901366020840137565b5f1981146103145760010190565b634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b8051156103495760200190565b610328565b80518210156103495760209160051b010190565b60409061036e826102c3565b6001815291601f1901825f5b82811061038657505050565b60209061039161029f565b5f81525f83820152606060408201528282850101520161037a565b600311156103b657565b634e487b7160e01b5f52602160045260245ffd5b6001600160401b0381116102be57601f01601f191660200190565b6103ef60206102c3565b905f8252565b5f80527f409a779b06f7ed4482e4a4bbaf0e0febf249036642c5bc5fb6c71bf2a72d5d00602052610446817f66284c0762af713e202e0524bbf74efcdaa2baaf6286c0a3c4935fba6071c3306107b6565b5033906001600160a01b03165f7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4565b5f5f5160206123445f395f51905f525f5160206123245f395f51905f52604060018060a01b038354168151908152846020820152a155565b5f5160206123445f395f51905f528054604080516001600160a01b0392831681529390911660208401819052925f5160206123245f395f51905f529190a155565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9392909193606081016060825283518091526080820190602060808260051b8501019501915f905b82821061056f575050506001600160a01b03909516602082015292935061056c9260408184039101526104f2565b90565b848703607f19018152835180516001600160a01b0316885260208101519497939492939192606083019160038210156103b657604060809160209384870152015193606060408201528451809452019201905f905b8082106105e25750505060208060019298019201920190929161053e565b82516001600160e01b0319168452602093840193909201916001909101906105c4565b919061062a6106235f5160206123a45f395f51905f525461ffff1690565b61ffff1690565b9283925f92600786166107a0575b5f94935b83518610156106fb5761064f868561034e565b51602081015161065e816103ac565b604082015151156106ec57610672816103ac565b80610693575090600195969761068792610ba5565b9490965b01949361063c565b6106a081989397986103ac565b600181036106ba5750906106b5600192610aa4565b61068b565b806106c66002926103ac565b146106d5575b5060019061068b565b946106e3919760019661082e565b949096906106cc565b6309547f0d60e11b5f5260045ffd5b61075295505f92967f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673949295810361077e575b60078116610754575b50506107498460405193849384610516565b0390a15f610d19565b565b6107769060031c5b5f525f5160206123c45f395f51905f5260205260405f2090565b555f80610737565b5f5160206123a45f395f51905f52805461ffff191661ffff831617905561072e565b92506107af61075c8660031c90565b5492610638565b9060018060a01b03165f916001810190825f528160205260405f2054156107de575b50505090565b809192935054680100000000000000008110156102be5760018101808355811015610349575f828152602080822092909201859055915493825291909152604081209190915560019080806107d8565b8051929390929091906001600160a01b0316610a95575f935b6040840151918251861015610a8e5761086786610875925f19019461034e565b516001600160e01b03191690565b6001600160e01b031981165f9081525f5160206123645f395f51905f5260205260408120805491905591606083901c8015610a7f573014610a70576007841660078114610a35575b816108cb6108d89260051b90565b1b63ffffffff60e01b1690565b916001600160e01b0319908116908316036109b3575b6109116106236007610905600387901c611fff1683565b951660051b61ffe01690565b9261091c8560031c90565b810361094957506040926001926001600160e01b031980831c199093169216901c17955b01949050610847565b6109ad610991604095600195610977855f5160206123c45f395f51905f529d979d905f5260205260405f2090565b546001600160e01b031980841c19909116911690911c1790565b915f5160206123c45f395f51905f52905f5260205260405f2090565b55610940565b6109fc6109ef6109e1845f5160206123645f395f51905f529063ffffffff60e01b165f5260205260405f2090565b546001600160601b03191690565b6001600160601b03191690565b6001600160e01b031983165f9081525f5160206123645f395f51905f52602052604090206001600160601b0385169190911790556108ee565b6108cb91506108d890610a66610a4b8760031c90565b5f5160206123c45f395f51905f52905f5260205260405f2090565b54925090506108bd565b631cbd473560e21b5f5260045ffd5b63273f579560e21b5f5260045ffd5b9450925050565b6305d49e0f60e41b5f5260045ffd5b80519091906001600160a01b03163b15610b96575f5b60408301518051821015610b905761086782610ad59261034e565b90610afe825f5160206123645f395f51905f529063ffffffff60e01b165f5260205260405f2090565b54918260601c8015610a7f57308114610a705785516001600160a01b031614610b81578451600193610b7a91610b4c906109ef906001600160a01b03165b60601b6001600160601b03191690565b90858060601b031617915f5160206123645f395f51905f529063ffffffff60e01b165f5260205260405f2090565b5501610aba565b631e1edc6960e11b5f5260045ffd5b50509050565b63753f216760e01b5f5260045ffd5b80519293929091906001600160a01b0316803b15610cd1575081516001600160a01b03166001600160a01b03163014610a70575b5f905b60408301518051831015610cc95761086783610bf79261034e565b94610c20865f5160206123645f395f51905f529063ffffffff60e01b165f5260205260405f2090565b54610cba5760019160e0610c968493610c456109ef610b3c8a5160018060a01b031690565b8417610c6f8b5f5160206123645f395f51905f529063ffffffff60e01b165f5260205260405f2090565b55610c7d6007851660051b90565b996001600160e01b0319808c1c1990921691168a1c1790565b9714610ca6575b01910190610bdc565b86610cb4610a4b8360031c90565b55610c9d565b6348d42e7f60e11b5f5260045ffd5b509150509190565b6001600160a01b03163014610bd95763753f216760e01b5f5260045ffd5b3d15610d14573d90610d08610d03836103ca565b6102c3565b9182523d5f602084013e565b606090565b81516001600160a01b03821690811590158118610d7c5715610d3a57505050565b3003610d67575b815f929160208493519201905af4610d57610cef565b5015610d5f57565b3d5f803e3d5ffd5b803b610d415763753f216760e01b5f5260045ffd5b63cf45f9c560e01b5f5260045ffdfe60806040526004361015610018575b36610dd557610dd5565b5f3560e01c806301ffc9a7146100975780631f931c1c146100925780632c4080591461008d57806352ef6b2c146100885780637a0ed62714610083578063914237651461007e578063adfca15e146100795763cdffacc60361000e576108f7565b6107f0565b61074b565b6104e2565b6102ad565b610224565b610197565b346100f95760203660031901126100f957602060ff6100ed6100b76100fd565b63ffffffff60e01b165f527ffe25b4374cb2b280904a684bb2057f9f429754d871a6b258ad16536918fdbd0060205260405f2090565b54166040519015158152f35b5f80fd5b600435906001600160e01b0319821682036100f957565b35906001600160e01b0319821682036100f957565b602435906001600160a01b03821682036100f957565b600435906001600160a01b03821682036100f957565b35906001600160a01b03821682036100f957565b9181601f840112156100f95782359167ffffffffffffffff83116100f957602083818601950101116100f957565b346100f95760603660031901126100f95760043567ffffffffffffffff81116100f957366023820112156100f95780600401359067ffffffffffffffff82116100f9573660248360051b830101116100f9576101f1610129565b906044359167ffffffffffffffff83116100f957610222936102196024943690600401610169565b949093016109e4565b005b346100f9575f3660031901126100f9577f85fb9346809a0d51894362fd6f50e7a5ba84526939921b0ff59f80250a25f203546040516001600160a01b039091168152602090f35b60206040818301928281528451809452019201905f5b81811061028e5750505090565b82516001600160a01b0316845260209384019390920191600101610281565b346100f9575f3660031901126100f9576102e06102d95f5160206115235f395f51905f525461ffff1690565b61ffff1690565b6102e981610cb6565b5f5f5f5b8482106103095782845260405180610305868261026b565b0390f35b61031281610d05565b545f5b6008811061032e575b505061032990610cf2565b6102ed565b91949261033d90969196610cf2565b938185116104225761038261037c61036e6103698a61035c8860051b90565b1b63ffffffff60e01b1690565b610af6565b546001600160601b03191690565b60601c90565b5f6001600160a01b038216815b8481106103df575b50506103d557816103c06103c5926103b160019589610d45565b6001600160a01b039091169052565b610cf2565b925b019590959491939294610315565b50916001906103c7565b6104086103fc6103ef838b610d45565b516001600160a01b031690565b6001600160a01b031690565b82146104165760010161038f565b50505060015f80610397565b9392949181965061031e565b90602080835192838152019201905f5b81811061044b5750505090565b82516001600160e01b03191684526020938401939092019160010161043e565b602081016020825282518091526040820191602060408360051b8301019401925f915b83831061049d57505050505090565b90919293946020806104d3600193603f198682030187526040838b51878060a01b0381511684520151918185820152019061042e565b9701930193019193929061048e565b346100f9575f3660031901126100f95761050e6102d95f5160206115235f395f51905f525461ffff1690565b61051781610d59565b61052082610cb6565b915f905f5f5b828210610580575050505f5b81811061054a5781835260405180610305858261046b565b8061056a61056461055d60019488610d45565b5160ff1690565b60ff1690565b60206105768387610d45565b5101515201610532565b61058981610d05565b545f5b600881106105a5575b50506105a090610cf2565b610526565b926105b69097949197969296610cf2565b9481861161073d576105cc8861035c8660051b90565b6105db61037c61036e83610af6565b5f6001600160a01b038216815b85811061068d575b5050610682579161065d6106709261061e60019561060e858a610d45565b516001600160a01b039091169052565b61062786610cb6565b6020610633858a610d45565b51015261064d6020610645858a610d45565b510151610d33565b6001600160e01b03199091169052565b6103c061066a8289610d45565b60019052565b935b019690939695919594929461058c565b505092600190610672565b898589846106af6103fc6106a18785610d45565b51516001600160a01b031690565b146106bf575050506001016105e8565b610734955083945061055d8460ff94610701869561064d60206106e861070d9b61070699610d45565b5101516106fb61056461055d8888610d45565b90610d45565b610d45565b1610610dbd565b61072c61072561072061055d848d610d45565b610dc4565b918a610d45565b9060ff169052565b60015f806105f0565b949281949750959195610595565b346100f95760203660031901126100f95761076461013f565b61076c610e6a565b7f85fb9346809a0d51894362fd6f50e7a5ba84526939921b0ff59f80250a25f20380546001600160a01b0319166001600160a01b0392909216919091179055005b60206040818301928281528451809452019201905f5b8181106107d05750505090565b82516001600160e01b0319168452602093840193909201916001016107c3565b346100f95760203660031901126100f95761080961013f565b6108256102d95f5160206115235f395f51905f525461ffff1690565b9061082f82610cb6565b905f906001600160a01b031681805b858210610856578385526040518061030587826107ad565b61085f81610d05565b545f5b6008811061087b575b505061087690610cf2565b61083e565b949261088c90979197969296610cf2565b948186116108e9576108a28861035c8360051b90565b6108b46103fc61037c61036e84610af6565b86146108cd575b50600101969096959195949294610862565b846103c06108e29261064d6001959888610d45565b93906108bb565b81975095919594929461086b565b346100f95760203660031901126100f95760206109156103696100fd565b5460601c604051908152f35b634e487b7160e01b5f52604160045260245ffd5b604051906060820182811067ffffffffffffffff82111761095557604052565b610921565b6040519190601f01601f1916820167ffffffffffffffff81118382101761095557604052565b67ffffffffffffffff81116109555760051b60200190565b67ffffffffffffffff811161095557601f01601f191660200190565b9291926109c86109c383610998565b61095a565b93828552828201116100f957815f926020928387013784010152565b929493906109f46109c382610980565b93602085838152019160051b8101903682116100f95780925b828410610a305750505050610a2e9394610a289136916109b4565b91610b19565b565b833567ffffffffffffffff81116100f95782016060813603126100f957610a55610935565b90610a5f81610155565b8252602081013560038110156100f957602083015260408101359067ffffffffffffffff82116100f9570136601f820112156100f957803590610aa46109c383610980565b9160208084838152019160051b830101913683116100f957602001905b828210610ade575050506040820152815260209384019301610a0d565b60208091610aeb84610114565b815201910190610ac1565b63ffffffff60e01b165f525f5160206115035f395f51905f5260205260405f2090565b610b21610e6a565b610b3d6102d95f5160206115235f395f51905f525461ffff1690565b9384935f9360078716610ca0575b5f95945b8451871015610c0e57610b628786610d45565b516020810151610b7181610eb6565b60408201515115610bff57610b8581610eb6565b80610ba65750906001969798610b9a92611321565b9590975b019594610b4f565b610bb38199939899610eb6565b60018103610bcd575090610bc860019261120f565b610b9e565b80610bd9600292610eb6565b14610be8575b50600190610b9e565b95610bf69198600197610faf565b95909790610bdf565b6309547f0d60e11b5f5260045ffd5b610a2e96507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673939782959293968103610c7e575b60078116610c65575b5050610c5d8560405193849384610ef8565b0390a1611490565b610c769060031c610d05565b610d05565b555f80610c4b565b5f5160206115235f395f51905f52805461ffff191661ffff8316179055610c42565b9350610caf610c718760031c90565b5493610b4b565b90610cc36109c383610980565b8281528092610cd4601f1991610980565b0190602036910137565b634e487b7160e01b5f52601160045260245ffd5b5f198114610d005760010190565b610cde565b5f525f5160206115435f395f51905f5260205260405f2090565b634e487b7160e01b5f52603260045260245ffd5b805115610d405760200190565b610d1f565b8051821015610d405760209160051b010190565b90610d666109c383610980565b8281528092610d77601f1991610980565b015f5b818110610d8657505050565b60405190604082019180831067ffffffffffffffff841117610955576020926040525f815260608382015282828601015201610d7a565b156100f957565b60ff1660ff8114610d005760010190565b5f80356001600160e01b03191681525f5160206115035f395f51905f52602052604090205460601c8015610e39575b365f80375f803681845af43d5f803e15610e35573d610e31573b610e31576321f27f0d60e21b5f5260045ffd5b3d5ff35b3d5ffd5b507f85fb9346809a0d51894362fd6f50e7a5ba84526939921b0ff59f80250a25f203546001600160a01b0316610e04565b335f9081527f66284c0762af713e202e0524bbf74efcdaa2baaf6286c0a3c4935fba6071c331602052604090205415610e9f57565b630c4705d560e01b5f525f6004523360245260445ffd5b60031115610ec057565b634e487b7160e01b5f52602160045260245ffd5b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b93929091936060810160608252835180915260808201602060808360051b8501019501915f5b818110610f4f575050506001600160a01b039095166020820152929350610f4c926040818403910152610ed4565b90565b848703607f19018352835180516001600160a01b031688526020810151949793949293919291906003831015610ec057610fa38260606040602095946001978780970152015191816040820152019061042e565b98019401929101610f1e565b8051929390929091906001600160a01b0316611200575f935b60408401519182518610156111f957610fe886610ff6925f190194610d45565b516001600160e01b03191690565b6001600160e01b031981165f9081525f5160206115035f395f51905f5260205260408120805491905591606083901c80156111ea5730146111db5760078416600781146111a0575b8161035c61104c9260051b90565b916001600160e01b031990811690831603611127575b6110856102d96007611079600387901c611fff1683565b951660051b61ffe01690565b926110908560031c90565b81036110bd57506040926001926001600160e01b031980831c199093169216901c17955b01949050610fc8565b6111216111056040956001956110eb855f5160206115435f395f51905f529d979d905f5260205260405f2090565b546001600160e01b031980841c19909116911690911c1790565b915f5160206115435f395f51905f52905f5260205260405f2090565b556110b4565b61116261115561036e845f5160206115035f395f51905f529063ffffffff60e01b165f5260205260405f2090565b6001600160601b03191690565b6bffffffffffffffffffffffff84161761119a835f5160206115035f395f51905f529063ffffffff60e01b165f5260205260405f2090565b55611062565b61035c915061104c906111d16111b68760031c90565b5f5160206115435f395f51905f52905f5260205260405f2090565b549250905061103e565b631cbd473560e21b5f5260045ffd5b63273f579560e21b5f5260045ffd5b9450925050565b6305d49e0f60e41b5f5260045ffd5b80519091906001600160a01b03163b15611312575f5b6040830151805182101561130c57610fe88261124092610d45565b90611269825f5160206115035f395f51905f529063ffffffff60e01b165f5260205260405f2090565b54918260601c80156111ea573081146111db578551611290906001600160a01b03166103fc565b146112fd5784516001936112f6916bffffffffffffffffffffffff906112ce90611155906001600160a01b03165b60601b6001600160601b03191690565b911617915f5160206115035f395f51905f529063ffffffff60e01b165f5260205260405f2090565b5501611225565b631e1edc6960e11b5f5260045ffd5b50509050565b63753f216760e01b5f5260045ffd5b80519293929091906001600160a01b0316803b1561144d575081516001600160a01b03166001600160a01b031630146111db575b5f905b6040830151805183101561144557610fe88361137392610d45565b9461139c865f5160206115035f395f51905f529063ffffffff60e01b165f5260205260405f2090565b546114365760019160e061141284936113c16111556112be8a5160018060a01b031690565b84176113eb8b5f5160206115035f395f51905f529063ffffffff60e01b165f5260205260405f2090565b556113f96007851660051b90565b996001600160e01b0319808c1c1990921691168a1c1790565b9714611422575b01910190611358565b866114306111b68360031c90565b55611419565b6348d42e7f60e11b5f5260045ffd5b509150509190565b6001600160a01b031630146113555763753f216760e01b5f5260045ffd5b3d1561148b573d9061147f6109c383610998565b9182523d5f602084013e565b606090565b81516001600160a01b038216908115901581186114f357156114b157505050565b30036114de575b815f929160208493519201905af46114ce61146b565b50156114d657565b3d5f803e3d5ffd5b803b6114b85763753f216760e01b5f5260045ffd5b63cf45f9c560e01b5f5260045ffdfe85fb9346809a0d51894362fd6f50e7a5ba84526939921b0ff59f80250a25f20085fb9346809a0d51894362fd6f50e7a5ba84526939921b0ff59f80250a25f20185fb9346809a0d51894362fd6f50e7a5ba84526939921b0ff59f80250a25f202a264697066735822122073a72229906f251001f239ea21c511f8f3c4792d83b8b35dea43e8feb445c31f64736f6c634300082400337e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610385fb9346809a0d51894362fd6f50e7a5ba84526939921b0ff59f80250a25f200fe25b4374cb2b280904a684bb2057f9f429754d871a6b258ad16536918fdbd0085fb9346809a0d51894362fd6f50e7a5ba84526939921b0ff59f80250a25f20185fb9346809a0d51894362fd6f50e7a5ba84526939921b0ff59f80250a25f202";
23
+ //#endregion
24
+ //#region bytecode/RouterInit.ts
25
+ const bytecode$2 = "0x60808060405234601557610322908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c63f09a401614610025575f80fd5b3461028a57604036600319011261028a576004356001600160a01b0381169081900361028a576024356001600160a01b038116929083900361028a577f3ad28da30acbefd470118e3dbae81a490030b0b23b7e1445ed9d236b8053050054600160ff8216101561027b577f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249891600160209260ff1916177f3ad28da30acbefd470118e3dbae81a490030b0b23b7e1445ed9d236b805305005560018152a15f60806100ed61028e565b8281528260208201528260408201528260608201520152620f4240608061011261028e565b601481526202bf20602082015261bb8060408201526060810183905201527f932f5a960894e1533b50dc61a5ed814ad5141d345b5c48c89b71c631b170bc6a805471ffffffffffffffffffffffffffffffffffff1916700f4240000f42400000bb800002bf20001417905566038d7ea4c680007f932f5a960894e1533b50dc61a5ed814ad5141d345b5c48c89b71c631b170bc6b556001600160a01b03906101b9906102c2565b166bffffffffffffffffffffffff60a01b7f932f5a960894e1533b50dc61a5ed814ad5141d345b5c48c89b71c631b170bc6c5416177f932f5a960894e1533b50dc61a5ed814ad5141d345b5c48c89b71c631b170bc6c5561022060018060a01b03916102c2565b166bffffffffffffffffffffffff60a01b7f932f5a960894e1533b50dc61a5ed814ad5141d345b5c48c89b71c631b170bc6d5416177f932f5a960894e1533b50dc61a5ed814ad5141d345b5c48c89b71c631b170bc6d555f80f35b6317456d5560e11b5f5260045ffd5b5f80fd5b6040519060a0820182811067ffffffffffffffff8211176102ae57604052565b634e487b7160e01b5f52604160045260245ffd5b803b156102cc5790565b632f19278760e11b5f9081526001600160a01b0391909116600452602490fdfea2646970667358221220460b5aefb80c3289b467a9dee0424cec80d815559b750a67051f3010d932613364736f6c63430008240033";
26
+ //#endregion
27
+ //#region bytecode/TrustedNodeEnclaveKeyVerifier.ts
28
+ const bytecode$1 = "0x608080604052346071573315605e575f8054336001600160a01b0319821681178355916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a361038590816100768239f35b631e4fbdf760e01b5f525f60045260245ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c8063484fd52414610290578063715018a6146102395780638da5cb5b14610212578063ee35fc0214610124578063f2fde38b1461009f5763f62824dd1461005b575f80fd5b3461009b57602036600319011261009b576001600160a01b0361007c610313565b165f526001602052602060018060a01b0360405f205416604051908152f35b5f80fd5b3461009b57602036600319011261009b576100b8610313565b6100c0610329565b6001600160a01b03168015610111575f80546001600160a01b03198116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b631e4fbdf760e01b5f525f60045260245ffd5b3461009b57608036600319011261009b5761013d610313565b3660641161009b5760643567ffffffffffffffff811161009b573660238201121561009b57806004013567ffffffffffffffff811161009b573691016024011161009b5760405160208101916024358352604435604083015260408252606082019180831067ffffffffffffffff8411176101fe576040839052519092206020926001600160a01b0390811680151592909116826101de575b505015158152f35b5f9081526001855260409020546001600160a01b031614905083806101d6565b634e487b7160e01b5f52604160045260245ffd5b3461009b575f36600319011261009b575f546040516001600160a01b039091168152602090f35b3461009b575f36600319011261009b57610251610329565b5f80546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461009b57604036600319011261009b576102a9610313565b6024356001600160a01b038116919082900361009b576102c7610329565b6001600160a01b03165f81815260016020526040812080546001600160a01b031916841790557f818e6f4aaecd439b04eded8fcca58ac3b19828c4929251379585f0696cafdab79080a3005b600435906001600160a01b038216820361009b57565b5f546001600160a01b0316330361033c57565b63118cdaa760e01b5f523360045260245ffdfea2646970667358221220150968bf8ae20acd317c5e7d7a91cdb8dc0c5879fd7014d6ae493da0aac8532964736f6c63430008240033";
29
+ //#endregion
30
+ //#region bytecode/VrfFacet.ts
31
+ const bytecode = "0x60808060405234601557612852908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c8063249e796614610b91578063397e840714610b145780634a747f2914610aef5780634f27081d14610ad857806350eb05bb146109cb57806370e519ea1461099357806386ceb74c1461042d578063a837e83714610355578063b93b4fed1461033d578063cab7e8eb146102bf578063e6dee7ed14610274578063e8e71aa11461022e5763ecb7b310146100a8575f80fd5b3461022a5760c036600319011261022a576004356001600160401b03811161022a5760e0600319823603011261022a573660a41161022a5760a4356001600160401b03811161022a576100ff903690600401610c78565b9161010c60248201610d7a565b9261011684610d8e565b541580156101f9575b6101db5761013261013c92600401611b19565b9260248486611c88565b61014582610e23565b8160405191825f905b600282106101c1575050506024908261016b604061017095610ed5565b61208f565b6101af5761017d82611f2b565b33916001600160a01b0316907f24ea7f05b6d88add6416ea559acc12c38d99f4819657f6d97375749b4d1fd7f15f80a4005b63022e577d60e01b5f5260045260245ffd5b82548152859350600192830192919091019060200161014e565b63089858e760e11b5f9081526001600160a01b038516600452602490fd5b50610206606483016110c4565b6001600160401b0364ffffffffff61021d87610dc6565b5460a01c1691161061011f565b5f80fd5b3461022a57602036600319011261022a576004356001600160401b03811161022a5760e0600319823603011261022a5761026c602091600401611b19565b604051908152f35b602036600319011261022a576004356001600160401b03811161022a5761026c6102a46020923690600401610c78565b906102ad611035565b9163ffffffff6060840151169161143c565b3461022a57604036600319011261022a576004356001600160a01b038116810361022a576001600160a01b03165f9081527fb030fd56553f4f2dae49dfdc45a72f7c3f0ffc51b5ce5d63ba0b79f996fa9ec860209081526040909120602435908160081c5f52825260405f2054600160ff60405193161b1615158152f35b3461022a5761035361034e36610d02565b611164565b005b3461022a57602036600319011261022a576004356001600160401b03811161022a57610385903690600401610d36565b6040513683900360be1901905f5b8381101561035357816040525a908060051b860135918483121561022a5760019287016103d16103cc366103c7848061113b565b610f5b565b611334565b90816103f06103eb60206103e5858061113b565b016110c4565b611ae3565b54036104255761041f92602092610407838061113b565b9061041560a08501856110e9565b9590940192611722565b01610393565b50505061041f565b3461022a5760e036600319011261022a576004356001600160401b03811161022a578060040160e0600319833603011261022a576024356001600160401b03811161022a57610480903690600401610c78565b90923660c41161022a5760c4356001600160401b03811161022a576104a9903690600401610c78565b9390925a92606481016001600160401b036104c3826110c4565b16421161096f575060248101946104e16104dc87610d7a565b610dc6565b92835460f81c600381101561095b576001036109325761050b9061050486611b19565b998a611bf5565b966001600160a01b038816958615610923576001600160a01b0389165f9081527fb030fd56553f4f2dae49dfdc45a72f7c3f0ffc51b5ce5d63ba0b79f996fa9ec86020526040902060448501358060081c91600160ff83161b92805f528160205260405f20549284841661090d57505f526020521760405f20558961060a83856106056105978d610d7a565b946040516020810190608060448337608081526105b560a082610ed5565b5190206040519060208201927f540d1d4a3b1e015ee1e083d8e0cd77023873121a4337a572f23ea698268fa7f2845260408301526060820152606081526105fd608082610ed5565b519020612391565b611bf5565b6001600160a01b039182169116036108fe578995604435978815998a809b6108f4575b6108e157610639611035565b9c8d958d61064960848b016110d8565b98602089015163ffffffff16895161ffff169a60c48d019c61066b8e8b6110e9565b9160a4915001359c61067e938e93611d09565b9d6001600160601b038f169c6106948e85611d79565b546001600160a01b03169f806108d7575b156107f757509386935f5160206127dd5f395f51905f52610751979461070a946107026107839f996106e06107599f9e9d5f80955b89611dc2565b604051938493845260806044602086013760c060a085015260c084019161111b565b0390a2610d7a565b908b7f0854e355ddd2ac14d0a6a33a7d0a3d4857a49ae3ad25b51dcab82cb4db8b9f99602061073886610d7a565b6040516001600160a01b039182168152951694a46110e9565b919050612536565b90803a105f146107e357506001600160601b0361ffff6107783a6122f9565b995116981690611cf6565b601e870296808804601e14901517156107cf576107af610bb8916107a961035399611cd9565b90611cf6565b04908111156107c05750819061256f565b6107c9906122f9565b9061256f565b634e487b7160e01b5f52601160045260245ffd5b61ffff6107786001600160601b03926122f9565b9298509499939695925050600160643516600201806002116107cf576020915f91604051918483019160ff60f81b9060f81b168252602183015260218252610840604183610ed5565b61087f60016022604051809488820196607f60f91b8852600360f81b60218401525180918484015e810187838201520301601e19810184520182610ed5565b604051918291518091835e8101838152039060025afa156108cc576107839761070a8f968f5f5160206127dd5f395f51905f526107599a8f926107026107519a6106e08a5f5180956106da565b6040513d5f823e3d90fd5b50606435156106a5565b8863268f2bef60e21b5f5260045260245ffd5b506064351561062d565b63169ae4bb60e31b5f5260045ffd5b8b6302af71f160e41b5f5260045260245260445ffd5b630cf92fef60e41b5f5260045ffd5b61093b87610d7a565b63262b486d60e11b5f9081526001600160a01b0391909116600452602490fd5b634e487b7160e01b5f52602160045260245ffd5b6109806001600160401b03916110c4565b631f44372f60e11b5f521660045260245ffd5b3461022a57602036600319011261022a576004356001600160401b038116810361022a576109c2602091611ae3565b54604051908152f35b3461022a57602036600319011261022a576004356001600160401b03811161022a576109fb903690600401610d36565b6101f48111610ac057610a0d816110ad565b610a1a6040519182610ed5565b818152610a26826110ad565b6020820190601f19013682375f5b83811015610a7c578060051b90610a4f6103eb8388016110c4565b548451821015610a685760206001938601015201610a34565b634e487b7160e01b5f52603260045260245ffd5b5090604051918291602083019060208452518091526040830191905f5b818110610aa7575050500390f35b8251845285945060209384019390920191600101610a99565b634583b14960e11b5f526004526101f460245260445ffd5b3461022a57602061026c6103cc366103c736610d02565b3461022a57610353610b0036610ca5565b929190915a610b0e826116ce565b90611722565b604036600319011261022a576004356001600160401b03811161022a57610b3f903690600401610c78565b6024359063ffffffff82169283830361022a57610b5a611035565b9363ffffffff60808601511690818111610b7c57602061026c8787878761143c565b631aaf7a3960e31b5f5260045260245260445ffd5b3461022a57610b9f36610ca5565b92610baf60408294939401610d7a565b93610bb985610d8e565b54158015610c44575b610c2657610bd76103cc610be0933690610f5b565b93838587611c88565b610be983610e23565b9082604051805f905b60028210610c0c575050610170935061016b604082610ed5565b855481526001958601958794509190910190602001610bf2565b63089858e760e11b5f9081526001600160a01b038616600452602490fd5b50610c72610c5186610dc6565b610c5d60608501610e93565b9064ffffffffff80915460a01c169116101590565b15610bc2565b9181601f8401121561022a578235916001600160401b03831161022a576020838186019501011161022a57565b60c060031982011261022a576004356001600160401b03811161022a57610100818303600319011261022a57600401918160a41161022a5760249160a435906001600160401b03821161022a57610cfe91600401610c78565b9091565b602060031982011261022a57600435906001600160401b03821161022a5761010090829003600319011261022a5760040190565b9181601f8401121561022a578235916001600160401b03831161022a576020808501948460051b01011161022a57565b35906001600160a01b038216820361022a57565b356001600160a01b038116810361022a5790565b6001600160a01b03165f9081527f7103b4d0a53003ec91f983abf6fa980e867f1e66bd497d2fb88c0b44a170b7656020526040902090565b6001600160a01b03165f9081525f5160206127bd5f395f51905f526020526040902090565b6001600160a01b03165f9081527f20d409567c11d0919b4e92edadabde986fedc1be9872cbd35d9bd2797c19df016020526040902090565b6001600160a01b03165f9081527f7103b4d0a53003ec91f983abf6fa980e867f1e66bd497d2fb88c0b44a170b7666020526040902090565b6001600160a01b03165f9081527f7103b4d0a53003ec91f983abf6fa980e867f1e66bd497d2fb88c0b44a170b7676020526040902090565b3564ffffffffff8116810361022a5790565b61010081019081106001600160401b03821117610ec157604052565b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b03821117610ec157604052565b35906001600160601b038216820361022a57565b6001600160401b038111610ec157601f01601f191660200190565b929192610f3182610f0a565b91610f3f6040519384610ed5565b82948184528183011161022a578281602093845f960137010152565b91906101008382031261022a5760405190610f7582610ea5565b8193610f8081610d66565b835260208101356001600160401b038116810361022a576020840152610fa860408201610d66565b6040840152606081013564ffffffffff8116810361022a576060840152610fd160808201610ef6565b6080840152610fe260a08201610ef6565b60a084015260c081013563ffffffff8116810361022a5760c084015260e0810135906001600160401b03821161022a570181601f8201121561022a5760e09181602061103093359101610f25565b910152565b6040519060a082018281106001600160401b03821117610ec15760405281608063ffffffff7f932f5a960894e1533b50dc61a5ed814ad5141d345b5c48c89b71c631b170bc6a5461ffff81168452818160101c166020850152818160301c166040850152818160501c16606085015260701c16910152565b6001600160401b038111610ec15760051b60200190565b356001600160401b038116810361022a5790565b3563ffffffff8116810361022a5790565b903590601e198136030182121561022a57018035906001600160401b03821161022a5760200191813603831361022a57565b908060209392818452848401375f828201840152601f01601f1916010190565b90359060fe198136030182121561022a570190565b356001600160601b038116810361022a5790565b61116d816116ce565b6060820161118261117d82610e93565b611e50565b4210611312575f6111986103eb602086016110c4565b5561122460408401936111aa85610d7a565b6111b384610e93565b9060018060a01b03165f525f5160206127bd5f395f51905f5260205260405f209064ffffffffff80835460a01c1691161015611303575b506111f481610d7a565b61121d6112156001600160601b0361120e60808601611150565b1692610deb565b918254611ce9565b9055610d7a565b6001600160a01b0361123585610d7a565b16906001600160a01b0316837faca250571c2d1a8910e9db8cb146bf3f13fe87b05a51f768a77f1a99db6dada55f80a46112716104dc84610d7a565b61129261127d83610e93565b8264ffffffffff80915460a01c169116101590565b1580156112ea575b6112e4576112b863ffffffff64ffffffffff925460c81c1692610e93565b1610156112d357506112cc6112d191610d7a565b611f2b565b565b6112df6112d192610d7a565b611e65565b50505050565b506112fc6112f785610d7a565b610d8e565b541561129a565b61130c9061263c565b5f6111ea565b61117d61131e91610e93565b9063042cf29f60e41b5f5260045260245260445ffd5b60018060a01b03815116906001600160401b036020820151169060018060a01b036040820151169064ffffffffff6060820151166001600160601b036080830151166001600160601b0360a0840151169160e063ffffffff60c0860151169401516020815191012094604051966020880198468a523060408a01527f7761cd2343be786e645192697256ccf13964ba0842c707c0b5c82927457bbf0360608a0152608089015260a088015260c087015260e0860152610100850152610120840152610140830152610160820152610160815261141261018082610ed5565b51902090565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b939291909161400083116116b557906114768392483a115f146116ac573a9485915b61ffff63ffffffff6020830151169151169085611d09565b94346116595761148f6001600160601b03871633611d79565b7fb030fd56553f4f2dae49dfdc45a72f7c3f0ffc51b5ce5d63ba0b79f996fa9ec654916001600160401b038316926001600160401b0384146107cf5767ffffffffffffffff19166001600160401b036001850116177fb030fd56553f4f2dae49dfdc45a72f7c3f0ffc51b5ce5d63ba0b79f996fa9ec65561150f8361220a565b94611519906122f9565b6040519161152683610ea5565b33835260208301938585526040840197600160a01b6001900316885260608401964264ffffffffff168852608085019a6001600160601b03168b5260a08501936001600160601b0316845260c085019263ffffffff168352369061158992610f25565b9160e0840192835261159a84611334565b998a6115a68198611ae3565b558451895160408051602080825298516001600160a01b039081169982019990995298516001600160401b031690890152995186166060880152975164ffffffffff166080870152516001600160601b0390811660a087015290511660c08501525163ffffffff1660e0840152516101008084015294811694931692819061163390610120830190611418565b037ff2c5174f7bafedf8fec01be8e9891a9a5e03354816705041bc09f031a4a8f52491a4565b6001600160601b03861680341061169657803411611678575b5061148f565b6116829034611d6c565b61168e61121533610deb565b90555f611672565b63c5c2209b60e01b5f523460045260245260445ffd5b4894859161145e565b8263dbd65ec560e01b5f5260045261400060245260445ffd5b906116eb6103eb60206116e46103cc3687610f5b565b94016110c4565b549082821461171e57501561170c57637bbe34c960e01b5f5260045260245ffd5b632edf717f60e01b5f5260045260245ffd5b9050565b9490939260408301916001600160a01b0361173c84610d7a565b165f525f5160206127bd5f395f51905f5260205260405f2092835460f81c600381101561095b5715611aba576117796060860194610c5d86610e93565b15611a9157806117978388868b6117926117ad97610d7a565b611c88565b5f6117a76103eb602089016110c4565b55610d7a565b946117b784610e93565b6001600160a01b038088165f9081525f5160206127bd5f395f51905f5260205260409020805490911697916117eb8261263c565b81549064ffffffffff811663ffffffff8360c81c168111611a48575b5050505460f81c600381101561095b57600214611a24575b5061182983611cc2565b91821561195f575f5160206127dd5f395f51905f5261191b94611915946118796112d19c958c955f935b1561194f575b60806040519586958652602086013760c060a085015260c084019161111b565b0390a2610bb86118fc61189c61188d611035565b809461075160e08b018b6110e9565b956118b861ffff6118af60a08b01611150565b95511691610e93565b6118c181611e50565b421061193157506107a96118f75f5b6118f160808c019a6001600160601b036118e98d611150565b991690611cf6565b93611cf6565b611cd9565b046001600160601b038216811115611921575092611150565b92610d7a565b9361256f565b61192b91506122f9565b92611150565b6118f761194a6107a9926119454291611e50565b611d6c565b6118d0565b61195a8c858961232a565b611859565b60016020859a939a013516600201806002116107cf575f602091604051908382019060ff60f81b9060f81b16815287356021830152602182526119a3604183610ed5565b6119e260016022604051809488820196607f60f91b8852600360f81b60218401525180918484015e810187838201520301601e19810184520182610ed5565b604051918291518091835e8101838152039060025afa156108cc575f5160206127dd5f395f51905f5261191b94611915946118796112d19c8c955f5193611853565b611a2d90610e5b565b805464ffffffffff19164264ffffffffff161790555f61181f565b63ffffffff8111611a7a575063ffffffff60c81b1990911660c89190911b63ffffffff60c81b161781555f8080611807565b6306dfcc6560e41b5f52602060045260245260445ffd5b611a9a90610d7a565b63089858e760e11b5f9081526001600160a01b0391909116600452602490fd5b611ac390610d7a565b63f517438960e01b5f9081526001600160a01b0391909116600452602490fd5b6001600160401b03165f527fb030fd56553f4f2dae49dfdc45a72f7c3f0ffc51b5ce5d63ba0b79f996fa9ec760205260405f2090565b611bf290611b2681610d7a565b90611b3360208201610d7a565b9060a0611b42606083016110c4565b9163ffffffff611b54608083016110d8565b6001600160401b03611b73611b6c60c08601866110e9565b3691610f25565b60208151910120956040519760208901997f3cd38351ca1e48b1ce440e4e2ed5617e43975ce18733c27f50534cb24f5123648b52600180891b031660408a0152600180881b031660608901526040850135608089015216848701521660c0850152013560e083015261010082015261010081526105fd61012082610ed5565b90565b9060418303611c81578260201161022a578035918360401161022a5760208201359360401015610a68577f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411611c79576020935f9360406080948151948552013560f81c868401526040830152606082015282805260015afa156108cc575f5190565b505050505f90565b5050505f90565b9391611cae939161060591604051608060208201928337608081526105b560a082610ed5565b6001600160a01b039182169116036108fe57565b8035159081611ccf575090565b6020915001351590565b610bb8019081610bb8116107cf57565b919082018092116107cf57565b818102929181159184041417156107cf57565b63ffffffff80611d1f9396959496169116611ce9565b91816028029160288304036107cf57611d3e611d439261ffff94611ce9565b611cf6565b91166064019061ffff82116107cf57611d6660649161ffff611bf2941690611cf6565b046122f9565b919082039182116107cf57565b90611d8382610deb565b54808211611da157611d9e91611d9891611d6c565b91610deb565b55565b8263db42144d60e01b5f5260018060a01b031660045260245260445260645ffd5b929092611dce82610d7a565b90813b15611e4957611e446112d195611e36611dfa611def608088016110d8565b9660c08101906110e9565b60405198899463d9d73bf360e01b602087015287602487015260018060a01b0316604486015260648501526080608485015260a484019161111b565b03601f198101865285610ed5565b612451565b5050505050565b64ffffffffff16601e81018091116107cf5790565b6001600160a01b0381165f8181525f5160206127bd5f395f51905f526020526040902080549192909160f81c600381101561095b576001036112e4577f14b24d32f1736b6a91317193e445446389c4b593b1215b0da357d563ae6c1e5f91611f0282611ed2602094612678565b5f8681525f5160206127bd5f395f51905f5285526040902080546001600160f81b0316600160f91b179055610e5b565b805464ffffffffff19164264ffffffffff16179055546040519485526001600160a01b031693a3565b6001600160a01b0381165f8181525f5160206127bd5f395f51905f5260205260409020611f5783610d8e565b5490805460f81c90600382101561095b5760207f94c1cb5a30eb84463733f8aa89d572686b6f043379602056dd68dc711c674c47916001869414612052575b611fc1857f7103b4d0a53003ec91f983abf6fa980e867f1e66bd497d2fb88c0b44a170b76854611ce9565b7f7103b4d0a53003ec91f983abf6fa980e867f1e66bd497d2fb88c0b44a170b76855546040519485526001600160a01b031693a35f525f5160206127bd5f395f51905f526020525f60408120555f61201882610d8e565b5561202281610e23565b5f5b6002811061204557505061203790610e5b565b805464ffffffffff19169055565b5f82820155600101612024565b61205b87612678565b611f96565b3d1561208a573d9061207182610f0a565b9161207f6040519384610ed5565b82523d5f602084013e565b606090565b909161209a81611cc2565b9160018060a01b037f932f5a960894e1533b50dc61a5ed814ad5141d345b5c48c89b71c631b170bc6d541690604051856020820152602081526120de604082610ed5565b604051632efa56d360e21b81529384925f600485015b600282106121a257505050826121216040959360808394604485013760e060c484015260e4830190611418565b03915afa5f9181612165575b5061215957505061213c612060565b511561214757505f90565b63abb0c06560e01b5f5260045260245ffd5b90915015611bf2571590565b9091506040813d60401161219a575b8161218160409383610ed5565b8101031261022a5751801515810361022a57905f61212d565b3d9150612174565b8251815287955060209283019260019290920191016120f4565b81156121c6570690565b634e487b7160e01b5f52601260045260245ffd5b5f5160206127fd5f395f51905f5254811015610a68575f5160206127fd5f395f51905f525f5260205f2001905f90565b905f5160206127fd5f395f51905f52549182156122ea57826001600160401b0361223492166121bc565b5f905b83821061224d5763141a589360e21b5f5260045ffd5b612256816121da565b905460039190911b1c6001600160a01b03165f8181525f5160206127bd5f395f51905f5260205260409020805460e81c61ffff16906101f482106122b657505050600181018091116107cf576122ae846001926121bc565b910190612237565b925061ffff91949550809350146107cf57805461ffff60e81b191660019290920160e81b61ffff60e81b1691909117905590565b636eb533ef60e11b5f5260045ffd5b6001600160601b038111612313576001600160601b031690565b6306dfcc6560e41b5f52606060045260245260445ffd5b9161233481610d7a565b803b156112e4576112d193611e44611e369461236061235560c087016110d8565b9560e08101906110e9565b969060405197889363e59646ff60e01b6020860152866024860152604485015260606064850152608484019161111b565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f7761cd2343be786e645192697256ccf13964ba0842c707c0b5c82927457bbf0360408201527fad7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a560608201524660808201523060a082015260a0815261242360c082610ed5565b5190209060405190602082019261190160f01b84526022830152604282015260428152611412606282610ed5565b929091643fffffffc063ffffffff82169160061b16818104604014821517156107cf57603f90046201388081018091116107cf57805a1061252057505f9182918260609560208451940192f115806124ea575b6124ac575050565b6124e57fc516ed2c8da59d8ee3f3a13b91d2e92747ab6bedd57a3fb5dad0032fa9a329a091604051918291602083526020830190611418565b0390a2565b3d91506101008211612516575b60405191601f19603f82011683016040528083525f602084013e6124a4565b61010091506124f7565b5a632d6868f160e01b5f5260045260245260445ffd5b9163ffffffff604061254d61255794955a90611d6c565b9201511690611ce9565b90806028029060288204036107cf57611bf291611ce9565b9392906001600160601b0316918291826125fd575b506001600160601b031603906001600160601b0382116107cf577f6e0bf5d63c3f7a2413c6b75b6c433a644fe461c40b415877f8f7ecf08697b18f926001600160601b036040931690816125e1575b5082519182526020820152a2565b6125ea90610deb565b6125f5828254611ce9565b90555f6125d3565b90915f80808093855af161260f612060565b501561261d57908291612584565b9050630e21dcbb60e11b5f5260018060a01b031660045260245260445ffd5b61ffff815460e81c16908115801561265357505050565b6107cf57805461ffff60e81b19165f1990920160e81b61ffff60e81b16919091179055565b6001600160a01b03165f9081527f7103b4d0a53003ec91f983abf6fa980e867f1e66bd497d2fb88c0b44a170b7696020526040902063ffffffff9054165f5160206127fd5f395f51905f52545f1981019081116107cf57808203612732575b50505f5160206127fd5f395f51905f5254801561271e575f19016126fa816121da565b81549060018060a01b039060031b1b191690555f5160206127fd5f395f51905f5255565b634e487b7160e01b5f52603160045260245ffd5b61273e6127a8916121da565b905460039190911b1c6001600160a01b0316612759836121da565b81546001600160a01b0360039290921b82811b199091169084901b17909155165f9081527f7103b4d0a53003ec91f983abf6fa980e867f1e66bd497d2fb88c0b44a170b7696020526040902090565b9063ffffffff198254161790555f806126d756fe7103b4d0a53003ec91f983abf6fa980e867f1e66bd497d2fb88c0b44a170b763025b8f33a41b03a003154a46303feddb0716230d10bf9260ebaf559394796d887103b4d0a53003ec91f983abf6fa980e867f1e66bd497d2fb88c0b44a170b764a2646970667358221220af09945a403973aa03b7f268cb4a04e5f6fb22032351308cff812ad1935b704664736f6c63430008240033";
32
+ //#endregion
33
+ //#region src/artifacts.ts
34
+ /** The diamond itself: its loupe, `diamondCut`, and the admin role (ADR 0005). */
35
+ const Router = {
36
+ abi: Router_default,
37
+ bytecode: bytecode$3
38
+ };
39
+ /** What the first `diamondCut` delegates to: `init(attestationVerifier, ecvrfVerifier)`. */
40
+ const RouterInit = {
41
+ abi: RouterInit_default,
42
+ bytecode: bytecode$2
43
+ };
44
+ /** The verifier a challenge runs a proof through. */
45
+ const ECVRFVerifier = {
46
+ abi: ECVRFVerifier_default,
47
+ bytecode: bytecode$5
48
+ };
49
+ /**
50
+ * The attestation verifier the router starts with: its owner, the deployer, vouches for a node
51
+ * and names the operator that may register it (`setTrustedNode`), standing in for a Nitro
52
+ * attestation.
53
+ */
54
+ const TrustedNodeEnclaveKeyVerifier = {
55
+ abi: TrustedNodeEnclaveKeyVerifier_default,
56
+ bytecode: bytecode$1
57
+ };
58
+ /** The facets cut into the router, by contract name (ADR 0005). */
59
+ const FACETS = {
60
+ VrfFacet: {
61
+ abi: VrfFacet_default,
62
+ bytecode
63
+ },
64
+ NodesFacet: {
65
+ abi: NodesFacet_default,
66
+ bytecode: bytecode$4
67
+ },
68
+ BalancesFacet: {
69
+ abi: BalancesFacet_default,
70
+ bytecode: bytecode$7
71
+ },
72
+ ConfigFacet: {
73
+ abi: ConfigFacet_default,
74
+ bytecode: bytecode$6
75
+ }
76
+ };
77
+ //#endregion
78
+ export { ECVRFVerifier, FACETS, Router, RouterInit, TrustedNodeEnclaveKeyVerifier };
@@ -0,0 +1,51 @@
1
+ import { Abi, Address, Hex } from "viem";
2
+ //#region src/diamond.d.ts
3
+ /** `FacetCutAction` of EIP-2535, as the diamond's `diamondCut` expects it. */
4
+ export declare const DIAMOND_ACTIONS: {
5
+ readonly ADD: 0;
6
+ readonly REPLACE: 1;
7
+ readonly REMOVE: 2;
8
+ };
9
+ /** The selectors a facet contributes to the diamond: every function in its ABI. */
10
+ export declare const facetSelectors: (abi: Abi) => Hex[];
11
+ /** One entry of the loupe's `facets()`: an address and the selectors routed to it. */
12
+ export type LiveFacet = {
13
+ readonly target: Address;
14
+ readonly selectors: readonly Hex[];
15
+ };
16
+ /** An in-place upgrade of one facet: what it takes over, gains, and drops. */
17
+ export type FacetCutPlan = {
18
+ /** The address the named facet is live at, or null when it is not cut in yet. */
19
+ readonly current: Address | null;
20
+ readonly replace: readonly Hex[];
21
+ readonly add: readonly Hex[];
22
+ /** Selectors of `current` alone that the named facet no longer declares. */
23
+ readonly remove: readonly Hex[];
24
+ };
25
+ /**
26
+ * Plans an in-place upgrade of one facet from the loupe (ADR 0005), failing closed: a selector
27
+ * another facet declares (`others`: every other facet's selectors and the router's own), or
28
+ * one routed to an address that serves such a selector, is refused rather than taken over, and
29
+ * so is a facet whose selectors are live on more than one address. Only the named facet's
30
+ * current address ever loses selectors.
31
+ */
32
+ export declare const planFacetCut: ({ selectors, facets, others }: {
33
+ readonly selectors: readonly Hex[];
34
+ readonly facets: readonly LiveFacet[];
35
+ readonly others: readonly Hex[];
36
+ }) => FacetCutPlan;
37
+ /** The `diamondCut` groups that carry `plan` out onto `target`, empty groups left out. */
38
+ export declare const facetCuts: ({ replace, add, remove }: FacetCutPlan, target: Address) => ({
39
+ target: `0x${string}`;
40
+ action: 1;
41
+ selectors: readonly `0x${string}`[];
42
+ } | {
43
+ target: `0x${string}`;
44
+ action: 0;
45
+ selectors: readonly `0x${string}`[];
46
+ } | {
47
+ target: "0x0000000000000000000000000000000000000000";
48
+ action: 2;
49
+ selectors: readonly `0x${string}`[];
50
+ })[];
51
+ //#endregion
@@ -0,0 +1,60 @@
1
+ import { toFunctionSelector, zeroAddress } from "viem";
2
+ //#region src/diamond.ts
3
+ /** `FacetCutAction` of EIP-2535, as the diamond's `diamondCut` expects it. */
4
+ const DIAMOND_ACTIONS = {
5
+ ADD: 0,
6
+ REPLACE: 1,
7
+ REMOVE: 2
8
+ };
9
+ /** The selectors a facet contributes to the diamond: every function in its ABI. */
10
+ const facetSelectors = (abi) => abi.filter((entry) => entry.type === "function").map(toFunctionSelector);
11
+ /**
12
+ * Plans an in-place upgrade of one facet from the loupe (ADR 0005), failing closed: a selector
13
+ * another facet declares (`others`: every other facet's selectors and the router's own), or
14
+ * one routed to an address that serves such a selector, is refused rather than taken over, and
15
+ * so is a facet whose selectors are live on more than one address. Only the named facet's
16
+ * current address ever loses selectors.
17
+ */
18
+ const planFacetCut = ({ selectors, facets, others }) => {
19
+ const routedTo = new Map(facets.flatMap(({ target, selectors }) => selectors.map((s) => [s, target])));
20
+ const declaredElsewhere = new Set(others);
21
+ const otherTargets = new Set(others.flatMap((selector) => routedTo.get(selector) ?? []));
22
+ const collisions = selectors.filter((selector) => {
23
+ const target = routedTo.get(selector);
24
+ return declaredElsewhere.has(selector) || target !== void 0 && otherTargets.has(target);
25
+ });
26
+ if (collisions.length > 0) {
27
+ const described = collisions.map((selector) => `${selector} (${routedTo.get(selector) ?? "declared by another facet"})`);
28
+ throw new Error(`Refusing the cut: another facet already has ${described.join(", ")}; rename the function or remove it from that facet first.`);
29
+ }
30
+ const live = [...new Set(selectors.flatMap((selector) => routedTo.get(selector) ?? []))];
31
+ if (live.length > 1) throw new Error(`Refusing the cut: the facet's selectors are live on several addresses (${live.join(", ")}).`);
32
+ const current = live[0] ?? null;
33
+ const declared = new Set(selectors);
34
+ return {
35
+ current,
36
+ replace: selectors.filter((selector) => routedTo.has(selector)),
37
+ add: selectors.filter((selector) => !routedTo.has(selector)),
38
+ remove: (facets.find(({ target }) => target === current)?.selectors ?? []).filter((selector) => !declared.has(selector))
39
+ };
40
+ };
41
+ /** The `diamondCut` groups that carry `plan` out onto `target`, empty groups left out. */
42
+ const facetCuts = ({ replace, add, remove }, target) => [
43
+ {
44
+ target,
45
+ action: DIAMOND_ACTIONS.REPLACE,
46
+ selectors: replace
47
+ },
48
+ {
49
+ target,
50
+ action: DIAMOND_ACTIONS.ADD,
51
+ selectors: add
52
+ },
53
+ {
54
+ target: zeroAddress,
55
+ action: DIAMOND_ACTIONS.REMOVE,
56
+ selectors: remove
57
+ }
58
+ ].filter((cut) => cut.selectors.length > 0);
59
+ //#endregion
60
+ export { DIAMOND_ACTIONS, facetCuts, facetSelectors, planFacetCut };
package/package.json CHANGED
@@ -1,6 +1,52 @@
1
1
  {
2
2
  "name": "@verify-network/contracts",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.1",
4
+ "description": "The Verify Network router a consumer builds against: viem-ready ABIs, the creation bytecode a local deploy of the router diamond takes, diamond cut helpers, and the Solidity consumer interfaces.",
5
+ "license": "MIT",
6
+ "files": [
7
+ "dist",
8
+ "contracts/IVerifyNetworkRouter.sol",
9
+ "contracts/IVrfReceiver.sol",
10
+ "contracts/IDirectVrfReceiver.sol"
11
+ ],
12
+ "type": "module",
13
+ "sideEffects": false,
14
+ "exports": {
15
+ "./package.json": "./package.json",
16
+ "./abi/*": {
17
+ "types": "./dist/abi/*.d.ts",
18
+ "default": "./dist/abi/*.js"
19
+ },
20
+ "./artifacts": {
21
+ "types": "./dist/artifacts.d.ts",
22
+ "default": "./dist/artifacts.js"
23
+ },
24
+ "./diamond": {
25
+ "types": "./dist/diamond.d.ts",
26
+ "default": "./dist/diamond.js"
27
+ },
28
+ "./contracts/IVerifyNetworkRouter.sol": "./contracts/IVerifyNetworkRouter.sol",
29
+ "./contracts/IVrfReceiver.sol": "./contracts/IVrfReceiver.sol",
30
+ "./contracts/IDirectVrfReceiver.sol": "./contracts/IDirectVrfReceiver.sol"
31
+ },
32
+ "scripts": {
33
+ "build": "hardhat compile",
34
+ "clean": "hardhat clean",
35
+ "fmt": "prettier --write 'contracts/**/*.sol' 'test/**/*.sol'",
36
+ "fmt:check": "prettier --check 'contracts/**/*.sol' 'test/**/*.sol'",
37
+ "test": "hardhat test",
38
+ "type-check": "tsc",
39
+ "upgrade-facet": "node scripts/upgrade-facet.ts",
40
+ "prepack": "vp exec hardhat compile && vp pack && node ../../scripts/publish-manifest.ts apply",
41
+ "postpack": "node ../../scripts/publish-manifest.ts restore"
42
+ },
43
+ "peerDependencies": {
44
+ "viem": "^2.56.3"
45
+ },
46
+ "engines": {
47
+ "node": ">=22"
48
+ },
49
+ "publishConfig": {
50
+ "access": "public"
51
+ }
52
+ }