tx · 5Fquvgx8weY4n2UPtPBLWwkXcSTjf7sYAsBx5aza497h

3N54eKW5ZucDaRaGVUfzX8xRXv6Ve8M71tM:  -0.01400000 Waves

2020.06.23 12:03 [1056080] smart account 3N54eKW5ZucDaRaGVUfzX8xRXv6Ve8M71tM > SELF 0.00000000 Waves

{ "type": 13, "id": "5Fquvgx8weY4n2UPtPBLWwkXcSTjf7sYAsBx5aza497h", "fee": 1400000, "feeAssetId": null, "timestamp": 1592903024779, "version": 1, "sender": "3N54eKW5ZucDaRaGVUfzX8xRXv6Ve8M71tM", "senderPublicKey": "FmnQ1LwTnauTS2BSrZivE1nSF1A9MY9hyYB72pyh5hw9", "proofs": [ "2x6YCD1jHZsJJh6PbvK9K5J32FCGaLX5qEDemd1yd1ZP8w8J71UkwZrp5AEPqEmSCEWwYmwgQAznRnYp6Az43ofH" ], "script": "base64:AAIDAAAAAAAAAAwIARIDCgEIEgMKAQIAAAAOAQAAAApkZWNvZGVJbnQ4AAAAAgAAAARkYXRhAAAABm9mZnNldAMJAABmAAAAAgAAAAAAAAAAAQkAAMgAAAABBQAAAARkYXRhCQAAAgAAAAECAAAALWRlY29kZSB1OCBlcnJvciwgZGF0YSBtdXN0IGJlIGF0IGxlYXN0IDEgYnl0ZQMJAABmAAAAAgUAAAAGb2Zmc2V0CQAAyAAAAAEFAAAABGRhdGEJAAACAAAAAQIAAAAjZGVjb2RlIHU4IGVycm9yLCBkZWNvZGluZyBpcyBmaW5pc2gEAAAAAngwCQAAyQAAAAIJAADKAAAAAgUAAAAEZGF0YQUAAAAGb2Zmc2V0AAAAAAAAAAABBAAAAAJ4MQkABLIAAAACBQAAAAJ4MAAAAAAAAAAAAAkABEwAAAACCQAEsgAAAAIJAADLAAAAAgEAAAAHAAAAAAAAAAUAAAACeDAAAAAAAAAAAAAJAARMAAAAAgkAAGQAAAACBQAAAAZvZmZzZXQAAAAAAAAAAAEFAAAAA25pbAEAAAALZGVjb2RlSW50MTYAAAACAAAABGRhdGEAAAAGb2Zmc2V0AwkAAGYAAAACAAAAAAAAAAACCQAAyAAAAAEFAAAABGRhdGEJAAACAAAAAQIAAAAvZGVjb2RlIHUxNiBlcnJvciwgZGF0YSBtdXN0IGJlIGF0IGxlYXN0IDIgYnl0ZXMDCQAAZgAAAAIFAAAABm9mZnNldAkAAMgAAAABBQAAAARkYXRhCQAAAgAAAAECAAAAJGRlY29kZSB1MTYgZXJyb3IsIGRlY29kaW5nIGlzIGZpbmlzaAQAAAACeDAJAADKAAAAAgUAAAAEZGF0YQUAAAAGb2Zmc2V0BAAAAAJ4MQkAAMkAAAACBQAAAAJ4MAAAAAAAAAAAAQQAAAACeDIJAADJAAAAAgkAAMoAAAACBQAAAAJ4MAAAAAAAAAAAAQAAAAAAAAAAAQkABEwAAAACCQAEsgAAAAIJAADLAAAAAgkAAMsAAAACAQAAAAYAAAAAAAAFAAAAAngyBQAAAAJ4MQAAAAAAAAAAAAkABEwAAAACCQAAZAAAAAIFAAAABm9mZnNldAAAAAAAAAAAAgUAAAADbmlsAQAAAAtkZWNvZGVJbnQzMgAAAAIAAAAEZGF0YQAAAAZvZmZzZXQDCQAAZgAAAAIAAAAAAAAAAAQJAADIAAAAAQUAAAAEZGF0YQkAAAIAAAABAgAAAC9kZWNvZGUgdTMyIGVycm9yLCBkYXRhIG11c3QgYmUgYXQgbGVhc3QgNCBieXRlcwMJAABmAAAAAgUAAAAGb2Zmc2V0CQAAyAAAAAEFAAAABGRhdGEJAAACAAAAAQIAAAAkZGVjb2RlIHUzMiBlcnJvciwgZGVjb2RpbmcgaXMgZmluaXNoBAAAAAJ4MAkAAMoAAAACBQAAAARkYXRhBQAAAAZvZmZzZXQEAAAAAngxCQAAyQAAAAIFAAAAAngwAAAAAAAAAAABBAAAAAJ4MgkAAMkAAAACCQAAygAAAAIFAAAAAngwAAAAAAAAAAABAAAAAAAAAAABBAAAAAJ4MwkAAMkAAAACCQAAygAAAAIFAAAAAngwAAAAAAAAAAACAAAAAAAAAAABBAAAAAJ4NAkAAMkAAAACCQAAygAAAAIFAAAAAngwAAAAAAAAAAADAAAAAAAAAAABCQAETAAAAAIJAASyAAAAAgkAAMsAAAACCQAAywAAAAIJAADLAAAAAgkAAMsAAAACAQAAAAQAAAAABQAAAAJ4NAUAAAACeDMFAAAAAngyBQAAAAJ4MQAAAAAAAAAAAAkABEwAAAACCQAAZAAAAAIFAAAABm9mZnNldAAAAAAAAAAABAUAAAADbmlsAQAAAAtkZWNvZGVJbnQ2NAAAAAIAAAAEZGF0YQAAAAZvZmZzZXQDCQAAZgAAAAIAAAAAAAAAAAgJAADIAAAAAQUAAAAEZGF0YQkAAAIAAAABAgAAAC9kZWNvZGUgdTMyIGVycm9yLCBkYXRhIG11c3QgYmUgYXQgbGVhc3QgOCBieXRlcwMJAABmAAAAAgUAAAAGb2Zmc2V0CQAAyAAAAAEFAAAABGRhdGEJAAACAAAAAQIAAAAkZGVjb2RlIHUzMiBlcnJvciwgZGVjb2RpbmcgaXMgZmluaXNoBAAAAAJ4MAkAAMoAAAACBQAAAARkYXRhBQAAAAZvZmZzZXQEAAAAAngxCQAAyQAAAAIFAAAAAngwAAAAAAAAAAABBAAAAAJ4MgkAAMkAAAACCQAAygAAAAIFAAAAAngwAAAAAAAAAAABAAAAAAAAAAABBAAAAAJ4MwkAAMkAAAACCQAAygAAAAIFAAAAAngwAAAAAAAAAAACAAAAAAAAAAABBAAAAAJ4NAkAAMkAAAACCQAAygAAAAIFAAAAAngwAAAAAAAAAAADAAAAAAAAAAABBAAAAAJ4NQkAAMkAAAACCQAAygAAAAIFAAAAAngwAAAAAAAAAAAEAAAAAAAAAAABBAAAAAJ4NgkAAMkAAAACCQAAygAAAAIFAAAAAngwAAAAAAAAAAAFAAAAAAAAAAABBAAAAAJ4NwkAAMkAAAACCQAAygAAAAIFAAAAAngwAAAAAAAAAAAGAAAAAAAAAAABBAAAAAJ4OAkAAMkAAAACCQAAygAAAAIFAAAAAngwAAAAAAAAAAAHAAAAAAAAAAABCQAETAAAAAIJAASyAAAAAgkAAMsAAAACCQAAywAAAAIJAADLAAAAAgkAAMsAAAACCQAAywAAAAIJAADLAAAAAgkAAMsAAAACBQAAAAJ4OAUAAAACeDcFAAAAAng2BQAAAAJ4NQUAAAACeDQFAAAAAngzBQAAAAJ4MgUAAAACeDEAAAAAAAAAAAAJAARMAAAAAgkAAGQAAAACBQAAAAZvZmZzZXQAAAAAAAAAAAgFAAAAA25pbAEAAAAKZGVjb2RlQm9vbAAAAAIAAAAEZGF0YQAAAAZvZmZzZXQEAAAACGRlY29kZWQxCQEAAAAKZGVjb2RlSW50OAAAAAIFAAAABGRhdGEFAAAABm9mZnNldAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgIAAAAEYm9vbAkBAAAAAiE9AAAAAgkAAZEAAAACBQAAAAhkZWNvZGVkMQAAAAAAAAAAAAAAAAAAAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgIAAAADaW50CQABkQAAAAIFAAAACGRlY29kZWQxAAAAAAAAAAABBQAAAANuaWwBAAAADWRlY29kZUJ5dGVzMzIAAAACAAAABGRhdGEAAAAGb2Zmc2V0AwkAAGYAAAACAAAAAAAAAAAgCQAAyAAAAAEFAAAABGRhdGEJAAACAAAAAQIAAAA0ZGVjb2RlIGJ5dGVzMzIgZXJyb3IsIGRhdGEgbXVzdCBiZSBhdCBsZWFzdCAzMiBieXRlcwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgIAAAALYnl0ZV92ZWN0b3IJAADJAAAAAgkAAMoAAAACBQAAAARkYXRhBQAAAAZvZmZzZXQAAAAAAAAAACAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAICAAAAA2ludAkAAGQAAAACBQAAAAZvZmZzZXQAAAAAAAAAACAFAAAAA25pbAEAAAANZGVjb2RlQnl0ZXM2NAAAAAIAAAAEZGF0YQAAAAZvZmZzZXQDCQAAZgAAAAIAAAAAAAAAAEAJAADIAAAAAQUAAAAEZGF0YQkAAAIAAAABAgAAADRkZWNvZGUgYnl0ZXM2NCBlcnJvciwgZGF0YSBtdXN0IGJlIGF0IGxlYXN0IDY0IGJ5dGVzCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACAgAAAAtieXRlX3ZlY3RvcgkAAMkAAAACCQAAygAAAAIFAAAABGRhdGEFAAAABm9mZnNldAAAAAAAAAAAQAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgIAAAADaW50CQAAZAAAAAIFAAAABm9mZnNldAAAAAAAAAAAQAUAAAADbmlsAQAAAA1kZWNvZGVCeXRlczY1AAAAAgAAAARkYXRhAAAABm9mZnNldAMJAABmAAAAAgAAAAAAAAAAQQkAAMgAAAABBQAAAARkYXRhCQAAAgAAAAECAAAANGRlY29kZSBieXRlczY1IGVycm9yLCBkYXRhIG11c3QgYmUgYXQgbGVhc3QgNjUgYnl0ZXMJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAICAAAAC2J5dGVfdmVjdG9yCQAAyQAAAAIJAADKAAAAAgUAAAAEZGF0YQUAAAAGb2Zmc2V0AAAAAAAAAABBCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACAgAAAANpbnQJAABkAAAAAgUAAAAGb2Zmc2V0AAAAAAAAAABBBQAAAANuaWwBAAAAC2RlY29kZUJ5dGVzAAAAAgAAAARkYXRhAAAABm9mZnNldAQAAAAIZGVjb2RlZDEJAQAAAAtkZWNvZGVJbnQzMgAAAAIFAAAABGRhdGEFAAAABm9mZnNldAQAAAAJYnl0ZXNTaXplCQABkQAAAAIFAAAACGRlY29kZWQxAAAAAAAAAAAABAAAAApuZXh0T2Zmc2V0CQABkQAAAAIFAAAACGRlY29kZWQxAAAAAAAAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACAgAAAAtieXRlX3ZlY3RvcgkAAMkAAAACCQAAygAAAAIFAAAABGRhdGEFAAAACm5leHRPZmZzZXQFAAAACWJ5dGVzU2l6ZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgIAAAADaW50CQAAZAAAAAIFAAAACm5leHRPZmZzZXQFAAAACWJ5dGVzU2l6ZQUAAAADbmlsAQAAAAxkZWNvZGVTdHJpbmcAAAACAAAABGRhdGEAAAAGb2Zmc2V0BAAAAAhkZWNvZGVkMQkBAAAAC2RlY29kZUludDMyAAAAAgUAAAAEZGF0YQUAAAAGb2Zmc2V0BAAAAAlieXRlc1NpemUJAAGRAAAAAgUAAAAIZGVjb2RlZDEAAAAAAAAAAAAEAAAACm5leHRPZmZzZXQJAAGRAAAAAgUAAAAIZGVjb2RlZDEAAAAAAAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAICAAAABnN0cmluZwkABLAAAAABCQAAyQAAAAIJAADKAAAAAgUAAAAEZGF0YQUAAAAKbmV4dE9mZnNldAUAAAAJYnl0ZXNTaXplCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACAgAAAANpbnQJAABkAAAAAgUAAAAKbmV4dE9mZnNldAUAAAAJYnl0ZXNTaXplBQAAAANuaWwBAAAACWdldEFzQm9vbAAAAAEAAAAFdHVwbGUEAAAAByRtYXRjaDAICQABkQAAAAIFAAAABXR1cGxlAAAAAAAAAAAAAAAABXZhbHVlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFiBQAAAAckbWF0Y2gwBQAAAAFiCQAAAgAAAAECAAAADW5vdCBhIEJvb2xlYW4BAAAAD2dldEFzQnl0ZVZlY3RvcgAAAAEAAAAFdHVwbGUEAAAAByRtYXRjaDAICQABkQAAAAIFAAAABXR1cGxlAAAAAAAAAAAAAAAABXZhbHVlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJidgUAAAAHJG1hdGNoMAUAAAACYnYJAAACAAAAAQIAAAAQbm90IGEgQnl0ZVZlY3RvcgEAAAALZ2V0QXNTdHJpbmcAAAABAAAABXR1cGxlBAAAAAckbWF0Y2gwCAkAAZEAAAACBQAAAAV0dXBsZQAAAAAAAAAAAAAAAAV2YWx1ZQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwBQAAAAFzCQAAAgAAAAECAAAADG5vdCBhIFN0cmluZwEAAAAJZ2V0T2Zmc2V0AAAAAQAAAAV0dXBsZQQAAAAHJG1hdGNoMAgJAAGRAAAAAgUAAAAFdHVwbGUAAAAAAAAAAAEAAAAFdmFsdWUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABaQUAAAAHJG1hdGNoMAUAAAABaQkAAAIAAAABAgAAAAlub3QgYSBJbnQAAAACAAAACmNvbnRleHRPYmoBAAAADnRlc3RTYXZlU3RyaW5nAAAAAQAAAARkYXRhCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACAgAAAA50ZXN0U2F2ZVN0cmluZwUAAAAEZGF0YQUAAAADbmlsAAAACmNvbnRleHRPYmoBAAAADnJlbGF5QW5kVmVyaWZ5AAAAAQAAAARkYXRhBAAAAARyZXExCQEAAAALZGVjb2RlSW50NjQAAAACBQAAAARkYXRhAAAAAAAAAAAACQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAICAAAABHRlbXACAAAACS9jbGllbnRJZAkAAZEAAAACBQAAAARyZXExAAAAAAAAAAAABQAAAANuaWwAAAAAOgYRRA==", "chainId": 84, "height": 1056080, "spentComplexity": 0 } View: original | compacted Prev: 95stM5fJRWAfEb8us4NJefLES14XPQez2eSwfGXpABEv Next: AX5kXmqZ93zb7GiVCSLNtpZosLqJjdWNB9gS7u2t2M7H Diff:
OldNewDifferences
77 then throw("decode u8 error, decoding is finish")
88 else {
99 let x0 = take(drop(data, offset), 1)
10- let x1 = toInt((base58'1111111' + x0), 0)
11- if ((128 > x1))
12- then [x1, (offset + 1)]
13- else [toInt((base58'1111111' + x0), 0), (offset + 1)]
10+ let x1 = toInt(x0, 0)
11+[toInt((base58'1111111' + x0), 0), (offset + 1)]
1412 }
1513
1614
2220 let x0 = drop(data, offset)
2321 let x1 = take(x0, 1)
2422 let x2 = take(drop(x0, 1), 1)
25- if ((decodeInt8(x2, 0)[0] >= 0))
26- then [toInt(((base58'111111' + x2) + x1), 0), (offset + 2)]
27- else [toInt(((base58'111111' + x2) + x1), 0), (offset + 2)]
23+[toInt(((base58'111111' + x2) + x1), 0), (offset + 2)]
2824 }
2925
3026
3834 let x2 = take(drop(x0, 1), 1)
3935 let x3 = take(drop(x0, 2), 1)
4036 let x4 = take(drop(x0, 3), 1)
41- if ((decodeInt8(x4, 0)[0] >= 0))
42- then [toInt(((((base58'1111' + x4) + x3) + x2) + x1), 0), (offset + 4)]
43- else [toInt(((((base58'1111' + x4) + x3) + x2) + x1), 0), (offset + 4)]
37+[toInt(((((base58'1111' + x4) + x3) + x2) + x1), 0), (offset + 4)]
4438 }
4539
4640
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func decodeInt8 (data,offset) = if ((1 > size(data)))
55 then throw("decode u8 error, data must be at least 1 byte")
66 else if ((offset > size(data)))
77 then throw("decode u8 error, decoding is finish")
88 else {
99 let x0 = take(drop(data, offset), 1)
10- let x1 = toInt((base58'1111111' + x0), 0)
11- if ((128 > x1))
12- then [x1, (offset + 1)]
13- else [toInt((base58'1111111' + x0), 0), (offset + 1)]
10+ let x1 = toInt(x0, 0)
11+[toInt((base58'1111111' + x0), 0), (offset + 1)]
1412 }
1513
1614
1715 func decodeInt16 (data,offset) = if ((2 > size(data)))
1816 then throw("decode u16 error, data must be at least 2 bytes")
1917 else if ((offset > size(data)))
2018 then throw("decode u16 error, decoding is finish")
2119 else {
2220 let x0 = drop(data, offset)
2321 let x1 = take(x0, 1)
2422 let x2 = take(drop(x0, 1), 1)
25- if ((decodeInt8(x2, 0)[0] >= 0))
26- then [toInt(((base58'111111' + x2) + x1), 0), (offset + 2)]
27- else [toInt(((base58'111111' + x2) + x1), 0), (offset + 2)]
23+[toInt(((base58'111111' + x2) + x1), 0), (offset + 2)]
2824 }
2925
3026
3127 func decodeInt32 (data,offset) = if ((4 > size(data)))
3228 then throw("decode u32 error, data must be at least 4 bytes")
3329 else if ((offset > size(data)))
3430 then throw("decode u32 error, decoding is finish")
3531 else {
3632 let x0 = drop(data, offset)
3733 let x1 = take(x0, 1)
3834 let x2 = take(drop(x0, 1), 1)
3935 let x3 = take(drop(x0, 2), 1)
4036 let x4 = take(drop(x0, 3), 1)
41- if ((decodeInt8(x4, 0)[0] >= 0))
42- then [toInt(((((base58'1111' + x4) + x3) + x2) + x1), 0), (offset + 4)]
43- else [toInt(((((base58'1111' + x4) + x3) + x2) + x1), 0), (offset + 4)]
37+[toInt(((((base58'1111' + x4) + x3) + x2) + x1), 0), (offset + 4)]
4438 }
4539
4640
4741 func decodeInt64 (data,offset) = if ((8 > size(data)))
4842 then throw("decode u32 error, data must be at least 8 bytes")
4943 else if ((offset > size(data)))
5044 then throw("decode u32 error, decoding is finish")
5145 else {
5246 let x0 = drop(data, offset)
5347 let x1 = take(x0, 1)
5448 let x2 = take(drop(x0, 1), 1)
5549 let x3 = take(drop(x0, 2), 1)
5650 let x4 = take(drop(x0, 3), 1)
5751 let x5 = take(drop(x0, 4), 1)
5852 let x6 = take(drop(x0, 5), 1)
5953 let x7 = take(drop(x0, 6), 1)
6054 let x8 = take(drop(x0, 7), 1)
6155 [toInt((((((((x8 + x7) + x6) + x5) + x4) + x3) + x2) + x1), 0), (offset + 8)]
6256 }
6357
6458
6559 func decodeBool (data,offset) = {
6660 let decoded1 = decodeInt8(data, offset)
6761 [DataEntry("bool", (decoded1[0] != 0)), DataEntry("int", decoded1[1])]
6862 }
6963
7064
7165 func decodeBytes32 (data,offset) = if ((32 > size(data)))
7266 then throw("decode bytes32 error, data must be at least 32 bytes")
7367 else [DataEntry("byte_vector", take(drop(data, offset), 32)), DataEntry("int", (offset + 32))]
7468
7569
7670 func decodeBytes64 (data,offset) = if ((64 > size(data)))
7771 then throw("decode bytes64 error, data must be at least 64 bytes")
7872 else [DataEntry("byte_vector", take(drop(data, offset), 64)), DataEntry("int", (offset + 64))]
7973
8074
8175 func decodeBytes65 (data,offset) = if ((65 > size(data)))
8276 then throw("decode bytes65 error, data must be at least 65 bytes")
8377 else [DataEntry("byte_vector", take(drop(data, offset), 65)), DataEntry("int", (offset + 65))]
8478
8579
8680 func decodeBytes (data,offset) = {
8781 let decoded1 = decodeInt32(data, offset)
8882 let bytesSize = decoded1[0]
8983 let nextOffset = decoded1[1]
9084 [DataEntry("byte_vector", take(drop(data, nextOffset), bytesSize)), DataEntry("int", (nextOffset + bytesSize))]
9185 }
9286
9387
9488 func decodeString (data,offset) = {
9589 let decoded1 = decodeInt32(data, offset)
9690 let bytesSize = decoded1[0]
9791 let nextOffset = decoded1[1]
9892 [DataEntry("string", toUtf8String(take(drop(data, nextOffset), bytesSize))), DataEntry("int", (nextOffset + bytesSize))]
9993 }
10094
10195
10296 func getAsBool (tuple) = match tuple[0].value {
10397 case b: Boolean =>
10498 b
10599 case _ =>
106100 throw("not a Boolean")
107101 }
108102
109103
110104 func getAsByteVector (tuple) = match tuple[0].value {
111105 case bv: ByteVector =>
112106 bv
113107 case _ =>
114108 throw("not a ByteVector")
115109 }
116110
117111
118112 func getAsString (tuple) = match tuple[0].value {
119113 case s: String =>
120114 s
121115 case _ =>
122116 throw("not a String")
123117 }
124118
125119
126120 func getOffset (tuple) = match tuple[1].value {
127121 case i: Int =>
128122 i
129123 case _ =>
130124 throw("not a Int")
131125 }
132126
133127
134128 @Callable(contextObj)
135129 func testSaveString (data) = WriteSet([DataEntry("testSaveString", data)])
136130
137131
138132
139133 @Callable(contextObj)
140134 func relayAndVerify (data) = {
141135 let req1 = decodeInt64(data, 0)
142136 WriteSet([DataEntry(("temp" + "/clientId"), req1[0])])
143137 }
144138
145139

github/deemru/w8io/169f3d6 
36.22 ms