tx · 8ENvEpigvSfsimTjmkHtE7Cmu1fH61nx1gNHCDtba8Te 3PR7vWpRo7VziGSEAaBwb8SuZ7ZzANBCAXr: -0.01400000 Waves 2022.12.26 12:24 [3442560] smart account 3PR7vWpRo7VziGSEAaBwb8SuZ7ZzANBCAXr > SELF 0.00000000 Waves
{ "type": 13, "id": "8ENvEpigvSfsimTjmkHtE7Cmu1fH61nx1gNHCDtba8Te", "fee": 1400000, "feeAssetId": null, "timestamp": 1672046680854, "version": 2, "chainId": 87, "sender": "3PR7vWpRo7VziGSEAaBwb8SuZ7ZzANBCAXr", "senderPublicKey": "BB3kyd8oPA6pCWSF1SXLKDFQ8cGqrPm7RDrXu49GTRv5", "proofs": [ "3ne9dd2SG7cs48MQKrsLmo8fkrw2ZkVdJzigknyfv1eN5KucQfbqx8AkZ3VS7vSUqC4voLTdykgA8ciKDBvKWR9Q" ], "script": "base64:BgIVCAISBwoFCAEBAQgSAwoBCBIDCgEIDwAJU0VQQVJBVE9SAgJfXwAFV0FWRVMCBVdBVkVTAAxLRVlfTVVMVElTSUcCCE1VTFRJU0lHAApLRVlfU1RBVFVTAgZTVEFUVVMACUtFWV9BU1NFVAIFQVNTRVQAD0tFWV9TUE9OU09SU0hJUAILU1BPTlNPUlNISVAACklOVk9LRV9GRUUAoMIeAAxDT01QRU5TQVRJT04JAGgCAAIFCklOVk9LRV9GRUUAF0ZVTkNfVVBEQVRFX1NQT05TT1JTSElQAhF1cGRhdGVTcG9uc29yc2hpcAANRlVOQ19XSVRIRFJBVwIId2l0aGRyYXcBEF92YWxpZGF0ZUFkZHJlc3MBCGFkZHJlc3NfBAckbWF0Y2gwCQCmCAEFCGFkZHJlc3NfAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWEFByRtYXRjaDAGBwEOX3RvQXNzZXRWZWN0b3IBBmFzc2V0XwMJAAACBQZhc3NldF8FBVdBVkVTBQR1bml0CQDZBAEFBmFzc2V0XwEQX2xvYWRTcG9uc29yc2hpcAEOdG9rZW5Db250cmFjdF8EByRtYXRjaDAJAKIIAQkAuQkCCQDMCAIFD0tFWV9TUE9OU09SU0hJUAkAzAgCBQ50b2tlbkNvbnRyYWN0XwUDbmlsBQlTRVBBUkFUT1IDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBAZzdHJ1Y3QJALUJAgUBYQUJU0VQQVJBVE9SCQCYCgYJAJEDAgUGc3RydWN0AAAJAJEDAgUGc3RydWN0AAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdHJ1Y3QAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0cnVjdAADCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RydWN0AAQJAJEDAgUGc3RydWN0AAUJAAIBAiBfbG9hZFNwb25zb3JzaGlwOiBubyBzcG9uc29yc2hpcAEQX3NhdmVTcG9uc29yc2hpcAEMc3BvbnNvcnNoaXBfCQDMCAIJAQtTdHJpbmdFbnRyeQIJALkJAgkAzAgCBQ9LRVlfU1BPTlNPUlNISVAJAMwIAggFDHNwb25zb3JzaGlwXwJfMQUDbmlsBQlTRVBBUkFUT1IJALkJAgkAzAgCCAUMc3BvbnNvcnNoaXBfAl8xCQDMCAIIBQxzcG9uc29yc2hpcF8CXzIJAMwIAgkApAMBCAUMc3BvbnNvcnNoaXBfAl8zCQDMCAIJAKQDAQgFDHNwb25zb3JzaGlwXwJfNAkAzAgCCQCkAwEIBQxzcG9uc29yc2hpcF8CXzUJAMwIAggFDHNwb25zb3JzaGlwXwJfNgUDbmlsBQlTRVBBUkFUT1IFA25pbAEKX2xvYWRBc3NldAENdG9rZW5Db250cmFjdAQHJG1hdGNoMAkAnQgCBQ10b2tlbkNvbnRyYWN0BQlLRVlfQVNTRVQDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQDZBAEFAWEBAAMBaQEQc2V0dXBTcG9uc29yc2hpcAUOdG9rZW5Db250cmFjdF8VbWluU3BvbnNvcmVkQXNzZXRGZWVfD3Nwb25zb3JlZFdhdmVzXw90aHJlc2hvbGRXYXZlc18TYmVuZWZpY2lhcnlBZGRyZXNzXwQDZXJyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIjc2V0dXBTcG9uc29yc2hpcDogcGVybWlzc2lvbiBkZW5pZWQDCQEBIQEJARBfdmFsaWRhdGVBZGRyZXNzAQUOdG9rZW5Db250cmFjdF8JAAIBAihzZXR1cFNwb25zb3JzaGlwOiBpbnZhbGlkIHRva2VuIGNvbnRyYWN0AwkAZgIAAAUVbWluU3BvbnNvcmVkQXNzZXRGZWVfCQACAQIxc2V0dXBTcG9uc29yc2hpcDogaW52YWxpZCBtaW4gc3BvbnNvcmVkIGFzc2V0IGZlZQMJAGYCAAAFD3Nwb25zb3JlZFdhdmVzXwkAAgECKXNldHVwU3BvbnNvcnNoaXA6IGludmFsaWQgc3BvbnNvcmVkIHdhdmVzAwkAZgIAAAUPdGhyZXNob2xkV2F2ZXNfCQACAQIpc2V0dXBTcG9uc29yc2hpcDogaW52YWxpZCB0aHJlc2hvbGQgd2F2ZXMDCQEBIQEJARBfdmFsaWRhdGVBZGRyZXNzAQUTYmVuZWZpY2lhcnlBZGRyZXNzXwkAAgECLXNldHVwU3BvbnNvcnNoaXA6IGludmFsaWQgYmVuZWZpY2lhcnkgYWRkcmVzcwUEdW5pdAMJAAACBQNlcnIFA2VycgQNdG9rZW5Db250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQUOdG9rZW5Db250cmFjdF8ECnRva2VuQXNzZXQJAQpfbG9hZEFzc2V0AQUNdG9rZW5Db250cmFjdAQLd2F2ZXNBbW91bnQICQDvBwEFDXRva2VuQ29udHJhY3QHcmVndWxhcgQNd2F2ZXNUb0NoYXJnZQMJAGYCBQ9zcG9uc29yZWRXYXZlc18FC3dhdmVzQW1vdW50CQBlAgUPc3BvbnNvcmVkV2F2ZXNfBQt3YXZlc0Ftb3VudAAABAppbnZvY2F0aW9uCQD8BwQFDXRva2VuQ29udHJhY3QFF0ZVTkNfVVBEQVRFX1NQT05TT1JTSElQCQDMCAIFFW1pblNwb25zb3JlZEFzc2V0RmVlXwkAzAgCBQ9zcG9uc29yZWRXYXZlc18FA25pbAUDbmlsAwkAAAIFCmludm9jYXRpb24FCmludm9jYXRpb24EC3Nwb25zb3JzaGlwCQCYCgYFDnRva2VuQ29udHJhY3RfCQDYBAEFCnRva2VuQXNzZXQFFW1pblNwb25zb3JlZEFzc2V0RmVlXwUPc3BvbnNvcmVkV2F2ZXNfBQ90aHJlc2hvbGRXYXZlc18FE2JlbmVmaWNpYXJ5QWRkcmVzc18JAJQKAgkAzggCCQEQX3NhdmVTcG9uc29yc2hpcAEFC3Nwb25zb3JzaGlwCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFDXRva2VuQ29udHJhY3QFDXdhdmVzVG9DaGFyZ2UFBHVuaXQFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARVjaGVja3BvaW50U3BvbnNvcnNoaXABDnRva2VuQ29udHJhY3RfBA10b2tlbkNvbnRyYWN0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUOdG9rZW5Db250cmFjdF8CLWNoZWNrcG9pbnRTcG9uc29yc2hpcDogaW52YWxpZCB0b2tlbiBjb250cmFjdAQLc3BvbnNvcnNoaXAJARBfbG9hZFNwb25zb3JzaGlwAQUOdG9rZW5Db250cmFjdF8ECnRva2VuQXNzZXQIBQtzcG9uc29yc2hpcAJfMgQUbWluU3BvbnNvcmVkQXNzZXRGZWUIBQtzcG9uc29yc2hpcAJfMwQOc3BvbnNvcmVkV2F2ZXMIBQtzcG9uc29yc2hpcAJfNAQOdGhyZXNob2xkV2F2ZXMIBQtzcG9uc29yc2hpcAJfNQQSYmVuZWZpY2lhcnlBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCAULc3BvbnNvcnNoaXACXzYECXdhdmVzTGVmdAgJAO8HAQUNdG9rZW5Db250cmFjdAdyZWd1bGFyBANlcnIDCQBmAgUJd2F2ZXNMZWZ0BQ50aHJlc2hvbGRXYXZlcwkAAgECNGNoZWNrcG9pbnRTcG9uc29yc2hpcDogbm8gdGhyZXNob2xkIGhhcyBiZWVuIHJlYWNoZWQFBHVuaXQDCQAAAgUDZXJyBQNlcnIECmludm9jYXRpb24JAPwHBAUNdG9rZW5Db250cmFjdAUXRlVOQ19VUERBVEVfU1BPTlNPUlNISVAJAMwIAgUUbWluU3BvbnNvcmVkQXNzZXRGZWUJAMwIAgUOc3BvbnNvcmVkV2F2ZXMFA25pbAUDbmlsAwkAAAIFCmludm9jYXRpb24FCmludm9jYXRpb24EByRtYXRjaDAFCmludm9jYXRpb24DCQABAgUHJG1hdGNoMAIDSW50BBZzcG9uc29yVG9rZW5Ub0V4Y2hhbmdlBQckbWF0Y2gwBAt3YXZlc0JlZm9yZQgJAO8HAQUEdGhpcwdyZWd1bGFyAwkAAAIFC3dhdmVzQmVmb3JlBQt3YXZlc0JlZm9yZQQIZXhjaGFuZ2UJAPwHBAUNdG9rZW5Db250cmFjdAUNRlVOQ19XSVRIRFJBVwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOX3RvQXNzZXRWZWN0b3IBBQp0b2tlbkFzc2V0BRZzcG9uc29yVG9rZW5Ub0V4Y2hhbmdlBQNuaWwDCQAAAgUIZXhjaGFuZ2UFCGV4Y2hhbmdlBAp3YXZlc0FmdGVyCAkA7wcBBQR0aGlzB3JlZ3VsYXIDCQAAAgUKd2F2ZXNBZnRlcgUKd2F2ZXNBZnRlcgQOd2F2ZXNSZW1haW5pbmcICQDvBwEFDXRva2VuQ29udHJhY3QHcmVndWxhcgMJAAACBQ53YXZlc1JlbWFpbmluZwUOd2F2ZXNSZW1haW5pbmcEC3dhdmVzSW5jb21lCQBlAgUKd2F2ZXNBZnRlcgULd2F2ZXNCZWZvcmUEDXdhdmVzVG9DaGFyZ2UDCQBmAgUOc3BvbnNvcmVkV2F2ZXMFDndhdmVzUmVtYWluaW5nCQBlAgUOc3BvbnNvcmVkV2F2ZXMFDndhdmVzUmVtYWluaW5nAAAEEndhdmVzVG9CZW5lZmljaWFyeQMJAGYCBQt3YXZlc0luY29tZQUNd2F2ZXNUb0NoYXJnZQkAZQIFC3dhdmVzSW5jb21lBQ13YXZlc1RvQ2hhcmdlAAAEDGNvbXBlbnNhdGlvbgMJAGYCBRJ3YXZlc1RvQmVuZWZpY2lhcnkFDENPTVBFTlNBVElPTgUMQ09NUEVOU0FUSU9OAAAJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ10b2tlbkNvbnRyYWN0BQ13YXZlc1RvQ2hhcmdlBQR1bml0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFEmJlbmVmaWNpYXJ5QWRkcmVzcwkAZQIFEndhdmVzVG9CZW5lZmljaWFyeQUMY29tcGVuc2F0aW9uBQR1bml0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpDG9yaWdpbkNhbGxlcgUMY29tcGVuc2F0aW9uBQR1bml0BQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAidjaGVja3BvaW50U3BvbnNvcnNoaXA6IGludm9jYXRpb24gZXJyb3IJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQELc2V0TXVsdGlzaWcBCW11bHRpc2lnXwQDZXJyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIec2V0TXVsdGlzaWc6IHBlcm1pc3Npb24gZGVuaWVkAwkBASEBCQEQX3ZhbGlkYXRlQWRkcmVzcwEFCW11bHRpc2lnXwkAAgECJXNldE11bHRpc2lnOiBpbnZhbGlkIG11bHRpc2lnIGFkZHJlc3MFBHVuaXQDCQAAAgUDZXJyBQNlcnIJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQxLRVlfTVVMVElTSUcFCW11bHRpc2lnXwUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAQHJG1hdGNoMAkAoggBBQxLRVlfTVVMVElTSUcDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAhtdWx0aXNpZwUHJG1hdGNoMAkBC3ZhbHVlT3JFbHNlAgkAmwgCCQERQGV4dHJOYXRpdmUoMTA2MikBBQhtdWx0aXNpZwkAuQkCCQDMCAIFCktFWV9TVEFUVVMJAMwIAgkApQgBBQR0aGlzCQDMCAIJANgEAQgFAnR4AmlkBQNuaWwFCVNFUEFSQVRPUgcJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXmjflNS", "height": 3442560, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 6 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let a = "__" | |
5 | + | ||
6 | + | let b = "WAVES" | |
7 | + | ||
8 | + | let c = "MULTISIG" | |
9 | + | ||
10 | + | let d = "STATUS" | |
11 | + | ||
12 | + | let e = "ASSET" | |
13 | + | ||
14 | + | let f = "SPONSORSHIP" | |
15 | + | ||
16 | + | let g = 500000 | |
17 | + | ||
18 | + | let h = (2 * g) | |
19 | + | ||
20 | + | let i = "updateSponsorship" | |
21 | + | ||
22 | + | let j = "withdraw" | |
23 | + | ||
24 | + | func k (l) = { | |
25 | + | let m = addressFromString(l) | |
26 | + | if ($isInstanceOf(m, "Address")) | |
27 | + | then { | |
28 | + | let n = m | |
29 | + | true | |
30 | + | } | |
31 | + | else false | |
32 | + | } | |
33 | + | ||
34 | + | ||
35 | + | func o (p) = if ((p == b)) | |
36 | + | then unit | |
37 | + | else fromBase58String(p) | |
38 | + | ||
39 | + | ||
40 | + | func q (r) = { | |
41 | + | let m = getString(makeString([f, r], a)) | |
42 | + | if ($isInstanceOf(m, "String")) | |
43 | + | then { | |
44 | + | let n = m | |
45 | + | let s = split(n, a) | |
46 | + | $Tuple6(s[0], s[1], parseIntValue(s[2]), parseIntValue(s[3]), parseIntValue(s[4]), s[5]) | |
47 | + | } | |
48 | + | else throw("_loadSponsorship: no sponsorship") | |
49 | + | } | |
50 | + | ||
51 | + | ||
52 | + | func t (u) = [StringEntry(makeString([f, u._1], a), makeString([u._1, u._2, toString(u._3), toString(u._4), toString(u._5), u._6], a))] | |
53 | + | ||
54 | + | ||
55 | + | func v (w) = { | |
56 | + | let m = getString(w, e) | |
57 | + | if ($isInstanceOf(m, "String")) | |
58 | + | then { | |
59 | + | let n = m | |
60 | + | fromBase58String(n) | |
61 | + | } | |
62 | + | else base58'' | |
63 | + | } | |
64 | + | ||
65 | + | ||
66 | + | @Callable(x) | |
67 | + | func setupSponsorship (r,y,z,A,B) = { | |
68 | + | let C = if ((x.caller != this)) | |
69 | + | then throw("setupSponsorship: permission denied") | |
70 | + | else if (!(k(r))) | |
71 | + | then throw("setupSponsorship: invalid token contract") | |
72 | + | else if ((0 > y)) | |
73 | + | then throw("setupSponsorship: invalid min sponsored asset fee") | |
74 | + | else if ((0 > z)) | |
75 | + | then throw("setupSponsorship: invalid sponsored waves") | |
76 | + | else if ((0 > A)) | |
77 | + | then throw("setupSponsorship: invalid threshold waves") | |
78 | + | else if (!(k(B))) | |
79 | + | then throw("setupSponsorship: invalid beneficiary address") | |
80 | + | else unit | |
81 | + | if ((C == C)) | |
82 | + | then { | |
83 | + | let w = addressFromStringValue(r) | |
84 | + | let D = v(w) | |
85 | + | let E = wavesBalance(w).regular | |
86 | + | let F = if ((z > E)) | |
87 | + | then (z - E) | |
88 | + | else 0 | |
89 | + | let G = invoke(w, i, [y, z], nil) | |
90 | + | if ((G == G)) | |
91 | + | then { | |
92 | + | let H = $Tuple6(r, toBase58String(D), y, z, A, B) | |
93 | + | $Tuple2((t(H) ++ [ScriptTransfer(w, F, unit)]), unit) | |
94 | + | } | |
95 | + | else throw("Strict value is not equal to itself.") | |
96 | + | } | |
97 | + | else throw("Strict value is not equal to itself.") | |
98 | + | } | |
99 | + | ||
100 | + | ||
101 | + | ||
102 | + | @Callable(x) | |
103 | + | func checkpointSponsorship (r) = { | |
104 | + | let w = valueOrErrorMessage(addressFromString(r), "checkpointSponsorship: invalid token contract") | |
105 | + | let H = q(r) | |
106 | + | let D = H._2 | |
107 | + | let I = H._3 | |
108 | + | let J = H._4 | |
109 | + | let K = H._5 | |
110 | + | let L = addressFromStringValue(H._6) | |
111 | + | let M = wavesBalance(w).regular | |
112 | + | let C = if ((M > K)) | |
113 | + | then throw("checkpointSponsorship: no threshold has been reached") | |
114 | + | else unit | |
115 | + | if ((C == C)) | |
116 | + | then { | |
117 | + | let G = invoke(w, i, [I, J], nil) | |
118 | + | if ((G == G)) | |
119 | + | then { | |
120 | + | let m = G | |
121 | + | if ($isInstanceOf(m, "Int")) | |
122 | + | then { | |
123 | + | let N = m | |
124 | + | let O = wavesBalance(this).regular | |
125 | + | if ((O == O)) | |
126 | + | then { | |
127 | + | let P = invoke(w, j, nil, [AttachedPayment(o(D), N)]) | |
128 | + | if ((P == P)) | |
129 | + | then { | |
130 | + | let Q = wavesBalance(this).regular | |
131 | + | if ((Q == Q)) | |
132 | + | then { | |
133 | + | let R = wavesBalance(w).regular | |
134 | + | if ((R == R)) | |
135 | + | then { | |
136 | + | let S = (Q - O) | |
137 | + | let F = if ((J > R)) | |
138 | + | then (J - R) | |
139 | + | else 0 | |
140 | + | let T = if ((S > F)) | |
141 | + | then (S - F) | |
142 | + | else 0 | |
143 | + | let U = if ((T > h)) | |
144 | + | then h | |
145 | + | else 0 | |
146 | + | $Tuple2([ScriptTransfer(w, F, unit), ScriptTransfer(L, (T - U), unit), ScriptTransfer(x.originCaller, U, unit)], unit) | |
147 | + | } | |
148 | + | else throw("Strict value is not equal to itself.") | |
149 | + | } | |
150 | + | else throw("Strict value is not equal to itself.") | |
151 | + | } | |
152 | + | else throw("Strict value is not equal to itself.") | |
153 | + | } | |
154 | + | else throw("Strict value is not equal to itself.") | |
155 | + | } | |
156 | + | else throw("checkpointSponsorship: invocation error") | |
157 | + | } | |
158 | + | else throw("Strict value is not equal to itself.") | |
159 | + | } | |
160 | + | else throw("Strict value is not equal to itself.") | |
161 | + | } | |
162 | + | ||
163 | + | ||
164 | + | ||
165 | + | @Callable(x) | |
166 | + | func setMultisig (V) = { | |
167 | + | let C = if ((x.caller != this)) | |
168 | + | then throw("setMultisig: permission denied") | |
169 | + | else if (!(k(V))) | |
170 | + | then throw("setMultisig: invalid multisig address") | |
171 | + | else unit | |
172 | + | if ((C == C)) | |
173 | + | then $Tuple2([StringEntry(c, V)], unit) | |
174 | + | else throw("Strict value is not equal to itself.") | |
175 | + | } | |
176 | + | ||
177 | + | ||
178 | + | @Verifier(W) | |
179 | + | func X () = { | |
180 | + | let m = getString(c) | |
181 | + | if ($isInstanceOf(m, "String")) | |
182 | + | then { | |
183 | + | let Y = m | |
184 | + | valueOrElse(getBoolean(addressFromStringValue(Y), makeString([d, toString(this), toBase58String(W.id)], a)), false) | |
185 | + | } | |
186 | + | else sigVerify(W.bodyBytes, W.proofs[0], W.senderPublicKey) | |
187 | + | } | |
188 | + |
github/deemru/w8io/3ef1775 17.07 ms ◑