@ 2021-10-17T23:51:01Z <?php
/*
public function validateWebhook($signature, $payload)
{
$this->load->library('3PLib', '', '3PLib');
$sets = $this->3PLib->getWebKeySet($apiKey);
if (empty($sets->keys) || !isset($sets->keys[0]->n, $sets->keys[0]->e, $sets->keys[0]->kty, $sets->keys[0]->kid, $sets->keys[0]->alg)) {
throw new Exception('Missing/Invalid Request Credentials -- Request Denied');
}
$wks = $sets->keys[0];
$components = [
'kty' => $wks->kty, // RSA
'e' => $wks->e, // AQAB
'n' => $wks->n, // ANV-aocctqt5xDRnqomCgsO9dm4hM0Qd75TqG7z2G5Z89JQ7SRy2ok-fIJRiSU5-JfjP...
'kid' => $wks->kid, // 2021-10-14
'alg' => $wks->alg, // RS256
]; */ /*
//exit(var_dump($components));
$components = [
'kty' => 'RSA',
'e' => 'AQAB',
'n' => 'ANV-aocctqt5xDRnqomCgsO9dm4hM0Qd75TqG7z2G5Z89JQ7SRy2ok-fIJRiSU5-JfjPc3uph3gSOXyqlNoEh4YGL2R4AP7jhxy9xv0gDVtj1tExB_mmk8EUbmj8hTIrfAgEJrDeB4qMk7MkkKxhHkhLNEJEPZfgYHcHcuKjp2l_vtpiuR9Ouz0febB9K4gLozrp9KHW2K-m0z02-tSurxmmij5nnJ-CEgp0wXcCS4w4G0jve4hcLlL9FU8HKxrb0d4rMQgM3VAal6yG5pwMdtrsch7xA-occwWFC_tHgpDJGNvOJNFtuk7Cit_aom-6U6ssGF13sUtdrog2ePWjVxc=',
'kid' => '2020-03-18',
'alg' => 'RSA256',
];
$rsa = JOSE_JWK::decode($components); // => phpseclib\Crypt\RSA instance
$publicKey = $rsa->createKey()['publickey'];
/* $publicKey :
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDbScb43YAZ+alz2xbLmYoudXfL
JaiYnZGnE7h8M2FA++W22+ZQQV+KJcNpolIG0PtAp9W9DRxnndOXqqsYpyX1aA1L
LVJ5NEdcTewyfiyCohZBXc3DgcwsWEnL5TjUpobplEzN1AduPB97/zCA2qFaRDMP
7rAmMRhMlp0evVGkzwIDAQAB
-----END PUBLIC KEY-----
*/ /*
//$rsa->setSignatureMode(2);
//$rsa->setHash('sha256');
$rsa->loadKey($publicKey);
//exit(var_dump($rsa)); // this is a fully populated object
//$rsa = new Crypt_RSA();
//$rsa->setSignatureMode(2);
//exit(var_dump($rsa->sign($signature)));
//exit(var_dump($rsa->sign($signature)));
// exit($rsa->verify($payload, (new JOSE_JWT($payload))->sign($signature)->toString())); // invalid signature
/*exit(
var_dump(
[
'signature' => $signature,
'decoded sig' => base64_decode($signature),
'encoded sig' => base64_encode($signature),
'rsa->sign()' => $rsa->sign($signature),
'JOSE_JWT(payload)->sign()' => (new JOSE_JWT($payload))->sign($signature)->toString(),
]
)
);*/ /*
exit(var_dump($rsa->verify($payload, $rsa->sign($signature)))); // this actually satisfies (strlen($s) == $this->k) check (both = 128); there are no user errors, but returns false
//$rsa->loadKey($publicKey);
//exit(var_dump($rsa)); // this is a fully populated object
//exit(var_dump($rsa->sign($signature))); // output: ��|�w��b_�u�/ґ���p��s�jt�����_U��}8�/��EY�'�r73d��V˿ø֪���G���ҫ���lU8���ci�[.�n��gT��C��.&`v��G?dR�"��p'z5��Y��
//exit((new JOSE_JWT($payload))->sign($signature)->toString()); // has 2 dots: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzY2FsYXIiOiJ7XCJldmVudElkXCI6XCJmMjk0YzVhZi02MTdhLTQ0ZjktYjg4Ni02ZWFiNTNhZGZlMjNcIixcIm9mZmljZUlkXCI6XCI5XCIsXCJldmVudFR5cGVcIjpcIlBST1BFUlRZX0NPTVBMSUFOQ0VfUkVRVUVTVEVEXCIsXCJldmVudFwiOntcInJlY2lwaWVudFBhcnRuZXJDb2RlXCI6XCJTTU9LRV9BTEFSTVNfMTMwMFwiLFwibGFzdFVwZGF0ZWREYXRlVGltZVwiOlwiMjAyMS0xMC0xMlQwNTowMjowMC4yNDFaXCIsXCJwcm9wZXJ0eUNvbXBsaWFuY2VQcm9jZXNzXCI6e1wicHJvcGVydHlDb21wbGlhbmNlUHJvY2Vzc0lkXCI6XCI0MjljMDE1OC0wMjNhLTQ4OTUtOGEzNC00ZjM5ZjliOThkZTJcIixcInByb3BlcnR5Q29tcGxpYW5jZUlkXCI6XCIwNzUxZjE0NS01OGYzLTRhNWYtOWFjZi05Yzg1NmUyMmJhMWNcIixcInByb3BlcnR5SWRcIjpcIjMxOVwiLFwic3RhdHVzXCI6XCJBQ1RJVkVcIixcInJlbmV3QnlEYXRlXCI6XCIyMDIxLTEwLTMxXCIsXCJjcmVhdGVkRGF0ZVRpbWVcIjpcIjIwMjEtMTAtMTJUMDU6MDI6MDAuMjQxWlwiLFwibGFzdFVwZGF0ZWREYXRlVGltZVwiOlwiMjAyMS0xMC0xMlQwNTowMjowMC4yNDFaXCIsXCJyZWxhdGVkRmlsZXNcIjpbXX0sXCJyZWxhdGVkUmVzb3VyY2VzXCI6e1wicHJvcGVydHlDb21wbGlhbmNlXCI6e1wicHJvcGVydHlDb21wbGlhbmNlSWRcIjpcIjA3NTFmMTQ1LTU4ZjMtNGE1Zi05YWNmLTljODU2ZTIyYmExY1wiLFwicHJvcGVydHlJZFwiOlwiMzE5XCIsXCJ0eXBlXCI6XCJTTU9LRV9BTEFSTVNcIixcImV4cGlyeURhdGVcIjpcIjIwMjEtMTAtMzFcIixcImxhc3RJbnNwZWN0aW9uRGF0ZVwiOlwiMjAyMS0xMC0wMVwiLFwibm90ZXNcIjpcInRlc3Qgd2l0aCB1bml0IG51bWJlclwiLFwiaGFzMjAyMkxlZ2lzbGF0aW9uQ29tcGxpYW5jZVwiOnRydWUsXCJhc3NpZ25lZFRvXCI6e1widHlwZVwiOlwiSU5URUdSQVRJT05fUEFSVE5FUlwiLFwicGFydG5lckNvZGVcIjpcIlNNT0tFX0FMQVJNU18xMzAwXCJ9LFwibGFzdFVwZGF0ZWREYXRlVGltZVwiOlwiMjAyMS0xMC0xMlQwNTowMjowMC4xNTNaXCJ9LFwibWFuYWdlbWVudEFncmVlbWVudFwiOntcIm1hbmFnZW1lbnRBZ3JlZW1lbnRJZFwiOlwiMjM5XCIsXCJvd25lcnNoaXBOYW1lXCI6XCJTYW1wbGUgVGVzdCBUcnVzdFwiLFwibGFuZGxvcmRzXCI6W3tcInByaW1hcnlcIjp0cnVlLFwiY29udGFjdElkXCI6XCI4MDNcIn1dfSxcInRlbmFudEFncmVlbWVudHNcIjpbe1widGVuYW50QWdyZWVtZW50SWRcIjpcIjE1OVwiLFwiY29udGFjdHNcIjpbe1wicHJpbWFyeVwiOnRydWUsXCJjb250YWN0SWRcIjpcIjgwNFwifSx7XCJwcmltYXJ5XCI6ZmFsc2UsXCJjb250YWN0SWRcIjpcIjgwNVwifV0sXCJsZWFzZVwiOntcImVuZERhdGVcIjpcIjIwMjItMDUtMDRcIixcInN0YXJ0RGF0ZVwiOlwiMjAyMS0wNS0xM1wiLFwiaW5hdWd1cmFsRGF0ZVwiOlwiMjAyMS0wNS0xM1wiLFwidHlwZVwiOlwiRklYRURcIixcInRlcm1cIjpcInRlcm0gdGlsbCBhdCBsZWFzdCBNYXkgNCwgMjAyMlwifSxcImxlYXNlTmFtZVwiOlwiU2FtcGxlIFRlc3QgTGVhc2VcIixcImN1cnJlbnRcIjp0cnVlfV0sXCJwcm9wZXJ0eVwiOntcInByb3BlcnR5SWRcIjpcIjMxOVwiLFwiZGlzcGxheU5hbWVcIjpcIjE2XFwvNDkgSmF6eiBGb3JtLCBCcmlzYmFuZSBDaXR5IFFMRCA0MDAwXCIsXCJhZGRyZXNzXCI6e1widW5pdE51bWJlclwiOlwiMTZcIixcInN0cmVldE51bWJlclwiOlwiNDlcIixcInN0cmVldE5hbWVcIjpcIkphenpcIixcInN0cmVldFR5cGVcIjpcIkZvcm1cIixcInN1YnVyYlwiOlwiQnJpc2JhbmUgQ2l0eVwiLFwicG9zdENvZGVcIjpcIjQwMDBcIixcInN0YXRlQ29kZVwiOlwiUUxEXCIsXCJjb3VudHJ5Q29kZVwiOlwiQVVcIn0sXCJrZXlOdW1iZXJcIjpcIkxKSEstSDFcIixcImFjY2Vzc0RldGFpbHNcIjpcIkFjY2VzcyB0aHJvdWdoIGxlZnQgZ2F0ZVwiLFwicHJvcGVydHlUeXBlXCI6XCJBUEFSVE1FTlRcIixcInByb3BlcnR5VXNlXCI6XCJSRVNJREVOVElBTFwifSxcInBvcnRmb2xpb1wiOntcInBvcnRmb2xpb0lkXCI6XCI0ZDg4Yjk5OC0zMTUyLTQxNTQtYTdiMi05Zjc3MTk3OGI5Y2NcIixcIm5hbWVcIjpcIkJpZyBQb3J0Zm9saW9cIixcInByb3BlcnR5TWFuYWdlcklkXCI6XCIxN1wifSxcImNvbnRhY3RzXCI6W3tcImNvbnRhY3RJZFwiOlwiODAzXCIsXCJ0eXBlXCI6XCJJTkRJVklEVUFMXCIsXCJkaXNwbGF5TmFtZVwiOlwiTXVycGh5IFdlbGNoXCIsXCJwZXJzb25EZXRhaWxcIjp7XCJAdHlwZVwiOlwiRGVmYXVsdENvbnRhY3RQZXJzb25EZXRhaWxcIixcInRpdGxlXCI6XCJNUlwiLFwiZmlyc3ROYW1lXCI6XCJNdXJwaHlcIixcImxhc3ROYW1lXCI6XCJXZWxjaFwiLFwicHJlZmVycmVkTmFtZVwiOlwiam9obm55XCIsXCJzYWx1dGF0aW9uXCI6XCJoaVwifSxcInBob25lc1wiOlt7XCJ0eXBlXCI6XCJNT0JJTEVcIixcInBob25lTnVtYmVyXCI6XCIwNDYzOTAzOTcyXCIsXCJwcmltYXJ5XCI6dHJ1ZX1dLFwiZW1haWxzXCI6W3tcInR5cGVcIjpcIlBFUlNPTkFMXCIsXCJlbWFpbEFkZHJlc3NcIjpcImFsbHkubydjb25uZXJAeWFob28uY29tXCIsXCJwcmltYXJ5XCI6dHJ1ZX1dfSx7XCJjb250YWN0SWRcIjpcIjgwNFwiLFwidHlwZVwiOlwiSU5ESVZJRFVBTFwiLFwiZGlzcGxheU5hbWVcIjpcIkFkcmlhbm5hIE1jQ2x1cmVcIixcInBlcnNvbkRldGFpbFwiOntcIkB0eXBlXCI6XCJEZWZhdWx0Q29udGFjdFBlcnNvbkRldGFpbFwiLFwidGl0bGVcIjpcIk1SXCIsXCJmaXJzdE5hbWVcIjpcIkFkcmlhbm5hXCIsXCJsYXN0TmFtZVwiOlwiTWNDbHVyZVwiLFwicHJlZmVycmVkTmFtZVwiOlwiam9obm55XCIsXCJzYWx1dGF0aW9uXCI6XCJoaVwifSxcInBob25lc1wiOlt7XCJ0eXBlXCI6XCJNT0JJTEVcIixcInBob25lTnVtYmVyXCI6XCIwNDMzMjEyMzY5XCIsXCJlMTY0UGhvbmVOdW1iZXJcIjpcIis2MTQzMzIxMjM2OVwiLFwicHJpbWFyeVwiOnRydWV9XSxcImVtYWlsc1wiOlt7XCJ0eXBlXCI6XCJQRVJTT05BTFwiLFwiZW1haWxBZGRyZXNzXCI6XCJtaWtlLm11bGxlckBvdXRsb29rLmNvbVwiLFwicHJpbWFyeVwiOnRydWV9XX0se1wiY29udGFjdElkXCI6XCI4MDVcIixcInR5cGVcIjpcIklORElWSURVQUxcIixcImRpc3BsYXlOYW1lXCI6XCJGYWUgTGVncm9zXCIsXCJwZXJzb25EZXRhaWxcIjp7XCJAdHlwZVwiOlwiRGVmYXVsdENvbnRhY3RQZXJzb25EZXRhaWxcIixcInRpdGxlXCI6XCJNUlwiLFwiZmlyc3ROYW1lXCI6XCJGYWVcIixcImxhc3ROYW1lXCI6XCJMZWdyb3NcIixcInByZWZlcnJlZE5hbWVcIjpcImpvaG5ueVwiLFwic2FsdXRhdGlvblwiOlwiaGlcIn0sXCJwaG9uZXNcIjpbe1widHlwZVwiOlwiTU9CSUxFXCIsXCJwaG9uZU51bWJlclwiOlwiMDQ2MTg1NTAwMVwiLFwicHJpbWFyeVwiOnRydWV9XSxcImVtYWlsc1wiOlt7XCJ0eXBlXCI6XCJQRVJTT05BTFwiLFwiZW1haWxBZGRyZXNzXCI6XCJkYW1pZW4uZ29sZG5lckBvdXRsb29rLmNvbVwiLFwicHJpbWFyeVwiOnRydWV9XX1dLFwidXNlcnNcIjpbe1widXNlcklkXCI6XCIxN1wiLFwiZmlyc3ROYW1lXCI6XCJLYXJsaWVcIixcImxhc3ROYW1lXCI6XCJSb2xmc29uXCIsXCJlbWFpbFwiOlwidGVzdF8xMzAwQGNvbnNvbGUuY29tLmF1XCJ9XX19LFwiY3JlYXRlZERhdGVUaW1lXCI6XCIyMDIxLTEwLTEyVDA1OjAyOjAwLjI4WlwifSJ9.eARwx7GfB3P5MzSbrrecY0IbjSuLNfyTrytuFoJLnuw
//$jwt = JOSE_JWT::decode((new JOSE_JWT($payload))->sign($signature)->toString()); // necessary to populate $jwt->raw property
// exit(var_dump($jwt));
/*
$twoDotSignature = (new JOSE_JWT($payload))->sign($signature)->toString();
// $twoDotSignature = (new JOSE_JWT(unpack('C*', $payload)))->sign($signature)->toString();
$jwt = JOSE_JWT::decode($twoDotSignature);
exit(var_dump($jwt->verify($publicKey, $wks->alg)));
//exit(var_dump($rsa->verify(JOSE_JWT::decode(JOSE_URLSafeBase64::decode($signature), $payload)))); // JWT should have exact 3 or 5 segments
*/
//$rsa->setSignatureMode(RSA::SIGNATURE_PKCS1);
//$rsa->setHash('sha512');
//exit(var_dump());
/*$pubkeyid = openssl_get_publickey($publicKey);
$verify = openssl_verify($payload, $signature, $pubkeyid, "sha1WithRSAEncryption");
openssl_free_key($pubkeyid);
$errors = [];
while ($msg = openssl_error_string() !== false) {
$errors[] = $msg;
}
if (!empty($errors)) {
var_export($errors); // 1
}
exit(var_export($verify, true));
exit(
var_dump(
openssl_verify(
$payload,
base64_decode($signature),
$publicKey,
OPENSSL_ALGO_SHA1 // 'OPENSSL_ALGO_SHA256' // 'SHA1' // CRYPT_RSA_ENCRYPTION_PKCS1 // OPENSSL_ALGO_SHA256 // RSA_SHA256 // OPENSSL_ALGO_SHA1 //'RSA-SHA256'
)
)
);*/
/*$decodedHeader = JOSE_URLSafeBase64::decode(json_encode(['alg' => 'RS256', 'typ' => 'JWT']));
$decodedPayload = JOSE_URLSafeBase64::decode($payload);
exit(var_dump(
[
'header' => $decodedHeader,
'payload' => $decodedPayload,
'signature' => hash_hmac('RSA256', $decodedHeader . '.' . $decodedPayload)
]
));*/ /*
//exit(var_dump(base64_encode(hash_hmac('sha1', $base_string, $key, true))));
$jwt = JOSE_JWT::decode((new JOSE_JWT($payload))->sign($signature)->toString());
exit(var_dump($jwt->verify($publicKey, $wks->alg))); // user error because strlen($s) != $this->k at RSA->_rsassa_pkcs1_v1_5_verify()
/*$jwt = new JOSE_JWT(
//[
//'header' => ['typ' => 'JWT', 'alg' => 'RS256'],
//'claims' =>
unpack('C*', $payload) // convert body to byte array
//'signature' => base64_decode($signature), // base64 decoded signature
//]
);
$jwt = $jwt->sign($signature);
//exit(var_dump($jwt->toString()));
exit(var_dump($jwt->verify($publicKey, $wks->alg))); // $jwt->raw is not populated!
*/ /*
//exit(var_dump($jwt->sign($signature)->toString())); // output: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.e30.NIALsF_RlzYoUyfdc1eHso0X4cMg60IFCnjnk2qxSMU
//exit(var_dump($jwt));
//JOSE_JWT::decode($signature);
//exit(var_dump($jwt->verify($publicKey, $wks->alg)));
//exit(var_dump(JOSE_URLSafeBase64::decode($signature)));
//$jsonWebSignature = JOSE_JWT::decode($signature); // can't use $signature like this; it has no dots in it. 2 or 4 dots are required!
//exit(var_dump($jsonWebSignature->verify($publicKey, $wks->alg)));
}
*/
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).
Version System time (s) User time (s) Memory (MiB) 8.4.12 0.009 0.011 22.21 8.4.11 0.008 0.010 18.79 8.4.10 0.008 0.012 17.50 8.4.9 0.011 0.008 20.52 8.4.8 0.013 0.004 20.48 8.4.7 0.010 0.006 18.90 8.4.6 0.012 0.008 20.65 8.4.5 0.011 0.009 18.46 8.4.4 0.007 0.010 17.60 8.4.3 0.010 0.010 20.42 8.4.2 0.003 0.016 19.41 8.4.1 0.005 0.005 17.69 8.3.25 0.011 0.008 18.82 8.3.24 0.011 0.008 16.60 8.3.23 0.011 0.008 16.80 8.3.22 0.012 0.006 18.90 8.3.21 0.009 0.009 16.45 8.3.20 0.005 0.004 16.26 8.3.19 0.006 0.008 17.21 8.3.18 0.011 0.007 18.88 8.3.17 0.012 0.006 17.11 8.3.16 0.009 0.009 18.23 8.3.15 0.007 0.007 16.96 8.3.14 0.009 0.009 17.06 8.3.13 0.006 0.003 18.33 8.3.12 0.000 0.009 20.64 8.3.11 0.009 0.003 20.94 8.3.10 0.009 0.003 24.06 8.3.9 0.004 0.004 26.77 8.3.8 0.006 0.003 16.50 8.3.7 0.004 0.011 18.05 8.3.6 0.012 0.003 16.38 8.3.5 0.014 0.007 19.64 8.3.4 0.014 0.000 18.98 8.3.3 0.009 0.006 18.43 8.3.2 0.004 0.004 24.18 8.3.1 0.004 0.004 24.66 8.3.0 0.004 0.004 26.16 8.2.29 0.005 0.006 17.03 8.2.28 0.012 0.008 18.20 8.2.27 0.010 0.007 16.65 8.2.26 0.018 0.000 16.91 8.2.25 0.008 0.000 16.94 8.2.24 0.007 0.007 16.92 8.2.23 0.009 0.000 22.58 8.2.22 0.003 0.006 37.54 8.2.21 0.004 0.004 26.77 8.2.20 0.003 0.006 16.38 8.2.19 0.010 0.010 16.58 8.2.18 0.013 0.003 25.92 8.2.17 0.011 0.008 18.66 8.2.16 0.007 0.007 22.96 8.2.15 0.007 0.000 25.66 8.2.14 0.004 0.004 24.66 8.2.13 0.003 0.006 26.16 8.2.12 0.008 0.000 21.18 8.2.11 0.000 0.010 19.33 8.2.10 0.015 0.000 17.66 8.2.9 0.008 0.000 17.63 8.2.8 0.003 0.005 18.65 8.2.7 0.003 0.006 17.50 8.2.6 0.003 0.005 17.38 8.2.5 0.004 0.004 17.80 8.2.4 0.004 0.004 19.54 8.2.3 0.005 0.002 17.43 8.2.2 0.000 0.007 19.30 8.2.1 0.000 0.007 17.42 8.2.0 0.000 0.007 19.16 8.1.33 0.012 0.007 15.95 8.1.32 0.010 0.010 16.10 8.1.31 0.009 0.009 16.75 8.1.30 0.004 0.011 19.91 8.1.29 0.004 0.004 18.88 8.1.28 0.010 0.010 25.92 8.1.27 0.006 0.003 20.50 8.1.26 0.004 0.004 26.35 8.1.25 0.004 0.004 28.09 8.1.24 0.007 0.003 20.85 8.1.23 0.009 0.003 20.95 8.1.22 0.009 0.000 18.43 8.1.21 0.000 0.008 18.77 8.1.20 0.003 0.005 17.13 8.1.19 0.000 0.008 16.98 8.1.18 0.008 0.000 18.10 8.1.17 0.004 0.004 17.62 8.1.16 0.007 0.000 18.71 8.1.15 0.000 0.007 18.51 8.1.14 0.004 0.004 17.37 8.1.13 0.005 0.002 17.25 8.1.12 0.005 0.002 17.36 8.1.11 0.004 0.004 17.35 8.1.10 0.004 0.004 17.34 8.1.9 0.004 0.004 17.37 8.1.8 0.002 0.005 17.21 8.1.7 0.000 0.007 17.14 8.1.6 0.003 0.010 17.34 8.1.5 0.004 0.004 17.31 8.1.4 0.003 0.005 17.41 8.1.3 0.000 0.008 17.34 8.1.2 0.004 0.004 17.50 8.1.1 0.003 0.005 17.34 8.1.0 0.000 0.007 17.25 8.0.30 0.007 0.000 18.77 8.0.29 0.004 0.004 16.58 8.0.28 0.007 0.000 18.23 8.0.27 0.007 0.000 16.64 8.0.26 0.003 0.003 16.65 8.0.25 0.003 0.003 16.83 8.0.24 0.007 0.000 16.85 8.0.23 0.003 0.003 16.84 8.0.22 0.004 0.004 16.80 8.0.21 0.003 0.003 16.81 8.0.20 0.006 0.000 16.78 8.0.19 0.003 0.006 16.79 8.0.18 0.004 0.004 16.76 8.0.17 0.000 0.008 16.81 8.0.16 0.003 0.005 16.67 8.0.15 0.000 0.007 16.77 8.0.14 0.000 0.007 16.73 8.0.13 0.006 0.000 13.22 8.0.12 0.000 0.008 16.73 8.0.11 0.000 0.008 16.61 8.0.10 0.000 0.008 16.73 8.0.9 0.004 0.004 16.63 8.0.8 0.008 0.000 16.61 8.0.7 0.006 0.003 16.71 8.0.6 0.004 0.004 16.54 8.0.5 0.007 0.000 16.68 8.0.3 0.003 0.006 16.71 8.0.2 0.000 0.009 16.66 8.0.1 0.005 0.003 16.81 8.0.0 0.004 0.004 16.84 7.4.33 0.005 0.000 15.55 7.4.32 0.007 0.000 16.39 7.4.30 0.003 0.005 16.37 7.4.29 0.005 0.003 16.33 7.4.28 0.006 0.003 16.46 7.4.27 0.003 0.004 16.46 7.4.26 0.000 0.005 13.10 7.4.25 0.007 0.000 16.35 7.4.24 0.004 0.004 16.30 7.4.23 0.007 0.000 16.32 7.4.22 0.004 0.004 16.33 7.4.21 0.004 0.004 16.24 7.4.20 0.004 0.004 16.34 7.4.19 0.005 0.003 16.36 7.4.18 0.007 0.000 16.49 7.4.16 0.007 0.000 16.50 7.4.15 0.004 0.004 16.21 7.4.14 0.002 0.005 16.14 7.4.13 0.000 0.007 16.30 7.4.12 0.000 0.007 16.10 7.4.11 0.007 0.000 16.21 7.4.10 0.000 0.007 16.36 7.4.9 0.007 0.000 16.23 7.4.8 0.000 0.007 16.14 7.4.7 0.000 0.007 16.23 7.4.6 0.000 0.008 16.10 7.4.5 0.003 0.003 16.28 7.4.4 0.002 0.005 16.20 7.4.3 0.003 0.003 16.07 7.4.2 0.007 0.000 16.20 7.4.1 0.003 0.003 16.30 7.4.0 0.003 0.003 16.24 7.3.33 0.003 0.003 16.11 7.3.32 0.005 0.000 12.90 7.3.31 0.006 0.000 16.07 7.3.30 0.004 0.004 15.93 7.3.29 0.000 0.007 15.89 7.3.28 0.007 0.000 16.15 7.3.27 0.005 0.003 15.99 7.3.26 0.003 0.003 16.11 7.3.25 0.007 0.000 16.10 7.3.24 0.000 0.008 15.99 7.3.23 0.003 0.003 16.21 7.3.22 0.000 0.007 16.06 7.3.21 0.007 0.000 15.84 7.3.20 0.000 0.008 16.05 7.3.19 0.004 0.004 15.91 7.3.18 0.003 0.003 16.14 7.3.17 0.007 0.000 16.06 7.3.16 0.000 0.007 16.02 7.3.15 0.004 0.004 15.93 7.3.14 0.004 0.004 16.09 7.3.13 0.003 0.003 15.97 7.3.12 0.000 0.007 16.16 7.3.11 0.003 0.003 15.87 7.3.10 0.003 0.003 15.88 7.3.9 0.007 0.000 16.36 7.3.8 0.003 0.003 15.87 7.3.7 0.000 0.007 15.98 7.3.6 0.000 0.008 16.27 7.3.5 0.003 0.003 16.23 7.3.4 0.003 0.003 16.32 7.3.3 0.004 0.004 16.10 7.3.2 0.005 0.003 16.15 7.3.1 0.000 0.008 16.26 7.3.0 0.000 0.007 16.04
preferences:dark mode live preview ace vim emacs key bindings
32.48 ms | 403 KiB | 5 Q