From dd668c1f4b9b7f704b9141fd430004b03af740f7 Mon Sep 17 00:00:00 2001 From: Thomas Durieux <5577568+tdurieux@users.noreply.github.com> Date: Mon, 2 Nov 2026 12:14:54 +0000 Subject: [PATCH 1/6] perf: share verified blobs and expose bounded cache metrics --- ...e-index-performance-optimized-results.json | 108 + docs/cache-index-performance-results.json | 108 + docs/cache-performance-legacy-results.json | 497 ++ docs/cache-performance-normal-results.json | 1472 ++++ ...-performance-optimized-repeat-results.json | 1468 ++++ docs/cache-performance-optimized-results.json | 6858 +++++++++++++++++ docs/cache-performance-optimized-summary.json | 51 + docs/cache-performance-report.html | 11 + docs/cache-performance-results.json | 6858 +++++++++++++++++ docs/cache-performance-summary.json | 301 + docs/cache-workload-results.json | 455 ++ docs/performance-monitoring.md | 281 + public/asset-manifest.json | 4 +- public/css/all.min.css | 2 +- public/css/style.css | 9 + public/partials/admin/overview.htm | 51 + public/script/admin.js | 43 + public/script/vendor.min.js | 46 +- scripts/cache-index-performance.js | 58 + scripts/cache-performance.js | 140 + scripts/cache-workload.js | 70 + src/config.ts | 26 + src/core/AnonymizedFile.ts | 9 +- src/core/anonymize-utils.ts | 17 +- src/core/blob-cache.ts | 324 + src/core/cache-observability.ts | 76 + src/core/cached-response.ts | 83 + src/core/request-monitoring.ts | 12 +- src/core/source/GitHubStream.ts | 58 + src/core/temporary-storage.ts | 3 +- src/core/transformed-cache.ts | 5 +- src/server/routes/admin.ts | 11 + src/server/routes/file.ts | 3 +- src/streamer/route.ts | 2 + test/download-header-performance.test.js | 11 + test/fixtures/shared-cache-worker.js | 26 + test/monitoring-access.test.js | 12 +- test/shared-blob-cache.test.js | 191 + test/shared-cache-http.test.js | 128 + test/vue-ui.test.js | 31 + 40 files changed, 19880 insertions(+), 39 deletions(-) create mode 100644 docs/cache-index-performance-optimized-results.json create mode 100644 docs/cache-index-performance-results.json create mode 100644 docs/cache-performance-legacy-results.json create mode 100644 docs/cache-performance-normal-results.json create mode 100644 docs/cache-performance-optimized-repeat-results.json create mode 100644 docs/cache-performance-optimized-results.json create mode 100644 docs/cache-performance-optimized-summary.json create mode 100644 docs/cache-performance-report.html create mode 100644 docs/cache-performance-results.json create mode 100644 docs/cache-performance-summary.json create mode 100644 docs/cache-workload-results.json create mode 100644 scripts/cache-index-performance.js create mode 100644 scripts/cache-performance.js create mode 100644 scripts/cache-workload.js create mode 100644 src/core/blob-cache.ts create mode 100644 src/core/cache-observability.ts create mode 100644 src/core/cached-response.ts create mode 100644 test/fixtures/shared-cache-worker.js create mode 100644 test/shared-blob-cache.test.js create mode 100644 test/shared-cache-http.test.js diff --git a/docs/cache-index-performance-optimized-results.json b/docs/cache-index-performance-optimized-results.json new file mode 100644 index 0000000..5f1c912 --- /dev/null +++ b/docs/cache-index-performance-optimized-results.json @@ -0,0 +1,108 @@ +{ + "measuredAt": "2026-11-02T11:05:58.163Z", + "scope": "Synthetic metadata-only scale probe. Dummy blob rows have no payload files; excludes directory scanning and disk reads for those rows. Real reads use one verified blob. Eviction probe uses real 64 KiB files.", + "node": "v24.14.1", + "cardinality": [ + { + "seedBlobs": 0, + "seedAliases": 0, + "seedDecisions": 0, + "seedHistory": 0, + "adminStats": { + "p50Ms": 0.32291899999972884, + "p95Ms": 0.47828900000013164, + "maxMs": 0.49711900000011155 + }, + "warmSourceHit": { + "p50Ms": 2.9400040000000445, + "p95Ms": 4.2662209999998595, + "maxMs": 4.463114000000132 + }, + "decisionWrite": { + "p50Ms": 0.4946559999998499, + "p95Ms": 0.900854999999865, + "maxMs": 16.506318000000192 + }, + "smallFill": { + "p50Ms": 43.615020000000186, + "p95Ms": 83.75168699999995, + "maxMs": 103.38539700000001 + } + }, + { + "seedBlobs": 10000, + "seedAliases": 20000, + "seedDecisions": 10000, + "seedHistory": 10000, + "adminStats": { + "p50Ms": 0.3126299999994444, + "p95Ms": 0.4548949999998513, + "maxMs": 0.6803079999999682 + }, + "warmSourceHit": { + "p50Ms": 2.6403629999995246, + "p95Ms": 14.954797000000326, + "maxMs": 19.31438099999923 + }, + "decisionWrite": { + "p50Ms": 0.4195850000005521, + "p95Ms": 0.5379259999999704, + "maxMs": 0.6729980000000069 + }, + "smallFill": { + "p50Ms": 39.785445999999865, + "p95Ms": 53.938020999999935, + "maxMs": 58.02874900000006 + } + }, + { + "seedBlobs": 100000, + "seedAliases": 200000, + "seedDecisions": 100000, + "seedHistory": 100000, + "adminStats": { + "p50Ms": 0.3238130000027013, + "p95Ms": 0.4950620000017807, + "maxMs": 0.649769000003289 + }, + "warmSourceHit": { + "p50Ms": 2.7466110000023036, + "p95Ms": 6.374782999999297, + "maxMs": 15.351889999998093 + }, + "decisionWrite": { + "p50Ms": 0.7600549999988289, + "p95Ms": 1.1067369999946095, + "maxMs": 1.1147449999989476 + }, + "smallFill": { + "p50Ms": 44.32314000000042, + "p95Ms": 68.3110549999983, + "maxMs": 91.21001899999828 + } + } + ], + "eviction": { + "requests": 300, + "distinctObjects": 100, + "upstreamFills": 300, + "hitRate": 0, + "elapsedMs": 13436.223987999998, + "p50Ms": 41.134181999994325, + "p95Ms": 57.91661600000225, + "peakAllocated": 3997696, + "final": { + "blobs": 60, + "originalBytes": 3932160, + "storedBytes": 3932160, + "allocatedBytes": 3932160, + "activeReaders": 0, + "decisions": 0, + "reservedBytes": 0, + "budgetBytes": 4194304, + "maxObjectBytes": 65536, + "oldestAccess": 1793617555801 + } + }, + "assertions": "passed" +} diff --git a/docs/cache-index-performance-results.json b/docs/cache-index-performance-results.json new file mode 100644 index 0000000..dc4277c --- /dev/null +++ b/docs/cache-index-performance-results.json @@ -0,0 +1,108 @@ +{ + "measuredAt": "2026-11-02T10:42:36.314Z", + "scope": "Synthetic metadata-only scale probe. Dummy blob rows have no payload files; excludes directory scanning and disk reads for those rows. Real reads use one verified blob. Eviction probe uses real 64 KiB files.", + "node": "v24.14.1", + "cardinality": [ + { + "seedBlobs": 0, + "seedAliases": 0, + "seedDecisions": 0, + "seedHistory": 0, + "adminStats": { + "p50Ms": 0.5495260000002418, + "p95Ms": 0.8194220000000314, + "maxMs": 0.8764419999997699 + }, + "warmSourceHit": { + "p50Ms": 22.106009000000086, + "p95Ms": 32.67359299999998, + "maxMs": 38.92065599999978 + }, + "decisionWrite": { + "p50Ms": 6.600801999999931, + "p95Ms": 12.472383000000264, + "maxMs": 15.8033989999999 + }, + "smallFill": { + "p50Ms": 71.12627699999939, + "p95Ms": 98.24754799999982, + "maxMs": 100.35789100000011 + } + }, + { + "seedBlobs": 10000, + "seedAliases": 20000, + "seedDecisions": 10000, + "seedHistory": 10000, + "adminStats": { + "p50Ms": 6.904306000000361, + "p95Ms": 9.677666999999929, + "maxMs": 12.638716999999815 + }, + "warmSourceHit": { + "p50Ms": 22.83701199999996, + "p95Ms": 47.79449499999828, + "maxMs": 102.36107600000014 + }, + "decisionWrite": { + "p50Ms": 8.062501999999768, + "p95Ms": 13.995523999999932, + "maxMs": 14.909832000001188 + }, + "smallFill": { + "p50Ms": 75.03789299999971, + "p95Ms": 117.16210499999943, + "maxMs": 143.80038499999955 + } + }, + { + "seedBlobs": 100000, + "seedAliases": 200000, + "seedDecisions": 100000, + "seedHistory": 100000, + "adminStats": { + "p50Ms": 66.83604900000137, + "p95Ms": 78.69937500000015, + "maxMs": 87.98320400000011 + }, + "warmSourceHit": { + "p50Ms": 26.310491000000184, + "p95Ms": 82.98941600000035, + "maxMs": 112.1549300000006 + }, + "decisionWrite": { + "p50Ms": 22.948387000000366, + "p95Ms": 45.47333599999911, + "maxMs": 56.50094800000079 + }, + "smallFill": { + "p50Ms": 136.3280279999999, + "p95Ms": 214.8330500000011, + "maxMs": 312.4176129999978 + } + } + ], + "eviction": { + "requests": 300, + "distinctObjects": 100, + "upstreamFills": 300, + "hitRate": 0, + "elapsedMs": 24658.882357999995, + "p50Ms": 74.17433299999539, + "p95Ms": 107.83662400000321, + "peakAllocated": 3997696, + "final": { + "blobs": 60, + "originalBytes": 3932160, + "storedBytes": 3932160, + "allocatedBytes": 3932160, + "oldestAccess": 1793616151486, + "budgetBytes": 4194304, + "reservedBytes": 0, + "maxObjectBytes": 65536, + "activeReaders": 0, + "decisions": 0 + } + }, + "assertions": "passed" +} diff --git a/docs/cache-performance-legacy-results.json b/docs/cache-performance-legacy-results.json new file mode 100644 index 0000000..128b58c --- /dev/null +++ b/docs/cache-performance-legacy-results.json @@ -0,0 +1,497 @@ +{ + "measuredAt": "2026-11-02T10:48:59.787Z", + "environment": { + "execution": "compiled JavaScript", + "node": "v24.14.1", + "platform": "linux", + "arch": "x64", + "cpu": "Intel Xeon E312xx (Sandy Bridge, IBRS update)", + "logicalCpus": 12, + "totalMemoryGiB": 35.22977066040039, + "loadAverage": [ + 4.84, + 4.64, + 4.01 + ] + }, + "methodology": { + "scope": "Local loopback HTTP, deterministic synthetic content, isolated process per scenario; no production traffic", + "upstreamDelayMs": 20, + "rawSourceBaseline": "Raw local file; anonymization and gzip repeated every request; no transformed-result cache. Not a complete legacy deployment comparison.", + "measurements": "Cold request then 3 warmups, 2 batches each at concurrency 1 (16 requests) and 8 (32 requests). CPU and RSS include server, loopback client, hashing and Node runtime; worker-thread CPU included. First cold request also includes worker startup when applicable.", + "limitations": "Warm OS page cache; no TLS, proxy, GitHub bandwidth, database auth or real-world RTT. Small sample p95 is descriptive, not a capacity SLA. Fresh metadata indexes; not a full-size index test.", + "legacyComparison": "Existing large-file transformedFile cache enabled, isolated TMPDIR, local source file, no Redis coordination or database authorization." + }, + "scenarios": [ + { + "size": 2097152, + "changed": false, + "mode": "legacy-transform", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 3637.6617370000004, + "ttfb": 3425.310189, + "bytes": 799931, + "wallMs": 3672.4500099999996, + "cpuMs": 4809.962 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 4325.215086, + "requestsPerSecond": 3.6992379990047968, + "p50Ms": 259.56264199999896, + "p95Ms": 326.0954209999991, + "maxMs": 326.0954209999991, + "ttfbP95Ms": 100.11303399999997, + "cpuMs": 7363.262, + "cpuMsPerRequest": 460.203875, + "peakRssMiB": 269.8828125, + "eventLoopP95Ms": 11.419647, + "wireBytes": 12798896, + "latenciesMs": [ + 271.195162, + 326.0954209999991, + 325.21412000000055, + 268.0655480000005, + 254.55466100000012, + 262.5113799999999, + 254.16493199999968, + 256.40336600000046, + 270.1401279999991, + 254.43623800000023, + 300.7399460000015, + 260.95136600000114, + 253.6488389999995, + 259.56264199999896, + 254.29303199999958, + 246.70169999999962 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 4144.421229, + "requestsPerSecond": 3.8606114378630894, + "p50Ms": 257.6290540000009, + "p95Ms": 284.40178000000014, + "maxMs": 284.40178000000014, + "ttfbP95Ms": 99.43109800000093, + "cpuMs": 7050.23, + "cpuMsPerRequest": 440.639375, + "peakRssMiB": 270.28515625, + "eventLoopP95Ms": 11.386879, + "wireBytes": 12798896, + "latenciesMs": [ + 255.06874499999867, + 245.9648269999998, + 263.4925280000007, + 240.60825599999953, + 265.1590239999987, + 264.77967999999964, + 243.70354000000043, + 269.05731899999955, + 257.6290540000009, + 255.93209899999965, + 264.11589300000014, + 276.2427490000009, + 257.6929230000005, + 284.40178000000014, + 255.67801800000052, + 239.9359570000015 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 2457.372474, + "requestsPerSecond": 13.022038921072411, + "p50Ms": 627.6892860000007, + "p95Ms": 675.1984000000011, + "maxMs": 676.5109240000002, + "ttfbP95Ms": 362.1158489999998, + "cpuMs": 9279.507, + "cpuMsPerRequest": 289.98459375, + "peakRssMiB": 257.109375, + "eventLoopP95Ms": 14.229503, + "wireBytes": 25597792, + "latenciesMs": [ + 638.7337129999996, + 644.2589910000006, + 653.9658299999992, + 660.062434999998, + 653.491895000001, + 667.5545409999995, + 675.1984000000011, + 676.5109240000002, + 518.4652159999969, + 508.24069299999974, + 529.0743550000007, + 519.2867880000013, + 517.0170130000006, + 535.1560919999974, + 534.1093989999972, + 539.1497820000004, + 619.183696, + 632.2522540000027, + 627.6892860000007, + 645.0611839999983, + 651.0646340000021, + 634.4353510000001, + 625.0313089999981, + 635.0648269999983, + 653.2990800000007, + 641.2500100000034, + 620.1606979999997, + 619.6126290000029, + 621.0784349999994, + 635.4328630000018, + 609.3666200000007, + 604.615855 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 2332.6840220000013, + "requestsPerSecond": 13.718103137073737, + "p50Ms": 591.6440280000024, + "p95Ms": 635.7273109999987, + "maxMs": 641.7715180000014, + "ttfbP95Ms": 325.4839319999992, + "cpuMs": 8533.531, + "cpuMsPerRequest": 266.67284375, + "peakRssMiB": 274.7109375, + "eventLoopP95Ms": 14.196735, + "wireBytes": 25597792, + "latenciesMs": [ + 597.2558779999999, + 606.2361659999988, + 615.4332890000005, + 619.6175079999994, + 623.0158960000008, + 626.0080349999989, + 626.6588200000006, + 626.664377000001, + 502.19446700000117, + 489.31906900000104, + 500.0022510000017, + 517.2302520000012, + 523.0413550000012, + 527.0690040000009, + 527.3038940000006, + 531.9332829999985, + 578.1515760000002, + 617.7991489999986, + 576.213284999998, + 635.7273109999987, + 591.6440280000024, + 641.7715180000014, + 588.0470649999988, + 617.4792789999992, + 592.6901799999978, + 596.9206689999992, + 576.3831680000003, + 576.4393070000006, + 568.0410200000006, + 592.3916649999992, + 599.7627519999987, + 584.0048639999986 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 100, + "bytes": 209715200, + "ms": 4554.967507000029, + "b0": 0, + "b1": 0, + "b2": 32, + "b3": 67, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "legacy_result_hit", + "traffic": "background", + "count": 99, + "bytes": 0, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "legacy_result_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 799931, + "uncompressedBytes": 2097152, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": true, + "mode": "legacy-transform", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 2903.1252619999996, + "ttfb": 2710.632705, + "bytes": 799783, + "wallMs": 2938.953792, + "cpuMs": 3776.116 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 4094.466308000001, + "requestsPerSecond": 3.9077131905416564, + "p50Ms": 250.63896699999987, + "p95Ms": 328.3509729999996, + "maxMs": 328.3509729999996, + "ttfbP95Ms": 139.6392849999993, + "cpuMs": 5652.677, + "cpuMsPerRequest": 353.2923125, + "peakRssMiB": 335.65234375, + "eventLoopP95Ms": 11.599871, + "wireBytes": 12796528, + "latenciesMs": [ + 274.80920400000014, + 250.63896699999987, + 328.3509729999996, + 261.9780500000006, + 224.44531199999983, + 288.4866490000004, + 260.0317410000007, + 265.3711569999996, + 220.20456599999852, + 236.22282199999972, + 256.1077639999985, + 283.01616699999977, + 235.04550499999823, + 246.0147109999998, + 221.8804140000011, + 237.00552799999969 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 3646.5368070000004, + "requestsPerSecond": 4.387724804884987, + "p50Ms": 218.23768400000154, + "p95Ms": 286.0494230000004, + "maxMs": 286.0494230000004, + "ttfbP95Ms": 137.9453310000008, + "cpuMs": 5961.413, + "cpuMsPerRequest": 372.5883125, + "peakRssMiB": 336.703125, + "eventLoopP95Ms": 13.033471, + "wireBytes": 12796528, + "latenciesMs": [ + 203.70693100000062, + 211.7173640000001, + 252.71899200000007, + 286.0494230000004, + 211.1080320000001, + 274.02094000000034, + 212.45707100000072, + 181.00006699999904, + 206.20519800000147, + 234.44334700000036, + 247.34129100000064, + 221.80664199999956, + 194.29920999999922, + 232.47182499999872, + 218.23768400000154, + 254.94733899999846 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 2860.0330489999997, + "requestsPerSecond": 11.188681896941256, + "p50Ms": 674.8104320000002, + "p95Ms": 937.1299240000008, + "maxMs": 956.4731780000002, + "ttfbP95Ms": 349.0807139999997, + "cpuMs": 8294.185, + "cpuMsPerRequest": 259.19328125, + "peakRssMiB": 306.8125, + "eventLoopP95Ms": 17.088511, + "wireBytes": 25593056, + "latenciesMs": [ + 838.9425090000004, + 836.6894339999999, + 840.9874359999994, + 914.8391210000009, + 929.2231830000001, + 932.435884999999, + 937.1299240000008, + 956.4731780000002, + 609.6644930000002, + 624.2318410000007, + 635.5053589999989, + 565.2249200000006, + 555.5831100000014, + 544.6693990000003, + 574.0213219999987, + 577.7646199999999, + 662.6372410000004, + 674.8104320000002, + 673.4079709999987, + 651.1047060000001, + 651.0912209999988, + 671.7599570000002, + 700.2244200000005, + 673.7866299999987, + 716.5474200000026, + 688.9938089999996, + 682.0821550000001, + 701.2659249999997, + 688.1068889999988, + 664.9055890000018, + 677.3972719999983, + 690.5366940000022 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 2979.963332000003, + "requestsPerSecond": 10.738387166167978, + "p50Ms": 715.5634050000008, + "p95Ms": 839.5880639999996, + "maxMs": 839.9379399999998, + "ttfbP95Ms": 469.71283799999946, + "cpuMs": 7910.049, + "cpuMsPerRequest": 247.18903125, + "peakRssMiB": 308.02734375, + "eventLoopP95Ms": 19.464191, + "wireBytes": 25593056, + "latenciesMs": [ + 675.5995089999997, + 677.2758930000018, + 682.5500949999987, + 695.3682000000008, + 695.637243000001, + 707.3496059999998, + 708.2368339999994, + 715.5634050000008, + 622.8828360000007, + 622.234027999999, + 640.7814050000015, + 628.4150020000016, + 638.2158200000013, + 632.4952449999982, + 640.3528240000014, + 655.5803180000003, + 819.2730220000012, + 839.5432240000009, + 815.6718389999987, + 823.1129099999998, + 807.2870309999998, + 839.9379399999998, + 839.5880639999996, + 822.5235159999975, + 800.3038809999998, + 836.5671479999983, + 794.8266949999997, + 782.2958900000012, + 780.0966379999991, + 797.6877550000027, + 833.3983110000008, + 831.9884109999985 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_changed", + "traffic": "background", + "count": 100, + "bytes": 209715200, + "ms": 4202.822877000019, + "b0": 0, + "b1": 0, + "b2": 34, + "b3": 65, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "legacy_result_hit", + "traffic": "background", + "count": 99, + "bytes": 0, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "legacy_result_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 799783, + "uncompressedBytes": 2115777, + "verifiedResponses": 100 + } + ], + "completedAt": "2026-11-02T10:49:41.535Z", + "assertions": "All 200 response bodies verified against expected output or the validated wire digest" +} diff --git a/docs/cache-performance-normal-results.json b/docs/cache-performance-normal-results.json new file mode 100644 index 0000000..c6b6633 --- /dev/null +++ b/docs/cache-performance-normal-results.json @@ -0,0 +1,1472 @@ +{ + "measuredAt": "2026-11-02T10:48:24.831Z", + "environment": { + "execution": "compiled JavaScript", + "node": "v24.14.1", + "platform": "linux", + "arch": "x64", + "cpu": "Intel Xeon E312xx (Sandy Bridge, IBRS update)", + "logicalCpus": 12, + "totalMemoryGiB": 35.22977066040039, + "loadAverage": [ + 5.04, + 4.67, + 3.99 + ] + }, + "methodology": { + "scope": "Local loopback HTTP, deterministic synthetic content, isolated process per scenario; no production traffic", + "upstreamDelayMs": 20, + "rawSourceBaseline": "Raw local file; anonymization and gzip repeated every request; no transformed-result cache. Not a complete legacy deployment comparison.", + "measurements": "Cold request then 3 warmups, 2 batches each at concurrency 1 (16 requests) and 8 (32 requests). CPU and RSS include server, loopback client, hashing and Node runtime; worker-thread CPU included. First cold request also includes worker startup when applicable.", + "limitations": "Warm OS page cache; no TLS, proxy, GitHub bandwidth, database auth or real-world RTT. Small sample p95 is descriptive, not a capacity SLA. Fresh metadata indexes; not a full-size index test.", + "experimentalOverride": "PRAGMA synchronous=NORMAL in both temporary pool connections only. Application defaults are unchanged. WAL commits may be lost after power failure." + }, + "scenarios": [ + { + "size": 16384, + "changed": true, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "sqliteNormal": true, + "cold": { + "ms": 211.99763500000017, + "ttfb": 210.4843780000001, + "bytes": 6286, + "wallMs": 217.12378900000022, + "cpuMs": 208.52 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 129.6802389999998, + "requestsPerSecond": 123.38040185135705, + "p50Ms": 7.405222999999751, + "p95Ms": 10.63064200000008, + "maxMs": 10.63064200000008, + "ttfbP95Ms": 9.930589999999938, + "cpuMs": 158.749, + "cpuMsPerRequest": 9.9218125, + "peakRssMiB": 139.69921875, + "eventLoopP95Ms": 11.837439, + "wireBytes": 100576, + "latenciesMs": [ + 8.86342599999989, + 9.86466399999972, + 8.89197299999978, + 7.601117000000158, + 10.63064200000008, + 8.569281000000046, + 6.669886000000133, + 8.34594399999969, + 6.314068999999563, + 6.768948999999793, + 7.008024999999634, + 7.015354000000116, + 6.58103200000005, + 7.002148000000034, + 8.309251000000131, + 7.405222999999751 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 107.8144470000002, + "requestsPerSecond": 148.4031170702009, + "p50Ms": 6.638319000000138, + "p95Ms": 9.330415999999786, + "maxMs": 9.330415999999786, + "ttfbP95Ms": 8.970339999999851, + "cpuMs": 120.029, + "cpuMsPerRequest": 7.5018125, + "peakRssMiB": 141.24609375, + "eventLoopP95Ms": 10.731519, + "wireBytes": 100576, + "latenciesMs": [ + 6.064622999999756, + 6.900600000000395, + 6.856596999999965, + 6.654391999999916, + 6.608584999999948, + 6.638319000000138, + 6.669634000000315, + 7.5123530000000756, + 9.330415999999786, + 7.551006000000143, + 7.421205999999984, + 5.351235999999972, + 5.80967499999997, + 5.3357780000001185, + 5.540296000000126, + 5.002653999999893 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 169.23432700000012, + "requestsPerSecond": 189.08693388191853, + "p50Ms": 40.41041099999984, + "p95Ms": 58.15863500000023, + "maxMs": 63.950413000000026, + "ttfbP95Ms": 57.95974100000012, + "cpuMs": 203.853, + "cpuMsPerRequest": 6.37040625, + "peakRssMiB": 144.8515625, + "eventLoopP95Ms": 14.991359, + "wireBytes": 201152, + "latenciesMs": [ + 25.70338700000002, + 30.679279999999835, + 36.069988000000194, + 42.17374199999995, + 46.82847199999969, + 52.06783799999994, + 58.15863500000023, + 39.88046499999973, + 63.950413000000026, + 40.88007599999992, + 41.45565600000009, + 41.3820340000002, + 41.48556400000007, + 41.46290900000031, + 40.68188700000019, + 40.6027039999999, + 40.67867299999989, + 40.960299999999734, + 40.41041099999984, + 40.23441899999989, + 40.10125199999993, + 40.36940299999969, + 40.27873899999986, + 40.82878299999993, + 40.75896700000021, + 39.86777200000006, + 38.923733000000084, + 36.24865600000021, + 33.810453999999936, + 30.185067000000345, + 26.375299999999697, + 21.669115999999576 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 154.96046100000012, + "requestsPerSecond": 206.50429014921409, + "p50Ms": 37.81797899999992, + "p95Ms": 45.19201900000007, + "maxMs": 45.98549300000013, + "ttfbP95Ms": 45.004291000000194, + "cpuMs": 189.763, + "cpuMsPerRequest": 5.93009375, + "peakRssMiB": 147.6875, + "eventLoopP95Ms": 17.514495, + "wireBytes": 201152, + "latenciesMs": [ + 31.767119999999977, + 32.30844799999977, + 33.03265899999997, + 33.612348999999995, + 34.19755699999996, + 34.89241700000002, + 35.477110999999695, + 38.635037999999895, + 38.07372200000009, + 37.88975500000015, + 37.81797899999992, + 37.93395600000031, + 38.00886000000037, + 37.99365799999987, + 38.14913999999999, + 45.19201900000007, + 36.45409900000004, + 35.66923100000031, + 37.15967200000023, + 36.40817700000025, + 36.473527000000104, + 36.414574999999786, + 36.38251900000023, + 45.98549300000013, + 40.22782499999994, + 40.02091399999972, + 39.76114600000028, + 39.421302999999625, + 38.982031000000006, + 38.58864700000004, + 40.97996400000011, + 23.516125999999986 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 16384, + "storedBytes": 6297, + "allocatedBytes": 8192, + "oldestAccess": 1793616507968, + "budgetBytes": 67108864, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 0, + "decisions": 0 + }, + "results": { + "blobs": 1, + "originalBytes": 16533, + "storedBytes": 6286, + "allocatedBytes": 8192, + "oldestAccess": 1793616508056, + "budgetBytes": 33554432, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 1, + "decisions": 1 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 32917, + "ms": 14.31263700000045, + "b0": 0, + "b1": 0, + "b2": 2, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 5.093956000000162, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 8.687069999999949, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 16533, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 6286, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 62.00214899999992, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 6297, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6286, + "uncompressedBytes": 16533, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": true, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "sqliteNormal": true, + "cold": { + "ms": 293.5069330000001, + "ttfb": 290.05206, + "bytes": 100797, + "wallMs": 304.22281799999973, + "cpuMs": 507.88 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 210.48696199999995, + "requestsPerSecond": 76.01420937416543, + "p50Ms": 12.352023999999801, + "p95Ms": 16.41937599999983, + "maxMs": 16.41937599999983, + "ttfbP95Ms": 13.889098999999987, + "cpuMs": 252.283, + "cpuMsPerRequest": 15.7676875, + "peakRssMiB": 154.44140625, + "eventLoopP95Ms": 11.567103, + "wireBytes": 1612752, + "latenciesMs": [ + 13.721564999999828, + 12.36434700000018, + 15.396739999999681, + 11.028957999999875, + 13.326234000000113, + 14.298448000000008, + 12.173980999999912, + 11.955479999999625, + 12.359015999999883, + 10.64623900000015, + 11.49606700000004, + 11.256077999999889, + 11.702889000000141, + 16.41937599999983, + 15.029231999999865, + 12.352023999999801 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 188.85026900000048, + "requestsPerSecond": 84.7232047098644, + "p50Ms": 10.721991999999773, + "p95Ms": 17.00100399999974, + "maxMs": 17.00100399999974, + "ttfbP95Ms": 12.034526000000369, + "cpuMs": 201.592, + "cpuMsPerRequest": 12.5995, + "peakRssMiB": 160.62890625, + "eventLoopP95Ms": 11.468799, + "wireBytes": 1612752, + "latenciesMs": [ + 17.00100399999974, + 14.88057900000058, + 14.272201000000678, + 9.798923000000286, + 10.721991999999773, + 10.789474000000155, + 10.855854999999792, + 10.213137000000643, + 10.237719000000652, + 10.6482960000003, + 12.125573999999688, + 10.437383000000409, + 10.726919000000635, + 14.035103000000163, + 9.206234999999651, + 9.103843999999299 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 321.83904299999995, + "requestsPerSecond": 99.4285830013483, + "p50Ms": 76.97396200000003, + "p95Ms": 101.27760000000035, + "maxMs": 114.23650499999985, + "ttfbP95Ms": 99.7476370000004, + "cpuMs": 370.741, + "cpuMsPerRequest": 11.58565625, + "peakRssMiB": 173.26171875, + "eventLoopP95Ms": 14.131199, + "wireBytes": 3225504, + "latenciesMs": [ + 33.88383999999951, + 41.71044400000028, + 58.122793999999885, + 69.69017199999962, + 79.09965499999998, + 91.05045699999937, + 101.27760000000035, + 80.30536500000017, + 114.23650499999985, + 85.15556800000013, + 79.74570799999947, + 79.68840499999988, + 79.77701500000057, + 77.70543700000053, + 77.88724300000013, + 77.63266000000021, + 77.2407089999997, + 76.90941199999997, + 76.63940699999966, + 76.22754799999984, + 76.08746900000006, + 76.6449590000002, + 76.97396200000003, + 77.36400799999956, + 77.79437599999983, + 77.67049299999962, + 76.33652299999994, + 72.64776499999971, + 69.11045999999988, + 64.30537100000038, + 58.15600500000073, + 51.419238999999834 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 285.17441599999984, + "requestsPerSecond": 112.21202956719658, + "p50Ms": 70.30395399999998, + "p95Ms": 88.38484100000005, + "maxMs": 89.62643300000036, + "ttfbP95Ms": 86.65742500000033, + "cpuMs": 335.036, + "cpuMsPerRequest": 10.469875, + "peakRssMiB": 185.6328125, + "eventLoopP95Ms": 26.378239, + "wireBytes": 3225504, + "latenciesMs": [ + 50.76651200000015, + 53.052144000000226, + 55.29471900000044, + 57.49452800000017, + 59.75971899999968, + 61.97880600000008, + 68.10093200000028, + 70.30395399999998, + 72.06762200000048, + 71.92879700000049, + 71.74902699999984, + 71.97104899999977, + 71.95491599999968, + 72.28398599999946, + 72.26563500000066, + 85.26547600000049, + 73.90955599999961, + 74.00829199999953, + 74.18391499999962, + 74.22111900000073, + 71.49974400000065, + 76.97323899999992, + 88.38484100000005, + 89.62643300000036, + 70.00443700000051, + 68.80143299999963, + 67.5793819999999, + 66.37630400000035, + 65.04377699999986, + 63.62544100000014, + 50.910139999999956, + 37.8048660000004 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 262144, + "storedBytes": 100827, + "allocatedBytes": 102400, + "oldestAccess": 1793616512598, + "budgetBytes": 67108864, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 0, + "decisions": 0 + }, + "results": { + "blobs": 1, + "originalBytes": 264491, + "storedBytes": 100797, + "allocatedBytes": 102400, + "oldestAccess": 1793616512728, + "budgetBytes": 33554432, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 1, + "decisions": 1 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 526635, + "ms": 59.854179999999815, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 2, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 16.13214199999993, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 11.398297999999613, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 264491, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 100797, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 80.17924799999992, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 100827, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100797, + "uncompressedBytes": 264491, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": true, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "sqliteNormal": true, + "cold": { + "ms": 3895.830503, + "ttfb": 3874.0584689999996, + "bytes": 799783, + "wallMs": 3936.330007, + "cpuMs": 5059.91 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 491.4772549999998, + "requestsPerSecond": 32.55491446903277, + "p50Ms": 28.168635999999424, + "p95Ms": 55.91509099999985, + "maxMs": 55.91509099999985, + "ttfbP95Ms": 11.918882999999369, + "cpuMs": 741.012, + "cpuMsPerRequest": 46.31325, + "peakRssMiB": 307.65625, + "eventLoopP95Ms": 12.066815, + "wireBytes": 12796528, + "latenciesMs": [ + 29.214450999999826, + 30.657991000000038, + 27.714160000000447, + 27.467883999999685, + 31.247449000000415, + 29.387684000000263, + 27.83542100000068, + 25.95565600000009, + 27.980251999999382, + 28.38646299999982, + 31.87017400000059, + 28.168635999999424, + 27.450691000000006, + 32.11927700000069, + 55.91509099999985, + 25.516120999999657 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 300.0151870000009, + "requestsPerSecond": 53.330633558893645, + "p50Ms": 16.304980999999316, + "p95Ms": 27.05466499999966, + "maxMs": 27.05466499999966, + "ttfbP95Ms": 8.828843999999663, + "cpuMs": 657.816, + "cpuMsPerRequest": 41.1135, + "peakRssMiB": 306.9453125, + "eventLoopP95Ms": 17.203199, + "wireBytes": 12796528, + "latenciesMs": [ + 24.194515999999567, + 23.75684999999976, + 16.047802999999476, + 20.503551000001607, + 26.786025999999765, + 15.512760000001435, + 15.14806900000076, + 15.85907699999916, + 16.5129909999996, + 16.304980999999316, + 14.97947799999929, + 14.789507000001322, + 16.779403000000457, + 17.483801999998832, + 27.05466499999966, + 15.400590000001102 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 837.695287999999, + "requestsPerSecond": 38.20004774814973, + "p50Ms": 189.4029389999996, + "p95Ms": 348.26719199999934, + "maxMs": 357.93987599999855, + "ttfbP95Ms": 215.3000549999997, + "cpuMs": 1374.05, + "cpuMsPerRequest": 42.9390625, + "peakRssMiB": 307.4296875, + "eventLoopP95Ms": 34.308095, + "wireBytes": 25593056, + "latenciesMs": [ + 152.89308900000105, + 155.40326900000036, + 253.31474900000103, + 265.136853, + 278.6052789999994, + 288.2736620000014, + 348.26719199999934, + 357.93987599999855, + 326.1916600000004, + 324.75534399999924, + 240.582398999999, + 239.51983999999902, + 251.59744899999896, + 251.5121199999994, + 200.49180200000046, + 198.40286000000015, + 191.77191099999982, + 191.57550099999935, + 189.4029389999996, + 188.2004710000001, + 174.05179299999872, + 172.84166600000026, + 184.06443800000125, + 182.04996000000028, + 144.6964420000004, + 143.90832500000033, + 138.88750599999912, + 133.18058800000108, + 124.68706100000054, + 118.48172799999884, + 100.3971419999998, + 95.42150899999979 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 618.4260970000014, + "requestsPerSecond": 51.74425878085143, + "p50Ms": 153.40622599999915, + "p95Ms": 178.48253099999965, + "maxMs": 187.28157199999987, + "ttfbP95Ms": 75.5139339999987, + "cpuMs": 1175.679, + "cpuMsPerRequest": 36.73996875, + "peakRssMiB": 307.93359375, + "eventLoopP95Ms": 19.070975, + "wireBytes": 25593056, + "latenciesMs": [ + 119.30973300000005, + 121.43536399999903, + 121.91141799999968, + 122.556634999999, + 123.16853300000002, + 123.91257899999982, + 124.5778250000003, + 128.95534399999997, + 168.5831849999995, + 170.0214449999985, + 177.42017099999975, + 177.41772100000162, + 177.4455770000004, + 176.86535999999978, + 178.48253099999965, + 187.28157199999987, + 154.1961620000002, + 164.48928199999864, + 163.2199300000011, + 161.56209900000067, + 161.38791400000082, + 161.23440499999924, + 160.97795100000076, + 157.75086399999964, + 153.40622599999915, + 151.76738400000067, + 151.36204999999973, + 151.03709400000116, + 150.6052839999993, + 150.409533, + 150.17662799999925, + 142.62102500000037 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 2097152, + "storedBytes": 799931, + "allocatedBytes": 806912, + "oldestAccess": 1793616518145, + "budgetBytes": 67108864, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 0, + "decisions": 0 + }, + "results": { + "blobs": 1, + "originalBytes": 2115777, + "storedBytes": 799783, + "allocatedBytes": 802816, + "oldestAccess": 1793616521612, + "budgetBytes": 33554432, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 1, + "decisions": 1 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 4212929, + "ms": 373.338264, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 2, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 214.41180200000008, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 1, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 2950.512455, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 2115777, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 799783, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 3269.1114059999995, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 799931, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 799783, + "uncompressedBytes": 2115777, + "verifiedResponses": 100 + } + ], + "completedAt": "2026-11-02T10:48:44.284Z", + "assertions": "All 300 response bodies verified against expected output or the validated wire digest" +} diff --git a/docs/cache-performance-optimized-repeat-results.json b/docs/cache-performance-optimized-repeat-results.json new file mode 100644 index 0000000..296df13 --- /dev/null +++ b/docs/cache-performance-optimized-repeat-results.json @@ -0,0 +1,1468 @@ +{ + "measuredAt": "2026-11-02T11:11:22.323Z", + "environment": { + "execution": "compiled JavaScript", + "node": "v24.14.1", + "platform": "linux", + "arch": "x64", + "cpu": "Intel Xeon E312xx (Sandy Bridge, IBRS update)", + "logicalCpus": 12, + "totalMemoryGiB": 35.22977066040039, + "loadAverage": [ + 2.4, + 2.85, + 2.97 + ] + }, + "methodology": { + "scope": "Local loopback HTTP, deterministic synthetic content, isolated process per scenario; no production traffic", + "upstreamDelayMs": 20, + "rawSourceBaseline": "Raw local file; anonymization and gzip repeated every request; no transformed-result cache. Not a complete legacy deployment comparison.", + "measurements": "Cold request then 3 warmups, 2 batches each at concurrency 1 (16 requests) and 8 (32 requests). CPU and RSS include server, loopback client, hashing and Node runtime; worker-thread CPU included. First cold request also includes worker startup when applicable.", + "limitations": "Warm OS page cache; no TLS, proxy, GitHub bandwidth, database auth or real-world RTT. Small sample p95 is descriptive, not a capacity SLA. Fresh metadata indexes; not a full-size index test." + }, + "scenarios": [ + { + "size": 16384, + "changed": true, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 564.9107599999998, + "ttfb": 563.4648089999996, + "bytes": 6286, + "wallMs": 569.453117, + "cpuMs": 292.773 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 136.54391300000043, + "requestsPerSecond": 117.1784201028423, + "p50Ms": 7.833516000000145, + "p95Ms": 10.936538999999811, + "maxMs": 10.936538999999811, + "ttfbP95Ms": 10.482899999999972, + "cpuMs": 168.862, + "cpuMsPerRequest": 10.553875, + "peakRssMiB": 144.78125, + "eventLoopP95Ms": 11.460607, + "wireBytes": 100576, + "latenciesMs": [ + 10.936538999999811, + 9.289854000000105, + 9.214022999999997, + 8.506705000000238, + 9.490383000000293, + 8.551514000000225, + 8.043412999999873, + 9.23324300000013, + 7.195075000000088, + 6.832499000000098, + 7.134262000000035, + 7.685696000000007, + 7.136031000000003, + 7.162805999999819, + 7.833516000000145, + 6.775481000000127 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 117.03794100000005, + "requestsPerSecond": 136.70780486474888, + "p50Ms": 7.109433000000081, + "p95Ms": 7.858342999999877, + "maxMs": 7.858342999999877, + "ttfbP95Ms": 7.530091000000084, + "cpuMs": 128.469, + "cpuMsPerRequest": 8.0293125, + "peakRssMiB": 146.5859375, + "eventLoopP95Ms": 11.100159, + "wireBytes": 100576, + "latenciesMs": [ + 6.814390000000003, + 7.336291000000074, + 7.421086000000287, + 7.277678999999807, + 6.7760620000003655, + 7.069644000000153, + 6.9805639999999585, + 7.016908999999941, + 7.6321539999999, + 7.109433000000081, + 7.147471000000223, + 7.34299400000009, + 7.858342999999877, + 6.345409999999902, + 6.908492000000024, + 7.257277000000158 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 218.2937109999998, + "requestsPerSecond": 146.59148838236584, + "p50Ms": 53.23416300000008, + "p95Ms": 76.44917199999963, + "maxMs": 84.09819500000003, + "ttfbP95Ms": 76.18761899999981, + "cpuMs": 255.045, + "cpuMsPerRequest": 7.97015625, + "peakRssMiB": 150.96484375, + "eventLoopP95Ms": 16.228351, + "wireBytes": 201152, + "latenciesMs": [ + 33.80324500000006, + 40.4772780000003, + 47.88071499999978, + 55.74568700000009, + 62.004873999999745, + 69.26760800000011, + 76.44917199999963, + 52.36573199999975, + 84.09819500000003, + 53.428629999999885, + 54.2250039999999, + 54.21691099999998, + 54.202999999999975, + 54.131930999999895, + 53.819536999999855, + 53.40177900000026, + 53.41150800000014, + 53.23416300000008, + 52.19577799999979, + 52.31759499999998, + 52.20160100000021, + 52.519354999999905, + 52.92560600000024, + 53.84798499999988, + 53.9380970000002, + 54.21456000000035, + 52.25745400000005, + 47.08588299999974, + 42.743175000000065, + 36.88454999999976, + 30.871662000000015, + 24.135533000000123 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 314.29809699999987, + "requestsPerSecond": 101.81417038614781, + "p50Ms": 57.02768500000002, + "p95Ms": 115.74330899999995, + "maxMs": 162.3089359999999, + "ttfbP95Ms": 115.44014000000016, + "cpuMs": 246.65, + "cpuMsPerRequest": 7.7078125, + "peakRssMiB": 154.05859375, + "eventLoopP95Ms": 39.747583, + "wireBytes": 201152, + "latenciesMs": [ + 52.71764399999984, + 53.40298899999971, + 54.259477999999945, + 54.939348999999766, + 55.62139800000023, + 56.307174999999916, + 57.02768500000002, + 57.747460000000046, + 54.718483000000106, + 54.53288999999995, + 54.65849299999991, + 54.99311899999975, + 55.06853199999978, + 55.0104980000001, + 55.385193999999956, + 55.34810200000038, + 82.21564999999964, + 82.2951109999999, + 82.24049500000001, + 81.94626700000026, + 82.17782099999977, + 82.11242599999969, + 81.89210899999989, + 162.3089359999999, + 113.49327300000004, + 112.98526300000003, + 112.54999499999985, + 115.74330899999995, + 115.20574999999963, + 114.94514900000013, + 114.91399699999965, + 37.00665200000003 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 16384, + "storedBytes": 6297, + "allocatedBytes": 8192, + "activeReaders": 0, + "decisions": 0, + "reservedBytes": 0, + "budgetBytes": 67108864, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617884991 + }, + "results": { + "blobs": 1, + "originalBytes": 16533, + "storedBytes": 6286, + "allocatedBytes": 8192, + "activeReaders": 1, + "decisions": 1, + "reservedBytes": 0, + "budgetBytes": 33554432, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617885263 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 32917, + "ms": 9.960051000000021, + "b0": 0, + "b1": 0, + "b2": 2, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 4.605956000000333, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 8.382837999999992, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 16533, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 6286, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 64.26109600000018, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 6297, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6286, + "uncompressedBytes": 16533, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": true, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 716.9965659999998, + "ttfb": 714.1441059999997, + "bytes": 100797, + "wallMs": 734.790919, + "cpuMs": 294.739 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 175.48195699999997, + "requestsPerSecond": 91.17746504274513, + "p50Ms": 9.798607000000175, + "p95Ms": 14.855011999999988, + "maxMs": 14.855011999999988, + "ttfbP95Ms": 12.798651000000064, + "cpuMs": 196.122, + "cpuMsPerRequest": 12.257625, + "peakRssMiB": 151.234375, + "eventLoopP95Ms": 12.255231, + "wireBytes": 1612752, + "latenciesMs": [ + 14.855011999999988, + 11.753069999999752, + 13.427162999999837, + 11.852770999999848, + 13.664025999999922, + 11.01765400000022, + 11.739067999999861, + 9.798607000000175, + 10.127921000000242, + 9.218249000000014, + 9.021533999999974, + 8.85241700000006, + 8.719599000000017, + 8.9770410000001, + 9.53448299999991, + 8.697309000000132 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 141.6866570000002, + "requestsPerSecond": 112.92524178899907, + "p50Ms": 8.504296999999951, + "p95Ms": 9.95738799999981, + "maxMs": 9.95738799999981, + "ttfbP95Ms": 7.637522999999874, + "cpuMs": 151.988, + "cpuMsPerRequest": 9.49925, + "peakRssMiB": 157.9375, + "eventLoopP95Ms": 11.010047, + "wireBytes": 1612752, + "latenciesMs": [ + 9.168979000000036, + 9.428877999999713, + 9.328395999999884, + 8.018382000000202, + 8.487834999999905, + 9.108036000000084, + 8.472861000000194, + 8.144168000000263, + 8.547545999999784, + 8.504296999999951, + 8.181646999999884, + 8.606808000000001, + 8.607372999999825, + 9.95738799999981, + 7.854209000000083, + 8.335544000000027 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 240.4814779999997, + "requestsPerSecond": 133.0663811039952, + "p50Ms": 55.48106300000018, + "p95Ms": 68.55306800000017, + "maxMs": 75.54825300000039, + "ttfbP95Ms": 67.65258700000004, + "cpuMs": 275.352, + "cpuMsPerRequest": 8.60475, + "peakRssMiB": 170.828125, + "eventLoopP95Ms": 17.727487, + "wireBytes": 3225504, + "latenciesMs": [ + 27.078287999999702, + 34.41708999999992, + 43.45903499999986, + 51.223361000000295, + 56.82686999999987, + 62.78670999999986, + 68.55306800000017, + 48.88810999999987, + 75.54825300000039, + 49.346093999999994, + 47.862227000000075, + 47.26073399999996, + 49.09889299999986, + 51.510875999999826, + 53.445500000000266, + 55.48106300000018, + 55.9735740000001, + 57.09433600000011, + 57.65626300000031, + 58.46312999999964, + 59.24638199999981, + 59.34531100000004, + 59.45986000000039, + 59.395394000000124, + 59.527739999999994, + 58.63219100000015, + 57.383404000000155, + 55.82568200000014, + 53.31837099999984, + 50.166263999999956, + 46.95046100000036, + 48.37220900000011 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 329.50862700000016, + "requestsPerSecond": 97.11430104681291, + "p50Ms": 75.82031099999995, + "p95Ms": 108.76944600000024, + "maxMs": 109.65582700000004, + "ttfbP95Ms": 107.35711500000025, + "cpuMs": 309.551, + "cpuMsPerRequest": 9.67346875, + "peakRssMiB": 187.0703125, + "eventLoopP95Ms": 40.763391, + "wireBytes": 3225504, + "latenciesMs": [ + 43.839824000000135, + 45.59687500000018, + 47.36147400000027, + 49.13848800000005, + 50.88520000000017, + 52.589964999999665, + 57.19770299999982, + 58.96943599999986, + 57.9998529999998, + 57.8944590000001, + 58.198053999999956, + 58.582212000000254, + 59.0497290000003, + 59.458959999999934, + 60.50792500000034, + 75.82031099999995, + 93.56598600000007, + 94.52324799999997, + 94.79224199999999, + 94.86072400000012, + 94.99297400000023, + 94.7230010000003, + 95.30575499999986, + 104.44165999999996, + 109.65582700000004, + 108.76944600000024, + 108.07293499999969, + 107.61299899999995, + 107.09455100000014, + 106.82271599999967, + 106.88173700000016, + 88.10474000000022 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 262144, + "storedBytes": 100827, + "allocatedBytes": 102400, + "activeReaders": 0, + "decisions": 0, + "reservedBytes": 0, + "budgetBytes": 67108864, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617889075 + }, + "results": { + "blobs": 1, + "originalBytes": 264491, + "storedBytes": 100797, + "allocatedBytes": 102400, + "activeReaders": 1, + "decisions": 1, + "reservedBytes": 0, + "budgetBytes": 33554432, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617889396 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 526635, + "ms": 56.435169000000315, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 2, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 14.010060000000067, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 15.848896999999852, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 264491, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 100797, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 98.41796599999998, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 100827, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100797, + "uncompressedBytes": 264491, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": true, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 3351.5030090000005, + "ttfb": 3334.1238710000002, + "bytes": 799783, + "wallMs": 3382.5702140000003, + "cpuMs": 3892.494 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 406.13630100000046, + "requestsPerSecond": 39.39564121848833, + "p50Ms": 25.25823599999967, + "p95Ms": 33.44538900000043, + "maxMs": 33.44538900000043, + "ttfbP95Ms": 22.28428200000053, + "cpuMs": 670.287, + "cpuMsPerRequest": 41.8929375, + "peakRssMiB": 306.23046875, + "eventLoopP95Ms": 11.649023, + "wireBytes": 12796528, + "latenciesMs": [ + 27.70205100000021, + 27.711921999999504, + 25.873669999999947, + 29.60932700000012, + 26.403964000000087, + 26.34222200000022, + 25.25823599999967, + 24.619736000000557, + 24.691138999999566, + 18.07619799999975, + 19.012864000000263, + 18.775096999999732, + 19.539826000000176, + 23.80247899999995, + 30.63727899999958, + 33.44538900000043 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 297.4622560000007, + "requestsPerSecond": 53.788336762967205, + "p50Ms": 17.528103000000556, + "p95Ms": 29.370589999999538, + "maxMs": 29.370589999999538, + "ttfbP95Ms": 18.674189000000297, + "cpuMs": 527.303, + "cpuMsPerRequest": 32.9564375, + "peakRssMiB": 303.21484375, + "eventLoopP95Ms": 11.042815, + "wireBytes": 12796528, + "latenciesMs": [ + 17.123695000000225, + 17.633850999999595, + 17.79764999999952, + 20.976905000000443, + 19.01901700000053, + 29.370589999999538, + 17.67556599999989, + 17.195583000000624, + 17.528103000000556, + 16.921080000000075, + 17.66193999999996, + 16.491444999999658, + 17.307662999999593, + 16.749727999999777, + 17.582749999999578, + 17.449757999999747 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 440.92857399999957, + "requestsPerSecond": 72.57411264981896, + "p50Ms": 107.18087600000035, + "p95Ms": 128.32072900000003, + "maxMs": 131.93092400000023, + "ttfbP95Ms": 69.8511010000002, + "cpuMs": 828.578, + "cpuMsPerRequest": 25.8930625, + "peakRssMiB": 316.36328125, + "eventLoopP95Ms": 16.498687, + "wireBytes": 25593056, + "latenciesMs": [ + 84.59962600000017, + 85.38154299999951, + 90.37774000000081, + 96.04396700000052, + 103.0060110000004, + 107.59511099999963, + 113.48921400000017, + 118.36855800000012, + 103.2569310000008, + 102.89876999999979, + 103.23632699999962, + 105.963033, + 107.6969280000003, + 110.3119970000007, + 111.99130700000023, + 131.93092400000023, + 128.22241600000052, + 128.32072900000003, + 127.93862999999965, + 125.06648799999948, + 122.43034099999932, + 119.55787499999951, + 117.55360999999994, + 109.95926200000031, + 107.49625600000036, + 107.18087600000035, + 106.65524899999946, + 104.05932600000051, + 100.75023600000077, + 98.11869300000035, + 94.12034399999993, + 77.55358200000046 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 568.7391469999993, + "requestsPerSecond": 56.26480991996853, + "p50Ms": 128.4255519999997, + "p95Ms": 216.38964999999916, + "maxMs": 216.40055700000084, + "ttfbP95Ms": 71.31748700000026, + "cpuMs": 979.144, + "cpuMsPerRequest": 30.59825, + "peakRssMiB": 303.96484375, + "eventLoopP95Ms": 26.181631, + "wireBytes": 25593056, + "latenciesMs": [ + 121.83715399999983, + 123.56001199999992, + 123.79995299999973, + 124.17280399999981, + 124.57832099999996, + 125.02742699999999, + 125.45485600000029, + 128.4255519999997, + 84.52326100000028, + 85.186917, + 85.5510460000005, + 85.86822399999983, + 86.19665500000065, + 90.8152629999995, + 90.60284999999931, + 96.21789699999954, + 128.64474699999937, + 134.69709299999977, + 134.1677719999998, + 133.79856399999971, + 133.40278399999988, + 133.05352200000016, + 132.25471300000027, + 174.91367999999966, + 216.38964999999916, + 216.40055700000084, + 216.2652849999995, + 216.19974999999977, + 216.10748500000045, + 216.13359499999933, + 216.11364199999934, + 167.43831599999976 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 2097152, + "storedBytes": 799931, + "allocatedBytes": 806912, + "activeReaders": 0, + "decisions": 0, + "reservedBytes": 0, + "budgetBytes": 67108864, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617894164 + }, + "results": { + "blobs": 1, + "originalBytes": 2115777, + "storedBytes": 799783, + "allocatedBytes": 802816, + "activeReaders": 1, + "decisions": 1, + "reservedBytes": 0, + "budgetBytes": 33554432, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617896945 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 4212929, + "ms": 355.7860559999999, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 2, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 211.93944299999976, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 1, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 2075.7340230000004, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 2115777, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 799783, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 2396.572327, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 799931, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 799783, + "uncompressedBytes": 2115777, + "verifiedResponses": 100 + } + ], + "completedAt": "2026-11-02T11:11:39.040Z", + "assertions": "All 300 response bodies verified against expected output or the validated wire digest" +} diff --git a/docs/cache-performance-optimized-results.json b/docs/cache-performance-optimized-results.json new file mode 100644 index 0000000..c953a44 --- /dev/null +++ b/docs/cache-performance-optimized-results.json @@ -0,0 +1,6858 @@ +{ + "measuredAt": "2026-11-02T11:05:22.472Z", + "environment": { + "execution": "compiled JavaScript", + "node": "v24.14.1", + "platform": "linux", + "arch": "x64", + "cpu": "Intel Xeon E312xx (Sandy Bridge, IBRS update)", + "logicalCpus": 12, + "totalMemoryGiB": 35.22977066040039, + "loadAverage": [ + 2.85, + 2.28, + 2.82 + ] + }, + "methodology": { + "scope": "Local loopback HTTP, deterministic synthetic content, isolated process per scenario; no production traffic", + "upstreamDelayMs": 20, + "rawSourceBaseline": "Raw local file; anonymization and gzip repeated every request; no transformed-result cache. Not a complete legacy deployment comparison.", + "measurements": "Cold request then 3 warmups, 2 batches each at concurrency 1 (16 requests) and 8 (32 requests). CPU and RSS include server, loopback client, hashing and Node runtime; worker-thread CPU included. First cold request also includes worker startup when applicable.", + "limitations": "Warm OS page cache; no TLS, proxy, GitHub bandwidth, database auth or real-world RTT. Small sample p95 is descriptive, not a capacity SLA. Fresh metadata indexes; not a full-size index test." + }, + "scenarios": [ + { + "size": 16384, + "changed": false, + "mode": "uncached", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 94.7249380000003, + "ttfb": 93.76664400000027, + "bytes": 6297, + "wallMs": 97.14968799999997, + "cpuMs": 259.183 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 468.3105380000002, + "requestsPerSecond": 34.16536400895594, + "p50Ms": 29.35133599999972, + "p95Ms": 32.775622999999996, + "maxMs": 32.775622999999996, + "ttfbP95Ms": 32.15165200000001, + "cpuMs": 208.58, + "cpuMsPerRequest": 13.03625, + "peakRssMiB": 144.28515625, + "eventLoopP95Ms": 15.032319, + "wireBytes": 100752, + "latenciesMs": [ + 32.654821000000084, + 32.775622999999996, + 30.612169999999878, + 29.35133599999972, + 30.856588999999985, + 29.68661499999962, + 29.758229999999912, + 29.66892800000005, + 28.294107000000167, + 29.487605000000258, + 27.875449000000117, + 26.958368000000064, + 26.297397000000274, + 26.47850900000003, + 25.59552599999961, + 27.902255999999852 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 459.66068099999984, + "requestsPerSecond": 34.80828502710243, + "p50Ms": 28.345479999999952, + "p95Ms": 30.874135000000024, + "maxMs": 30.874135000000024, + "ttfbP95Ms": 30.440503000000263, + "cpuMs": 181.728, + "cpuMsPerRequest": 11.358, + "peakRssMiB": 146.97265625, + "eventLoopP95Ms": 13.533183, + "wireBytes": 100752, + "latenciesMs": [ + 28.305525000000216, + 27.525592999999844, + 28.345479999999952, + 29.210749999999734, + 28.12575199999992, + 28.778879999999845, + 26.816969999999856, + 27.78176600000006, + 29.259301999999934, + 28.903049999999894, + 28.974205999999867, + 29.181219000000056, + 30.090970000000198, + 30.874135000000024, + 26.6923069999998, + 27.81111800000008 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 258.9006360000003, + "requestsPerSecond": 123.59954187211792, + "p50Ms": 53.77264399999967, + "p95Ms": 81.41625299999987, + "maxMs": 84.72211299999981, + "ttfbP95Ms": 81.00761299999976, + "cpuMs": 280.214, + "cpuMsPerRequest": 8.7566875, + "peakRssMiB": 155.66015625, + "eventLoopP95Ms": 25.722879, + "wireBytes": 201504, + "latenciesMs": [ + 55.019702999999936, + 71.80415200000016, + 72.94914599999993, + 74.49815799999988, + 75.74368999999979, + 80.57208499999979, + 81.41625299999987, + 84.72211299999981, + 70.29776800000036, + 77.34888200000023, + 76.51204800000005, + 74.87177500000007, + 79.05806800000028, + 74.74620200000027, + 74.1793990000001, + 70.91168199999993, + 51.59257800000023, + 52.59778700000015, + 52.667043999999805, + 52.988290000000234, + 48.0731310000001, + 52.19227099999989, + 52.15893899999992, + 53.77264399999967, + 37.78686700000026, + 51.407220999999936, + 50.93756100000019, + 50.52599400000008, + 51.81087200000002, + 47.14363999999978, + 46.81845700000031, + 45.432460999999876 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 281.0405190000006, + "requestsPerSecond": 113.86258506019885, + "p50Ms": 68.91121500000008, + "p95Ms": 74.31077000000005, + "maxMs": 75.36986899999965, + "ttfbP95Ms": 74.04731700000002, + "cpuMs": 288.289, + "cpuMsPerRequest": 9.00903125, + "peakRssMiB": 163.41796875, + "eventLoopP95Ms": 29.032447, + "wireBytes": 201504, + "latenciesMs": [ + 63.03538400000025, + 63.89530999999988, + 64.68724299999985, + 65.4756510000002, + 69.80789199999981, + 70.64232800000036, + 71.50254700000005, + 74.31077000000005, + 68.84518200000002, + 68.892202, + 68.90824799999973, + 72.42245000000003, + 69.04608800000005, + 69.02546699999994, + 68.96681700000045, + 68.91121500000008, + 71.46825899999976, + 71.36596499999996, + 75.36986899999965, + 71.79958400000032, + 71.52108499999986, + 71.74081699999988, + 71.75029200000017, + 71.45233499999995, + 66.87062500000047, + 66.3939919999998, + 66.6516630000001, + 66.46869400000014, + 66.20289300000059, + 65.61880900000006, + 65.27701899999965, + 64.74033699999973 + ] + } + ], + "upstreamFills": 100, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 100, + "bytes": 1638400, + "ms": 259.98393300000043, + "b0": 0, + "b1": 0, + "b2": 100, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6297, + "uncompressedBytes": 16384, + "verifiedResponses": 100 + }, + { + "size": 16384, + "changed": false, + "mode": "raw-source", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 111.30910799999992, + "ttfb": 109.29464999999982, + "bytes": 6297, + "wallMs": 115.18098700000019, + "cpuMs": 293.739 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 144.95022100000006, + "requestsPerSecond": 110.38272235542155, + "p50Ms": 8.801665999999841, + "p95Ms": 11.500616999999693, + "maxMs": 11.500616999999693, + "ttfbP95Ms": 9.751528999999664, + "cpuMs": 200.126, + "cpuMsPerRequest": 12.507875, + "peakRssMiB": 144.57421875, + "eventLoopP95Ms": 12.533759, + "wireBytes": 100752, + "latenciesMs": [ + 11.500616999999693, + 8.978696000000127, + 8.801665999999841, + 8.01365399999986, + 8.23052699999971, + 9.997205000000122, + 6.882853000000068, + 7.255329999999958, + 7.244159000000309, + 8.193588999999974, + 8.33672499999966, + 9.512402999999722, + 9.167050000000017, + 9.002933000000212, + 9.427815999999893, + 10.221354999999676 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 139.85300099999995, + "requestsPerSecond": 114.40583960010987, + "p50Ms": 8.506908999999723, + "p95Ms": 9.639188000000104, + "maxMs": 9.639188000000104, + "ttfbP95Ms": 9.318159000000378, + "cpuMs": 171.521, + "cpuMsPerRequest": 10.7200625, + "peakRssMiB": 148.96484375, + "eventLoopP95Ms": 12.574719, + "wireBytes": 100752, + "latenciesMs": [ + 9.034889999999905, + 9.165713000000324, + 8.275082000000111, + 8.752664999999979, + 9.11013099999991, + 8.536597000000256, + 8.74366800000007, + 7.686322999999902, + 8.16993599999978, + 9.639188000000104, + 8.299746000000141, + 8.506908999999723, + 8.10059900000033, + 8.192031999999926, + 8.869447000000036, + 7.864637999999559 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 201.21615900000006, + "requestsPerSecond": 159.0329532132655, + "p50Ms": 40.97398000000021, + "p95Ms": 91.53832700000021, + "maxMs": 100.53903000000037, + "ttfbP95Ms": 91.2962550000002, + "cpuMs": 283.131, + "cpuMsPerRequest": 8.84784375, + "peakRssMiB": 159.453125, + "eventLoopP95Ms": 17.809407, + "wireBytes": 201504, + "latenciesMs": [ + 32.55324000000019, + 40.97398000000021, + 48.59315300000026, + 57.743045000000166, + 68.6364609999996, + 81.55310300000019, + 60.569528999999875, + 91.53832700000021, + 61.01180099999965, + 100.53903000000037, + 64.05554200000006, + 62.707074999999804, + 59.84388100000024, + 53.86419500000011, + 49.50664800000004, + 49.192935000000034, + 45.549751000000015, + 45.25038500000028, + 40.5995240000002, + 38.34380699999974, + 35.77694900000006, + 35.70123899999999, + 35.816915999999765, + 35.999765000000025, + 35.14922099999967, + 36.8640690000002, + 34.99909000000025, + 32.91867200000024, + 31.55176500000016, + 25.4980529999998, + 21.80718200000001, + 21.44437999999991 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 166.3072989999996, + "requestsPerSecond": 192.41488613196753, + "p50Ms": 38.349723999999696, + "p95Ms": 50.60086799999999, + "maxMs": 51.08408300000019, + "ttfbP95Ms": 50.376794999999674, + "cpuMs": 238.021, + "cpuMsPerRequest": 7.43815625, + "peakRssMiB": 169.08203125, + "eventLoopP95Ms": 19.300351, + "wireBytes": 201504, + "latenciesMs": [ + 30.43446499999982, + 30.821563999999853, + 31.287852999999814, + 31.72963699999991, + 32.066375999999764, + 34.03085599999986, + 34.54123900000013, + 35.14081199999964, + 34.53919799999994, + 34.53359100000034, + 34.51666600000044, + 34.51771000000008, + 34.5221819999997, + 34.04551399999991, + 38.349723999999696, + 38.144390000000385, + 41.95822399999997, + 42.39409000000023, + 42.67207899999994, + 43.135705000000144, + 43.49982600000021, + 44.59090699999979, + 46.94314399999985, + 47.60465499999964, + 51.08408300000019, + 50.60086799999999, + 50.2118559999999, + 49.792293999999856, + 49.523339999999735, + 49.635095999999976, + 44.51571799999965, + 43.87905899999987 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 100, + "bytes": 1638400, + "ms": 221.50338700000566, + "b0": 0, + "b1": 0, + "b2": 100, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6297, + "uncompressedBytes": 16384, + "verifiedResponses": 100 + }, + { + "size": 16384, + "changed": false, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 567.5465740000002, + "ttfb": 566.1393930000002, + "bytes": 6297, + "wallMs": 572.0539939999999, + "cpuMs": 400.095 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 127.16685600000028, + "requestsPerSecond": 125.8189476666779, + "p50Ms": 7.341480000000047, + "p95Ms": 9.395590000000084, + "maxMs": 9.395590000000084, + "ttfbP95Ms": 8.957370999999966, + "cpuMs": 159.182, + "cpuMsPerRequest": 9.948875, + "peakRssMiB": 145.82421875, + "eventLoopP95Ms": 11.026431, + "wireBytes": 100752, + "latenciesMs": [ + 9.389092000000346, + 9.395590000000084, + 8.06413799999973, + 8.010659000000032, + 9.34123899999986, + 7.728108999999677, + 7.666353000000072, + 6.799054000000069, + 7.950393000000076, + 6.80590200000006, + 7.341480000000047, + 6.936834999999974, + 6.761050999999952, + 7.118828000000121, + 6.841455000000224, + 7.327276999999867 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 131.58475700000008, + "requestsPerSecond": 121.59463120792927, + "p50Ms": 7.653335999999854, + "p95Ms": 10.37464299999965, + "maxMs": 10.37464299999965, + "ttfbP95Ms": 9.905927999999676, + "cpuMs": 143.897, + "cpuMsPerRequest": 8.9935625, + "peakRssMiB": 148.140625, + "eventLoopP95Ms": 11.329535, + "wireBytes": 100752, + "latenciesMs": [ + 7.615178999999898, + 7.6637189999996735, + 7.459679999999935, + 7.229773999999907, + 7.678200000000288, + 6.821988000000147, + 7.653335999999854, + 6.7868289999996705, + 7.130920999999944, + 7.960301999999956, + 7.605773999999656, + 8.359691000000112, + 9.256739999999809, + 8.531591999999819, + 10.37464299999965, + 10.090421000000333 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 275.57432900000003, + "requestsPerSecond": 116.1211209916436, + "p50Ms": 50.30620200000021, + "p95Ms": 134.4220009999999, + "maxMs": 142.42912399999977, + "ttfbP95Ms": 134.1136919999999, + "cpuMs": 279.006, + "cpuMsPerRequest": 8.7189375, + "peakRssMiB": 151.75, + "eventLoopP95Ms": 24.412159, + "wireBytes": 201504, + "latenciesMs": [ + 46.23658699999987, + 55.535563999999795, + 64.106405, + 75.71286299999974, + 82.57729299999983, + 89.56903299999976, + 134.4220009999999, + 99.93882299999996, + 142.42912399999977, + 97.6174860000001, + 95.62088300000005, + 91.21814499999982, + 90.508108, + 89.5264830000001, + 51.009371999999985, + 49.99619900000016, + 50.04896299999973, + 50.226018000000295, + 50.626170999999886, + 50.1524159999999, + 50.280733000000055, + 50.46629199999961, + 50.30097399999977, + 50.30620200000021, + 50.27824499999997, + 50.17759299999989, + 48.51351799999975, + 45.84034400000019, + 42.020468000000164, + 37.90843900000027, + 33.62208600000031, + 28.345784999999978 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 216.13552600000003, + "requestsPerSecond": 148.05525307301863, + "p50Ms": 44.34035700000004, + "p95Ms": 74.50578099999984, + "maxMs": 77.57574700000032, + "ttfbP95Ms": 74.14339400000017, + "cpuMs": 224.259, + "cpuMsPerRequest": 7.00809375, + "peakRssMiB": 155.1015625, + "eventLoopP95Ms": 21.315583, + "wireBytes": 201504, + "latenciesMs": [ + 42.96026600000005, + 43.492775000000165, + 44.34035700000004, + 44.93096700000024, + 45.732322999999724, + 46.43224400000008, + 47.116505999999845, + 51.442707999999584, + 44.285731999999825, + 44.16926599999988, + 44.056199000000106, + 44.018449000000146, + 44.10913500000015, + 44.15064199999961, + 44.38529299999982, + 52.194332999999915, + 43.03603000000021, + 43.011409000000185, + 43.01015499999994, + 43.19131299999981, + 43.070740000000114, + 42.87855600000012, + 42.675655000000006, + 51.60127000000011, + 74.50578099999984, + 74.44625700000006, + 74.422372, + 73.97722599999997, + 73.55890699999964, + 73.25124800000003, + 77.57574700000032, + 58.90772499999957 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 16384, + "storedBytes": 6297, + "allocatedBytes": 8192, + "activeReaders": 1, + "decisions": 0, + "reservedBytes": 0, + "budgetBytes": 67108864, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617532401 + }, + "results": { + "blobs": 0, + "originalBytes": 0, + "storedBytes": 0, + "allocatedBytes": 0, + "activeReaders": 0, + "decisions": 1, + "reservedBytes": 0, + "budgetBytes": 33554432, + "maxObjectBytes": 4194304, + "oldestAccess": null + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 7.6723729999998795, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 4.638180999999804, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 4.8004189999996925, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 57.56908700000031, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged_cached", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 6297, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6297, + "uncompressedBytes": 16384, + "verifiedResponses": 100 + }, + { + "size": 16384, + "changed": true, + "mode": "uncached", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 100.77653700000019, + "ttfb": 99.66684699999996, + "bytes": 6286, + "wallMs": 103.37854599999991, + "cpuMs": 290.394 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 425.9045550000001, + "requestsPerSecond": 37.56710232883045, + "p50Ms": 26.39766299999974, + "p95Ms": 29.183984000000237, + "maxMs": 29.183984000000237, + "ttfbP95Ms": 28.830406999999923, + "cpuMs": 162.689, + "cpuMsPerRequest": 10.1680625, + "peakRssMiB": 144.5078125, + "eventLoopP95Ms": 11.575295, + "wireBytes": 100576, + "latenciesMs": [ + 29.183984000000237, + 26.751170000000002, + 27.01574900000014, + 26.756972000000133, + 26.65886599999976, + 26.15047199999981, + 25.875770999999986, + 25.277756999999838, + 24.6679680000002, + 25.352570999999898, + 26.053183999999874, + 26.23415100000011, + 26.443514999999934, + 26.39766299999974, + 27.26644699999997, + 26.94056899999987 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 475.9523600000002, + "requestsPerSecond": 33.61680988408166, + "p50Ms": 29.21668200000022, + "p95Ms": 32.0889360000001, + "maxMs": 32.0889360000001, + "ttfbP95Ms": 31.521233999999822, + "cpuMs": 194.314, + "cpuMsPerRequest": 12.144625, + "peakRssMiB": 147.08203125, + "eventLoopP95Ms": 14.237695, + "wireBytes": 100576, + "latenciesMs": [ + 28.85801500000025, + 29.169274999999743, + 28.75969199999963, + 29.10321299999987, + 29.44975899999963, + 32.0889360000001, + 30.04802400000017, + 27.54584900000009, + 27.843348999999762, + 28.10837700000002, + 30.06800999999996, + 30.36283800000001, + 29.36283800000001, + 29.21668200000022, + 30.934230999999727, + 31.816487000000052 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 323.4952509999998, + "requestsPerSecond": 98.91953560703126, + "p50Ms": 79.35964100000001, + "p95Ms": 85.92410999999993, + "maxMs": 89.73910100000012, + "ttfbP95Ms": 85.65054099999998, + "cpuMs": 349.738, + "cpuMsPerRequest": 10.9293125, + "peakRssMiB": 156.64453125, + "eventLoopP95Ms": 40.304639, + "wireBytes": 201152, + "latenciesMs": [ + 76.78351699999985, + 77.70135200000004, + 78.5620759999997, + 79.35964100000001, + 83.89083500000015, + 84.73431200000005, + 85.5678170000001, + 89.73910100000012, + 81.208216, + 80.86137800000006, + 80.85980500000005, + 85.92410999999993, + 82.39615999999978, + 82.75111300000026, + 82.33605100000023, + 81.75849900000003, + 81.06992499999978, + 81.12684799999988, + 81.17422399999987, + 76.32485400000041, + 75.68435, + 75.16633499999989, + 73.38511500000004, + 81.15335400000004, + 73.20042999999987, + 73.01273399999991, + 76.86894799999982, + 76.42415200000005, + 75.9050229999998, + 75.35893400000032, + 72.62646300000006, + 70.22874199999978 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 288.18734600000016, + "requestsPerSecond": 111.03887954886119, + "p50Ms": 66.71331000000009, + "p95Ms": 79.9613430000004, + "maxMs": 84.55149299999994, + "ttfbP95Ms": 79.49548800000002, + "cpuMs": 302.308, + "cpuMsPerRequest": 9.447125, + "peakRssMiB": 166.41796875, + "eventLoopP95Ms": 37.715967, + "wireBytes": 201152, + "latenciesMs": [ + 71.25376300000016, + 71.86516900000015, + 72.59741699999995, + 73.54448200000024, + 78.23850999999968, + 78.89873799999987, + 79.9613430000004, + 84.55149299999994, + 78.51469700000007, + 78.61604299999999, + 78.63593600000013, + 79.03167899999971, + 75.37253699999974, + 75.49452100000008, + 77.28876600000012, + 76.89829399999962, + 65.22182800000064, + 64.91293399999995, + 64.60253899999952, + 63.8958649999995, + 63.44105500000023, + 63.002542000000176, + 58.6878429999997, + 65.81449100000009, + 66.71331000000009, + 66.4977799999997, + 66.24491300000045, + 65.92878699999983, + 65.76404999999977, + 65.47709599999962, + 62.07636399999956, + 65.33972200000062 + ] + } + ], + "upstreamFills": 100, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_changed", + "traffic": "background", + "count": 100, + "bytes": 1638400, + "ms": 281.433602000001, + "b0": 0, + "b1": 0, + "b2": 100, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6286, + "uncompressedBytes": 16533, + "verifiedResponses": 100 + }, + { + "size": 16384, + "changed": true, + "mode": "raw-source", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 79.53985499999999, + "ttfb": 78.18794799999978, + "bytes": 6286, + "wallMs": 82.336996, + "cpuMs": 69.95 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 101.90315899999996, + "requestsPerSecond": 157.01181550220642, + "p50Ms": 5.71544700000004, + "p95Ms": 12.421798999999737, + "maxMs": 12.421798999999737, + "ttfbP95Ms": 11.615162999999939, + "cpuMs": 160.171, + "cpuMsPerRequest": 10.0106875, + "peakRssMiB": 138.71484375, + "eventLoopP95Ms": 11.526143, + "wireBytes": 100576, + "latenciesMs": [ + 8.021468999999797, + 6.076688000000104, + 6.17977000000019, + 6.194285000000036, + 6.2266209999997955, + 6.949910000000273, + 5.575685000000249, + 5.980379999999968, + 4.994564999999966, + 4.82878699999992, + 5.528239000000212, + 12.421798999999737, + 5.71544700000004, + 5.007136000000173, + 4.84965800000009, + 5.210497999999916 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 86.47030700000005, + "requestsPerSecond": 185.03461540850077, + "p50Ms": 5.227884999999787, + "p95Ms": 6.492397999999866, + "maxMs": 6.492397999999866, + "ttfbP95Ms": 6.306712000000061, + "cpuMs": 113.719, + "cpuMsPerRequest": 7.1074375, + "peakRssMiB": 142.8046875, + "eventLoopP95Ms": 10.936319, + "wireBytes": 100576, + "latenciesMs": [ + 6.492397999999866, + 5.293896000000132, + 5.008808000000045, + 5.281438999999864, + 5.4186210000002575, + 5.054180999999971, + 5.032904000000144, + 5.111915999999837, + 5.470138000000134, + 5.015387999999803, + 5.276859999999942, + 5.56667299999981, + 5.181562000000213, + 5.227884999999787, + 5.267329000000245, + 5.150033000000349 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 165.1084780000001, + "requestsPerSecond": 193.8119737255405, + "p50Ms": 39.19161200000008, + "p95Ms": 60.14482700000008, + "maxMs": 66.08977600000026, + "ttfbP95Ms": 59.96271800000022, + "cpuMs": 246.082, + "cpuMsPerRequest": 7.6900625, + "peakRssMiB": 158.7734375, + "eventLoopP95Ms": 15.794175, + "wireBytes": 201152, + "latenciesMs": [ + 20.61105499999985, + 26.209695999999894, + 31.539303000000018, + 37.98615800000016, + 45.227052999999614, + 53.47724300000027, + 40.49437399999988, + 60.14482700000008, + 40.607784000000265, + 66.08977600000026, + 42.18528500000002, + 41.526562999999896, + 41.11293300000034, + 40.61631499999976, + 40.00568299999986, + 39.99169200000006, + 39.73952700000018, + 39.641607999999906, + 38.65023799999972, + 38.77045300000009, + 38.81013299999995, + 38.55282399999987, + 39.1183259999998, + 39.244756999999936, + 39.32890099999986, + 39.19161200000008, + 38.578344000000016, + 36.453989999999976, + 34.88242600000012, + 28.676728000000367, + 23.947413000000324, + 23.510385000000042 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 149.8725169999998, + "requestsPerSecond": 213.51479671219536, + "p50Ms": 36.01498999999967, + "p95Ms": 41.72019399999999, + "maxMs": 42.678421999999955, + "ttfbP95Ms": 41.498145999999906, + "cpuMs": 212.169, + "cpuMsPerRequest": 6.63028125, + "peakRssMiB": 174.546875, + "eventLoopP95Ms": 14.868479, + "wireBytes": 201152, + "latenciesMs": [ + 34.07527900000014, + 34.447779999999966, + 34.979331, + 35.47342299999991, + 35.883902000000035, + 37.96749799999998, + 38.549019000000044, + 39.012537000000066, + 36.92280600000004, + 36.912131000000045, + 36.25236599999971, + 37.53147099999978, + 36.89942400000018, + 36.396545999999944, + 41.696766000000025, + 41.72019399999999, + 36.01498999999967, + 36.05550299999959, + 36.12835899999982, + 36.15228399999978, + 36.222495999999865, + 42.678421999999955, + 35.68483900000001, + 35.70598199999995, + 33.92410400000017, + 33.63892200000009, + 33.2905410000003, + 33.00348800000029, + 34.245928999999705, + 31.625230999999985, + 30.66823099999965, + 32.44295199999988 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_changed", + "traffic": "background", + "count": 100, + "bytes": 1638400, + "ms": 172.54823699999906, + "b0": 0, + "b1": 0, + "b2": 100, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6286, + "uncompressedBytes": 16533, + "verifiedResponses": 100 + }, + { + "size": 16384, + "changed": true, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 879.7754189999996, + "ttfb": 878.230513, + "bytes": 6286, + "wallMs": 884.7913159999998, + "cpuMs": 475.511 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 156.6060779999998, + "requestsPerSecond": 102.16717131502406, + "p50Ms": 9.323019999999815, + "p95Ms": 11.718078000000332, + "maxMs": 11.718078000000332, + "ttfbP95Ms": 10.72598700000026, + "cpuMs": 198.594, + "cpuMsPerRequest": 12.412125, + "peakRssMiB": 145.4765625, + "eventLoopP95Ms": 11.313151, + "wireBytes": 100576, + "latenciesMs": [ + 10.33747399999993, + 10.820713999999953, + 11.025404999999864, + 9.323019999999815, + 11.718078000000332, + 10.674735000000055, + 10.038270000000011, + 9.566029000000071, + 7.46641099999988, + 8.354878999999983, + 9.098030000000108, + 8.265396000000237, + 8.908395999999811, + 8.561231000000134, + 8.297011999999995, + 9.402012999999897 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 148.01493000000028, + "requestsPerSecond": 108.09720343751789, + "p50Ms": 8.599227000000155, + "p95Ms": 11.55357499999991, + "maxMs": 11.55357499999991, + "ttfbP95Ms": 10.980941999999686, + "cpuMs": 163.364, + "cpuMsPerRequest": 10.21025, + "peakRssMiB": 147.53515625, + "eventLoopP95Ms": 11.108351, + "wireBytes": 100576, + "latenciesMs": [ + 11.55357499999991, + 10.600893999999698, + 9.23936300000014, + 8.586727999999766, + 8.385188999999627, + 8.281301999999869, + 8.433161000000382, + 8.276829000000362, + 10.047660000000178, + 8.756970000000365, + 8.599227000000155, + 9.185516000000007, + 9.12437299999965, + 8.113334000000123, + 8.8772170000002, + 8.406860999999935 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 258.02416700000003, + "requestsPerSecond": 124.01939078830549, + "p50Ms": 64.45646799999986, + "p95Ms": 93.39620299999979, + "maxMs": 102.49827800000003, + "ttfbP95Ms": 93.11734999999999, + "cpuMs": 300.322, + "cpuMsPerRequest": 9.3850625, + "peakRssMiB": 151.65625, + "eventLoopP95Ms": 19.267583, + "wireBytes": 201152, + "latenciesMs": [ + 40.31627500000013, + 48.294444999999996, + 57.60730999999987, + 66.76932299999999, + 75.44116099999974, + 84.6879170000002, + 93.39620299999979, + 64.15609900000027, + 102.49827800000003, + 65.85769500000015, + 66.11125100000027, + 65.83395500000006, + 65.30068400000027, + 64.27617899999996, + 64.22699499999999, + 64.71407899999986, + 64.5945770000003, + 64.99373300000025, + 65.59339199999977, + 65.64182600000004, + 64.45646799999986, + 64.58089400000017, + 65.3690029999998, + 63.72025200000007, + 63.34532399999989, + 60.177228000000014, + 54.72831500000029, + 48.796804000000066, + 44.14968200000021, + 37.966883999999936, + 30.294962999999825, + 24.289252999999917 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 299.59296200000017, + "requestsPerSecond": 106.81158791707524, + "p50Ms": 53.47797899999978, + "p95Ms": 111.99580700000024, + "maxMs": 127.09059899999966, + "ttfbP95Ms": 111.56461100000024, + "cpuMs": 267.498, + "cpuMsPerRequest": 8.3593125, + "peakRssMiB": 155.0078125, + "eventLoopP95Ms": 36.732927, + "wireBytes": 201152, + "latenciesMs": [ + 42.664944000000105, + 43.40931499999988, + 44.43190299999969, + 45.19053799999983, + 45.92683799999986, + 46.68180500000017, + 51.35650799999985, + 52.14519300000029, + 51.93900799999983, + 51.61862599999995, + 51.41233599999987, + 51.55518200000006, + 51.68837799999983, + 51.847044000000096, + 53.32340299999987, + 53.47797899999978, + 79.75426299999981, + 79.78441599999996, + 80.02597800000012, + 79.9324230000002, + 79.64080400000012, + 79.39493399999992, + 78.74385600000005, + 127.09059899999966, + 111.97358399999985, + 111.85025099999984, + 111.48927800000001, + 111.2284380000001, + 111.09866499999998, + 110.88971600000013, + 111.99580700000024, + 64.66869499999984 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 16384, + "storedBytes": 6297, + "allocatedBytes": 8192, + "activeReaders": 0, + "decisions": 0, + "reservedBytes": 0, + "budgetBytes": 67108864, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617543802 + }, + "results": { + "blobs": 1, + "originalBytes": 16533, + "storedBytes": 6286, + "allocatedBytes": 8192, + "activeReaders": 1, + "decisions": 1, + "reservedBytes": 0, + "budgetBytes": 33554432, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617544192 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 32917, + "ms": 13.802236999999877, + "b0": 0, + "b1": 0, + "b2": 2, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 5.287956000000122, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 8.755423999999948, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 16533, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 6286, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 73.13687299999992, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 6297, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6286, + "uncompressedBytes": 16533, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": false, + "mode": "uncached", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 95.80201899999975, + "ttfb": 73.72871600000008, + "bytes": 100827, + "wallMs": 103.59813099999974, + "cpuMs": 248.619 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 869.9077360000001, + "requestsPerSecond": 18.39275515995641, + "p50Ms": 53.09556199999997, + "p95Ms": 60.06115699999964, + "maxMs": 60.06115699999964, + "ttfbP95Ms": 43.12581999999975, + "cpuMs": 688.204, + "cpuMsPerRequest": 43.01275, + "peakRssMiB": 164.0859375, + "eventLoopP95Ms": 13.631487, + "wireBytes": 1613232, + "latenciesMs": [ + 56.4509979999998, + 52.875242999999955, + 53.31442199999992, + 53.09556199999997, + 52.39805999999999, + 52.5903959999996, + 51.2363620000001, + 52.71720800000003, + 53.9867049999998, + 55.603262000000086, + 55.11669200000006, + 52.858856999999716, + 54.64185499999985, + 54.949175000000196, + 60.06115699999964, + 52.81957999999986 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 839.6099490000001, + "requestsPerSecond": 19.056467850406566, + "p50Ms": 51.70401600000014, + "p95Ms": 64.02597699999978, + "maxMs": 64.02597699999978, + "ttfbP95Ms": 40.75072, + "cpuMs": 624.514, + "cpuMsPerRequest": 39.032125, + "peakRssMiB": 183.7734375, + "eventLoopP95Ms": 12.738559, + "wireBytes": 1613232, + "latenciesMs": [ + 51.70401600000014, + 51.32647799999995, + 55.849157000000105, + 64.02597699999978, + 51.12225699999999, + 54.2794100000001, + 48.94787300000007, + 47.46126699999968, + 48.496924000000035, + 48.54943299999968, + 51.72801400000026, + 51.618289000000004, + 52.711647000000085, + 52.646164000000226, + 52.55387500000052, + 53.11630299999979 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 559.4601080000002, + "requestsPerSecond": 57.19800132737969, + "p50Ms": 136.7615480000004, + "p95Ms": 155.03316499999983, + "maxMs": 157.81267500000013, + "ttfbP95Ms": 104.13819299999977, + "cpuMs": 1190.382, + "cpuMsPerRequest": 37.1994375, + "peakRssMiB": 225.90625, + "eventLoopP95Ms": 62.390271, + "wireBytes": 3226464, + "latenciesMs": [ + 141.54615400000057, + 147.20098199999939, + 147.99005099999977, + 154.5421320000005, + 154.83311200000026, + 155.03316499999983, + 155.01425300000028, + 157.81267500000013, + 135.16240800000014, + 141.42664700000023, + 136.7615480000004, + 146.54292999999961, + 136.9200609999998, + 141.1078779999998, + 145.74132100000043, + 145.82053300000007, + 136.6679269999995, + 124.49823199999992, + 128.78414499999963, + 133.84427200000027, + 140.7793760000004, + 131.96731099999943, + 132.23840399999972, + 137.25260400000025, + 125.16279399999985, + 135.20623199999955, + 128.00492099999974, + 119.24558399999933, + 125.98275000000012, + 122.34181700000045, + 125.82644600000003, + 124.61079900000004 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 541.6549340000001, + "requestsPerSecond": 59.07820272897208, + "p50Ms": 123.33046800000011, + "p95Ms": 161.4365600000001, + "maxMs": 170.00646600000073, + "ttfbP95Ms": 119.1730520000001, + "cpuMs": 1328.996, + "cpuMsPerRequest": 41.531125, + "peakRssMiB": 240.3828125, + "eventLoopP95Ms": 68.222975, + "wireBytes": 3226464, + "latenciesMs": [ + 129.78709200000048, + 138.7818040000002, + 141.09812500000044, + 142.03352099999938, + 149.0257499999998, + 149.88276899999983, + 153.1178770000006, + 154.16995000000043, + 151.19255599999997, + 143.80318799999986, + 170.00646600000073, + 161.4365600000001, + 160.06245500000023, + 152.7626879999998, + 155.0015570000005, + 153.39994399999978, + 119.90813199999957, + 119.36118299999998, + 118.88053200000013, + 123.33046800000011, + 121.26963999999953, + 120.34529500000008, + 123.32545399999981, + 119.54817600000024, + 111.53730700000051, + 107.11324700000023, + 109.57465800000045, + 109.05057500000021, + 115.96185400000013, + 112.50105200000053, + 111.43276999999944, + 115.49481500000002 + ] + } + ], + "upstreamFills": 100, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 100, + "bytes": 26214400, + "ms": 312.2484880000038, + "b0": 0, + "b1": 0, + "b2": 100, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100827, + "uncompressedBytes": 262144, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": false, + "mode": "raw-source", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 105.38142600000037, + "ttfb": 88.61028100000021, + "bytes": 100827, + "wallMs": 110.51092699999981, + "cpuMs": 265.673 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 587.7997729999997, + "requestsPerSecond": 27.220153417786378, + "p50Ms": 36.88744799999995, + "p95Ms": 39.922027999999955, + "maxMs": 39.922027999999955, + "ttfbP95Ms": 22.11343500000021, + "cpuMs": 733.995, + "cpuMsPerRequest": 45.8746875, + "peakRssMiB": 169.18359375, + "eventLoopP95Ms": 13.189119, + "wireBytes": 1613232, + "latenciesMs": [ + 39.772512000000006, + 38.2362320000002, + 37.83000200000015, + 37.34928400000035, + 37.926312999999936, + 37.81692999999996, + 36.71753499999977, + 39.922027999999955, + 36.88744799999995, + 33.706089999999676, + 33.5373010000003, + 31.727155999999923, + 35.83442699999978, + 32.70712700000013, + 34.06613800000014, + 38.77614200000016 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 554.6769850000001, + "requestsPerSecond": 28.845617237931727, + "p50Ms": 34.48456699999997, + "p95Ms": 40.127422000000024, + "maxMs": 40.127422000000024, + "ttfbP95Ms": 20.56121600000006, + "cpuMs": 654.594, + "cpuMsPerRequest": 40.912125, + "peakRssMiB": 192.9921875, + "eventLoopP95Ms": 13.139967, + "wireBytes": 1613232, + "latenciesMs": [ + 34.50448400000005, + 33.965224000000035, + 31.67116699999997, + 33.42199599999958, + 34.62928799999963, + 34.48456699999997, + 35.33199800000011, + 32.624585000000025, + 33.12322600000016, + 32.49193800000012, + 34.80625700000019, + 40.127422000000024, + 37.22614500000009, + 32.51155800000015, + 35.16067599999997, + 35.17400899999984 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 517.2880919999998, + "requestsPerSecond": 61.861079918305975, + "p50Ms": 129.34000500000002, + "p95Ms": 161.80427700000018, + "maxMs": 166.17294300000003, + "ttfbP95Ms": 104.84498200000007, + "cpuMs": 1383.174, + "cpuMsPerRequest": 43.2241875, + "peakRssMiB": 230.2421875, + "eventLoopP95Ms": 19.021823, + "wireBytes": 3226464, + "latenciesMs": [ + 109.49904800000013, + 114.73385000000007, + 129.34000500000002, + 129.95545300000003, + 130.30290300000024, + 134.83302600000025, + 161.80427700000018, + 166.17294300000003, + 123.72986700000001, + 121.04546299999993, + 116.54467899999963, + 124.99005999999963, + 130.33221300000014, + 140.64443600000004, + 122.45979699999998, + 140.54233999999997, + 141.48673599999984, + 152.5742369999998, + 144.09581099999969, + 143.3734500000005, + 138.73172599999998, + 134.2846129999998, + 134.10060300000032, + 145.3835699999995, + 115.69415799999933, + 112.60408499999994, + 101.15306899999996, + 104.37958600000002, + 110.36428399999932, + 94.19838499999969, + 88.76543399999991, + 60.34289400000034 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 430.76730399999997, + "requestsPerSecond": 74.28604655658825, + "p50Ms": 105.55997200000002, + "p95Ms": 119.21280999999999, + "maxMs": 126.46339400000033, + "ttfbP95Ms": 73.54944100000012, + "cpuMs": 1106.536, + "cpuMsPerRequest": 34.57925, + "peakRssMiB": 230.796875, + "eventLoopP95Ms": 19.038207, + "wireBytes": 3226464, + "latenciesMs": [ + 105.77496900000006, + 109.99773699999969, + 111.7708990000001, + 114.5931070000006, + 115.00761800000055, + 115.53823799999918, + 118.25505200000043, + 119.21280999999999, + 92.01039300000048, + 99.38316699999996, + 96.73700699999972, + 102.25704000000042, + 105.91379200000029, + 102.902153, + 111.06911899999977, + 108.2577680000004, + 99.9016589999992, + 103.49783599999955, + 106.17882199999985, + 108.99076499999956, + 105.55997200000002, + 109.67650800000047, + 110.37908299999981, + 126.46339400000033, + 103.73749299999963, + 103.97886699999981, + 103.00298699999985, + 95.8691289999997, + 96.35557699999936, + 92.97247900000002, + 88.95579999999973, + 74.25139200000012 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 100, + "bytes": 26214400, + "ms": 294.56420600000547, + "b0": 0, + "b1": 0, + "b2": 100, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100827, + "uncompressedBytes": 262144, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": false, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 646.386696, + "ttfb": 642.8989670000001, + "bytes": 100827, + "wallMs": 656.430065, + "cpuMs": 308.658 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 212.7672910000001, + "requestsPerSecond": 75.19952867191411, + "p50Ms": 12.59686899999997, + "p95Ms": 16.087520999999924, + "maxMs": 16.087520999999924, + "ttfbP95Ms": 11.779324000000088, + "cpuMs": 252.909, + "cpuMsPerRequest": 15.8068125, + "peakRssMiB": 148.828125, + "eventLoopP95Ms": 11.796479, + "wireBytes": 1613232, + "latenciesMs": [ + 16.087520999999924, + 13.785617000000002, + 14.582091000000219, + 12.59686899999997, + 14.224471999999878, + 13.552986000000146, + 12.96895799999993, + 12.054253000000244, + 11.987439999999879, + 13.593289999999797, + 10.648236999999881, + 12.209675999999945, + 12.064523000000008, + 11.918353000000025, + 12.835344999999961, + 12.29594700000007 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 198.19014799999968, + "requestsPerSecond": 80.73055175275425, + "p50Ms": 11.923604000000068, + "p95Ms": 13.221050999999989, + "maxMs": 13.221050999999989, + "ttfbP95Ms": 10.625923000000057, + "cpuMs": 216.809, + "cpuMsPerRequest": 13.5505625, + "peakRssMiB": 157.078125, + "eventLoopP95Ms": 11.436031, + "wireBytes": 1613232, + "latenciesMs": [ + 11.297544000000016, + 13.168618000000151, + 12.088580000000093, + 12.494293000000198, + 11.509837000000061, + 12.86317500000041, + 11.531995000000279, + 11.909709999999905, + 12.108237999999801, + 10.91396500000019, + 11.923604000000068, + 12.061368999999559, + 11.824232999999822, + 13.169957000000068, + 13.221050999999989, + 11.816595999999663 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 440.2919949999996, + "requestsPerSecond": 72.67904109862373, + "p50Ms": 104.21473200000037, + "p95Ms": 164.94882199999984, + "maxMs": 187.22626100000025, + "ttfbP95Ms": 163.08054000000038, + "cpuMs": 673.016, + "cpuMsPerRequest": 21.03175, + "peakRssMiB": 169.8671875, + "eventLoopP95Ms": 36.077567, + "wireBytes": 3226464, + "latenciesMs": [ + 46.512827000000016, + 60.51926000000003, + 79.41832400000021, + 93.64823700000034, + 105.28075400000034, + 117.6862699999997, + 164.94882199999984, + 141.8585810000004, + 187.22626100000025, + 142.6523159999997, + 137.29987699999947, + 135.53709700000036, + 134.442051, + 135.83598100000017, + 100.09121899999991, + 96.62924300000032, + 96.40331700000024, + 96.77833199999986, + 120.27985999999964, + 118.26037400000041, + 116.6856399999997, + 112.89906400000018, + 110.98955500000011, + 104.47035199999937, + 104.21473200000037, + 101.40636600000016, + 72.75678999999946, + 68.43157599999995, + 63.74475200000052, + 59.80641199999991, + 55.13518699999986, + 49.373812000000726 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 274.89566899999954, + "requestsPerSecond": 116.4077997896724, + "p50Ms": 63.30544199999986, + "p95Ms": 91.03249600000072, + "maxMs": 91.43799500000023, + "ttfbP95Ms": 89.97069400000055, + "cpuMs": 455.496, + "cpuMsPerRequest": 14.23425, + "peakRssMiB": 171.15625, + "eventLoopP95Ms": 19.070975, + "wireBytes": 3226464, + "latenciesMs": [ + 38.910493999999744, + 40.269273999999314, + 42.14719699999932, + 43.97403899999972, + 45.70063500000015, + 47.54384200000004, + 49.48730599999999, + 55.960793000000194, + 75.17318700000033, + 75.17994799999997, + 74.81327400000009, + 74.6645010000002, + 74.44212599999992, + 74.1140749999995, + 73.68217400000049, + 71.28338299999996, + 52.379817, + 52.38806399999976, + 52.41818400000011, + 52.43600399999923, + 52.519444000000476, + 52.711679000000004, + 52.76885299999958, + 63.30544199999986, + 91.43799500000023, + 91.03249600000072, + 90.63942000000043, + 90.13666699999976, + 89.66485399999965, + 87.31913799999984, + 90.3381930000005, + 82.31320900000082 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 262144, + "storedBytes": 100827, + "allocatedBytes": 102400, + "activeReaders": 1, + "decisions": 0, + "reservedBytes": 0, + "budgetBytes": 67108864, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617559063 + }, + "results": { + "blobs": 0, + "originalBytes": 0, + "storedBytes": 0, + "allocatedBytes": 0, + "activeReaders": 0, + "decisions": 1, + "reservedBytes": 0, + "budgetBytes": 33554432, + "maxObjectBytes": 4194304, + "oldestAccess": null + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 35.039422999999715, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 13.608482000000095, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 5.256451000000197, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 70.72372799999994, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged_cached", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 100827, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100827, + "uncompressedBytes": 262144, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": true, + "mode": "uncached", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 116.8999490000001, + "ttfb": 99.54208599999993, + "bytes": 100797, + "wallMs": 122.65588800000023, + "cpuMs": 293.975 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 893.8890809999998, + "requestsPerSecond": 17.89931249870587, + "p50Ms": 54.94163200000003, + "p95Ms": 59.72431099999994, + "maxMs": 59.72431099999994, + "ttfbP95Ms": 42.621152000000166, + "cpuMs": 712.649, + "cpuMsPerRequest": 44.5405625, + "peakRssMiB": 174.5390625, + "eventLoopP95Ms": 16.891903, + "wireBytes": 1612752, + "latenciesMs": [ + 56.45987000000014, + 54.143209999999726, + 56.299169999999776, + 59.56328900000017, + 59.72431099999994, + 56.34924600000022, + 58.040097999999944, + 58.11941799999977, + 54.72889600000008, + 54.94163200000003, + 56.00884899999983, + 53.1099250000002, + 52.97996599999988, + 52.67511400000012, + 52.917495000000145, + 53.276680999999826 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 936.7822910000004, + "requestsPerSecond": 17.079742170318198, + "p50Ms": 57.16839700000037, + "p95Ms": 67.15192799999977, + "maxMs": 67.15192799999977, + "ttfbP95Ms": 48.6836059999996, + "cpuMs": 733.295, + "cpuMsPerRequest": 45.8309375, + "peakRssMiB": 202.79296875, + "eventLoopP95Ms": 18.202623, + "wireBytes": 1612752, + "latenciesMs": [ + 51.69158299999981, + 52.437131000000136, + 59.08163599999989, + 67.15192799999977, + 63.427607000000535, + 61.294801999999436, + 56.602482000000236, + 54.69466299999931, + 57.16839700000037, + 61.44023200000083, + 56.93695099999968, + 58.227208000000246, + 55.741439999999784, + 56.511765000000196, + 60.59228299999995, + 59.89722499999971 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 667.6138419999997, + "requestsPerSecond": 47.93190012977594, + "p50Ms": 175.9830750000001, + "p95Ms": 191.02433099999962, + "maxMs": 191.14003200000025, + "ttfbP95Ms": 137.58690600000045, + "cpuMs": 1490.778, + "cpuMsPerRequest": 46.5868125, + "peakRssMiB": 253.86328125, + "eventLoopP95Ms": 73.793535, + "wireBytes": 3225504, + "latenciesMs": [ + 177.67945099999997, + 178.42606700000033, + 185.96582900000067, + 185.19750999999997, + 185.3737000000001, + 186.1042520000001, + 191.02433099999962, + 191.14003200000025, + 168.9699129999999, + 172.27552599999945, + 181.77160300000014, + 175.38395200000014, + 174.92761100000007, + 171.94374400000015, + 175.9830750000001, + 173.10474000000067, + 160.92241000000013, + 180.7830359999998, + 176.63806700000077, + 179.420975, + 180.45143199999984, + 179.55292999999983, + 177.89438700000028, + 179.7820839999995, + 145.19967700000052, + 122.64307100000042, + 122.32889299999988, + 123.97889399999985, + 122.39087299999937, + 121.10103999999956, + 120.5534149999994, + 122.54278699999941 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 499.09398299999975, + "requestsPerSecond": 64.11618069937745, + "p50Ms": 119.0977469999998, + "p95Ms": 143.45546399999967, + "maxMs": 147.16232499999933, + "ttfbP95Ms": 110.22644299999956, + "cpuMs": 1046.166, + "cpuMsPerRequest": 32.6926875, + "peakRssMiB": 244.99609375, + "eventLoopP95Ms": 75.104255, + "wireBytes": 3225504, + "latenciesMs": [ + 106.90913799999998, + 108.84290899999996, + 110.35235299999931, + 117.19556199999988, + 116.87210200000027, + 118.42880100000002, + 118.30252399999972, + 119.0977469999998, + 98.43070799999987, + 98.22374199999922, + 104.56610499999988, + 98.40793600000052, + 98.90329800000018, + 98.81217199999992, + 98.94329099999959, + 99.51898399999936, + 140.75345300000026, + 143.45546399999967, + 136.5248849999998, + 138.96656600000006, + 137.98076199999923, + 139.33105299999988, + 139.73248599999988, + 139.72101900000052, + 147.16232499999933, + 142.3872079999992, + 141.8779429999995, + 141.4044899999999, + 140.2882129999998, + 138.06607799999983, + 139.56140699999924, + 142.2687449999994 + ] + } + ], + "upstreamFills": 100, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_changed", + "traffic": "background", + "count": 100, + "bytes": 26214400, + "ms": 539.862899000002, + "b0": 0, + "b1": 0, + "b2": 99, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100797, + "uncompressedBytes": 264491, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": true, + "mode": "raw-source", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 131.220961, + "ttfb": 115.31173100000024, + "bytes": 100797, + "wallMs": 136.52441899999985, + "cpuMs": 292.316 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 605.399293, + "requestsPerSecond": 26.428838264269334, + "p50Ms": 37.00617800000009, + "p95Ms": 47.813342000000375, + "maxMs": 47.813342000000375, + "ttfbP95Ms": 29.477032000000236, + "cpuMs": 737.245, + "cpuMsPerRequest": 46.0778125, + "peakRssMiB": 179.80859375, + "eventLoopP95Ms": 16.506879, + "wireBytes": 1612752, + "latenciesMs": [ + 47.813342000000375, + 44.76241600000003, + 38.547881999999845, + 37.00617800000009, + 37.879607000000306, + 35.838040999999976, + 31.532530999999835, + 35.857772999999725, + 35.650858999999855, + 32.09379199999967, + 33.60629299999982, + 38.87019999999984, + 36.7517270000003, + 37.12012199999981, + 38.728012000000035, + 38.994036999999935 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 603.6367690000002, + "requestsPerSecond": 26.50600629664426, + "p50Ms": 37.47974999999997, + "p95Ms": 40.46892700000035, + "maxMs": 40.46892700000035, + "ttfbP95Ms": 23.601472000000285, + "cpuMs": 698.372, + "cpuMsPerRequest": 43.64825, + "peakRssMiB": 211.74609375, + "eventLoopP95Ms": 17.891327, + "wireBytes": 1612752, + "latenciesMs": [ + 36.72168599999986, + 36.77871099999993, + 35.73253399999976, + 40.46892700000035, + 36.185505999999805, + 37.63821599999983, + 36.026606999999785, + 39.63057600000002, + 37.69239999999991, + 38.53399799999988, + 40.0107280000002, + 38.9684729999999, + 37.47974999999997, + 35.95625199999995, + 38.1692079999998, + 34.26667099999986 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 678.1881240000002, + "requestsPerSecond": 47.18454786742917, + "p50Ms": 154.0379899999998, + "p95Ms": 220.6992540000001, + "maxMs": 221.70138000000043, + "ttfbP95Ms": 145.14399500000036, + "cpuMs": 1494.61, + "cpuMsPerRequest": 46.7065625, + "peakRssMiB": 238.16015625, + "eventLoopP95Ms": 22.233087, + "wireBytes": 3225504, + "latenciesMs": [ + 150.1085350000003, + 155.59903600000007, + 175.55063900000005, + 176.46296299999995, + 177.32086100000015, + 206.00996900000064, + 220.6992540000001, + 221.70138000000043, + 192.74364400000013, + 196.83770800000002, + 181.53049999999985, + 185.3835650000001, + 194.3106110000008, + 190.06068700000014, + 197.16111100000035, + 196.6877489999997, + 141.22008499999993, + 145.55778100000043, + 151.9486909999996, + 147.9074729999993, + 143.85928799999965, + 144.14310899999964, + 130.56596100000024, + 135.54559999999947, + 150.4304489999995, + 155.17732100000012, + 153.32470999999987, + 154.0379899999998, + 150.56554400000005, + 132.13093599999956, + 125.38396300000022, + 120.30996400000004 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 577.1255920000003, + "requestsPerSecond": 55.447203249305886, + "p50Ms": 139.3372559999998, + "p95Ms": 168.53165500000068, + "maxMs": 174.98737400000027, + "ttfbP95Ms": 119.94108299999971, + "cpuMs": 1428.409, + "cpuMsPerRequest": 44.63778125, + "peakRssMiB": 236.15234375, + "eventLoopP95Ms": 22.806527, + "wireBytes": 3225504, + "latenciesMs": [ + 132.86674699999912, + 137.57817200000045, + 139.41168599999946, + 160.7042819999997, + 163.40870900000027, + 167.12621099999978, + 168.53165500000068, + 174.98737400000027, + 153.75102900000002, + 154.54496800000015, + 135.99645099999998, + 164.97681899999952, + 142.78760599999987, + 141.51846699999987, + 141.28582199999983, + 135.47124500000064, + 129.09328899999946, + 130.84830500000044, + 134.36860100000013, + 134.35918700000002, + 147.24521499999992, + 140.62065600000005, + 140.6569440000003, + 140.99406199999976, + 135.09668799999963, + 139.3372559999998, + 124.62400799999978, + 130.29040900000018, + 127.50879199999963, + 124.19532299999992, + 122.38892299999952, + 124.5484120000001 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_changed", + "traffic": "background", + "count": 100, + "bytes": 26214400, + "ms": 554.5716769999967, + "b0": 0, + "b1": 0, + "b2": 100, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100797, + "uncompressedBytes": 264491, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": true, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 615.256656, + "ttfb": 612.2059160000003, + "bytes": 100797, + "wallMs": 624.5805479999999, + "cpuMs": 460.273 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 167.6944609999996, + "requestsPerSecond": 95.41161887273091, + "p50Ms": 9.495715999999902, + "p95Ms": 13.019096999999874, + "maxMs": 13.019096999999874, + "ttfbP95Ms": 9.759027999999944, + "cpuMs": 201.018, + "cpuMsPerRequest": 12.563625, + "peakRssMiB": 155.29296875, + "eventLoopP95Ms": 11.665407, + "wireBytes": 1612752, + "latenciesMs": [ + 13.019096999999874, + 12.692501999999877, + 11.165821999999935, + 10.945264999999836, + 11.41869799999995, + 10.700428000000102, + 9.539998999999625, + 9.492686999999933, + 9.481850000000122, + 9.376164999999673, + 9.667767999999796, + 9.280835999999908, + 9.45565600000009, + 9.495715999999902, + 8.869623000000047, + 9.397489999999834 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 150.62088300000005, + "requestsPerSecond": 106.22696986844775, + "p50Ms": 9.367345999999998, + "p95Ms": 9.800421999999799, + "maxMs": 9.800421999999799, + "ttfbP95Ms": 7.994881999999961, + "cpuMs": 163.535, + "cpuMsPerRequest": 10.2209375, + "peakRssMiB": 161.48046875, + "eventLoopP95Ms": 11.771903, + "wireBytes": 1612752, + "latenciesMs": [ + 9.437699000000066, + 9.411429000000226, + 9.800421999999799, + 9.088248999999905, + 8.736824999999953, + 9.114552999999887, + 9.528245999999854, + 8.620844000000034, + 9.61265800000001, + 9.745464999999967, + 8.699127000000317, + 9.367345999999998, + 9.569143000000167, + 9.481284999999843, + 9.162695999999869, + 8.426278999999795 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 270.66089200000033, + "requestsPerSecond": 118.22912340065723, + "p50Ms": 55.4738339999999, + "p95Ms": 102.83721400000013, + "maxMs": 112.36890699999958, + "ttfbP95Ms": 101.75972900000033, + "cpuMs": 285.601, + "cpuMsPerRequest": 8.92503125, + "peakRssMiB": 174.36328125, + "eventLoopP95Ms": 17.694719, + "wireBytes": 3225504, + "latenciesMs": [ + 35.124323000000004, + 41.841705999999704, + 49.4351029999998, + 57.108464999999796, + 63.629787999999735, + 96.28801499999963, + 102.83721400000013, + 78.77402299999994, + 112.36890699999958, + 80.07548600000018, + 81.14888199999996, + 85.99165499999981, + 81.26578000000018, + 55.15051399999993, + 56.437077000000045, + 56.253589999999804, + 56.07690400000001, + 55.2958279999998, + 54.57916699999987, + 54.77611199999956, + 55.29938399999992, + 54.61653499999966, + 53.63689999999997, + 54.53233999999975, + 55.4738339999999, + 57.187167000000045, + 58.15084500000012, + 56.418547999999646, + 55.47138200000063, + 53.41909899999973, + 50.555255000000216, + 44.90891699999975 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 336.348661, + "requestsPerSecond": 95.13937086849292, + "p50Ms": 64.78164000000015, + "p95Ms": 137.94554499999958, + "maxMs": 153.08490600000005, + "ttfbP95Ms": 136.4501879999998, + "cpuMs": 312.912, + "cpuMsPerRequest": 9.7785, + "peakRssMiB": 187.25390625, + "eventLoopP95Ms": 46.956543, + "wireBytes": 3225504, + "latenciesMs": [ + 43.59515399999964, + 45.494682999999895, + 47.54584199999954, + 49.390416999999616, + 51.27837400000044, + 53.20743599999969, + 57.849380999999994, + 59.8212080000003, + 63.08760800000073, + 63.16521199999988, + 63.2144159999998, + 63.93855199999962, + 64.30067299999973, + 64.36383100000057, + 64.78164000000015, + 76.5045570000002, + 69.20112800000061, + 69.46615399999973, + 69.7310350000007, + 69.38834000000043, + 69.4853549999998, + 69.51611999999932, + 96.70538900000065, + 153.08490600000005, + 137.94554499999958, + 137.25532300000032, + 136.36852099999942, + 135.76439800000026, + 135.01744899999994, + 134.41015200000038, + 107.96453099999962, + 45.05526599999939 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 262144, + "storedBytes": 100827, + "allocatedBytes": 102400, + "activeReaders": 0, + "decisions": 0, + "reservedBytes": 0, + "budgetBytes": 67108864, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617575556 + }, + "results": { + "blobs": 1, + "originalBytes": 264491, + "storedBytes": 100797, + "allocatedBytes": 102400, + "activeReaders": 1, + "decisions": 1, + "reservedBytes": 0, + "budgetBytes": 33554432, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617575879 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 526635, + "ms": 46.20526000000018, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 2, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 13.628688000000238, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 14.88720400000011, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 264491, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 100797, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 84.99760900000001, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 100827, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100797, + "uncompressedBytes": 264491, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": false, + "mode": "uncached", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 2575.6483510000003, + "ttfb": 2419.016341, + "bytes": 799931, + "wallMs": 2627.613895, + "cpuMs": 3211.64 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 4122.787964, + "requestsPerSecond": 3.88086899925761, + "p50Ms": 244.10771199999908, + "p95Ms": 298.7754100000002, + "maxMs": 298.7754100000002, + "ttfbP95Ms": 105.07743800000026, + "cpuMs": 5838.218, + "cpuMsPerRequest": 364.888625, + "peakRssMiB": 303.25390625, + "eventLoopP95Ms": 15.179775, + "wireBytes": 12798896, + "latenciesMs": [ + 298.7754100000002, + 239.198582, + 283.0165850000003, + 253.284361, + 233.8822629999995, + 243.7367320000003, + 282.95985400000063, + 261.44877799999995, + 261.7997099999993, + 238.65792800000054, + 243.6391820000008, + 244.10771199999908, + 240.96586500000012, + 265.1077409999998, + 231.32310399999915, + 296.02966899999956 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 3796.12961, + "requestsPerSecond": 4.214819208978484, + "p50Ms": 230.76322000000073, + "p95Ms": 299.38012999999955, + "maxMs": 299.38012999999955, + "ttfbP95Ms": 116.30424400000084, + "cpuMs": 6410.281, + "cpuMsPerRequest": 400.6425625, + "peakRssMiB": 309.421875, + "eventLoopP95Ms": 17.383423, + "wireBytes": 12798896, + "latenciesMs": [ + 218.0381610000004, + 242.1117950000007, + 236.6508049999993, + 225.0089429999989, + 224.33546600000045, + 212.82447000000138, + 231.36339600000065, + 229.95277499999975, + 229.59922199999892, + 219.13632999999936, + 246.08553100000063, + 299.38012999999955, + 257.837352999999, + 243.5312359999989, + 230.76322000000073, + 245.62632099999973 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 2065.0274610000015, + "requestsPerSecond": 15.496161966051442, + "p50Ms": 464.1179490000013, + "p95Ms": 758.3639490000005, + "maxMs": 762.5012370000004, + "ttfbP95Ms": 373.2866049999993, + "cpuMs": 8497.76, + "cpuMsPerRequest": 265.555, + "peakRssMiB": 332.69140625, + "eventLoopP95Ms": 29.900799, + "wireBytes": 25597792, + "latenciesMs": [ + 530.7910389999997, + 561.4570349999995, + 615.2530940000015, + 636.233017999999, + 681.8859709999997, + 691.979088, + 758.3639490000005, + 762.5012370000004, + 495.16756799999894, + 523.6875060000002, + 505.59536000000116, + 498.13640099999975, + 509.2552020000003, + 504.28017700000055, + 453.5979389999993, + 535.2275559999998, + 464.1179490000013, + 467.7227389999989, + 456.13014999999905, + 458.8228770000005, + 431.9116990000002, + 455.69144099999903, + 458.37668700000177, + 435.5042080000003, + 416.65598599999976, + 427.51118400000087, + 385.7334099999989, + 399.19919799999843, + 363.69266499999867, + 369.74319000000105, + 381.7008210000022, + 321.6202369999992 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 1865.7041309999986, + "requestsPerSecond": 17.15170131656852, + "p50Ms": 425.09928800000125, + "p95Ms": 681.2991679999977, + "maxMs": 694.2982740000007, + "ttfbP95Ms": 313.7703099999999, + "cpuMs": 8961.682, + "cpuMsPerRequest": 280.0525625, + "peakRssMiB": 326.6484375, + "eventLoopP95Ms": 24.477695, + "wireBytes": 25597792, + "latenciesMs": [ + 393.55079599999954, + 447.2447339999999, + 491.7806700000001, + 537.4373699999996, + 602.0341129999979, + 619.041874999999, + 681.2991679999977, + 694.2982740000007, + 456.4085150000028, + 450.1162460000014, + 451.81944400000066, + 425.09928800000125, + 422.32273500000156, + 405.09551099999953, + 394.17998499999885, + 418.93175300000075, + 375.1282519999986, + 382.28345400000035, + 386.75548100000015, + 416.18442100000175, + 412.4202240000013, + 455.57515499999863, + 434.8358619999999, + 436.18207299999995, + 442.6476730000031, + 455.4058320000004, + 443.09657700000025, + 420.6530820000007, + 381.5195780000031, + 352.0597480000033, + 339.33794300000227, + 327.7673289999984 + ] + } + ], + "upstreamFills": 100, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 100, + "bytes": 209715200, + "ms": 5287.834006000005, + "b0": 0, + "b1": 0, + "b2": 2, + "b3": 93, + "b4": 4, + "b5": 1, + "b6": 0 + } + ], + "wireBytesPerResponse": 799931, + "uncompressedBytes": 2097152, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": false, + "mode": "raw-source", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 2703.7352640000004, + "ttfb": 2537.215699, + "bytes": 799931, + "wallMs": 2745.451017, + "cpuMs": 3533.3 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 3960.562809, + "requestsPerSecond": 4.039829885702489, + "p50Ms": 247.89467800000057, + "p95Ms": 271.566354999999, + "maxMs": 271.566354999999, + "ttfbP95Ms": 96.97661499999958, + "cpuMs": 7144.772, + "cpuMsPerRequest": 446.54825, + "peakRssMiB": 304.609375, + "eventLoopP95Ms": 11.247615, + "wireBytes": 12798896, + "latenciesMs": [ + 254.6050749999995, + 248.0974180000003, + 236.1919829999997, + 248.63632000000052, + 247.89467800000057, + 255.37378799999988, + 254.41821699999946, + 263.6576789999999, + 244.58647100000053, + 271.566354999999, + 242.80977499999972, + 246.9335570000003, + 257.38997800000107, + 243.38225299999976, + 199.17775500000062, + 240.90632600000026 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 3969.9660000000003, + "requestsPerSecond": 4.03026121634291, + "p50Ms": 246.34581699999944, + "p95Ms": 280.2313009999998, + "maxMs": 280.2313009999998, + "ttfbP95Ms": 104.0945789999987, + "cpuMs": 7540.87, + "cpuMsPerRequest": 471.304375, + "peakRssMiB": 304.890625, + "eventLoopP95Ms": 11.321343, + "wireBytes": 12798896, + "latenciesMs": [ + 280.2313009999998, + 257.8386500000015, + 268.22027100000014, + 239.78245799999968, + 248.11002499999995, + 241.45337999999902, + 251.031038000001, + 239.69070699999975, + 255.3994989999992, + 258.82392100000106, + 269.3970069999996, + 201.96262100000058, + 239.20345100000122, + 230.59521099999984, + 246.34581699999944, + 237.42055700000128 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 2123.0768069999995, + "requestsPerSecond": 15.072464592186565, + "p50Ms": 483.28599399999985, + "p95Ms": 707.7050639999998, + "maxMs": 719.0060869999998, + "ttfbP95Ms": 409.63137300000017, + "cpuMs": 9640.463, + "cpuMsPerRequest": 301.26446875, + "peakRssMiB": 329.7734375, + "eventLoopP95Ms": 13.688831, + "wireBytes": 25597792, + "latenciesMs": [ + 524.2819039999995, + 562.693636, + 595.6110910000007, + 614.5475879999995, + 643.3254859999997, + 684.9432280000001, + 707.7050639999998, + 719.0060869999998, + 439.68947000000117, + 424.40427400000044, + 416.83193500000016, + 435.3422590000009, + 413.43916100000024, + 386.70267199999944, + 407.55726499999946, + 447.3451359999999, + 411.27978600000097, + 406.7036360000002, + 412.24087099999997, + 377.9756899999993, + 393.1870749999998, + 408.49500799999987, + 440.4220270000005, + 483.28599399999985, + 589.3038300000007, + 582.4083719999999, + 589.2080010000009, + 600.328356, + 591.3223919999982, + 553.1863550000016, + 533.8354940000008, + 499.3171480000001 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 2249.785767999998, + "requestsPerSecond": 14.223576508996757, + "p50Ms": 495.6515730000028, + "p95Ms": 809.6027029999968, + "maxMs": 829.8294649999989, + "ttfbP95Ms": 443.0935239999999, + "cpuMs": 10322.395, + "cpuMsPerRequest": 322.57484375, + "peakRssMiB": 329.96875, + "eventLoopP95Ms": 13.156351, + "wireBytes": 25597792, + "latenciesMs": [ + 583.5228919999972, + 626.2199309999996, + 650.80026, + 690.7777380000007, + 725.8710449999999, + 755.1255310000015, + 809.6027029999968, + 829.8294649999989, + 606.0656049999998, + 590.0366179999983, + 584.9438039999986, + 603.140037000001, + 594.2320839999993, + 616.720781, + 592.0251790000002, + 592.4136479999979, + 425.17141499999707, + 422.95415299999877, + 428.66406199999983, + 445.51947700000164, + 450.4199060000028, + 470.0303780000031, + 484.5131169999986, + 485.2484609999992, + 495.6515730000028, + 476.94012700000167, + 461.5940320000009, + 439.9684320000015, + 417.50969500000065, + 377.16080299999885, + 353.9991560000017, + 339.80842699999994 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 100, + "bytes": 209715200, + "ms": 5526.541965000013, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 93, + "b4": 6, + "b5": 1, + "b6": 0 + } + ], + "wireBytesPerResponse": 799931, + "uncompressedBytes": 2097152, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": false, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 3463.262249, + "ttfb": 3445.253607, + "bytes": 799931, + "wallMs": 3489.5407299999997, + "cpuMs": 3971.157 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 461.99570700000004, + "requestsPerSecond": 34.63235644308703, + "p50Ms": 27.98649800000021, + "p95Ms": 31.81088600000021, + "maxMs": 31.81088600000021, + "ttfbP95Ms": 10.531836000000112, + "cpuMs": 538.126, + "cpuMsPerRequest": 33.632875, + "peakRssMiB": 292.89453125, + "eventLoopP95Ms": 11.354111, + "wireBytes": 12798896, + "latenciesMs": [ + 31.81088600000021, + 31.758569999999963, + 29.5557289999997, + 28.01143199999933, + 29.73796399999992, + 29.781514000000243, + 27.507618999999977, + 26.516278000000057, + 28.789646000000175, + 27.644239999999627, + 27.124931999999717, + 28.12213200000042, + 26.997708000000785, + 27.533948999999666, + 27.892895999999382, + 27.98649800000021 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 324.96219700000074, + "requestsPerSecond": 49.23649626851816, + "p50Ms": 16.798999999999978, + "p95Ms": 43.09565400000065, + "maxMs": 43.09565400000065, + "ttfbP95Ms": 10.835165999999845, + "cpuMs": 700.288, + "cpuMsPerRequest": 43.768, + "peakRssMiB": 297.55078125, + "eventLoopP95Ms": 14.270463, + "wireBytes": 12798896, + "latenciesMs": [ + 31.648732999999993, + 43.09565400000065, + 16.296769999999924, + 15.779529999999795, + 16.221679000000222, + 16.193324000000757, + 22.022840000000542, + 27.55364599999939, + 16.798999999999978, + 15.850329000000784, + 16.802537999999913, + 16.074813000000177, + 16.921846000000187, + 16.863266999999723, + 17.035695999999916, + 16.557380000000194 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 499.83832800000073, + "requestsPerSecond": 64.0207007094501, + "p50Ms": 127.12264500000038, + "p95Ms": 161.87424999999985, + "maxMs": 174.647105, + "ttfbP95Ms": 79.17693400000007, + "cpuMs": 871.136, + "cpuMsPerRequest": 27.223, + "peakRssMiB": 309.92578125, + "eventLoopP95Ms": 17.367039, + "wireBytes": 25597792, + "latenciesMs": [ + 103.07294700000057, + 103.9893689999999, + 110.08082399999967, + 116.55434100000002, + 124.56952399999955, + 129.97801299999992, + 161.87424999999985, + 174.647105, + 140.94392199999947, + 140.35361900000044, + 138.99707500000022, + 137.65421800000058, + 135.53288599999996, + 134.27754000000004, + 106.924935, + 97.15028699999948, + 127.12264500000038, + 127.39489700000013, + 127.82050900000013, + 128.1301169999997, + 132.27835099999993, + 128.46495499999946, + 131.85094200000003, + 129.19325000000026, + 109.88288399999965, + 109.58871799999997, + 110.59725799999978, + 106.50980400000026, + 101.36760199999935, + 101.0481490000002, + 95.42120799999975, + 96.24089499999991 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 713.7802379999994, + "requestsPerSecond": 44.83172592402317, + "p50Ms": 175.60797300000013, + "p95Ms": 201.53002200000083, + "maxMs": 202.80123300000014, + "ttfbP95Ms": 93.3475610000005, + "cpuMs": 1244.678, + "cpuMsPerRequest": 38.8961875, + "peakRssMiB": 303.265625, + "eventLoopP95Ms": 25.509887, + "wireBytes": 25597792, + "latenciesMs": [ + 167.809929, + 169.2880100000002, + 170.85494500000004, + 173.51787700000023, + 173.85223100000076, + 174.41949999999997, + 175.00528599999961, + 175.60797300000013, + 177.55138499999975, + 185.36291900000015, + 184.63209499999994, + 183.7001110000001, + 183.6641320000008, + 183.55242200000066, + 183.5420349999995, + 186.49678900000072, + 143.1243200000008, + 144.0122649999994, + 144.6422590000002, + 145.29701900000146, + 145.9700580000008, + 153.15904899999987, + 152.93611999999848, + 158.47572299999956, + 193.4360230000002, + 202.80123300000014, + 201.53002200000083, + 200.41288099999838, + 199.31480399999964, + 198.23477899999853, + 196.58613699999842, + 191.10230799999954 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 2097152, + "storedBytes": 799931, + "allocatedBytes": 806912, + "activeReaders": 1, + "decisions": 0, + "reservedBytes": 0, + "budgetBytes": 67108864, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617618250 + }, + "results": { + "blobs": 0, + "originalBytes": 0, + "storedBytes": 0, + "allocatedBytes": 0, + "activeReaders": 0, + "decisions": 1, + "reservedBytes": 0, + "budgetBytes": 33554432, + "maxObjectBytes": 4194304, + "oldestAccess": null + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 172.3018989999996, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 1, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 227.42965200000026, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 1, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 2413.959531, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 2745.102216, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "rewrite_unchanged_cached", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 799931, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 799931, + "uncompressedBytes": 2097152, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": true, + "mode": "uncached", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 2781.4064600000006, + "ttfb": 2609.6815110000002, + "bytes": 799783, + "wallMs": 2823.0658000000003, + "cpuMs": 3592.76 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 4482.3913059999995, + "requestsPerSecond": 3.5695232539343147, + "p50Ms": 284.72552499999983, + "p95Ms": 319.4134919999997, + "maxMs": 319.4134919999997, + "ttfbP95Ms": 137.38314700000046, + "cpuMs": 6798.106, + "cpuMsPerRequest": 424.881625, + "peakRssMiB": 307.515625, + "eventLoopP95Ms": 12.058623, + "wireBytes": 12796528, + "latenciesMs": [ + 309.9071359999998, + 286.257439, + 258.6101600000002, + 232.02026699999988, + 246.64619800000037, + 244.44541500000014, + 268.8373899999997, + 274.5591999999997, + 289.1250679999994, + 275.4645280000004, + 284.72552499999983, + 316.94525000000067, + 297.5878439999997, + 286.13335800000095, + 319.4134919999997, + 286.931066000001 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 4485.040632, + "requestsPerSecond": 3.5674147266008536, + "p50Ms": 278.0273780000007, + "p95Ms": 296.14282900000035, + "maxMs": 296.14282900000035, + "ttfbP95Ms": 111.75590000000011, + "cpuMs": 7729.091, + "cpuMsPerRequest": 483.0681875, + "peakRssMiB": 309.58203125, + "eventLoopP95Ms": 12.034047, + "wireBytes": 12796528, + "latenciesMs": [ + 295.5318729999999, + 296.14282900000035, + 295.03564200000073, + 288.84691999999995, + 276.27469700000074, + 278.7019879999989, + 289.9034359999987, + 270.13628600000084, + 271.42419100000006, + 279.2197610000003, + 277.344258000001, + 278.0273780000007, + 261.8116279999995, + 274.40103199999976, + 266.2161589999996, + 282.0233480000006 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 2141.0946079999994, + "requestsPerSecond": 14.945626354125126, + "p50Ms": 482.2456760000023, + "p95Ms": 803.045728000001, + "maxMs": 879.0137809999978, + "ttfbP95Ms": 481.922872000001, + "cpuMs": 9999.464, + "cpuMsPerRequest": 312.48325, + "peakRssMiB": 337.00390625, + "eventLoopP95Ms": 27.574271, + "wireBytes": 25593056, + "latenciesMs": [ + 476.8522670000002, + 554.2442360000005, + 621.4111890000004, + 684.4691819999989, + 730.0285079999994, + 778.2618820000007, + 803.045728000001, + 879.0137809999978, + 482.2456760000023, + 447.0257010000005, + 470.1910289999996, + 498.2072599999992, + 504.88768300000083, + 500.753854999999, + 496.15841100000034, + 485.4731410000022, + 456.2937559999991, + 473.383471000001, + 477.61417399999846, + 477.3965070000013, + 433.8570230000005, + 463.9175909999976, + 530.9504240000024, + 517.9386400000003, + 494.28661000000284, + 486.9270580000011, + 442.5020889999978, + 390.05183599999873, + 394.7592850000001, + 326.8974610000005, + 258.7615459999979, + 247.85073900000134 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 2324.9689279999984, + "requestsPerSecond": 13.763624801440796, + "p50Ms": 559.8909910000002, + "p95Ms": 836.3898179999997, + "maxMs": 912.6414199999999, + "ttfbP95Ms": 429.7801780000009, + "cpuMs": 8598.7, + "cpuMsPerRequest": 268.709375, + "peakRssMiB": 342.63671875, + "eventLoopP95Ms": 28.033023, + "wireBytes": 25593056, + "latenciesMs": [ + 376.9471450000019, + 455.00155599999925, + 559.8909910000002, + 634.9950289999979, + 698.0007299999997, + 742.6326489999992, + 836.3898179999997, + 912.6414199999999, + 608.4873059999991, + 644.7856079999983, + 695.1888529999997, + 799.011859000002, + 817.4046509999971, + 799.0913930000024, + 787.8983169999992, + 782.5243020000016, + 730.1263330000002, + 719.5967750000018, + 664.2293360000003, + 488.5165629999974, + 473.8543260000006, + 494.21750599999723, + 415.9266510000016, + 412.6783570000007, + 398.21474399999715, + 326.8878960000002, + 286.59776599999896, + 290.2187589999994, + 252.5030770000012, + 232.56980400000248, + 231.87445300000036, + 215.20407899999918 + ] + } + ], + "upstreamFills": 100, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_changed", + "traffic": "background", + "count": 100, + "bytes": 209715200, + "ms": 9218.78453700002, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 85, + "b4": 14, + "b5": 1, + "b6": 0 + } + ], + "wireBytesPerResponse": 799783, + "uncompressedBytes": 2115777, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": true, + "mode": "raw-source", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 2500.104259, + "ttfb": 2322.402918, + "bytes": 799783, + "wallMs": 2534.616385, + "cpuMs": 3485.874 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 4574.070046, + "requestsPerSecond": 3.4979787889326084, + "p50Ms": 284.4262120000003, + "p95Ms": 337.7844420000001, + "maxMs": 337.7844420000001, + "ttfbP95Ms": 125.23205400000006, + "cpuMs": 7755.117, + "cpuMsPerRequest": 484.6948125, + "peakRssMiB": 313.71875, + "eventLoopP95Ms": 11.706367, + "wireBytes": 12796528, + "latenciesMs": [ + 295.9900690000004, + 266.38597800000025, + 286.86295299999983, + 296.3177430000005, + 304.06737800000064, + 296.5736589999997, + 246.27473999999984, + 278.23645099999976, + 297.62659299999905, + 266.5747059999994, + 284.4262120000003, + 265.2382239999988, + 291.3668669999988, + 337.7844420000001, + 279.3917270000002, + 275.61703900000066 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 4331.449114999999, + "requestsPerSecond": 3.6939138785196146, + "p50Ms": 270.15945999999894, + "p95Ms": 303.9903050000012, + "maxMs": 303.9903050000012, + "ttfbP95Ms": 113.9297119999992, + "cpuMs": 7958.024, + "cpuMsPerRequest": 497.3765, + "peakRssMiB": 313.91796875, + "eventLoopP95Ms": 11.313151, + "wireBytes": 12796528, + "latenciesMs": [ + 261.8956760000001, + 258.72715699999935, + 274.5757759999997, + 264.1857179999988, + 300.7414280000012, + 270.15945999999894, + 269.2778930000004, + 303.9903050000012, + 291.38640099999975, + 232.9205350000011, + 241.76410100000066, + 284.1440160000002, + 275.1357169999992, + 255.10444599999937, + 270.81375599999956, + 272.55286799999885 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 2298.961175999999, + "requestsPerSecond": 13.919330319304189, + "p50Ms": 495.9227229999997, + "p95Ms": 913.9996300000003, + "maxMs": 940.2759249999999, + "ttfbP95Ms": 565.8722269999998, + "cpuMs": 11007.3, + "cpuMsPerRequest": 343.978125, + "peakRssMiB": 353.15625, + "eventLoopP95Ms": 13.664255, + "wireBytes": 25593056, + "latenciesMs": [ + 552.3434809999999, + 612.5204369999992, + 663.4116049999993, + 740.1997150000007, + 802.6081599999998, + 865.3377140000011, + 913.9996300000003, + 940.2759249999999, + 617.1313589999991, + 590.7243820000003, + 592.3652299999994, + 542.2112679999991, + 518.822424, + 485.74447599999985, + 495.9227229999997, + 505.45571700000073, + 386.97612599999775, + 377.64100300000246, + 367.18699000000015, + 397.56104400000004, + 391.86263900000085, + 394.06179099999827, + 361.86117300000114, + 415.7522739999986, + 494.6427580000018, + 507.55863600000157, + 510.3281539999989, + 469.23135999999795, + 448.3028590000031, + 456.7878500000006, + 472.49770799999897, + 430.9439110000021 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 2054.876971999998, + "requestsPerSecond": 15.572708457019989, + "p50Ms": 457.7118760000012, + "p95Ms": 806.6677500000005, + "maxMs": 832.6120770000016, + "ttfbP95Ms": 505.0034990000022, + "cpuMs": 10427.031, + "cpuMsPerRequest": 325.84471875, + "peakRssMiB": 346.234375, + "eventLoopP95Ms": 14.188543, + "wireBytes": 25593056, + "latenciesMs": [ + 439.4290890000011, + 486.7737280000001, + 556.2074599999978, + 632.0584070000004, + 707.3788290000011, + 748.6112059999978, + 806.6677500000005, + 832.6120770000016, + 460.2754240000031, + 491.2615489999989, + 457.7118760000012, + 445.7687010000009, + 414.8105200000027, + 399.74555300000065, + 383.1854349999994, + 411.89870299999893, + 409.1029540000018, + 384.54246200000125, + 391.588753, + 391.02018300000054, + 444.60400500000105, + 466.2269309999974, + 473.2671980000014, + 497.94002900000123, + 465.16507600000114, + 473.62279299999864, + 483.159173, + 460.7298809999993, + 424.05461099999957, + 400.4854129999985, + 365.75835299999744, + 310.44000499999675 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_changed", + "traffic": "background", + "count": 100, + "bytes": 209715200, + "ms": 8432.297515000011, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 87, + "b4": 12, + "b5": 1, + "b6": 0 + } + ], + "wireBytesPerResponse": 799783, + "uncompressedBytes": 2115777, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": true, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 3725.551746, + "ttfb": 3706.679674, + "bytes": 799783, + "wallMs": 3763.521444, + "cpuMs": 4229.594 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 481.0785930000002, + "requestsPerSecond": 33.258598974908026, + "p50Ms": 29.294918999999936, + "p95Ms": 50.40305200000057, + "maxMs": 50.40305200000057, + "ttfbP95Ms": 11.360979000000043, + "cpuMs": 709.3, + "cpuMsPerRequest": 44.33125, + "peakRssMiB": 308.75390625, + "eventLoopP95Ms": 11.960319, + "wireBytes": 12796528, + "latenciesMs": [ + 30.674918000000616, + 30.5943299999999, + 29.073419999999714, + 30.4910289999998, + 31.51218599999993, + 32.507966000000124, + 35.56373600000006, + 29.294918999999936, + 28.7416089999997, + 30.21986199999992, + 23.84667199999967, + 21.898228999999446, + 20.372504999999364, + 26.2468429999999, + 50.40305200000057, + 24.62238200000047 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 372.747198, + "requestsPerSecond": 42.92453460642781, + "p50Ms": 23.006507999999485, + "p95Ms": 52.718026000000464, + "maxMs": 52.718026000000464, + "ttfbP95Ms": 21.90925100000004, + "cpuMs": 702.995, + "cpuMsPerRequest": 43.9371875, + "peakRssMiB": 308.2265625, + "eventLoopP95Ms": 16.662527, + "wireBytes": 12796528, + "latenciesMs": [ + 24.991613999999572, + 23.006507999999485, + 21.772165000000314, + 26.172998000000007, + 34.96902500000033, + 23.882144000000153, + 24.210925999999745, + 52.718026000000464, + 30.73658599999999, + 12.510244000000057, + 14.931843000000299, + 16.204781999999796, + 24.451979000000392, + 12.961599000000206, + 12.844790000000103, + 13.387219000000186 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 488.12755800000014, + "requestsPerSecond": 65.55663468605063, + "p50Ms": 115.88346000000001, + "p95Ms": 152.05853800000023, + "maxMs": 155.81982100000005, + "ttfbP95Ms": 65.66024500000003, + "cpuMs": 946.747, + "cpuMsPerRequest": 29.58584375, + "peakRssMiB": 309.546875, + "eventLoopP95Ms": 23.035903, + "wireBytes": 25593056, + "latenciesMs": [ + 116.65153499999997, + 117.55042200000025, + 125.14789500000006, + 133.6659840000002, + 142.1696550000006, + 146.48830499999985, + 152.05853800000023, + 155.81982100000005, + 115.88346000000001, + 115.58879199999956, + 112.6346279999998, + 109.94669599999997, + 109.73863900000015, + 105.6489960000008, + 107.69351000000006, + 104.19921900000008, + 85.2122560000007, + 85.2631139999994, + 88.22737699999925, + 85.89651099999992, + 86.90756599999986, + 88.06617199999982, + 88.79741600000034, + 88.8839909999997, + 136.86490100000083, + 136.94412999999986, + 142.02569099999982, + 141.02401499999996, + 140.39713500000016, + 140.23763600000075, + 136.29629999999997, + 136.15853999999945 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 640.1520069999997, + "requestsPerSecond": 49.98812727302754, + "p50Ms": 157.93894100000034, + "p95Ms": 183.16702700000042, + "maxMs": 219.3221390000008, + "ttfbP95Ms": 92.1219230000006, + "cpuMs": 1096.633, + "cpuMsPerRequest": 34.26978125, + "peakRssMiB": 309.44140625, + "eventLoopP95Ms": 31.768575, + "wireBytes": 25593056, + "latenciesMs": [ + 174.30246100000022, + 175.03502800000024, + 175.61992999999984, + 176.18260800000007, + 176.4664840000005, + 177.60703299999932, + 178.14705999999933, + 183.16702700000042, + 133.48813699999937, + 134.4185239999997, + 135.0480950000001, + 135.72664000000077, + 136.33877200000006, + 143.17488400000002, + 142.9415399999998, + 148.79262800000015, + 165.38116100000025, + 164.65023499999916, + 163.8455699999995, + 162.95775400000002, + 162.30862700000034, + 160.7922640000006, + 160.6099749999994, + 219.3221390000008, + 152.44505700000082, + 152.7206010000009, + 152.70577000000048, + 152.86105400000088, + 152.99440700000014, + 157.93894100000034, + 157.4929090000005, + 86.71923100000095 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 2097152, + "storedBytes": 799931, + "allocatedBytes": 802816, + "activeReaders": 0, + "decisions": 0, + "reservedBytes": 0, + "budgetBytes": 67108864, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617666224 + }, + "results": { + "blobs": 1, + "originalBytes": 2115777, + "storedBytes": 799783, + "allocatedBytes": 802816, + "activeReaders": 1, + "decisions": 1, + "reservedBytes": 0, + "budgetBytes": 33554432, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617669359 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 4212929, + "ms": 355.85982499999955, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 2, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 168.27611799999977, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 1, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 2442.383011, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 2115777, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 799783, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 2737.852761, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 799931, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 799783, + "uncompressedBytes": 2115777, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": true, + "mode": "shared", + "encoding": "identity", + "binary": false, + "cold": { + "ms": 627.68426, + "ttfb": 611.2608359999999, + "bytes": 264491, + "wallMs": 632.955802, + "cpuMs": 287.381 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 327.51738099999966, + "requestsPerSecond": 48.85236915105894, + "p50Ms": 19.438476999999693, + "p95Ms": 24.0334170000001, + "maxMs": 24.0334170000001, + "ttfbP95Ms": 10.903306000000157, + "cpuMs": 437.79, + "cpuMsPerRequest": 27.361875, + "peakRssMiB": 163.9375, + "eventLoopP95Ms": 11.894783, + "wireBytes": 4231856, + "latenciesMs": [ + 21.250236999999743, + 24.0334170000001, + 21.66240899999957, + 21.23275599999988, + 22.214344999999867, + 21.593786999999793, + 21.347391000000243, + 18.579045999999835, + 19.210315000000264, + 18.925530999999864, + 20.961803000000145, + 17.505277000000206, + 19.356649999999718, + 18.222642000000178, + 18.215569999999843, + 19.438476999999693 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 279.2944809999999, + "requestsPerSecond": 57.287204325387314, + "p50Ms": 18.158910000000105, + "p95Ms": 20.831223999999565, + "maxMs": 20.831223999999565, + "ttfbP95Ms": 9.269518999999946, + "cpuMs": 389.717, + "cpuMsPerRequest": 24.3573125, + "peakRssMiB": 179.921875, + "eventLoopP95Ms": 11.583487, + "wireBytes": 4231856, + "latenciesMs": [ + 18.158910000000105, + 19.28265799999963, + 19.303124000000025, + 20.831223999999565, + 18.34045600000036, + 18.341175999999905, + 18.845682000000124, + 19.59147299999995, + 17.87077999999974, + 18.11311999999998, + 17.973573000000215, + 19.212680999999975, + 13.07043799999974, + 11.850085000000036, + 13.143043999999918, + 12.697014999999737 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 402.7383749999999, + "requestsPerSecond": 79.45604885553806, + "p50Ms": 96.01321000000007, + "p95Ms": 133.03084500000023, + "maxMs": 136.22947599999998, + "ttfbP95Ms": 79.49574100000018, + "cpuMs": 746.568, + "cpuMsPerRequest": 23.33025, + "peakRssMiB": 208.0546875, + "eventLoopP95Ms": 16.809983, + "wireBytes": 8463712, + "latenciesMs": [ + 76.72733800000015, + 80.6829630000002, + 84.48551699999962, + 89.58632999999963, + 95.33245299999999, + 100.44694299999992, + 106.70758800000021, + 112.03896600000007, + 90.87739899999997, + 90.70254299999988, + 91.09967700000016, + 90.95445399999971, + 88.91312700000026, + 90.00463799999989, + 88.66342200000008, + 92.215013, + 96.3520480000002, + 100.09351500000002, + 98.14043099999981, + 100.76995699999998, + 105.68945799999983, + 111.21180099999992, + 136.22947599999998, + 133.03084500000023, + 122.89312199999995, + 120.51511400000027, + 118.14478800000006, + 113.18589800000018, + 106.32411499999989, + 96.01321000000007, + 67.46296299999995, + 62.657776999999896 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 355.7833819999996, + "requestsPerSecond": 89.94236835940818, + "p50Ms": 70.59644300000036, + "p95Ms": 149.89214699999957, + "maxMs": 150.06893899999977, + "ttfbP95Ms": 75.60004300000037, + "cpuMs": 477.464, + "cpuMsPerRequest": 14.92075, + "peakRssMiB": 212.953125, + "eventLoopP95Ms": 33.619967, + "wireBytes": 8463712, + "latenciesMs": [ + 65.09878599999956, + 64.40084099999967, + 64.74980700000015, + 65.19093299999986, + 65.6219860000001, + 66.02141099999972, + 66.46668200000022, + 71.07974699999977, + 66.08168300000034, + 66.0893329999999, + 65.65053700000044, + 66.71088799999961, + 68.60675300000003, + 68.69639900000038, + 75.65247399999953, + 70.59644300000036, + 103.51111799999944, + 103.86879800000042, + 118.31545399999959, + 119.32445800000005, + 115.21021000000019, + 116.30152799999996, + 149.89214699999957, + 150.06893899999977, + 114.80971300000056, + 114.13348899999983, + 99.80344799999966, + 99.6123889999999, + 101.44897399999991, + 101.34123199999976, + 62.01023600000008, + 61.532814000000144 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 262144, + "storedBytes": 100827, + "allocatedBytes": 102400, + "activeReaders": 0, + "decisions": 0, + "reservedBytes": 0, + "budgetBytes": 67108864, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617674315 + }, + "results": { + "blobs": 1, + "originalBytes": 264491, + "storedBytes": 100797, + "allocatedBytes": 102400, + "activeReaders": 0, + "decisions": 1, + "reservedBytes": 0, + "budgetBytes": 33554432, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617674612 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 526635, + "ms": 52.87731299999996, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 2, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 101, + "bytes": 26711244, + "ms": 4687.404856999996, + "b0": 0, + "b1": 0, + "b2": 4, + "b3": 93, + "b4": 4, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 6.446542000000136, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 264491, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 100797, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 80.21619400000009, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 100827, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 264491, + "uncompressedBytes": 264491, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": true, + "mode": "shared", + "encoding": "identity", + "binary": false, + "cold": { + "ms": 3848.916447, + "ttfb": 3741.606994, + "bytes": 2115777, + "wallMs": 3860.608068, + "cpuMs": 4568.378 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 1063.998678, + "requestsPerSecond": 15.037612668913486, + "p50Ms": 61.52423900000031, + "p95Ms": 97.8602979999996, + "maxMs": 97.8602979999996, + "ttfbP95Ms": 9.313005999999405, + "cpuMs": 2394.845, + "cpuMsPerRequest": 149.6778125, + "peakRssMiB": 311.1015625, + "eventLoopP95Ms": 12.165119, + "wireBytes": 33852432, + "latenciesMs": [ + 90.0779679999996, + 91.81199199999992, + 97.8602979999996, + 60.126703999999336, + 62.12088600000061, + 74.91867399999956, + 57.39231100000052, + 56.338934999999765, + 72.79759600000034, + 54.69026500000018, + 61.52423900000031, + 44.300318999999945, + 65.54904100000022, + 43.01096199999938, + 83.67679700000008, + 44.132002000000284 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 918.4552229999999, + "requestsPerSecond": 17.420555296902048, + "p50Ms": 54.39099400000032, + "p95Ms": 77.16719399999965, + "maxMs": 77.16719399999965, + "ttfbP95Ms": 7.693025000000489, + "cpuMs": 2411.157, + "cpuMsPerRequest": 150.6973125, + "peakRssMiB": 310.52734375, + "eventLoopP95Ms": 14.147583, + "wireBytes": 33852432, + "latenciesMs": [ + 45.8752429999995, + 60.04084899999998, + 66.93521200000032, + 55.9131239999997, + 54.39099400000032, + 64.11491299999943, + 45.857028000000355, + 77.16719399999965, + 50.32623500000045, + 64.33818699999938, + 48.94156999999905, + 58.553719000001365, + 50.703676999999516, + 53.47287700000015, + 45.83121799999935, + 73.11969399999907 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 1207.1573310000003, + "requestsPerSecond": 26.508557897330114, + "p50Ms": 295.5899750000008, + "p95Ms": 340.6526250000006, + "maxMs": 340.98322299999927, + "ttfbP95Ms": 45.05598800000007, + "cpuMs": 3141.374, + "cpuMsPerRequest": 98.1679375, + "peakRssMiB": 316.98828125, + "eventLoopP95Ms": 12.427263, + "wireBytes": 67704864, + "latenciesMs": [ + 318.48715599999923, + 321.78660800000034, + 322.8653060000015, + 326.95976300000075, + 329.14500299999963, + 333.6105150000003, + 340.6526250000006, + 340.98322299999927, + 277.8236020000004, + 281.3795109999992, + 279.5990519999996, + 278.53985399999874, + 274.8837930000009, + 282.5012400000014, + 282.5368279999984, + 282.52159700000084, + 299.4073750000007, + 296.3244589999995, + 295.80887299999995, + 295.3220220000003, + 295.5899750000008, + 307.49528699999973, + 306.74820999999974, + 308.09574799999973, + 299.07923200000005, + 298.9020729999993, + 293.0019889999985, + 294.8242709999995, + 294.5241210000004, + 291.1148599999997, + 272.39386399999967, + 271.85839900000065 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 1927.0909479999991, + "requestsPerSecond": 16.605339791155522, + "p50Ms": 479.93985799999973, + "p95Ms": 607.6712669999997, + "maxMs": 612.9210320000002, + "ttfbP95Ms": 114.09128400000009, + "cpuMs": 3809.805, + "cpuMsPerRequest": 119.05640625, + "peakRssMiB": 316.98828125, + "eventLoopP95Ms": 15.458303, + "wireBytes": 67704864, + "latenciesMs": [ + 363.0696029999999, + 363.41447700000026, + 364.1531180000002, + 364.6640669999997, + 367.6775859999998, + 368.3430470000003, + 374.04738499999985, + 380.9051419999996, + 460.4311739999994, + 461.5010320000001, + 462.1420850000013, + 465.4013070000001, + 482.70833199999834, + 478.01268600000003, + 479.93985799999973, + 493.55015999999887, + 551.4033019999988, + 548.9624060000006, + 551.4711229999994, + 554.8437400000003, + 561.5209070000001, + 562.0318060000009, + 607.6712669999997, + 612.9210320000002, + 537.5511800000004, + 539.4701909999985, + 535.1555320000007, + 537.5567150000006, + 507.0802130000011, + 454.51055799999995, + 510.98192299999937, + 451.58297400000083 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 2097152, + "storedBytes": 799931, + "allocatedBytes": 806912, + "activeReaders": 0, + "decisions": 0, + "reservedBytes": 0, + "budgetBytes": 67108864, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617679426 + }, + "results": { + "blobs": 1, + "originalBytes": 2115777, + "storedBytes": 799783, + "allocatedBytes": 802816, + "activeReaders": 1, + "decisions": 1, + "reservedBytes": 0, + "budgetBytes": 33554432, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617682703 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 4212929, + "ms": 347.2098780000001, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 2, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 100, + "bytes": 211559075, + "ms": 24745.537006, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 34, + "b4": 66, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 2652.5576639999995, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 2115777, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 799783, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 2906.0289430000003, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 799931, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 2115777, + "uncompressedBytes": 2115777, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": false, + "mode": "raw-source", + "encoding": "gzip", + "binary": true, + "cold": { + "ms": 138.61129900000014, + "ttfb": 104.3181910000003, + "bytes": 262244, + "wallMs": 144.0130119999999, + "cpuMs": 314.616 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 503.88323100000025, + "requestsPerSecond": 31.753388514729103, + "p50Ms": 31.02013799999986, + "p95Ms": 35.49330299999974, + "maxMs": 35.49330299999974, + "ttfbP95Ms": 6.320975999999973, + "cpuMs": 738.734, + "cpuMsPerRequest": 46.170875, + "peakRssMiB": 163.41796875, + "eventLoopP95Ms": 10.854399, + "wireBytes": 4195904, + "latenciesMs": [ + 31.795036999999866, + 31.02013799999986, + 30.21937700000035, + 30.96253200000001, + 28.688588999999865, + 29.415817999999945, + 31.2265010000001, + 32.01595600000019, + 35.49330299999974, + 31.985879000000295, + 34.537487000000056, + 28.08584299999984, + 28.4965729999999, + 30.363226999999824, + 32.44986199999994, + 32.5868089999999 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 538.0641860000001, + "requestsPerSecond": 29.73622927581357, + "p50Ms": 33.32101999999986, + "p95Ms": 45.80806900000016, + "maxMs": 45.80806900000016, + "ttfbP95Ms": 6.118635999999697, + "cpuMs": 741.459, + "cpuMsPerRequest": 46.3411875, + "peakRssMiB": 180.43359375, + "eventLoopP95Ms": 10.706943, + "wireBytes": 4195904, + "latenciesMs": [ + 41.75004199999967, + 34.298413999999866, + 32.36340500000006, + 33.55418899999995, + 34.298159999999825, + 34.89213999999993, + 45.80806900000016, + 38.19690899999978, + 33.32101999999986, + 31.09152099999983, + 33.46132299999999, + 28.17147799999975, + 31.75526899999977, + 28.493375000000015, + 27.081048999999894, + 26.061625000000276 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 551.7417589999995, + "requestsPerSecond": 57.99814764428593, + "p50Ms": 126.40882599999986, + "p95Ms": 157.44787199999973, + "maxMs": 158.33596500000021, + "ttfbP95Ms": 38.94576500000039, + "cpuMs": 1621.925, + "cpuMsPerRequest": 50.68515625, + "peakRssMiB": 207.1015625, + "eventLoopP95Ms": 18.382847, + "wireBytes": 8391808, + "latenciesMs": [ + 97.16393599999992, + 106.7613809999998, + 114.29479999999967, + 115.60274200000003, + 125.96154299999989, + 136.09691500000008, + 136.53614200000038, + 136.7801089999998, + 119.77849600000036, + 121.05726700000014, + 122.66371100000015, + 132.5152409999996, + 121.46562199999971, + 123.06394000000046, + 131.7811870000005, + 134.04103700000041, + 144.8394849999995, + 158.33596500000021, + 155.42302000000018, + 154.65421200000037, + 157.44787199999973, + 147.850684, + 152.3774169999997, + 151.91908500000045, + 116.105595, + 122.1559699999998, + 122.28437600000052, + 120.84967700000016, + 138.4188549999999, + 135.02641200000016, + 126.40882599999986, + 125.93219899999986 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 314.5124399999995, + "requestsPerSecond": 101.74478313163081, + "p50Ms": 68.73678500000005, + "p95Ms": 110.55765300000076, + "maxMs": 111.32592699999987, + "ttfbP95Ms": 26.18255599999975, + "cpuMs": 1073.106, + "cpuMsPerRequest": 33.5345625, + "peakRssMiB": 206.3203125, + "eventLoopP95Ms": 14.983167, + "wireBytes": 8391808, + "latenciesMs": [ + 69.3889280000003, + 67.74636700000065, + 69.77035599999999, + 70.70550400000047, + 70.49955399999999, + 73.59759100000065, + 76.19245499999943, + 80.10081499999978, + 57.52258900000015, + 62.785023999999794, + 61.73900400000002, + 61.56136599999991, + 65.5605400000004, + 67.93274800000017, + 65.38465900000028, + 63.761091999999735, + 63.928593999999975, + 68.73678500000005, + 66.13730399999986, + 68.67552599999999, + 58.54818400000022, + 69.69448999999986, + 63.636123000000225, + 65.21541400000024, + 100.15057800000068, + 110.55765300000076, + 104.43158099999982, + 111.32592699999987, + 108.63438700000006, + 108.32985800000006, + 105.0323870000002, + 105.83105700000033 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_binary", + "traffic": "background", + "count": 100, + "bytes": 26214400, + "ms": 0, + "b0": 100, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 262244, + "uncompressedBytes": 262144, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": false, + "mode": "shared", + "encoding": "gzip", + "binary": true, + "cold": { + "ms": 521.9317799999999, + "ttfb": 512.6996059999997, + "bytes": 262144, + "wallMs": 526.5244380000004, + "cpuMs": 186.254 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 222.85512100000005, + "requestsPerSecond": 71.79552315515332, + "p50Ms": 12.454180000000179, + "p95Ms": 18.423817000000327, + "maxMs": 18.423817000000327, + "ttfbP95Ms": 11.57428200000004, + "cpuMs": 267.452, + "cpuMsPerRequest": 16.71575, + "peakRssMiB": 159.4765625, + "eventLoopP95Ms": 11.993087, + "wireBytes": 4194304, + "latenciesMs": [ + 16.159103999999843, + 17.168876000000182, + 18.08847300000025, + 16.262800999999854, + 18.423817000000327, + 12.699432000000343, + 12.403623000000152, + 12.6732420000003, + 11.200103000000126, + 11.58707400000003, + 13.09722499999998, + 11.563346999999794, + 12.454180000000179, + 11.393558000000212, + 11.697527999999693, + 12.047374000000218 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 177.4328989999999, + "requestsPerSecond": 90.1749342437335, + "p50Ms": 11.558438999999908, + "p95Ms": 12.38039899999967, + "maxMs": 12.38039899999967, + "ttfbP95Ms": 7.576060999999754, + "cpuMs": 203.419, + "cpuMsPerRequest": 12.7136875, + "peakRssMiB": 172.8828125, + "eventLoopP95Ms": 10.633215, + "wireBytes": 4194304, + "latenciesMs": [ + 12.15402800000038, + 11.445444999999836, + 11.577256999999918, + 11.577090999999655, + 11.79764699999987, + 12.38039899999967, + 11.15512600000011, + 12.13189999999986, + 11.949161000000004, + 11.832041000000117, + 11.558438999999908, + 11.296366000000035, + 8.282322000000022, + 8.51778000000013, + 9.053200999999717, + 8.24156099999982 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 377.2621309999995, + "requestsPerSecond": 84.82165945248303, + "p50Ms": 101.22757000000001, + "p95Ms": 127.143912, + "maxMs": 132.03915800000004, + "ttfbP95Ms": 104.40286800000013, + "cpuMs": 398.732, + "cpuMsPerRequest": 12.460375, + "peakRssMiB": 200.7265625, + "eventLoopP95Ms": 18.857983, + "wireBytes": 8388608, + "latenciesMs": [ + 35.32474199999979, + 47.93038299999989, + 54.47450299999991, + 61.27118100000007, + 68.05568799999992, + 74.91307999999981, + 81.29662199999984, + 127.143912, + 103.26784199999975, + 110.36018100000001, + 113.7339780000002, + 117.76906699999972, + 124.44378800000004, + 126.26677699999982, + 132.03915800000004, + 101.22757000000001, + 104.64710500000047, + 108.09284199999911, + 108.78035999999975, + 108.43811000000005, + 106.92595999999958, + 109.34190900000067, + 107.97015099999953, + 105.75159299999996, + 100.25055599999996, + 87.48415099999966, + 80.97261000000071, + 74.81758400000035, + 68.03585399999974, + 59.06964400000015, + 51.072815999999875, + 39.917459999999664 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 291.2953440000001, + "requestsPerSecond": 109.85414171261175, + "p50Ms": 64.49643199999991, + "p95Ms": 98.69169500000044, + "maxMs": 101.00897800000075, + "ttfbP95Ms": 87.475864, + "cpuMs": 478.027, + "cpuMsPerRequest": 14.93834375, + "peakRssMiB": 215.984375, + "eventLoopP95Ms": 41.091071, + "wireBytes": 8388608, + "latenciesMs": [ + 40.674691000000166, + 41.75534299999981, + 43.29822400000012, + 44.463738000000376, + 45.755121000000145, + 47.03761399999985, + 50.22445700000026, + 51.546495999999934, + 64.49643199999991, + 85.84921699999995, + 88.78291199999967, + 87.17860400000063, + 86.87599299999965, + 88.62265699999989, + 86.54573900000014, + 92.14010600000074, + 68.46571899999981, + 45.450182999999925, + 45.16786800000045, + 43.96649400000024, + 46.14547700000003, + 45.90370400000029, + 52.169356000000334, + 51.48962399999982, + 94.63983800000005, + 97.8864050000002, + 97.30218400000012, + 97.91100499999993, + 98.63473700000031, + 101.00897800000075, + 98.69169500000044, + 94.6185030000006 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 262144, + "storedBytes": 262144, + "allocatedBytes": 262144, + "activeReaders": 2, + "decisions": 0, + "reservedBytes": 0, + "budgetBytes": 67108864, + "maxObjectBytes": 4194304, + "oldestAccess": 1793617696692 + }, + "results": { + "blobs": 0, + "originalBytes": 0, + "storedBytes": 0, + "allocatedBytes": 0, + "activeReaders": 0, + "decisions": 1, + "reservedBytes": 0, + "budgetBytes": 33554432, + "maxObjectBytes": 4194304, + "oldestAccess": null + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 33.74377900000036, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_binary", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged_cached", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 262144, + "uncompressedBytes": 262144, + "verifiedResponses": 100 + } + ], + "completedAt": "2026-11-02T11:08:18.248Z", + "assertions": "All 2200 response bodies verified against expected output or the validated wire digest" +} diff --git a/docs/cache-performance-optimized-summary.json b/docs/cache-performance-optimized-summary.json new file mode 100644 index 0000000..7763b54 --- /dev/null +++ b/docs/cache-performance-optimized-summary.json @@ -0,0 +1,51 @@ +{ + "scope": "Compiled local loopback changed-text gzip responses; repeated optimized measurements ran after all other task benchmarks/tests ended. The full optimized run overlapped the metadata benchmark during its early scenarios. Shared host, synthetic workload; no production capacity claim.", + "verifiedOptimizedResponses": 2500, + "rows": [ + { + "bytes": 16384, + "before": { + "serialP50Ms": 44.88915300000008, + "concurrency8P95Ms": 462.1094459999995 + }, + "optimized": { + "serialP50Ms": 8.908395999999811, + "concurrency8P95Ms": 111.85025099999984 + }, + "repeat": { + "serialP50Ms": 7.257277000000158, + "concurrency8P95Ms": 114.94514900000013 + } + }, + { + "bytes": 262144, + "before": { + "serialP50Ms": 45.89932399999998, + "concurrency8P95Ms": 444.0948499999995 + }, + "optimized": { + "serialP50Ms": 9.481284999999843, + "concurrency8P95Ms": 136.36852099999942 + }, + "repeat": { + "serialP50Ms": 9.021533999999974, + "concurrency8P95Ms": 107.61299899999995 + } + }, + { + "bytes": 2097152, + "before": { + "serialP50Ms": 60.49789199999941, + "concurrency8P95Ms": 528.2149260000006 + }, + "optimized": { + "serialP50Ms": 24.991613999999572, + "concurrency8P95Ms": 177.60703299999932 + }, + "repeat": { + "serialP50Ms": 19.012864000000263, + "concurrency8P95Ms": 216.19974999999977 + } + } + ] +} diff --git a/docs/cache-performance-report.html b/docs/cache-performance-report.html new file mode 100644 index 0000000..948dd7b --- /dev/null +++ b/docs/cache-performance-report.html @@ -0,0 +1,11 @@ +Shared cache performance evaluation +

Keep shared-cache rollout disabled for now

+

The current cache slows small and medium warm reads. Large files benefit. A benchmark-only SQLite change identifies a substantial part of the overhead.

+
+
File / baselineBaselineCurrent
shared cache
Experimental
SQLite NORMAL
+

16 and 256 KiB: raw source cache with repeated transformation and gzip. 2 MiB: existing transformed-file cache. Two warm batches per setting: 32 serial requests or 64 requests at concurrency eight. CPU and memory include both server and benchmark client.

+ +

NORMAL was tested only on temporary cache indexes. In WAL mode it can lose recent commits after power loss, so recovery needs validation before adoption. SQLite durability documentation.

+

Local compiled-code evaluation · Node 24.14.1 · 2 November 2026. Shared host, synthetic content, warm filesystem cache, no TLS or production traffic. These measurements are not production capacity guarantees. Application settings remain unchanged.

+ \ No newline at end of file diff --git a/docs/cache-performance-results.json b/docs/cache-performance-results.json new file mode 100644 index 0000000..964e9e1 --- /dev/null +++ b/docs/cache-performance-results.json @@ -0,0 +1,6858 @@ +{ + "measuredAt": "2026-11-02T10:44:38.180Z", + "environment": { + "execution": "compiled JavaScript", + "node": "v24.14.1", + "platform": "linux", + "arch": "x64", + "cpu": "Intel Xeon E312xx (Sandy Bridge, IBRS update)", + "logicalCpus": 12, + "totalMemoryGiB": 35.22977066040039, + "loadAverage": [ + 2.19, + 3.52, + 3.52 + ] + }, + "methodology": { + "scope": "Local loopback HTTP, deterministic synthetic content, isolated process per scenario; no production traffic", + "upstreamDelayMs": 20, + "rawSourceBaseline": "Raw local file; anonymization and gzip repeated every request; no transformed-result cache. Not a complete legacy deployment comparison.", + "measurements": "Cold request then 3 warmups, 2 batches each at concurrency 1 (16 requests) and 8 (32 requests). CPU and RSS include server, loopback client, hashing and Node runtime; worker-thread CPU included. First cold request also includes worker startup when applicable.", + "limitations": "Warm OS page cache; no TLS, proxy, GitHub bandwidth, database auth or real-world RTT. Small sample p95 is descriptive, not a capacity SLA. Fresh metadata indexes; not a full-size index test." + }, + "scenarios": [ + { + "size": 16384, + "changed": false, + "mode": "uncached", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 85.95405000000028, + "ttfb": 85.06523900000002, + "bytes": 6297, + "wallMs": 88.24232699999993, + "cpuMs": 252.89 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 454.5652249999998, + "requestsPerSecond": 35.198469042589004, + "p50Ms": 27.736519999999928, + "p95Ms": 32.43306500000017, + "maxMs": 32.43306500000017, + "ttfbP95Ms": 32.081075000000055, + "cpuMs": 194.177, + "cpuMsPerRequest": 12.1360625, + "peakRssMiB": 141.6015625, + "eventLoopP95Ms": 12.615679, + "wireBytes": 100752, + "latenciesMs": [ + 30.92009599999983, + 32.047685999999885, + 28.617784999999913, + 26.418804999999793, + 27.395849, + 27.815382000000227, + 25.545646999999917, + 26.760655999999926, + 27.736519999999928, + 25.072635999999875, + 29.006418999999823, + 26.94087300000001, + 25.60169599999972, + 29.079361000000063, + 32.43306500000017, + 29.61191800000006 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 454.18376000000035, + "requestsPerSecond": 35.22803193139268, + "p50Ms": 27.950624999999945, + "p95Ms": 29.953220999999758, + "maxMs": 29.953220999999758, + "ttfbP95Ms": 29.393362000000252, + "cpuMs": 167.768, + "cpuMsPerRequest": 10.4855, + "peakRssMiB": 145.38671875, + "eventLoopP95Ms": 12.951551, + "wireBytes": 100752, + "latenciesMs": [ + 27.296382999999878, + 25.913872000000083, + 27.07371400000011, + 29.698695999999927, + 27.082464999999956, + 26.86242399999992, + 27.911595000000034, + 27.597170000000006, + 28.003467999999884, + 29.857402000000093, + 27.950624999999945, + 28.39123100000006, + 29.42581199999995, + 28.718343000000004, + 29.953220999999758, + 29.811597000000347 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 319.072181, + "requestsPerSecond": 100.29078655403055, + "p50Ms": 77.3084289999997, + "p95Ms": 83.16527399999995, + "maxMs": 85.92784500000016, + "ttfbP95Ms": 82.85903499999995, + "cpuMs": 356.666, + "cpuMsPerRequest": 11.1458125, + "peakRssMiB": 155.79296875, + "eventLoopP95Ms": 39.944191, + "wireBytes": 201504, + "latenciesMs": [ + 73.6519559999997, + 74.53326800000013, + 80.93017899999995, + 81.58604800000012, + 82.09360000000015, + 82.61552200000006, + 83.16527399999995, + 85.92784500000016, + 81.09806899999967, + 81.20724599999994, + 75.44102899999962, + 75.76665400000002, + 75.7319749999997, + 75.55569299999979, + 77.98998900000015, + 79.42995000000019, + 73.02227399999992, + 79.29785500000025, + 79.43708699999979, + 79.44747800000005, + 79.19141300000001, + 79.37738399999989, + 76.95459100000016, + 75.2228369999998, + 77.3084289999997, + 77.31671899999992, + 76.66069700000025, + 75.98237800000015, + 75.53600300000016, + 74.98335099999986, + 74.55354899999975, + 73.06984799999964 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 294.92546600000014, + "requestsPerSecond": 108.50199012654942, + "p50Ms": 70.92170800000031, + "p95Ms": 82.20073000000002, + "maxMs": 83.00773200000003, + "ttfbP95Ms": 81.89524800000027, + "cpuMs": 300.47, + "cpuMsPerRequest": 9.3896875, + "peakRssMiB": 163.26171875, + "eventLoopP95Ms": 36.601855, + "wireBytes": 201504, + "latenciesMs": [ + 69.78970899999968, + 77.49611400000003, + 78.37722199999962, + 79.3150770000002, + 80.6086879999998, + 81.19560599999977, + 82.20073000000002, + 83.00773200000003, + 78.32813300000043, + 71.12308500000017, + 70.96713599999975, + 74.04995800000006, + 73.57149400000026, + 73.46664400000009, + 73.11799199999996, + 74.75970899999993, + 62.28293699999995, + 62.80678100000023, + 70.27487400000018, + 67.69631500000014, + 68.9379799999997, + 69.23950599999989, + 69.66021600000022, + 70.92170800000031, + 49.2500170000003, + 73.62912499999993, + 69.64628099999982, + 68.66142200000013, + 67.10404900000003, + 66.34799099999964, + 65.65464199999997, + 63.38949700000012 + ] + } + ], + "upstreamFills": 100, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 100, + "bytes": 1638400, + "ms": 260.13173100000313, + "b0": 0, + "b1": 0, + "b2": 100, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6297, + "uncompressedBytes": 16384, + "verifiedResponses": 100 + }, + { + "size": 16384, + "changed": false, + "mode": "raw-source", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 137.6469119999997, + "ttfb": 135.33600499999966, + "bytes": 6297, + "wallMs": 143.07577600000013, + "cpuMs": 344.005 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 171.95928099999992, + "requestsPerSecond": 93.0452832028299, + "p50Ms": 9.436431999999968, + "p95Ms": 14.821071999999731, + "maxMs": 14.821071999999731, + "ttfbP95Ms": 13.800523999999768, + "cpuMs": 234.269, + "cpuMsPerRequest": 14.6418125, + "peakRssMiB": 144.06640625, + "eventLoopP95Ms": 12.525567, + "wireBytes": 100752, + "latenciesMs": [ + 14.821071999999731, + 12.067360000000008, + 12.037286000000222, + 11.523952000000008, + 11.729616000000078, + 13.079126999999971, + 9.183178000000225, + 10.87661799999978, + 9.220208999999613, + 8.017010999999911, + 9.124657999999727, + 8.734979999999723, + 9.148009000000002, + 9.089067000000341, + 9.436431999999968, + 9.479964000000109 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 141.55855900000006, + "requestsPerSecond": 113.02742916449152, + "p50Ms": 8.503367000000253, + "p95Ms": 10.794832000000042, + "maxMs": 10.794832000000042, + "ttfbP95Ms": 10.377090999999837, + "cpuMs": 172.324, + "cpuMsPerRequest": 10.77025, + "peakRssMiB": 148.1875, + "eventLoopP95Ms": 12.689407, + "wireBytes": 100752, + "latenciesMs": [ + 9.58577699999978, + 9.70812500000011, + 8.503367000000253, + 10.011745000000246, + 8.011360999999852, + 7.860498000000007, + 7.769714999999906, + 7.69260499999973, + 8.735810000000129, + 8.06757800000014, + 8.695259000000078, + 7.886892999999873, + 8.504639999999654, + 8.764544000000114, + 8.150252999999793, + 10.794832000000042 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 281.39008699999977, + "requestsPerSecond": 113.72113474629981, + "p50Ms": 60.20711500000016, + "p95Ms": 102.4742110000002, + "maxMs": 111.8597249999998, + "ttfbP95Ms": 102.23767499999985, + "cpuMs": 360.047, + "cpuMsPerRequest": 11.25146875, + "peakRssMiB": 158.609375, + "eventLoopP95Ms": 19.759103, + "wireBytes": 201504, + "latenciesMs": [ + 34.8106029999999, + 44.79265399999986, + 56.01683099999991, + 68.39543600000025, + 80.6937939999998, + 92.13992400000006, + 69.40725399999974, + 102.4742110000002, + 68.7717990000001, + 111.8597249999998, + 68.45068100000026, + 64.29324499999984, + 61.961133000000245, + 61.77556400000003, + 60.20711500000016, + 60.25669700000026, + 59.316675999999916, + 59.498921999999766, + 57.42613799999981, + 58.636369000000286, + 58.277857999999924, + 57.99763600000006, + 58.47507900000028, + 58.642965000000004, + 58.63328799999999, + 58.32724099999996, + 77.55363799999986, + 74.71733399999994, + 72.47350600000027, + 63.29790700000012, + 57.03891900000008, + 56.53193299999975 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 258.7012530000002, + "requestsPerSecond": 123.69480096797203, + "p50Ms": 61.73791800000026, + "p95Ms": 75.4637359999997, + "maxMs": 76.30305999999973, + "ttfbP95Ms": 75.08831399999963, + "cpuMs": 333.424, + "cpuMsPerRequest": 10.4195, + "peakRssMiB": 168.3671875, + "eventLoopP95Ms": 34.504703, + "wireBytes": 201504, + "latenciesMs": [ + 66.92645600000014, + 67.96470199999976, + 68.90562399999999, + 69.97225500000013, + 70.81222900000012, + 71.77422200000001, + 75.40710200000012, + 76.30305999999973, + 75.43583699999999, + 75.43481900000006, + 75.4637359999997, + 75.30158500000016, + 75.1009610000001, + 75.17250300000023, + 74.61533499999996, + 74.829612, + 58.182956000000104, + 57.81264300000021, + 57.508266999999705, + 57.19954900000039, + 56.9012359999997, + 56.541357999999946, + 55.190406999999595, + 61.73791800000026, + 51.10323500000004, + 50.67834700000003, + 50.29013900000018, + 49.91463799999974, + 49.84766099999979, + 49.59532299999955, + 49.341605999999956, + 43.02457800000002 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 100, + "bytes": 1638400, + "ms": 305.7102469999995, + "b0": 0, + "b1": 0, + "b2": 99, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6297, + "uncompressedBytes": 16384, + "verifiedResponses": 100 + }, + { + "size": 16384, + "changed": false, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 687.163904, + "ttfb": 685.811588, + "bytes": 6297, + "wallMs": 691.8826679999997, + "cpuMs": 430.915 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 711.0317090000003, + "requestsPerSecond": 22.50251261297827, + "p50Ms": 41.78524800000014, + "p95Ms": 58.979915999999776, + "maxMs": 58.979915999999776, + "ttfbP95Ms": 58.443874999999935, + "cpuMs": 214.875, + "cpuMsPerRequest": 13.4296875, + "peakRssMiB": 145.8984375, + "eventLoopP95Ms": 24.707071, + "wireBytes": 100752, + "latenciesMs": [ + 51.71796799999993, + 41.39104300000008, + 44.699826999999914, + 47.92313100000001, + 44.742339999999786, + 45.0345199999997, + 58.979915999999776, + 47.2625979999998, + 41.78524800000014, + 39.27986499999997, + 40.40188000000035, + 41.09266600000001, + 37.48215600000003, + 38.11749400000008, + 41.11155899999994, + 44.654540999999426 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 703.2503730000008, + "requestsPerSecond": 22.751498775244848, + "p50Ms": 40.03317800000059, + "p95Ms": 65.50595199999952, + "maxMs": 65.50595199999952, + "ttfbP95Ms": 65.1589699999995, + "cpuMs": 173.698, + "cpuMsPerRequest": 10.856125, + "peakRssMiB": 147.4453125, + "eventLoopP95Ms": 24.035327, + "wireBytes": 100752, + "latenciesMs": [ + 38.4124610000008, + 42.17134299999998, + 65.50595199999952, + 45.36672400000043, + 42.49537899999996, + 39.971066000000064, + 39.469882000000325, + 37.813819999999396, + 40.03317800000059, + 63.355774999999994, + 42.10807600000044, + 37.64974899999925, + 45.98718099999951, + 47.723745000000235, + 37.99053499999991, + 33.72012099999938 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 1427.9498820000008, + "requestsPerSecond": 22.40975009233551, + "p50Ms": 363.04722200000015, + "p95Ms": 418.1422599999996, + "maxMs": 460.6377650000004, + "ttfbP95Ms": 417.8681399999996, + "cpuMs": 380.88, + "cpuMsPerRequest": 11.9025, + "peakRssMiB": 150.7890625, + "eventLoopP95Ms": 65.699839, + "wireBytes": 201504, + "latenciesMs": [ + 150.41176199999973, + 191.16824700000052, + 238.06588100000045, + 294.6294889999999, + 334.0516669999997, + 376.85608799999954, + 418.1422599999996, + 312.86792199999945, + 460.6377650000004, + 325.5563060000004, + 336.2512049999996, + 363.04722200000015, + 364.9016499999998, + 382.92719900000066, + 390.34868300000016, + 391.9590470000003, + 391.8731250000001, + 395.72882000000027, + 396.60979599999973, + 372.1735260000005, + 375.88131599999997, + 358.3923399999994, + 363.5859810000002, + 367.0568480000002, + 367.86812199999986, + 365.9775460000001, + 346.69182100000035, + 319.57630400000016, + 305.4107950000007, + 289.8648379999995, + 243.9317229999997, + 204.46839699999964 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 1407.6951, + "requestsPerSecond": 22.73219534542672, + "p50Ms": 358.46000899999945, + "p95Ms": 432.73124200000075, + "maxMs": 448.3000140000004, + "ttfbP95Ms": 432.1105630000002, + "cpuMs": 340.805, + "cpuMsPerRequest": 10.65015625, + "peakRssMiB": 153.3671875, + "eventLoopP95Ms": 140.509183, + "wireBytes": 201504, + "latenciesMs": [ + 263.9888719999999, + 264.7602159999997, + 266.104953, + 267.23999599999934, + 268.1736660000006, + 269.3393299999998, + 270.65173200000027, + 271.7722679999997, + 370.63760600000023, + 370.4874469999995, + 370.2253269999992, + 370.900173, + 370.7584649999999, + 370.4042589999999, + 370.1921769999999, + 448.3000140000004, + 359.1385109999992, + 359.5424330000005, + 358.46000899999945, + 358.82371800000055, + 359.1915310000004, + 359.0549949999995, + 432.73124200000075, + 418.28066600000056, + 351.7080249999999, + 350.4553819999992, + 349.8094710000005, + 348.7601189999996, + 347.83322099999987, + 390.72681399999965, + 324.44725599999947, + 266.65156899999965 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 16384, + "storedBytes": 6297, + "allocatedBytes": 8192, + "oldestAccess": 1793616289206, + "budgetBytes": 67108864, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 1, + "decisions": 0 + }, + "results": { + "blobs": 0, + "originalBytes": 0, + "storedBytes": 0, + "allocatedBytes": 0, + "oldestAccess": null, + "budgetBytes": 33554432, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 0, + "decisions": 1 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 10.633102000000235, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 4.631634999999733, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 4.927446000000145, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 87.49649399999998, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged_cached", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 6297, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6297, + "uncompressedBytes": 16384, + "verifiedResponses": 100 + }, + { + "size": 16384, + "changed": true, + "mode": "uncached", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 69.95626500000003, + "ttfb": 68.86845000000017, + "bytes": 6286, + "wallMs": 72.47778000000017, + "cpuMs": 67.644 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 444.1568259999999, + "requestsPerSecond": 36.02331218027932, + "p50Ms": 26.93095600000015, + "p95Ms": 32.61251099999981, + "maxMs": 32.61251099999981, + "ttfbP95Ms": 32.073931999999786, + "cpuMs": 173.208, + "cpuMsPerRequest": 10.8255, + "peakRssMiB": 139.91796875, + "eventLoopP95Ms": 12.107775, + "wireBytes": 100576, + "latenciesMs": [ + 32.61251099999981, + 29.85756500000025, + 28.652783999999883, + 27.162876000000324, + 27.346967999999833, + 28.574843999999757, + 28.213850999999977, + 26.178378000000066, + 26.93095600000015, + 26.31964199999993, + 26.17878900000005, + 24.74231000000009, + 25.181542000000263, + 29.587393000000247, + 26.500310999999783, + 26.558202000000165 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 482.5752510000002, + "requestsPerSecond": 33.15545081693382, + "p50Ms": 29.834824000000026, + "p95Ms": 34.363384000000224, + "maxMs": 34.363384000000224, + "ttfbP95Ms": 31.456461000000218, + "cpuMs": 195.837, + "cpuMsPerRequest": 12.2398125, + "peakRssMiB": 142.92578125, + "eventLoopP95Ms": 14.770175, + "wireBytes": 100576, + "latenciesMs": [ + 31.186739000000216, + 29.897621000000072, + 28.81661699999995, + 31.88146599999982, + 31.816113999999743, + 30.750939000000017, + 29.834824000000026, + 30.42873299999974, + 28.861427999999705, + 28.05677700000024, + 28.25560200000018, + 27.73582600000009, + 30.07720399999971, + 29.06123000000025, + 28.403697000000193, + 34.363384000000224 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 376.9889119999998, + "requestsPerSecond": 84.88313311453578, + "p50Ms": 84.0718869999996, + "p95Ms": 126.55760700000019, + "maxMs": 129.17823599999974, + "ttfbP95Ms": 126.2176300000001, + "cpuMs": 374.032, + "cpuMsPerRequest": 11.6885, + "peakRssMiB": 153.44140625, + "eventLoopP95Ms": 39.387135, + "wireBytes": 201152, + "latenciesMs": [ + 100.68049500000006, + 119.06214899999986, + 120.17504599999984, + 120.6452489999997, + 125.018822, + 125.87027799999987, + 126.55760700000019, + 129.17823599999974, + 48.51149799999985, + 78.01101999999992, + 78.23140000000012, + 78.72745399999985, + 75.12243099999978, + 74.85088200000018, + 75.16985599999998, + 73.30492499999991, + 62.58139600000004, + 81.3445529999999, + 81.2121360000001, + 81.33672000000024, + 81.68028400000003, + 82.06302499999993, + 82.138508, + 84.47973999999977, + 84.0718869999996, + 89.22492800000009, + 88.51804700000002, + 87.72818099999995, + 89.61887000000024, + 88.71696299999985, + 87.85916799999995, + 85.65149100000008 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 313.7728100000004, + "requestsPerSecond": 101.98461746892588, + "p50Ms": 77.80097699999988, + "p95Ms": 82.3382330000004, + "maxMs": 84.553136, + "ttfbP95Ms": 82.03146100000004, + "cpuMs": 324.532, + "cpuMsPerRequest": 10.141625, + "peakRssMiB": 168.0703125, + "eventLoopP95Ms": 41.713663, + "wireBytes": 201152, + "latenciesMs": [ + 70.47264500000028, + 77.18804599999976, + 78.16889700000002, + 79.03337200000033, + 79.91029299999991, + 80.64816299999984, + 81.5416379999997, + 82.3382330000004, + 84.553136, + 78.47460300000012, + 78.52461200000016, + 78.97290599999997, + 79.00664300000017, + 78.85341799999969, + 78.85955999999987, + 79.99599499999977, + 70.84509700000035, + 77.70199899999989, + 77.80097699999988, + 77.53448500000013, + 77.49605399999973, + 77.53412200000002, + 77.49026099999992, + 78.45472599999994, + 81.20405500000015, + 73.77451599999995, + 73.03116200000022, + 72.73541900000009, + 72.41145700000015, + 71.91386000000011, + 71.45928800000002, + 70.24886099999958 + ] + } + ], + "upstreamFills": 100, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_changed", + "traffic": "background", + "count": 100, + "bytes": 1638400, + "ms": 314.6539689999963, + "b0": 0, + "b1": 0, + "b2": 99, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6286, + "uncompressedBytes": 16533, + "verifiedResponses": 100 + }, + { + "size": 16384, + "changed": true, + "mode": "raw-source", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 145.9149209999996, + "ttfb": 143.15194999999994, + "bytes": 6286, + "wallMs": 150.96164399999998, + "cpuMs": 202.624 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 128.99410899999975, + "requestsPerSecond": 124.03667209329716, + "p50Ms": 7.095190999999886, + "p95Ms": 11.055770999999822, + "maxMs": 11.055770999999822, + "ttfbP95Ms": 10.567356000000018, + "cpuMs": 179.35, + "cpuMsPerRequest": 11.209375, + "peakRssMiB": 142.0703125, + "eventLoopP95Ms": 11.714559, + "wireBytes": 100576, + "latenciesMs": [ + 11.055770999999822, + 8.420896999999968, + 8.37870699999985, + 9.395782000000054, + 8.883790000000317, + 9.889574000000266, + 7.095190999999886, + 8.162634000000253, + 6.5357679999997345, + 6.730883000000176, + 6.814487999999983, + 6.861793999999918, + 7.0032860000001165, + 7.418884000000162, + 6.527482999999847, + 6.355446000000029 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 143.47517900000003, + "requestsPerSecond": 111.51754687826525, + "p50Ms": 8.364767000000029, + "p95Ms": 10.736985999999888, + "maxMs": 10.736985999999888, + "ttfbP95Ms": 10.325357000000167, + "cpuMs": 174.807, + "cpuMsPerRequest": 10.9254375, + "peakRssMiB": 146.50390625, + "eventLoopP95Ms": 12.869631, + "wireBytes": 100576, + "latenciesMs": [ + 8.222161999999571, + 7.435686999999689, + 7.847580999999991, + 8.8180440000001, + 9.622455999999602, + 8.280225999999857, + 9.914570000000367, + 8.345248000000083, + 10.736985999999888, + 8.364767000000029, + 8.318075000000135, + 9.163736000000426, + 8.16568099999995, + 9.187541999999667, + 9.902484000000186, + 8.485404000000017 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 202.27937800000018, + "requestsPerSecond": 158.1970456721494, + "p50Ms": 47.355970999999954, + "p95Ms": 74.41215299999976, + "maxMs": 81.77438299999994, + "ttfbP95Ms": 74.21840299999985, + "cpuMs": 284.479, + "cpuMsPerRequest": 8.88996875, + "peakRssMiB": 157.90625, + "eventLoopP95Ms": 18.694143, + "wireBytes": 201152, + "latenciesMs": [ + 27.09392600000001, + 34.202831999999944, + 40.67928900000015, + 48.28666199999998, + 57.25572800000009, + 66.18402900000001, + 48.84129100000018, + 74.41215299999976, + 48.96815199999992, + 81.77438299999994, + 50.32567599999993, + 49.372105000000374, + 48.77755800000023, + 49.364054000000124, + 48.55755400000044, + 48.59274099999993, + 47.63851599999998, + 47.76144299999987, + 46.58066400000007, + 46.93522100000018, + 47.10854199999994, + 46.95772299999999, + 46.87438999999995, + 47.27120700000023, + 47.43494899999996, + 47.355970999999954, + 46.640128000000004, + 44.701792000000296, + 42.5035170000001, + 35.028025999999954, + 29.787738999999874, + 29.16061400000035 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 246.09007699999984, + "requestsPerSecond": 130.03368681135413, + "p50Ms": 59.39020299999993, + "p95Ms": 71.84271200000012, + "maxMs": 77.54610600000024, + "ttfbP95Ms": 71.31982800000014, + "cpuMs": 331.227, + "cpuMsPerRequest": 10.35084375, + "peakRssMiB": 170.53125, + "eventLoopP95Ms": 28.459007, + "wireBytes": 201152, + "latenciesMs": [ + 46.692201999999725, + 47.61932799999977, + 48.54332999999997, + 49.46384200000011, + 50.20099499999969, + 51.15816300000006, + 53.487113000000136, + 54.07325300000002, + 59.83527800000002, + 59.39020299999993, + 59.081502999999884, + 58.72152900000037, + 58.389936000000034, + 57.945634999999584, + 57.741321999999855, + 64.2627480000001, + 62.374309999999696, + 63.133557999999994, + 63.83143999999993, + 64.34165800000028, + 64.78523599999971, + 65.29908999999998, + 77.54610600000024, + 71.84271200000012, + 67.08917199999996, + 66.42171300000018, + 65.68672700000025, + 65.39457700000003, + 65.25941699999976, + 64.94840299999987, + 54.75441000000001, + 53.875838999999814 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_changed", + "traffic": "background", + "count": 100, + "bytes": 1638400, + "ms": 264.757591999999, + "b0": 0, + "b1": 0, + "b2": 100, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6286, + "uncompressedBytes": 16533, + "verifiedResponses": 100 + }, + { + "size": 16384, + "changed": true, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 709.8329450000001, + "ttfb": 708.441918, + "bytes": 6286, + "wallMs": 714.187297, + "cpuMs": 385.762 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 806.895896, + "requestsPerSecond": 19.82907594314992, + "p50Ms": 46.285527, + "p95Ms": 88.42466299999978, + "maxMs": 88.42466299999978, + "ttfbP95Ms": 87.80009400000017, + "cpuMs": 236.743, + "cpuMsPerRequest": 14.7964375, + "peakRssMiB": 146.18359375, + "eventLoopP95Ms": 23.003135, + "wireBytes": 100576, + "latenciesMs": [ + 36.888304999999946, + 57.44158500000003, + 56.037080999999944, + 50.142337999999654, + 48.77196099999992, + 46.285527, + 56.34347600000001, + 40.06601999999975, + 88.42466299999978, + 39.105986999999914, + 37.81787700000041, + 44.188852000000225, + 68.10151200000018, + 46.931972000000314, + 44.88915300000008, + 40.23559400000022 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 738.1818039999998, + "requestsPerSecond": 21.674877263704545, + "p50Ms": 43.46926600000006, + "p95Ms": 67.05987599999935, + "maxMs": 67.05987599999935, + "ttfbP95Ms": 66.62766399999964, + "cpuMs": 196.298, + "cpuMsPerRequest": 12.268625, + "peakRssMiB": 147.47265625, + "eventLoopP95Ms": 23.445503, + "wireBytes": 100576, + "latenciesMs": [ + 39.13114199999973, + 41.05593199999976, + 46.96286800000007, + 53.47285499999998, + 40.37874299999976, + 67.05987599999935, + 43.146381000000474, + 38.28179199999977, + 40.396890999999414, + 46.111471000000165, + 54.17170999999962, + 49.63622899999973, + 44.84316000000035, + 45.79168699999991, + 43.46926600000006, + 40.4942030000002 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 1588.5994250000003, + "requestsPerSecond": 20.14352988954405, + "p50Ms": 365.12139299999944, + "p95Ms": 557.7260050000004, + "maxMs": 600.1873940000005, + "ttfbP95Ms": 557.4238050000004, + "cpuMs": 382.304, + "cpuMsPerRequest": 11.947, + "peakRssMiB": 151.078125, + "eventLoopP95Ms": 71.106559, + "wireBytes": 201152, + "latenciesMs": [ + 220.33113199999934, + 264.94155500000033, + 313.37240700000075, + 366.2215980000001, + 462.1094459999995, + 518.1971629999998, + 557.7260050000004, + 382.90504899999996, + 600.1873940000005, + 395.3335589999997, + 395.24677899999915, + 396.5842240000002, + 340.7891980000004, + 335.4595140000001, + 342.6871140000003, + 350.12788399999954, + 349.84108600000036, + 348.63724699999966, + 359.04961100000037, + 364.630451, + 367.2685280000005, + 365.12139299999944, + 368.7628279999999, + 379.62959200000023, + 380.18110700000034, + 380.23865899999964, + 372.8080920000002, + 371.84159399999953, + 347.20781500000066, + 343.22712299999966, + 305.44065500000033, + 254.29600800000026 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 1494.9418400000004, + "requestsPerSecond": 21.405515013212817, + "p50Ms": 351.71258600000056, + "p95Ms": 419.9873259999995, + "maxMs": 424.66334800000004, + "ttfbP95Ms": 419.6729229999992, + "cpuMs": 324.389, + "cpuMsPerRequest": 10.13715625, + "peakRssMiB": 154.1328125, + "eventLoopP95Ms": 141.164543, + "wireBytes": 201152, + "latenciesMs": [ + 319.435391, + 320.27337700000044, + 321.1681779999999, + 321.9951719999999, + 322.711284, + 323.42133600000034, + 324.332093, + 373.96572900000047, + 330.9357570000002, + 330.695471, + 330.5438320000003, + 330.8146740000002, + 330.945111, + 330.8089979999995, + 330.8976339999999, + 342.49936700000035, + 362.0774760000004, + 362.3927130000002, + 362.73716199999944, + 362.631942, + 362.54122000000007, + 362.5503750000007, + 362.52498899999955, + 351.71258600000056, + 419.9873259999995, + 419.2876040000001, + 418.45445800000016, + 417.91445999999996, + 417.4497220000003, + 417.03378200000043, + 416.64368600000034, + 424.66334800000004 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 16384, + "storedBytes": 6297, + "allocatedBytes": 8192, + "oldestAccess": 1793616304540, + "budgetBytes": 67108864, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 0, + "decisions": 0 + }, + "results": { + "blobs": 1, + "originalBytes": 16533, + "storedBytes": 6286, + "allocatedBytes": 8192, + "oldestAccess": 1793616304905, + "budgetBytes": 33554432, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 1, + "decisions": 1 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 32917, + "ms": 9.852014000000509, + "b0": 0, + "b1": 0, + "b2": 2, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 5.274275000000216, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 8.694196000000375, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 16533, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 6286, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 91.58035100000006, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 16384, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 1622016, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 6297, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 6286, + "uncompressedBytes": 16533, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": false, + "mode": "uncached", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 143.28455299999996, + "ttfb": 118.88409899999988, + "bytes": 100827, + "wallMs": 153.25853099999995, + "cpuMs": 161.476 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 891.0160429999996, + "requestsPerSecond": 17.957027963412333, + "p50Ms": 55.462078000000474, + "p95Ms": 58.03574600000002, + "maxMs": 58.03574600000002, + "ttfbP95Ms": 39.5414609999998, + "cpuMs": 722.032, + "cpuMsPerRequest": 45.127, + "peakRssMiB": 162.18359375, + "eventLoopP95Ms": 14.712831, + "wireBytes": 1613232, + "latenciesMs": [ + 58.03574600000002, + 57.48934099999997, + 55.462078000000474, + 57.83025400000042, + 54.88425300000017, + 56.591435000000274, + 56.004689999999755, + 54.49594199999956, + 56.1804689999999, + 53.58735699999943, + 54.76132999999936, + 55.68456200000037, + 56.039700999999695, + 52.84888900000078, + 52.45175899999958, + 53.28395999999975 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 885.5552750000006, + "requestsPerSecond": 18.067759801893775, + "p50Ms": 54.83537500000057, + "p95Ms": 57.828419999999824, + "maxMs": 57.828419999999824, + "ttfbP95Ms": 39.119807999999466, + "cpuMs": 679.909, + "cpuMsPerRequest": 42.4943125, + "peakRssMiB": 182.2734375, + "eventLoopP95Ms": 13.860863, + "wireBytes": 1613232, + "latenciesMs": [ + 57.828419999999824, + 54.22340199999962, + 56.67312999999922, + 56.014124000000265, + 54.34695499999998, + 56.235273000000234, + 52.90650199999982, + 53.376374000000396, + 55.73405600000024, + 56.24066500000026, + 53.8395959999998, + 54.67855099999997, + 55.28474300000016, + 53.43570700000055, + 54.83537500000057, + 56.086849999999686 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 519.0999089999996, + "requestsPerSecond": 61.645165882701065, + "p50Ms": 126.61032499999965, + "p95Ms": 141.20128300000033, + "maxMs": 143.19924600000013, + "ttfbP95Ms": 97.14479699999993, + "cpuMs": 1085.643, + "cpuMsPerRequest": 33.92634375, + "peakRssMiB": 226.78515625, + "eventLoopP95Ms": 64.782335, + "wireBytes": 3226464, + "latenciesMs": [ + 133.72019199999977, + 133.1583440000004, + 139.81545199999982, + 138.79288300000007, + 141.20128300000033, + 140.39711700000043, + 140.9992259999999, + 143.19924600000013, + 124.29028600000038, + 130.58541100000002, + 124.69369000000006, + 128.40795799999978, + 125.81126700000004, + 126.76229599999988, + 126.52312200000051, + 126.61032499999965, + 121.17045099999996, + 108.93421899999976, + 117.8923850000001, + 116.7894409999999, + 123.840733, + 119.36769900000036, + 117.86507799999981, + 121.08742299999994, + 119.9420169999994, + 127.69389599999977, + 121.42212299999937, + 130.10403499999939, + 127.66633300000012, + 127.47485099999994, + 130.50587300000007, + 123.39098999999987 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 512.0819660000006, + "requestsPerSecond": 62.48999598630653, + "p50Ms": 125.54165100000046, + "p95Ms": 136.43479599999955, + "maxMs": 138.43962900000042, + "ttfbP95Ms": 99.77451399999973, + "cpuMs": 1204.406, + "cpuMsPerRequest": 37.6376875, + "peakRssMiB": 246.11328125, + "eventLoopP95Ms": 52.166655, + "wireBytes": 3226464, + "latenciesMs": [ + 116.70467199999985, + 119.23554100000001, + 119.47659300000032, + 123.26098300000012, + 123.78800500000034, + 125.18311999999969, + 125.54165100000046, + 127.7409520000001, + 125.15290199999981, + 133.17539899999974, + 131.15919900000063, + 127.7666650000001, + 129.3326850000003, + 129.47777900000074, + 131.65528600000016, + 138.43962900000042, + 113.543095, + 111.93923300000006, + 123.60471600000074, + 122.81292699999995, + 123.1258029999999, + 122.06220800000028, + 118.77640599999995, + 118.48168999999962, + 129.73165900000004, + 136.43479599999955, + 130.8258390000001, + 128.03748300000007, + 130.4485420000001, + 128.29576400000042, + 133.18516700000055, + 131.29669699999977 + ] + } + ], + "upstreamFills": 100, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 100, + "bytes": 26214400, + "ms": 312.88601200000267, + "b0": 0, + "b1": 0, + "b2": 100, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100827, + "uncompressedBytes": 262144, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": false, + "mode": "raw-source", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 129.33012199999985, + "ttfb": 108.11814099999992, + "bytes": 100827, + "wallMs": 135.883284, + "cpuMs": 142.908 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 562.7365059999997, + "requestsPerSecond": 28.432489858761727, + "p50Ms": 33.290394000000106, + "p95Ms": 43.9042629999999, + "maxMs": 43.9042629999999, + "ttfbP95Ms": 26.391853000000083, + "cpuMs": 710.674, + "cpuMsPerRequest": 44.417125, + "peakRssMiB": 167.1015625, + "eventLoopP95Ms": 12.861439, + "wireBytes": 1613232, + "latenciesMs": [ + 35.7003179999997, + 37.37025100000028, + 34.1115420000001, + 43.9042629999999, + 42.085509999999886, + 40.200170999999955, + 39.39937000000009, + 38.031469000000016, + 33.290394000000106, + 32.99183800000037, + 32.99866599999996, + 30.296424000000115, + 27.464907999999923, + 29.775762999999642, + 27.358525999999983, + 30.96389199999976 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 483.726987, + "requestsPerSecond": 33.07650891927599, + "p50Ms": 29.94747099999995, + "p95Ms": 34.77320099999997, + "maxMs": 34.77320099999997, + "ttfbP95Ms": 20.252014000000145, + "cpuMs": 579.255, + "cpuMsPerRequest": 36.2034375, + "peakRssMiB": 193.83984375, + "eventLoopP95Ms": 13.279231, + "wireBytes": 1613232, + "latenciesMs": [ + 32.763570999999956, + 34.77320099999997, + 29.546221999999943, + 27.763558999999987, + 30.78198399999974, + 29.956807000000026, + 26.72659500000009, + 30.97776900000008, + 31.745250999999826, + 28.19090499999993, + 29.94747099999995, + 29.967271999999866, + 27.441047000000253, + 29.59277800000018, + 27.159414000000197, + 32.265683999999965 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 487.5125780000003, + "requestsPerSecond": 65.63933207893557, + "p50Ms": 123.92487399999982, + "p95Ms": 154.1931540000005, + "maxMs": 160.23643999999967, + "ttfbP95Ms": 106.51765199999954, + "cpuMs": 1292.278, + "cpuMsPerRequest": 40.3836875, + "peakRssMiB": 233, + "eventLoopP95Ms": 18.071551, + "wireBytes": 3226464, + "latenciesMs": [ + 101.63391699999966, + 113.63624400000026, + 123.25958300000002, + 123.92487399999982, + 135.192098, + 136.10733800000025, + 152.40738999999985, + 153.16629899999998, + 120.59358599999996, + 132.47396899999967, + 122.35015599999997, + 124.47089199999982, + 116.17714100000012, + 132.01114000000052, + 116.57073200000013, + 127.37548500000003, + 154.1931540000005, + 141.73106600000028, + 143.69614899999942, + 147.14469700000063, + 139.36983699999928, + 160.23643999999967, + 149.06074800000079, + 143.5682850000003, + 92.04484299999967, + 80.92233099999976, + 81.87077499999941, + 78.16522700000041, + 69.4404999999997, + 62.15679799999998, + 70.40236000000004, + 59.06387799999993 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 283.945283, + "requestsPerSecond": 112.69776930930738, + "p50Ms": 66.91189399999985, + "p95Ms": 92.90836800000034, + "maxMs": 92.96181100000013, + "ttfbP95Ms": 52.457800000000134, + "cpuMs": 1049.219, + "cpuMsPerRequest": 32.78809375, + "peakRssMiB": 228.51171875, + "eventLoopP95Ms": 19.398655, + "wireBytes": 3226464, + "latenciesMs": [ + 63.59044599999925, + 64.44394399999965, + 65.56513599999926, + 68.90784499999972, + 71.77506000000085, + 74.60701999999947, + 74.85958599999958, + 77.65941199999997, + 60.129986999999346, + 61.30537499999991, + 64.00876900000003, + 70.25759800000014, + 65.09130699999969, + 70.17867999999999, + 92.96181100000013, + 92.90836800000034, + 73.19821299999967, + 76.10993599999983, + 71.76622600000064, + 73.67775900000015, + 77.25090100000034, + 83.65232900000046, + 63.73713399999997, + 69.66899199999989, + 60.85695599999963, + 57.89054399999986, + 66.91189399999985, + 55.265158000000156, + 55.99918499999967, + 51.80607600000076, + 48.1837830000004, + 42.45047800000066 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 100, + "bytes": 26214400, + "ms": 266.65551999999616, + "b0": 0, + "b1": 0, + "b2": 100, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100827, + "uncompressedBytes": 262144, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": false, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 750.921914, + "ttfb": 747.41786, + "bytes": 100827, + "wallMs": 761.7940060000001, + "cpuMs": 451.559 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 823.6535199999998, + "requestsPerSecond": 19.425643928529563, + "p50Ms": 41.30984099999978, + "p95Ms": 156.7961190000001, + "maxMs": 156.7961190000001, + "ttfbP95Ms": 155.07862599999999, + "cpuMs": 227.74, + "cpuMsPerRequest": 14.23375, + "peakRssMiB": 152.3984375, + "eventLoopP95Ms": 30.949375, + "wireBytes": 1613232, + "latenciesMs": [ + 69.48912400000017, + 156.7961190000001, + 44.775517000000036, + 40.55120600000009, + 57.30117700000028, + 43.69854499999974, + 43.21045700000013, + 37.964004000000386, + 37.51251000000002, + 47.534593000000314, + 36.85829999999987, + 41.30984099999978, + 38.06589699999995, + 49.086121999999705, + 38.6820689999995, + 35.92315299999973 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 905.8143770000006, + "requestsPerSecond": 17.663663114943017, + "p50Ms": 46.04954099999941, + "p95Ms": 182.8297620000003, + "maxMs": 182.8297620000003, + "ttfbP95Ms": 180.4098010000007, + "cpuMs": 236.595, + "cpuMsPerRequest": 14.7871875, + "peakRssMiB": 159.1015625, + "eventLoopP95Ms": 30.310399, + "wireBytes": 1613232, + "latenciesMs": [ + 39.64413699999932, + 42.29041199999938, + 42.63818700000047, + 40.63879000000088, + 39.45306999999957, + 47.22768200000064, + 55.64117199999964, + 46.04954099999941, + 42.188192999999956, + 58.904350999999224, + 45.627064999999675, + 54.85039400000005, + 46.59404199999972, + 60.83825700000034, + 56.583927000000585, + 182.8297620000003 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 1613.0051729999996, + "requestsPerSecond": 19.838746047220525, + "p50Ms": 413.2137410000005, + "p95Ms": 488.5399289999996, + "maxMs": 540.62727, + "ttfbP95Ms": 486.70694099999946, + "cpuMs": 476.594, + "cpuMsPerRequest": 14.8935625, + "peakRssMiB": 171.4765625, + "eventLoopP95Ms": 75.825151, + "wireBytes": 3226464, + "latenciesMs": [ + 190.87208199999986, + 225.26912300000004, + 272.4201400000002, + 330.2282409999998, + 375.9575139999997, + 437.895724, + 488.5399289999996, + 350.8852399999996, + 540.62727, + 364.499812, + 410.057374, + 428.86041099999966, + 426.18649000000005, + 417.64618299999984, + 413.2137410000005, + 417.2589369999996, + 423.8034089999992, + 458.1428129999995, + 424.63095599999997, + 414.2011480000001, + 416.39356299999963, + 414.54623399999946, + 432.78814499999953, + 426.9301290000003, + 427.1840550000006, + 404.31841799999984, + 411.31324700000005, + 377.2700870000008, + 349.4076869999999, + 316.6095729999997, + 263.3645239999996, + 221.73267299999952 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 1478.3938450000005, + "requestsPerSecond": 21.645111759782786, + "p50Ms": 324.78666599999906, + "p95Ms": 465.1352159999997, + "maxMs": 466.4251610000001, + "ttfbP95Ms": 462.88201799999933, + "cpuMs": 400.421, + "cpuMsPerRequest": 12.51315625, + "peakRssMiB": 184.07421875, + "eventLoopP95Ms": 157.548543, + "wireBytes": 3226464, + "latenciesMs": [ + 259.7584139999999, + 262.8043200000002, + 266.0025420000002, + 269.11310499999945, + 272.10390499999994, + 275.2994869999993, + 278.20180399999936, + 280.64305799999966, + 420.2750070000002, + 419.1436569999996, + 418.0307849999999, + 416.8596349999998, + 415.9207100000003, + 415.7604339999998, + 414.97927400000026, + 414.6124950000003, + 459.76982899999985, + 458.39102100000036, + 464.5239160000001, + 462.68329300000005, + 463.72653400000036, + 463.8137919999999, + 465.1352159999997, + 466.4251610000001, + 324.78666599999906, + 323.3216799999991, + 321.41201399999954, + 320.68179900000086, + 319.2159720000009, + 317.7571850000004, + 316.13627500000075, + 314.56835299999966 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 262144, + "storedBytes": 100827, + "allocatedBytes": 102400, + "oldestAccess": 1793616324690, + "budgetBytes": 67108864, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 8, + "decisions": 0 + }, + "results": { + "blobs": 0, + "originalBytes": 0, + "storedBytes": 0, + "allocatedBytes": 0, + "oldestAccess": null, + "budgetBytes": 33554432, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 0, + "decisions": 1 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 27.535251000000244, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 15.26551500000005, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 5.96140400000013, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 104.82533899999999, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 1, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged_cached", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 100827, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100827, + "uncompressedBytes": 262144, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": true, + "mode": "uncached", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 119.53168000000005, + "ttfb": 92.64723400000003, + "bytes": 100797, + "wallMs": 124.60674299999982, + "cpuMs": 228.253 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 865.5035080000002, + "requestsPerSecond": 18.486349104433664, + "p50Ms": 54.0095409999999, + "p95Ms": 58.098721000000296, + "maxMs": 58.098721000000296, + "ttfbP95Ms": 43.727386000000024, + "cpuMs": 679.01, + "cpuMsPerRequest": 42.438125, + "peakRssMiB": 174.1171875, + "eventLoopP95Ms": 25.231359, + "wireBytes": 1612752, + "latenciesMs": [ + 54.353689999999915, + 50.92360899999994, + 51.64697499999966, + 50.43488699999989, + 52.595560000000205, + 57.43847699999969, + 58.098721000000296, + 55.461636, + 57.65063199999986, + 56.60951000000023, + 54.0095409999999, + 55.324513000000024, + 51.45664099999976, + 56.36698500000011, + 47.48152800000025, + 50.7556340000001 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 881.5541519999997, + "requestsPerSecond": 18.149764213236903, + "p50Ms": 54.27345100000002, + "p95Ms": 60.547341000000415, + "maxMs": 60.547341000000415, + "ttfbP95Ms": 43.98110900000029, + "cpuMs": 666.79, + "cpuMsPerRequest": 41.674375, + "peakRssMiB": 202.109375, + "eventLoopP95Ms": 20.152319, + "wireBytes": 1612752, + "latenciesMs": [ + 49.178073999999924, + 52.51783899999964, + 57.38184600000022, + 60.547341000000415, + 53.95742000000064, + 52.22267300000021, + 54.27345100000002, + 58.24037799999951, + 56.47099100000014, + 56.758646000000226, + 55.21528500000022, + 57.34966799999984, + 51.24712200000067, + 55.03871100000015, + 54.24165200000061, + 53.41335100000015 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 798.3331699999999, + "requestsPerSecond": 40.08351550769211, + "p50Ms": 174.1034469999995, + "p95Ms": 282.8487609999993, + "maxMs": 285.0575170000002, + "ttfbP95Ms": 181.36131999999998, + "cpuMs": 1370.452, + "cpuMsPerRequest": 42.826625, + "peakRssMiB": 251.96875, + "eventLoopP95Ms": 73.859071, + "wireBytes": 3225504, + "latenciesMs": [ + 170.60483699999986, + 170.14605500000016, + 176.62408600000072, + 178.6540589999995, + 176.71896300000026, + 178.84266599999955, + 180.66665899999953, + 182.77300600000035, + 166.16407900000013, + 162.46340899999996, + 162.37529200000063, + 174.1034469999995, + 171.2346469999993, + 170.1370820000002, + 173.30720099999962, + 171.2927149999996, + 273.2919410000004, + 266.97501400000056, + 264.1740469999995, + 285.0575170000002, + 276.29531399999996, + 282.8487609999993, + 270.21581400000014, + 273.42909600000075, + 173.18131899999935, + 171.21601499999997, + 169.2144819999994, + 171.5465379999996, + 175.70141299999977, + 170.61679999999978, + 175.51527499999975, + 170.26530999999977 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 358.96176299999934, + "requestsPerSecond": 89.14598516722813, + "p50Ms": 88.16918700000042, + "p95Ms": 97.33504999999968, + "maxMs": 97.4063699999997, + "ttfbP95Ms": 73.63567499999954, + "cpuMs": 723.715, + "cpuMsPerRequest": 22.61609375, + "peakRssMiB": 244.3046875, + "eventLoopP95Ms": 41.582591, + "wireBytes": 3225504, + "latenciesMs": [ + 88.16918700000042, + 90.55017500000031, + 91.4816979999996, + 94.25223899999946, + 95.92856000000029, + 96.53031399999963, + 97.33504999999968, + 97.4063699999997, + 87.04880299999968, + 88.3127000000004, + 94.72711299999992, + 90.02090500000031, + 88.44203900000048, + 88.26273500000025, + 87.76901100000032, + 88.773596, + 82.17445099999986, + 80.23981899999944, + 82.50067399999989, + 93.63934099999915, + 84.65978300000006, + 87.49616400000014, + 87.02474900000016, + 88.19798900000023, + 86.8213139999998, + 83.21897799999988, + 82.60851000000002, + 88.98622100000011, + 85.51289900000029, + 82.48913799999991, + 83.32646400000067, + 82.92491500000051 + ] + } + ], + "upstreamFills": 100, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_changed", + "traffic": "background", + "count": 100, + "bytes": 26214400, + "ms": 573.9464820000021, + "b0": 0, + "b1": 0, + "b2": 94, + "b3": 6, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100797, + "uncompressedBytes": 264491, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": true, + "mode": "raw-source", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 100.41967600000021, + "ttfb": 84.22142800000006, + "bytes": 100797, + "wallMs": 105.55533500000001, + "cpuMs": 100.362 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 530.3675990000002, + "requestsPerSecond": 30.167755402418532, + "p50Ms": 33.37505600000031, + "p95Ms": 39.91167399999995, + "maxMs": 39.91167399999995, + "ttfbP95Ms": 24.25603000000001, + "cpuMs": 643.571, + "cpuMsPerRequest": 40.2231875, + "peakRssMiB": 178.28125, + "eventLoopP95Ms": 17.285119, + "wireBytes": 1612752, + "latenciesMs": [ + 36.49021599999992, + 37.12631699999997, + 34.61522499999978, + 39.535489000000325, + 35.491262000000006, + 33.7920509999999, + 27.720479999999952, + 29.819648000000143, + 31.42261899999994, + 33.37505600000031, + 28.134672000000137, + 25.38419299999987, + 28.399790999999823, + 39.91167399999995, + 28.9843350000001, + 36.35856100000001 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 689.3028119999999, + "requestsPerSecond": 23.211859463587974, + "p50Ms": 41.30713700000024, + "p95Ms": 57.35193299999992, + "maxMs": 57.35193299999992, + "ttfbP95Ms": 37.62338, + "cpuMs": 724.307, + "cpuMsPerRequest": 45.2691875, + "peakRssMiB": 215.1875, + "eventLoopP95Ms": 21.118975, + "wireBytes": 1612752, + "latenciesMs": [ + 39.59097699999984, + 31.644250999999713, + 37.53565299999991, + 42.344572999999855, + 41.30713700000024, + 42.17161799999985, + 48.18443900000011, + 39.706342000000404, + 38.27148299999999, + 53.95963900000015, + 51.46130499999981, + 48.5608830000001, + 33.15175099999988, + 35.83499200000006, + 57.35193299999992, + 43.408358000000135 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 718.8009710000001, + "requestsPerSecond": 44.51858204292826, + "p50Ms": 166.80554999999958, + "p95Ms": 252.53561500000023, + "maxMs": 254.2171599999997, + "ttfbP95Ms": 194.43425099999968, + "cpuMs": 1351.255, + "cpuMsPerRequest": 42.22671875, + "peakRssMiB": 244.91015625, + "eventLoopP95Ms": 30.375935, + "wireBytes": 3225504, + "latenciesMs": [ + 147.10476299999982, + 145.79838900000004, + 166.80554999999958, + 168.551743, + 178.39362699999992, + 208.4785240000001, + 210.84478400000035, + 244.30034299999988, + 252.53561500000023, + 252.0254030000001, + 240.1876339999999, + 254.2171599999997, + 250.78685799999994, + 230.72474699999975, + 236.28160200000002, + 206.61923099999967, + 163.44927199999984, + 172.92043000000012, + 169.75968599999987, + 164.11930200000006, + 163.64352400000007, + 156.44775800000025, + 163.5606170000001, + 171.28586899999982, + 111.81582100000014, + 120.0836419999996, + 113.67230800000016, + 115.22585500000014, + 110.67167500000005, + 114.7055519999999, + 100.7394989999998, + 88.53892200000018 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 471.889005, + "requestsPerSecond": 67.81255689566235, + "p50Ms": 117.37911199999962, + "p95Ms": 126.64290699999947, + "maxMs": 127.85221900000033, + "ttfbP95Ms": 99.67951999999968, + "cpuMs": 1047.81, + "cpuMsPerRequest": 32.7440625, + "peakRssMiB": 268.109375, + "eventLoopP95Ms": 43.909119, + "wireBytes": 3225504, + "latenciesMs": [ + 112.4219619999999, + 113.82167299999992, + 112.81461500000023, + 113.67637700000023, + 116.3330249999999, + 116.39108699999997, + 117.68415000000005, + 117.70886999999993, + 94.4843149999997, + 95.97489200000018, + 97.96995399999969, + 100.22404300000017, + 103.783007, + 109.8773799999999, + 105.99056599999994, + 107.7861810000004, + 124.74005399999987, + 125.38232299999981, + 124.8372330000002, + 124.92435999999998, + 127.85221900000033, + 125.02806700000019, + 126.64290699999947, + 126.5666339999998, + 117.69684300000063, + 120.42525699999987, + 120.57758600000034, + 119.18417299999965, + 115.79103399999985, + 118.44665200000054, + 117.37911199999962, + 118.31811199999993 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_changed", + "traffic": "background", + "count": 100, + "bytes": 26214400, + "ms": 541.1927849999972, + "b0": 0, + "b1": 0, + "b2": 97, + "b3": 3, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100797, + "uncompressedBytes": 264491, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": true, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 726.5002400000001, + "ttfb": 724.8030190000002, + "bytes": 100797, + "wallMs": 732.6071909999998, + "cpuMs": 440.003 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 790.068968, + "requestsPerSecond": 20.251396584405526, + "p50Ms": 45.87229100000013, + "p95Ms": 73.79595599999993, + "maxMs": 73.79595599999993, + "ttfbP95Ms": 71.67768799999976, + "cpuMs": 264.051, + "cpuMsPerRequest": 16.5031875, + "peakRssMiB": 154.34375, + "eventLoopP95Ms": 25.395199, + "wireBytes": 1612752, + "latenciesMs": [ + 38.30988899999966, + 43.270452000000205, + 40.28965900000003, + 61.678457999999864, + 43.64722000000029, + 36.030379000000266, + 45.87229100000013, + 67.9050100000004, + 51.859950000000026, + 37.572271999999884, + 43.142535999999836, + 48.998613000000205, + 45.90327400000024, + 73.79595599999993, + 58.16343000000006, + 47.779113999999936 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 780.6550759999996, + "requestsPerSecond": 20.495607460829486, + "p50Ms": 45.89932399999998, + "p95Ms": 78.7387060000001, + "maxMs": 78.7387060000001, + "ttfbP95Ms": 76.18128800000068, + "cpuMs": 256.073, + "cpuMsPerRequest": 16.0045625, + "peakRssMiB": 160.78515625, + "eventLoopP95Ms": 25.673727, + "wireBytes": 1612752, + "latenciesMs": [ + 38.53768600000012, + 53.1634039999999, + 45.89932399999998, + 43.95061399999986, + 53.242749, + 40.94096300000001, + 41.23426399999971, + 43.803116000000045, + 78.7387060000001, + 43.21148400000038, + 51.43771199999992, + 48.84506099999999, + 49.72251299999971, + 43.498303999999735, + 48.89673599999969, + 51.07411400000001 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 1466.9548949999999, + "requestsPerSecond": 21.81389496641613, + "p50Ms": 333.840013, + "p95Ms": 543.2748780000002, + "maxMs": 577.46648, + "ttfbP95Ms": 542.1847530000005, + "cpuMs": 432.679, + "cpuMsPerRequest": 13.52121875, + "peakRssMiB": 173.16015625, + "eventLoopP95Ms": 66.584575, + "wireBytes": 3225504, + "latenciesMs": [ + 207.62039099999947, + 257.5458579999995, + 326.11988399999973, + 392.5139169999993, + 444.0948499999995, + 497.1007719999998, + 543.2748780000002, + 371.6877260000001, + 577.46648, + 366.40633100000014, + 386.25091000000066, + 387.9789389999996, + 377.4731300000003, + 374.72626000000037, + 366.0565349999997, + 368.79865900000004, + 369.42629300000044, + 363.0322099999994, + 329.8302569999996, + 317.64296099999956, + 316.02943200000027, + 315.0441030000002, + 328.6353230000004, + 333.840013, + 333.5326020000002, + 337.68504999999914, + 330.2041100000006, + 307.003694, + 285.35335100000066, + 253.89460400000007, + 214.3287190000001, + 183.6434220000001 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 1308.72393, + "requestsPerSecond": 24.451298907631344, + "p50Ms": 301.9586449999997, + "p95Ms": 415.8406419999992, + "maxMs": 416.9751690000003, + "ttfbP95Ms": 413.95588300000054, + "cpuMs": 339.95, + "cpuMsPerRequest": 10.6234375, + "peakRssMiB": 185.7578125, + "eventLoopP95Ms": 109.903871, + "wireBytes": 3225504, + "latenciesMs": [ + 247.88750600000003, + 248.98599100000047, + 250.0465209999993, + 251.03024499999992, + 252.18231899999955, + 253.3301539999993, + 256.21376899999996, + 257.325511, + 300.79393400000026, + 300.77965099999983, + 299.51441199999954, + 301.9586449999997, + 300.76088400000026, + 300.7558309999995, + 301.0063620000001, + 301.0036399999999, + 318.3190420000001, + 320.4046470000003, + 322.48939100000007, + 324.50567799999953, + 326.38565800000015, + 328.17515000000003, + 331.8919599999999, + 332.942309, + 413.6214690000006, + 411.9732439999998, + 410.28970200000003, + 408.7154359999995, + 407.24046199999975, + 416.9751690000003, + 415.8406419999992, + 415.4227799999999 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 262144, + "storedBytes": 100827, + "allocatedBytes": 102400, + "oldestAccess": 1793616343258, + "budgetBytes": 67108864, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 0, + "decisions": 0 + }, + "results": { + "blobs": 1, + "originalBytes": 264491, + "storedBytes": 100797, + "allocatedBytes": 102400, + "oldestAccess": 1793616343582, + "budgetBytes": 33554432, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 8, + "decisions": 1 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 526635, + "ms": 52.486295000000155, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 2, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 12.005188999999973, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 10.196158000000196, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 264491, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 100797, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 86.2855199999999, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 100827, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 100797, + "uncompressedBytes": 264491, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": false, + "mode": "uncached", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 2426.6078500000003, + "ttfb": 2256.588366, + "bytes": 799931, + "wallMs": 2458.407117, + "cpuMs": 3358.772 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 4152.823313000001, + "requestsPerSecond": 3.8528005633934845, + "p50Ms": 255.883425, + "p95Ms": 293.48221399999966, + "maxMs": 293.48221399999966, + "ttfbP95Ms": 96.50909000000047, + "cpuMs": 6237.535, + "cpuMsPerRequest": 389.8459375, + "peakRssMiB": 301.6875, + "eventLoopP95Ms": 17.760255, + "wireBytes": 12798896, + "latenciesMs": [ + 266.84816599999976, + 264.18387299999995, + 271.4340509999993, + 290.4703930000005, + 258.82315000000017, + 242.96619900000042, + 255.883425, + 233.35244500000044, + 248.68435900000077, + 271.0673820000011, + 240.30934800000068, + 247.33098299999983, + 240.55364100000043, + 270.5351160000009, + 252.32396900000094, + 293.48221399999966 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 4009.1861820000013, + "requestsPerSecond": 3.9908348661469057, + "p50Ms": 251.44564899999932, + "p95Ms": 271.4456769999997, + "maxMs": 271.4456769999997, + "ttfbP95Ms": 88.98878999999943, + "cpuMs": 7091.113, + "cpuMsPerRequest": 443.1945625, + "peakRssMiB": 301.19140625, + "eventLoopP95Ms": 18.808831, + "wireBytes": 12798896, + "latenciesMs": [ + 251.44564899999932, + 243.22188500000084, + 263.9004699999987, + 256.7662760000003, + 223.0017169999992, + 218.71618300000046, + 251.28764700000102, + 254.92677600000025, + 240.04349100000036, + 244.06169099999897, + 245.60776599999917, + 262.9176299999999, + 259.66564500000095, + 256.3387160000002, + 261.4437999999991, + 271.4456769999997 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 2077.958877000001, + "requestsPerSecond": 15.399727277663535, + "p50Ms": 486.8425950000001, + "p95Ms": 694.7293669999999, + "maxMs": 722.9565430000002, + "ttfbP95Ms": 322.6264379999993, + "cpuMs": 9457.905, + "cpuMsPerRequest": 295.55953125, + "peakRssMiB": 323.9375, + "eventLoopP95Ms": 29.081599, + "wireBytes": 25597792, + "latenciesMs": [ + 436.53533699999934, + 486.8425950000001, + 546.2356479999999, + 561.8750880000007, + 625.3960699999989, + 679.893782000001, + 694.7293669999999, + 722.9565430000002, + 456.71866300000147, + 455.4521759999989, + 458.55112499999996, + 453.8735889999989, + 484.77882899999895, + 467.4895149999993, + 501.53500899999926, + 508.80037600000105, + 486.786349, + 512.8835029999991, + 541.1036129999993, + 528.6642709999996, + 520.661881, + 487.80370799999946, + 513.2197670000005, + 505.12007599999924, + 508.44544999999925, + 481.58238300000085, + 449.41642800000045, + 466.0038769999992, + 402.41998799999965, + 383.3060380000006, + 362.7710879999995, + 335.34743699999854 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 2159.043729000001, + "requestsPerSecond": 14.821376505802114, + "p50Ms": 505.4080990000002, + "p95Ms": 733.722689000002, + "maxMs": 746.4211670000004, + "ttfbP95Ms": 331.7703560000009, + "cpuMs": 9932.089, + "cpuMsPerRequest": 310.37778125, + "peakRssMiB": 322.7109375, + "eventLoopP95Ms": 30.932991, + "wireBytes": 25597792, + "latenciesMs": [ + 493.8936869999998, + 544.6519910000025, + 566.360474000001, + 636.2519029999967, + 651.3881590000019, + 722.4359729999996, + 733.722689000002, + 746.4211670000004, + 487.65000900000086, + 495.71255799999926, + 481.95012900000074, + 502.5784190000013, + 498.4074249999976, + 501.02211700000043, + 531.7432040000022, + 529.3541340000011, + 512.1068429999978, + 527.9545729999991, + 529.4167129999987, + 491.86889900000097, + 571.2931499999977, + 490.6938999999984, + 522.3158320000002, + 529.4993700000014, + 513.1234999999979, + 485.89848699999857, + 505.4080990000002, + 452.1620299999995, + 404.5023599999986, + 413.6434450000015, + 367.2495490000001, + 351.0678399999997 + ] + } + ], + "upstreamFills": 100, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 100, + "bytes": 209715200, + "ms": 5304.313006000015, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 93, + "b4": 6, + "b5": 1, + "b6": 0 + } + ], + "wireBytesPerResponse": 799931, + "uncompressedBytes": 2097152, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": false, + "mode": "raw-source", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 3196.414003, + "ttfb": 3015.214312, + "bytes": 799931, + "wallMs": 3227.80089, + "cpuMs": 4048.859 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 4140.200433000001, + "requestsPerSecond": 3.8645472022247858, + "p50Ms": 256.0359649999991, + "p95Ms": 301.6853600000004, + "maxMs": 301.6853600000004, + "ttfbP95Ms": 104.51162099999965, + "cpuMs": 7377.549, + "cpuMsPerRequest": 461.0968125, + "peakRssMiB": 309.7421875, + "eventLoopP95Ms": 11.517951, + "wireBytes": 12798896, + "latenciesMs": [ + 301.6853600000004, + 258.4111240000002, + 251.33477500000026, + 277.6389229999995, + 287.52693100000033, + 266.04177700000037, + 279.96264600000086, + 271.3533579999985, + 250.81116699999984, + 245.9996319999991, + 256.0359649999991, + 234.55334399999992, + 210.42471900000055, + 208.21551399999953, + 251.0636770000001, + 284.20454400000017 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 3898.788623999999, + "requestsPerSecond": 4.103838792774728, + "p50Ms": 241.60625999999866, + "p95Ms": 275.10719699999936, + "maxMs": 275.10719699999936, + "ttfbP95Ms": 93.68456800000058, + "cpuMs": 7636.5, + "cpuMsPerRequest": 477.28125, + "peakRssMiB": 301.24609375, + "eventLoopP95Ms": 11.263999, + "wireBytes": 12798896, + "latenciesMs": [ + 230.21009699999922, + 266.00791299999946, + 260.38527799999974, + 239.80031299999973, + 235.60485300000073, + 234.10793399999966, + 223.65459700000065, + 241.60625999999866, + 275.10719699999936, + 248.01368600000023, + 235.82060699999965, + 245.21151099999952, + 220.3096719999994, + 244.8534550000004, + 247.71782200000052, + 245.65739100000064 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 2421.547856000001, + "requestsPerSecond": 13.21468825020817, + "p50Ms": 581.0352569999995, + "p95Ms": 734.3340439999993, + "maxMs": 776.9902320000001, + "ttfbP95Ms": 435.07354699999996, + "cpuMs": 10772.41, + "cpuMsPerRequest": 336.6378125, + "peakRssMiB": 321.12109375, + "eventLoopP95Ms": 13.385727, + "wireBytes": 25597792, + "latenciesMs": [ + 532.4585139999999, + 559.2952960000002, + 600.4938340000008, + 639.1486729999997, + 669.5077430000001, + 712.3043780000007, + 734.3340439999993, + 776.9902320000001, + 567.2573839999986, + 589.7273669999995, + 584.2590579999996, + 576.9265629999991, + 578.9782230000001, + 581.0352569999995, + 616.3299920000009, + 598.7325810000002, + 606.2512269999988, + 597.5849429999998, + 582.8093800000006, + 595.5047799999975, + 609.7240739999979, + 574.4145130000015, + 587.9700749999993, + 575.989744999999, + 564.8554600000007, + 577.9109390000012, + 576.9553079999987, + 541.295005, + 517.7461250000015, + 516.4244680000011, + 466.32384699999966, + 462.2063899999994 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 2352.3628210000024, + "requestsPerSecond": 13.603343716509098, + "p50Ms": 565.2894790000028, + "p95Ms": 685.2791319999997, + "maxMs": 744.020026000002, + "ttfbP95Ms": 373.16291099999944, + "cpuMs": 9890.892, + "cpuMsPerRequest": 309.090375, + "peakRssMiB": 328.12890625, + "eventLoopP95Ms": 13.647871, + "wireBytes": 25597792, + "latenciesMs": [ + 487.8695750000006, + 494.44777500000055, + 569.5136540000021, + 574.5996640000012, + 619.5865909999993, + 656.7332409999981, + 685.2791319999997, + 744.020026000002, + 608.3264089999975, + 625.7815120000014, + 574.0656250000029, + 624.2231460000003, + 610.377378000001, + 631.521510999999, + 634.0923870000006, + 578.8332260000025, + 555.2338229999987, + 568.7351009999984, + 561.9184610000011, + 537.6773159999975, + 542.1888189999991, + 533.7670880000005, + 555.2086720000007, + 566.768211999999, + 565.2894790000028, + 554.0885759999983, + 550.0759690000014, + 538.0729759999995, + 513.0015899999999, + 491.1099869999998, + 466.5286359999991, + 460.7215380000016 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 100, + "bytes": 209715200, + "ms": 6012.852258000008, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 93, + "b4": 6, + "b5": 1, + "b6": 0 + } + ], + "wireBytesPerResponse": 799931, + "uncompressedBytes": 2097152, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": false, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 4126.612338999999, + "ttfb": 4104.240417000001, + "bytes": 799931, + "wallMs": 4168.938039, + "cpuMs": 4888.647 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 1089.6692900000007, + "requestsPerSecond": 14.683354066076314, + "p50Ms": 62.41555300000073, + "p95Ms": 121.58892000000014, + "maxMs": 121.58892000000014, + "ttfbP95Ms": 104.25119900000027, + "cpuMs": 656.268, + "cpuMsPerRequest": 41.01675, + "peakRssMiB": 298.37890625, + "eventLoopP95Ms": 23.461887, + "wireBytes": 12798896, + "latenciesMs": [ + 57.22816899999998, + 71.06716700000015, + 67.27516999999989, + 57.417178000000604, + 70.16900199999964, + 64.82004599999982, + 60.4577220000001, + 58.16478400000051, + 67.90412800000013, + 60.07063600000038, + 62.41555300000073, + 73.70610900000065, + 121.58892000000014, + 58.819924999999785, + 59.695764000000054, + 72.35016400000131 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 1102.9175320000013, + "requestsPerSecond": 14.506977662224687, + "p50Ms": 68.26128699999936, + "p95Ms": 97.30169900000146, + "maxMs": 97.30169900000146, + "ttfbP95Ms": 79.34610300000168, + "cpuMs": 1172.696, + "cpuMsPerRequest": 73.2935, + "peakRssMiB": 298.37890625, + "eventLoopP95Ms": 26.755071, + "wireBytes": 12798896, + "latenciesMs": [ + 53.53008799999952, + 53.60210999999981, + 55.54395300000033, + 68.26128699999936, + 73.98088800000005, + 65.6038150000004, + 68.62478999999985, + 68.38727300000028, + 97.30169900000146, + 60.52322599999934, + 62.905187000000296, + 58.69552900000053, + 88.28310799999963, + 72.26467899999989, + 68.492443000001, + 81.77631099999962 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 2066.7478360000005, + "requestsPerSecond": 15.483262855101396, + "p50Ms": 518.3572469999999, + "p95Ms": 632.5175650000001, + "maxMs": 665.9451040000004, + "ttfbP95Ms": 354.72332300000016, + "cpuMs": 1601.957, + "cpuMsPerRequest": 50.06115625, + "peakRssMiB": 297.26171875, + "eventLoopP95Ms": 70.713343, + "wireBytes": 25597792, + "latenciesMs": [ + 403.1136779999997, + 404.68631300000015, + 472.3097319999997, + 473.8375589999996, + 513.1568820000011, + 558.5696169999992, + 632.5175650000001, + 665.9451040000004, + 540.8559980000009, + 546.0680949999987, + 518.917453, + 518.3572469999999, + 533.2498799999994, + 522.4427820000001, + 519.6123079999998, + 532.936882, + 498.90051400000084, + 497.5042939999985, + 508.1282969999993, + 508.500951, + 532.1574120000005, + 524.6599340000012, + 553.8423739999998, + 539.8736630000003, + 529.7622969999993, + 529.0919180000001, + 513.1591450000014, + 513.208772, + 452.788235, + 436.326348999999, + 345.81436100000064, + 320.95980000000054 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 2075.829573000001, + "requestsPerSecond": 15.4155237097588, + "p50Ms": 491.5439529999985, + "p95Ms": 601.4713030000003, + "maxMs": 602.0362619999996, + "ttfbP95Ms": 482.8590660000009, + "cpuMs": 1447.504, + "cpuMsPerRequest": 45.2345, + "peakRssMiB": 297.609375, + "eventLoopP95Ms": 118.030335, + "wireBytes": 25597792, + "latenciesMs": [ + 371.15556800000013, + 371.8798570000017, + 372.5161769999995, + 373.1779029999998, + 373.73121700000047, + 374.7404769999994, + 375.5189420000006, + 417.1472730000005, + 573.0164480000003, + 573.3586720000003, + 574.0834270000014, + 574.1153599999998, + 574.1358869999985, + 574.3620260000007, + 574.556842, + 600.7564860000002, + 467.2486179999996, + 466.99697299999934, + 466.7649770000007, + 466.9674520000008, + 467.05097600000045, + 466.9306429999997, + 467.02344899999844, + 491.5439529999985, + 602.0362619999996, + 601.4713030000003, + 600.9836569999989, + 600.2750819999983, + 599.6444159999992, + 598.9951409999994, + 598.2950099999998, + 563.8158299999996 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 2097152, + "storedBytes": 799931, + "allocatedBytes": 806912, + "oldestAccess": 1793616390562, + "budgetBytes": 67108864, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 1, + "decisions": 0 + }, + "results": { + "blobs": 0, + "originalBytes": 0, + "storedBytes": 0, + "allocatedBytes": 0, + "oldestAccess": null, + "budgetBytes": 33554432, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 0, + "decisions": 1 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 186.68697599999996, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 1, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 168.20535599999994, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 1, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_unchanged", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 3062.672531, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 3345.961422, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "rewrite_unchanged_cached", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 799931, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 799931, + "uncompressedBytes": 2097152, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": true, + "mode": "uncached", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 2774.038285, + "ttfb": 2597.9061189999998, + "bytes": 799783, + "wallMs": 2798.6827190000004, + "cpuMs": 3619.235 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 4565.683196000001, + "requestsPerSecond": 3.504404338438903, + "p50Ms": 274.2541590000001, + "p95Ms": 420.03312000000005, + "maxMs": 420.03312000000005, + "ttfbP95Ms": 134.19271300000037, + "cpuMs": 6282.028, + "cpuMsPerRequest": 392.62675, + "peakRssMiB": 307.33203125, + "eventLoopP95Ms": 18.055167, + "wireBytes": 12796528, + "latenciesMs": [ + 283.06060999999954, + 256.70391199999995, + 420.03312000000005, + 324.0938619999997, + 219.41026800000145, + 229.30496200000016, + 275.88526900000033, + 299.7114730000012, + 266.5954149999998, + 287.5417840000009, + 269.4651840000006, + 268.89352399999916, + 306.058051, + 315.938497000001, + 274.2541590000001, + 264.00922700000046 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 4562.068482000001, + "requestsPerSecond": 3.507181021751264, + "p50Ms": 278.4588870000007, + "p95Ms": 389.91570500000125, + "maxMs": 389.91570500000125, + "ttfbP95Ms": 173.92514699999992, + "cpuMs": 6987.798, + "cpuMsPerRequest": 436.737375, + "peakRssMiB": 307.8671875, + "eventLoopP95Ms": 16.457727, + "wireBytes": 12796528, + "latenciesMs": [ + 278.4588870000007, + 281.1261119999999, + 276.71483699999953, + 267.17165399999976, + 303.3640860000014, + 297.20234399999936, + 336.1011980000003, + 237.7239950000003, + 234.67532000000028, + 230.4024759999993, + 268.6959630000001, + 266.40409999999974, + 278.7772109999987, + 314.15745100000095, + 389.91570500000125, + 296.96970800000054 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 3763.949913999999, + "requestsPerSecond": 8.501707177605129, + "p50Ms": 642.3229640000027, + "p95Ms": 1891.1214010000003, + "maxMs": 1897.2233629999992, + "ttfbP95Ms": 916.3905659999982, + "cpuMs": 8793.417, + "cpuMsPerRequest": 274.79428125, + "peakRssMiB": 334.265625, + "eventLoopP95Ms": 33.390591, + "wireBytes": 25593056, + "latenciesMs": [ + 585.0970179999986, + 895.3486280000016, + 1018.2763459999987, + 1355.6836719999992, + 1715.2360610000014, + 1809.3756510000003, + 1891.1214010000003, + 1897.2233629999992, + 1398.7761790000004, + 1167.688602000002, + 1168.4501710000004, + 996.0668119999973, + 693.5390260000022, + 620.7931790000002, + 606.4717660000024, + 613.2474760000005, + 559.0599509999993, + 616.8041739999971, + 554.2963109999982, + 542.1143300000003, + 527.588168000002, + 562.0766370000019, + 589.3005310000008, + 590.287260000001, + 645.2733240000016, + 528.1300869999977, + 516.6620939999993, + 648.4806160000007, + 699.688261000003, + 694.0526509999981, + 591.9850169999991, + 642.3229640000027 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 4464.133246000001, + "requestsPerSecond": 7.168244816319712, + "p50Ms": 943.7150479999982, + "p95Ms": 2383.4711220000027, + "maxMs": 2564.7161730000007, + "ttfbP95Ms": 1069.791956000001, + "cpuMs": 7528.7, + "cpuMsPerRequest": 235.271875, + "peakRssMiB": 344.96875, + "eventLoopP95Ms": 40.992767, + "wireBytes": 25593056, + "latenciesMs": [ + 621.2653050000008, + 1206.6532130000014, + 1423.5453089999974, + 1832.5023220000003, + 2046.5054729999974, + 2209.3857559999997, + 2383.4711220000027, + 2564.7161730000007, + 1969.9509609999986, + 1456.8782020000035, + 1276.2631309999997, + 953.9767490000013, + 829.3892869999981, + 724.7871249999989, + 720.6520100000016, + 846.5432090000031, + 943.7150479999982, + 932.4818950000008, + 973.3836909999991, + 1015.0577439999979, + 1055.6564450000005, + 1095.3947520000002, + 984.5571280000004, + 738.495046, + 721.8328809999985, + 674.4723830000003, + 648.989289000001, + 563.4289619999981, + 477.54974799999763, + 386.9273269999976, + 356.5293180000008, + 312.0217709999997 + ] + } + ], + "upstreamFills": 100, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_changed", + "traffic": "background", + "count": 100, + "bytes": 209715200, + "ms": 14106.692828999992, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 81, + "b4": 18, + "b5": 1, + "b6": 0 + } + ], + "wireBytesPerResponse": 799783, + "uncompressedBytes": 2115777, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": true, + "mode": "raw-source", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 2615.989493, + "ttfb": 2444.515824, + "bytes": 799783, + "wallMs": 2649.8548960000003, + "cpuMs": 3475.536 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 5036.2679530000005, + "requestsPerSecond": 3.1769556642571275, + "p50Ms": 306.2200620000003, + "p95Ms": 466.43938699999944, + "maxMs": 466.43938699999944, + "ttfbP95Ms": 274.94479599999977, + "cpuMs": 8468.332, + "cpuMsPerRequest": 529.27075, + "peakRssMiB": 323.375, + "eventLoopP95Ms": 13.131775, + "wireBytes": 12796528, + "latenciesMs": [ + 358.42220799999996, + 466.43938699999944, + 306.2200620000003, + 309.9064209999997, + 311.4749950000005, + 349.3037430000004, + 281.56235899999956, + 280.5527889999994, + 318.3230679999997, + 283.138336, + 327.2814159999998, + 380.799497, + 253.68926499999907, + 254.79970499999945, + 278.0785589999996, + 270.419946 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 4384.659917999999, + "requestsPerSecond": 3.649085744213926, + "p50Ms": 276.08500099999947, + "p95Ms": 304.80936999999903, + "maxMs": 304.80936999999903, + "ttfbP95Ms": 132.10793100000046, + "cpuMs": 7704.723, + "cpuMsPerRequest": 481.5451875, + "peakRssMiB": 322.7109375, + "eventLoopP95Ms": 12.189695, + "wireBytes": 12796528, + "latenciesMs": [ + 281.0129889999989, + 304.80936999999903, + 284.74092700000074, + 276.44833199999994, + 215.5137080000004, + 256.5771300000015, + 277.10722800000076, + 267.7774329999993, + 257.50127500000053, + 276.08500099999947, + 267.72781600000053, + 291.04277, + 265.72084200000063, + 302.3293730000005, + 255.32564499999899, + 301.3845770000007 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 2939.360203000002, + "requestsPerSecond": 10.886722888654411, + "p50Ms": 639.1074150000022, + "p95Ms": 1030.1982129999997, + "maxMs": 1051.3689330000016, + "ttfbP95Ms": 609.9967399999987, + "cpuMs": 12314.919, + "cpuMsPerRequest": 384.84121875, + "peakRssMiB": 351.0859375, + "eventLoopP95Ms": 17.334271, + "wireBytes": 25593056, + "latenciesMs": [ + 518.395582000001, + 604.5357820000008, + 679.775843999998, + 796.5316309999998, + 888.3337449999999, + 943.1170270000002, + 1030.1982129999997, + 1051.3689330000016, + 646.761946999999, + 662.7782200000001, + 677.7815439999977, + 646.0964230000027, + 584.1212699999996, + 607.8913309999989, + 614.7159759999995, + 660.6368540000003, + 612.4084040000016, + 629.9008649999996, + 681.9714800000002, + 719.8945139999996, + 743.1802859999989, + 718.0725629999979, + 653.2100189999983, + 610.5960699999996, + 639.1074150000022, + 621.3749190000017, + 566.8207090000033, + 532.8076639999999, + 541.9159569999974, + 579.9428169999992, + 602.0339950000016, + 609.1603009999999 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 2880.9861850000016, + "requestsPerSecond": 11.107307687419537, + "p50Ms": 647.521979000001, + "p95Ms": 924.2929980000008, + "maxMs": 948.1463260000019, + "ttfbP95Ms": 597.7670900000012, + "cpuMs": 12401.044, + "cpuMsPerRequest": 387.532625, + "peakRssMiB": 369.05078125, + "eventLoopP95Ms": 13.869055, + "wireBytes": 25593056, + "latenciesMs": [ + 567.3561499999996, + 647.4130580000019, + 727.9359939999995, + 793.8966480000017, + 838.7892260000008, + 889.1527209999986, + 924.2929980000008, + 948.1463260000019, + 600.2440540000025, + 603.9330999999984, + 609.145833999999, + 616.9262229999986, + 646.9959309999977, + 633.166118000001, + 647.521979000001, + 681.3248249999997, + 639.7564839999977, + 701.2402809999985, + 695.448550000001, + 691.5970699999998, + 665.8903140000002, + 664.7029729999995, + 658.9048909999983, + 724.5015729999977, + 710.3877300000022, + 691.4868989999995, + 640.8719779999992, + 637.4657340000012, + 636.6789749999989, + 623.2474309999998, + 602.442549000003, + 524.5295360000018 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_changed", + "traffic": "background", + "count": 100, + "bytes": 209715200, + "ms": 8848.299697000013, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 86, + "b4": 13, + "b5": 1, + "b6": 0 + } + ], + "wireBytesPerResponse": 799783, + "uncompressedBytes": 2115777, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": true, + "mode": "shared", + "encoding": "gzip", + "binary": false, + "cold": { + "ms": 4133.51807, + "ttfb": 4105.818363, + "bytes": 799783, + "wallMs": 4177.053556999999, + "cpuMs": 4601.785 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 1098.5233150000004, + "requestsPerSecond": 14.565007206970382, + "p50Ms": 62.537617999998474, + "p95Ms": 115.98030499999913, + "maxMs": 115.98030499999913, + "ttfbP95Ms": 99.83405799999855, + "cpuMs": 647.711, + "cpuMsPerRequest": 40.4819375, + "peakRssMiB": 295.0625, + "eventLoopP95Ms": 23.511039, + "wireBytes": 12796528, + "latenciesMs": [ + 56.16949300000033, + 67.81722300000001, + 67.1145549999992, + 100.03485599999931, + 61.43368499999997, + 59.53060499999992, + 64.14640000000054, + 59.725022999999965, + 63.78020900000047, + 59.04901500000051, + 59.96269899999879, + 65.9801179999995, + 115.98030499999913, + 59.89829699999973, + 62.537617999998474, + 69.78213200000027 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 985.0273699999998, + "requestsPerSecond": 16.24320347565571, + "p50Ms": 59.51909599999999, + "p95Ms": 73.28237600000102, + "maxMs": 73.28237600000102, + "ttfbP95Ms": 56.530181000000084, + "cpuMs": 959.036, + "cpuMsPerRequest": 59.93975, + "peakRssMiB": 298.671875, + "eventLoopP95Ms": 22.740991, + "wireBytes": 12796528, + "latenciesMs": [ + 52.752048000000286, + 59.51909599999999, + 58.946334999998726, + 61.1172579999984, + 58.38249699999869, + 65.23478799999975, + 73.28237600000102, + 65.02546900000016, + 59.076521999999386, + 56.99174700000003, + 60.18791600000077, + 71.3982560000004, + 58.60535300000083, + 61.07317800000055, + 58.85956000000078, + 60.49789199999941 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 1954.3340380000009, + "requestsPerSecond": 16.373864128543612, + "p50Ms": 478.30868799999917, + "p95Ms": 632.6496230000012, + "maxMs": 677.5356080000001, + "ttfbP95Ms": 343.6619989999999, + "cpuMs": 1877.199, + "cpuMsPerRequest": 58.66246875, + "peakRssMiB": 296.6875, + "eventLoopP95Ms": 53.739519, + "wireBytes": 25593056, + "latenciesMs": [ + 390.96803700000055, + 392.5178029999988, + 421.6792400000013, + 454.94918099999995, + 511.57485899999847, + 561.0471089999992, + 632.6496230000012, + 677.5356080000001, + 528.2149260000006, + 527.6841850000001, + 520.9727640000001, + 515.9338190000017, + 515.6554150000011, + 498.23469999999907, + 477.2951540000013, + 481.4859120000001, + 478.30868799999917, + 478.8022369999999, + 478.1551070000005, + 487.4698879999996, + 480.3990050000011, + 484.40064600000005, + 482.0873109999993, + 471.6002520000002, + 460.01162600000134, + 459.3364039999997, + 463.01108999999997, + 437.91399699999965, + 400.7985580000004, + 386.94794100000036, + 348.44693799999914, + 318.4566020000002 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 1928.3079290000005, + "requestsPerSecond": 16.59485993847199, + "p50Ms": 460.02702899999895, + "p95Ms": 517.5844370000013, + "maxMs": 518.0784760000006, + "ttfbP95Ms": 365.4734669999998, + "cpuMs": 1684.159, + "cpuMsPerRequest": 52.62996875, + "peakRssMiB": 296.61328125, + "eventLoopP95Ms": 115.015679, + "wireBytes": 25593056, + "latenciesMs": [ + 390.607113, + 391.3720570000005, + 392.2259959999992, + 393.1865710000002, + 394.0358929999984, + 394.89413500000046, + 395.72629100000086, + 450.7987559999983, + 505.34500300000036, + 505.8497609999995, + 505.80685300000005, + 505.5900709999987, + 505.4325750000007, + 505.3257849999991, + 505.4023479999996, + 516.7643150000004, + 459.9411569999993, + 459.80340700000124, + 459.8679229999998, + 459.9083069999997, + 460.02702899999895, + 459.9273200000007, + 460.01698899999974, + 452.633366, + 518.0784760000006, + 517.5844370000013, + 517.0031449999988, + 516.5464030000003, + 515.9739840000002, + 515.7900609999997, + 515.1902529999988, + 505.2450489999992 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 2097152, + "storedBytes": 799931, + "allocatedBytes": 806912, + "oldestAccess": 1793616451382, + "budgetBytes": 67108864, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 0, + "decisions": 0 + }, + "results": { + "blobs": 1, + "originalBytes": 2115777, + "storedBytes": 799783, + "allocatedBytes": 802816, + "oldestAccess": 1793616454879, + "budgetBytes": 33554432, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 1, + "decisions": 1 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 4212929, + "ms": 375.53081100000054, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 2, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 236.3021260000005, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 1, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 2693.681316, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 2115777, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 799783, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 3065.313115, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 799931, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 799783, + "uncompressedBytes": 2115777, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": true, + "mode": "shared", + "encoding": "identity", + "binary": false, + "cold": { + "ms": 847.68426, + "ttfb": 833.8569710000002, + "bytes": 264491, + "wallMs": 853.0616030000001, + "cpuMs": 560.663 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 938.6548359999997, + "requestsPerSecond": 17.045669383841542, + "p50Ms": 55.97203100000024, + "p95Ms": 73.99945200000002, + "maxMs": 73.99945200000002, + "ttfbP95Ms": 60.856898, + "cpuMs": 538.006, + "cpuMsPerRequest": 33.625375, + "peakRssMiB": 166.33203125, + "eventLoopP95Ms": 23.887871, + "wireBytes": 4231856, + "latenciesMs": [ + 55.544676999999865, + 63.483901000000515, + 45.86671800000022, + 54.42621000000054, + 66.48794099999941, + 73.99945200000002, + 55.913031999999475, + 54.901794999999765, + 57.97167900000022, + 54.48050600000079, + 59.02478299999984, + 54.33507000000009, + 55.97203100000024, + 58.207222, + 63.32894599999963, + 59.93752399999994 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 885.867037, + "requestsPerSecond": 18.06140123938261, + "p50Ms": 51.56672600000002, + "p95Ms": 76.41103800000019, + "maxMs": 76.41103800000019, + "ttfbP95Ms": 55.08843699999943, + "cpuMs": 495.814, + "cpuMsPerRequest": 30.988375, + "peakRssMiB": 182.5703125, + "eventLoopP95Ms": 23.871487, + "wireBytes": 4231856, + "latenciesMs": [ + 51.56672600000002, + 76.41103800000019, + 56.72054200000002, + 48.85230500000034, + 54.77613099999962, + 70.69718599999942, + 48.52773900000011, + 58.13392400000066, + 53.54081200000019, + 70.6205059999993, + 45.36269100000027, + 57.18611500000043, + 43.21563699999933, + 50.51249100000041, + 49.052576000000045, + 46.778933999999936 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 1726.9123990000007, + "requestsPerSecond": 18.5301813910944, + "p50Ms": 430.2895209999997, + "p95Ms": 521.4703719999998, + "maxMs": 570.4238839999998, + "ttfbP95Ms": 355.71187999999984, + "cpuMs": 1085.553, + "cpuMsPerRequest": 33.92353125, + "peakRssMiB": 206.80859375, + "eventLoopP95Ms": 51.085311, + "wireBytes": 8463712, + "latenciesMs": [ + 326.3152849999997, + 339.7492339999999, + 361.17769300000054, + 396.918858, + 433.10739099999955, + 476.63700699999936, + 521.4703719999998, + 570.4238839999998, + 435.813255, + 434.79417999999987, + 432.3305899999996, + 432.64649200000076, + 432.40692599999966, + 430.2895209999997, + 426.8219990000007, + 424.17936499999996, + 426.42177100000026, + 426.62182499999926, + 426.12418199999956, + 421.9816929999997, + 428.46332099999927, + 437.76221799999985, + 454.4767589999992, + 457.8489180000006, + 461.316092, + 462.06927799999994, + 454.5653940000002, + 433.4097979999997, + 400.6650490000002, + 359.45008699999926, + 310.9484190000003, + 269.96401400000013 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 1893.9079319999992, + "requestsPerSecond": 16.89628067939261, + "p50Ms": 447.9941629999994, + "p95Ms": 595.5397090000006, + "maxMs": 596.072807999999, + "ttfbP95Ms": 445.2943489999998, + "cpuMs": 1329.012, + "cpuMsPerRequest": 41.531625, + "peakRssMiB": 209.7734375, + "eventLoopP95Ms": 130.875391, + "wireBytes": 8463712, + "latenciesMs": [ + 388.93809500000043, + 389.9219489999996, + 390.62640400000055, + 391.32796600000074, + 392.0606739999994, + 392.740366, + 393.57584700000007, + 447.9941629999994, + 509.5175489999983, + 508.8547039999994, + 592.6407660000004, + 595.5397090000006, + 593.2299610000009, + 593.1457739999987, + 596.072807999999, + 540.7829920000004, + 486.5718679999991, + 486.4500100000005, + 562.2128560000001, + 562.428774, + 562.0080940000007, + 561.5576099999998, + 561.0725689999999, + 560.4633880000001, + 439.73965099999987, + 439.1429329999992, + 304.95830399999977, + 304.45285499999954, + 304.21140099999866, + 304.0565779999997, + 303.9413690000001, + 342.683798 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 262144, + "storedBytes": 100827, + "allocatedBytes": 102400, + "oldestAccess": 1793616464897, + "budgetBytes": 67108864, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 0, + "decisions": 0 + }, + "results": { + "blobs": 1, + "originalBytes": 264491, + "storedBytes": 100797, + "allocatedBytes": 102400, + "oldestAccess": 1793616465341, + "budgetBytes": 33554432, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 1, + "decisions": 1 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 526635, + "ms": 62.453798000000006, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 2, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 100, + "bytes": 26446753, + "ms": 13851.615129999996, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 37, + "b4": 63, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 12.358991999999944, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 264491, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 100797, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 190.44990600000028, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 1, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 100827, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 264491, + "uncompressedBytes": 264491, + "verifiedResponses": 100 + }, + { + "size": 2097152, + "changed": true, + "mode": "shared", + "encoding": "identity", + "binary": false, + "cold": { + "ms": 4240.267206, + "ttfb": 4145.759511, + "bytes": 2115777, + "wallMs": 4251.708791999999, + "cpuMs": 5035.175 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 2231.356296000001, + "requestsPerSecond": 7.170526745855021, + "p50Ms": 130.5677420000011, + "p95Ms": 176.00814399999945, + "maxMs": 176.00814399999945, + "ttfbP95Ms": 88.37793199999942, + "cpuMs": 3476.684, + "cpuMsPerRequest": 217.29275, + "peakRssMiB": 310.72265625, + "eventLoopP95Ms": 21.905407, + "wireBytes": 33852432, + "latenciesMs": [ + 128.49011500000051, + 113.7801789999994, + 155.8555550000001, + 118.1585869999999, + 161.0120539999989, + 138.8835280000003, + 150.15874900000017, + 124.10614700000042, + 127.72065699999985, + 160.09266799999932, + 152.5031340000005, + 176.00814399999945, + 165.35211999999956, + 97.89141100000052, + 130.5677420000011, + 124.4235379999991 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 2246.2807080000002, + "requestsPerSecond": 7.122885373594189, + "p50Ms": 126.04760300000089, + "p95Ms": 261.0463170000003, + "maxMs": 261.0463170000003, + "ttfbP95Ms": 194.95034000000123, + "cpuMs": 3670.129, + "cpuMsPerRequest": 229.3830625, + "peakRssMiB": 309.8046875, + "eventLoopP95Ms": 26.705919, + "wireBytes": 33852432, + "latenciesMs": [ + 128.9333119999992, + 122.7720070000014, + 121.05488100000002, + 117.38205500000004, + 261.0463170000003, + 126.04760300000089, + 98.23796000000038, + 177.01260100000036, + 177.4094010000008, + 139.46454900000026, + 163.95187199999964, + 144.7291150000001, + 111.81921900000088, + 118.32826999999997, + 128.02469500000007, + 104.90130899999895 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 3610.293276999999, + "requestsPerSecond": 8.863545852039657, + "p50Ms": 880.8065259999985, + "p95Ms": 1045.4587119999997, + "maxMs": 1092.9498270000004, + "ttfbP95Ms": 337.26380699999936, + "cpuMs": 5352.973, + "cpuMsPerRequest": 167.28040625, + "peakRssMiB": 311.42578125, + "eventLoopP95Ms": 39.092223, + "wireBytes": 67704864, + "latenciesMs": [ + 854.7126389999994, + 873.5414430000001, + 890.9284610000013, + 922.8263139999999, + 952.1137870000002, + 989.2693469999995, + 1045.4587119999997, + 1092.9498270000004, + 827.2293980000013, + 822.5472090000003, + 831.7749289999992, + 836.574829000001, + 844.5174879999995, + 848.914757999999, + 842.8402960000003, + 833.3174620000009, + 877.6528830000007, + 880.8065259999985, + 873.8623820000012, + 884.142120999999, + 891.0706649999993, + 897.9656350000005, + 894.636289, + 896.8272919999999, + 959.0281510000004, + 966.3807809999998, + 954.7249360000005, + 917.2453580000001, + 884.2882710000013, + 802.3924480000005, + 866.041455999999, + 778.7517040000002 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 3221.3455169999997, + "requestsPerSecond": 9.933737263241856, + "p50Ms": 799.9613860000027, + "p95Ms": 855.833677999999, + "maxMs": 856.6374830000022, + "ttfbP95Ms": 313.0207130000017, + "cpuMs": 4646.469, + "cpuMsPerRequest": 145.20215625, + "peakRssMiB": 281.73828125, + "eventLoopP95Ms": 50.757631, + "wireBytes": 67704864, + "latenciesMs": [ + 691.8691729999991, + 723.5529839999999, + 723.5534890000017, + 724.5756029999993, + 725.4801609999995, + 770.5103470000013, + 771.304282000001, + 772.1541000000016, + 799.9613860000027, + 778.0645320000003, + 778.3426239999972, + 778.4286580000007, + 781.9869319999998, + 771.7980169999973, + 771.9096559999998, + 772.0715640000017, + 843.5909690000008, + 844.4422290000002, + 846.5245719999984, + 846.1335359999975, + 849.9244069999986, + 854.2954329999993, + 856.6374830000022, + 855.833677999999, + 824.628085999997, + 825.6792700000005, + 823.8508430000002, + 827.848624000002, + 825.8247240000019, + 819.9240890000001, + 819.4293999999973, + 819.0379329999996 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 2097152, + "storedBytes": 799931, + "allocatedBytes": 806912, + "oldestAccess": 1793616474908, + "budgetBytes": 67108864, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 0, + "decisions": 0 + }, + "results": { + "blobs": 1, + "originalBytes": 2115777, + "storedBytes": 799783, + "allocatedBytes": 802816, + "oldestAccess": 1793616478461, + "budgetBytes": 33554432, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 3, + "decisions": 1 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 2, + "bytes": 4212929, + "ms": 340.3119409999995, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 2, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "background", + "count": 98, + "bytes": 207327521, + "ms": 43162.62504299999, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 30, + "b4": 68, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 2913.9641959999994, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "background", + "count": 1, + "bytes": 2115777, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "background", + "count": 1, + "bytes": 799783, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 3198.1706090000002, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 1, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 2097152, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 207618048, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 799931, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 2115777, + "uncompressedBytes": 2115777, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": false, + "mode": "raw-source", + "encoding": "gzip", + "binary": true, + "cold": { + "ms": 170.32001999999966, + "ttfb": 131.06223999999975, + "bytes": 262244, + "wallMs": 176.19916299999977, + "cpuMs": 402.035 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 517.2038039999998, + "requestsPerSecond": 30.935580667152262, + "p50Ms": 29.39597999999978, + "p95Ms": 39.142167999999856, + "maxMs": 39.142167999999856, + "ttfbP95Ms": 9.69939499999964, + "cpuMs": 768.091, + "cpuMsPerRequest": 48.0056875, + "peakRssMiB": 163.54296875, + "eventLoopP95Ms": 11.116543, + "wireBytes": 4195904, + "latenciesMs": [ + 37.46068800000012, + 36.55674399999998, + 39.142167999999856, + 38.91417499999989, + 36.43857399999979, + 30.30164599999989, + 28.943894, + 28.025067000000035, + 28.977859999999964, + 28.22457600000007, + 28.159047999999984, + 28.724547999999686, + 28.77209700000003, + 29.39597999999978, + 31.735525000000052, + 32.5152579999999 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 485.2944130000001, + "requestsPerSecond": 32.96967690415178, + "p50Ms": 29.315813000000162, + "p95Ms": 33.34162699999979, + "maxMs": 33.34162699999979, + "ttfbP95Ms": 5.16385900000023, + "cpuMs": 698.488, + "cpuMsPerRequest": 43.6555, + "peakRssMiB": 180.81640625, + "eventLoopP95Ms": 11.329535, + "wireBytes": 4195904, + "latenciesMs": [ + 32.83607800000027, + 32.19794700000011, + 30.905816999999843, + 30.449981000000207, + 30.00793900000008, + 28.641755000000103, + 26.292233000000124, + 27.917050000000017, + 29.090839999999844, + 28.986617000000024, + 28.978868000000148, + 29.071312999999463, + 32.59869600000002, + 29.315813000000162, + 30.71487100000013, + 33.34162699999979 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 355.6662189999997, + "requestsPerSecond": 89.9719970312953, + "p50Ms": 92.13386399999945, + "p95Ms": 111.28506500000003, + "maxMs": 112.80149600000004, + "ttfbP95Ms": 34.86628400000063, + "cpuMs": 1249.591, + "cpuMsPerRequest": 39.04971875, + "peakRssMiB": 206.68359375, + "eventLoopP95Ms": 12.591103, + "wireBytes": 8391808, + "latenciesMs": [ + 86.64660300000014, + 94.27317400000084, + 94.63870299999962, + 98.02339799999936, + 103.12502600000062, + 110.61554200000046, + 111.28506500000003, + 112.80149600000004, + 92.55129600000055, + 89.97783600000002, + 90.36360299999978, + 92.13386399999945, + 97.85559399999966, + 90.70342299999993, + 90.50421000000006, + 95.48344699999961, + 85.46388900000056, + 98.32922600000074, + 100.38465700000052, + 99.34843300000011, + 92.85589999999956, + 92.58622299999934, + 92.54420500000015, + 91.5417379999999, + 75.31795299999976, + 60.604715999999826, + 62.83678899999995, + 58.74855100000059, + 56.98819899999944, + 58.28098600000067, + 57.28162599999996, + 52.535947999999735 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 240.38187600000037, + "requestsPerSecond": 133.12151703150843, + "p50Ms": 58.698615999999674, + "p95Ms": 68.41135200000008, + "maxMs": 71.3955420000002, + "ttfbP95Ms": 15.646375999999691, + "cpuMs": 1105.851, + "cpuMsPerRequest": 34.55784375, + "peakRssMiB": 208.640625, + "eventLoopP95Ms": 16.408575, + "wireBytes": 8391808, + "latenciesMs": [ + 60.07503900000029, + 63.03193900000042, + 65.1338679999999, + 66.08322399999997, + 66.4172580000004, + 67.71732500000053, + 68.07509500000015, + 71.3955420000002, + 66.00560299999961, + 65.24226399999952, + 65.35982999999942, + 65.34114000000045, + 67.50921699999981, + 66.21713199999976, + 68.41135200000008, + 67.51799800000026, + 54.50553299999956, + 58.44198899999992, + 55.63447499999984, + 56.76060799999959, + 55.250474000000395, + 53.11564300000009, + 58.698615999999674, + 57.195668000000296, + 49.950450000000274, + 49.61188500000026, + 50.24023699999998, + 50.94201599999997, + 48.35015300000032, + 49.032532000000174, + 46.66071499999998, + 43.05025000000023 + ] + } + ], + "upstreamFills": 1, + "source": null, + "results": null, + "metrics": [ + { + "name": "inspected_binary", + "traffic": "background", + "count": 100, + "bytes": 26214400, + "ms": 0, + "b0": 100, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 262244, + "uncompressedBytes": 262144, + "verifiedResponses": 100 + }, + { + "size": 262144, + "changed": false, + "mode": "shared", + "encoding": "gzip", + "binary": true, + "cold": { + "ms": 598.9634350000001, + "ttfb": 588.9748979999999, + "bytes": 262144, + "wallMs": 605.8834300000003, + "cpuMs": 237.723 + }, + "batches": [ + { + "concurrency": 1, + "repeat": 0, + "requests": 16, + "elapsedMs": 844.545318, + "requestsPerSecond": 18.9451053235251, + "p50Ms": 49.0220249999993, + "p95Ms": 141.09141699999964, + "maxMs": 141.09141699999964, + "ttfbP95Ms": 134.85506199999963, + "cpuMs": 306.972, + "cpuMsPerRequest": 19.18575, + "peakRssMiB": 150.93359375, + "eventLoopP95Ms": 23.183359, + "wireBytes": 4194304, + "latenciesMs": [ + 141.09141699999964, + 53.14151699999957, + 54.77165299999979, + 51.98720599999979, + 50.543478999999934, + 49.0220249999993, + 51.08096399999977, + 49.19204500000069, + 50.44716900000003, + 47.512259999999515, + 39.50681200000054, + 39.75322299999971, + 39.101698999999826, + 39.66549099999975, + 41.243421999999555, + 41.74792200000047 + ] + }, + { + "concurrency": 1, + "repeat": 1, + "requests": 16, + "elapsedMs": 842.117158, + "requestsPerSecond": 18.99973162641581, + "p50Ms": 50.5151249999999, + "p95Ms": 74.68197400000008, + "maxMs": 74.68197400000008, + "ttfbP95Ms": 68.0824990000001, + "cpuMs": 365.919, + "cpuMsPerRequest": 22.8699375, + "peakRssMiB": 166.40234375, + "eventLoopP95Ms": 24.395775, + "wireBytes": 4194304, + "latenciesMs": [ + 38.87878999999975, + 49.12782399999924, + 55.982866000000286, + 57.38786400000026, + 74.68197400000008, + 54.27242000000024, + 51.510269999999764, + 51.949359000000186, + 50.3580409999995, + 55.410007999999834, + 47.9133410000004, + 53.837187000000085, + 50.5151249999999, + 49.6673980000005, + 47.12981300000047, + 48.29386000000068 + ] + }, + { + "concurrency": 8, + "repeat": 0, + "requests": 32, + "elapsedMs": 1621.614431, + "requestsPerSecond": 19.733420835596892, + "p50Ms": 381.8650580000003, + "p95Ms": 555.8119690000003, + "maxMs": 606.3601979999994, + "ttfbP95Ms": 429.7561230000001, + "cpuMs": 604.218, + "cpuMsPerRequest": 18.8818125, + "peakRssMiB": 196.82421875, + "eventLoopP95Ms": 56.393727, + "wireBytes": 8388608, + "latenciesMs": [ + 295.17150500000025, + 359.4349089999996, + 398.9586160000008, + 430.89436600000045, + 472.5974409999999, + 519.7597610000003, + 555.8119690000003, + 606.3601979999994, + 364.5856680000006, + 379.4638160000004, + 370.58040900000015, + 375.1117830000003, + 384.66923700000007, + 380.4005299999999, + 381.8650580000003, + 376.32448899999963, + 372.4201350000003, + 391.9840029999996, + 395.53422799999953, + 390.02938300000005, + 386.69493499999953, + 389.62726499999917, + 391.26285000000007, + 403.9490970000006, + 422.0761220000004, + 396.97904000000017, + 376.7110329999996, + 367.9533189999993, + 338.9048790000006, + 304.3846940000003, + 276.998294, + 228.19124399999964 + ] + }, + { + "concurrency": 8, + "repeat": 1, + "requests": 32, + "elapsedMs": 1630.0928800000002, + "requestsPerSecond": 19.630783247148468, + "p50Ms": 360.09912299999996, + "p95Ms": 530.6982509999998, + "maxMs": 530.7177570000003, + "ttfbP95Ms": 508.2723479999995, + "cpuMs": 923.192, + "cpuMsPerRequest": 28.84975, + "peakRssMiB": 209.1640625, + "eventLoopP95Ms": 172.621823, + "wireBytes": 8388608, + "latenciesMs": [ + 273.9545340000004, + 276.4535679999999, + 278.93686400000024, + 281.56293800000003, + 284.0881079999999, + 286.74519899999996, + 289.22213100000045, + 294.9487589999999, + 530.7177570000003, + 530.6982509999998, + 529.9272559999999, + 528.9417779999994, + 528.0503559999997, + 524.6448369999998, + 529.766877, + 525.6965410000003, + 449.6584759999996, + 450.51184099999955, + 451.9970979999998, + 453.2242379999998, + 454.48194499999954, + 454.6217450000004, + 454.30000199999904, + 456.56114400000024, + 360.09912299999996, + 358.4874949999994, + 356.935614, + 355.4511390000007, + 353.9853579999999, + 353.5865329999997, + 352.92556799999875, + 350.4371740000006 + ] + } + ], + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 262144, + "storedBytes": 262144, + "allocatedBytes": 262144, + "oldestAccess": 1793616499020, + "budgetBytes": 67108864, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 8, + "decisions": 0 + }, + "results": { + "blobs": 0, + "originalBytes": 0, + "storedBytes": 0, + "allocatedBytes": 0, + "oldestAccess": null, + "budgetBytes": 33554432, + "reservedBytes": 0, + "maxObjectBytes": 4194304, + "activeReaders": 0, + "decisions": 1 + }, + "metrics": [ + { + "name": "compress", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 35.68100200000026, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_binary", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged_cached", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "background", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "background", + "count": 99, + "bytes": 25952256, + "ms": 0, + "b0": 99, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "background", + "count": 1, + "bytes": 262144, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "wireBytesPerResponse": 262144, + "uncompressedBytes": 262144, + "verifiedResponses": 100 + } + ], + "completedAt": "2026-11-02T10:48:24.664Z", + "assertions": "All 2200 response bodies verified against expected output or the validated wire digest" +} diff --git a/docs/cache-performance-summary.json b/docs/cache-performance-summary.json new file mode 100644 index 0000000..fc1f13c --- /dev/null +++ b/docs/cache-performance-summary.json @@ -0,0 +1,301 @@ +{ + "measuredAt": "2026-11-02T10:48:24.664Z", + "runtime": { + "execution": "compiled JavaScript", + "node": "v24.14.1", + "platform": "linux", + "arch": "x64", + "cpu": "Intel Xeon E312xx (Sandy Bridge, IBRS update)", + "logicalCpus": 12, + "totalMemoryGiB": 35.22977066040039, + "loadAverage": [ + 2.19, + 3.52, + 3.52 + ] + }, + "scope": "Compiled local loopback HTTP; changed text; 32 serial and 64 concurrency-8 warm samples per scenario. Percentiles pooled across two batches. CPU/RSS include client and server. Experimental NORMAL affects disposable benchmark databases only.", + "verifiedHttpResponses": 2700, + "rows": [ + { + "sizeBytes": 16384, + "label": "16 KiB", + "baseline": "raw source cache", + "baselineMetrics": { + "coldMs": 145.9149209999996, + "serial": { + "p50Ms": 8.318075000000135, + "p95Ms": 10.736985999999888, + "requestsPerSecond": 117.44442918645578, + "cpuMsPerRequest": 11.06740625, + "peakRssMiB": 146.50390625 + }, + "concurrent8": { + "p50Ms": 50.20099499999969, + "p95Ms": 71.84271200000012, + "requestsPerSecond": 142.73942902734086, + "cpuMsPerRequest": 9.620406249999998, + "peakRssMiB": 170.53125 + } + }, + "currentMetrics": { + "coldMs": 709.8329450000001, + "serial": { + "p50Ms": 44.88915300000008, + "p95Ms": 68.10151200000018, + "requestsPerSecond": 20.710932531095363, + "cpuMsPerRequest": 13.53253125, + "peakRssMiB": 147.47265625 + }, + "concurrent8": { + "p50Ms": 362.3927130000002, + "p95Ms": 462.1094459999995, + "requestsPerSecond": 20.755357071571403, + "cpuMsPerRequest": 11.042078125, + "peakRssMiB": 154.1328125 + } + }, + "experimentalNormalMetrics": { + "coldMs": 211.99763500000017, + "serial": { + "p50Ms": 6.900600000000395, + "p95Ms": 9.86466399999972, + "requestsPerSecond": 134.73985687410286, + "cpuMsPerRequest": 8.7118125, + "peakRssMiB": 141.24609375 + }, + "concurrent8": { + "p50Ms": 38.635037999999895, + "p95Ms": 46.82847199999969, + "requestsPerSecond": 197.41218048206238, + "cpuMsPerRequest": 6.15025, + "peakRssMiB": 147.6875 + } + }, + "gzipSavingPercent": 61.97907215871288 + }, + { + "sizeBytes": 262144, + "label": "256 KiB", + "baseline": "raw source cache", + "baselineMetrics": { + "coldMs": 100.41967600000021, + "serial": { + "p50Ms": 36.49021599999992, + "p95Ms": 53.95963900000015, + "requestsPerSecond": 26.236596142201567, + "cpuMsPerRequest": 42.746187500000005, + "peakRssMiB": 215.1875 + }, + "concurrent8": { + "p50Ms": 120.57758600000034, + "p95Ms": 250.78685799999994, + "requestsPerSecond": 53.7503475211922, + "cpuMsPerRequest": 37.485390625, + "peakRssMiB": 268.109375 + } + }, + "currentMetrics": { + "coldMs": 726.5002400000001, + "serial": { + "p50Ms": 45.89932399999998, + "p95Ms": 73.79595599999993, + "requestsPerSecond": 20.372770202529612, + "cpuMsPerRequest": 16.253875, + "peakRssMiB": 160.78515625 + }, + "concurrent8": { + "p50Ms": 326.38565800000015, + "p95Ms": 444.0948499999995, + "requestsPerSecond": 23.057422718927143, + "cpuMsPerRequest": 12.072328124999999, + "peakRssMiB": 185.7578125 + } + }, + "experimentalNormalMetrics": { + "coldMs": 293.5069330000001, + "serial": { + "p50Ms": 11.702889000000141, + "p95Ms": 16.41937599999983, + "requestsPerSecond": 80.13277379588973, + "cpuMsPerRequest": 14.18359375, + "peakRssMiB": 160.62890625 + }, + "concurrent8": { + "p50Ms": 72.28398599999946, + "p95Ms": 89.62643300000036, + "requestsPerSecond": 105.43423551997391, + "cpuMsPerRequest": 11.027765625, + "peakRssMiB": 185.6328125 + } + }, + "gzipSavingPercent": 61.890196641851716 + }, + { + "sizeBytes": 2097152, + "label": "2 MiB", + "baseline": "existing transformed cache", + "baselineMetrics": { + "coldMs": 2903.1252619999996, + "serial": { + "p50Ms": 236.22282199999972, + "p95Ms": 288.4866490000004, + "requestsPerSecond": 4.133831174669408, + "cpuMsPerRequest": 362.9403125, + "peakRssMiB": 336.703125 + }, + "concurrent8": { + "p50Ms": 690.5366940000022, + "p95Ms": 929.2231830000001, + "requestsPerSecond": 10.958910900736049, + "cpuMsPerRequest": 253.19115625, + "peakRssMiB": 308.02734375 + } + }, + "currentMetrics": { + "coldMs": 4133.51807, + "serial": { + "p50Ms": 60.49789199999941, + "p95Ms": 100.03485599999931, + "requestsPerSecond": 15.358397676800456, + "cpuMsPerRequest": 50.210843749999995, + "peakRssMiB": 298.671875 + }, + "concurrent8": { + "p50Ms": 478.30868799999917, + "p95Ms": 528.2149260000006, + "requestsPerSecond": 16.483621344424616, + "cpuMsPerRequest": 55.64621875, + "peakRssMiB": 296.6875 + } + }, + "experimentalNormalMetrics": { + "coldMs": 3895.830503, + "serial": { + "p50Ms": 25.95565600000009, + "p95Ms": 32.11927700000069, + "requestsPerSecond": 40.429950182644916, + "cpuMsPerRequest": 43.713375, + "peakRssMiB": 307.65625 + }, + "concurrent8": { + "p50Ms": 161.56209900000067, + "p95Ms": 324.75534399999924, + "requestsPerSecond": 43.95237969807028, + "cpuMsPerRequest": 39.839515625000004, + "peakRssMiB": 307.93359375 + } + }, + "gzipSavingPercent": 62.199088089151175 + } + ], + "indexProbe": { + "measuredAt": "2026-11-02T10:42:36.314Z", + "scope": "Synthetic metadata-only scale probe. Dummy blob rows have no payload files; excludes directory scanning and disk reads for those rows. Real reads use one verified blob. Eviction probe uses real 64 KiB files.", + "node": "v24.14.1", + "cardinality": [ + { + "seedBlobs": 0, + "seedAliases": 0, + "seedDecisions": 0, + "seedHistory": 0, + "adminStats": { + "p50Ms": 0.5495260000002418, + "p95Ms": 0.8194220000000314, + "maxMs": 0.8764419999997699 + }, + "warmSourceHit": { + "p50Ms": 22.106009000000086, + "p95Ms": 32.67359299999998, + "maxMs": 38.92065599999978 + }, + "decisionWrite": { + "p50Ms": 6.600801999999931, + "p95Ms": 12.472383000000264, + "maxMs": 15.8033989999999 + }, + "smallFill": { + "p50Ms": 71.12627699999939, + "p95Ms": 98.24754799999982, + "maxMs": 100.35789100000011 + } + }, + { + "seedBlobs": 10000, + "seedAliases": 20000, + "seedDecisions": 10000, + "seedHistory": 10000, + "adminStats": { + "p50Ms": 6.904306000000361, + "p95Ms": 9.677666999999929, + "maxMs": 12.638716999999815 + }, + "warmSourceHit": { + "p50Ms": 22.83701199999996, + "p95Ms": 47.79449499999828, + "maxMs": 102.36107600000014 + }, + "decisionWrite": { + "p50Ms": 8.062501999999768, + "p95Ms": 13.995523999999932, + "maxMs": 14.909832000001188 + }, + "smallFill": { + "p50Ms": 75.03789299999971, + "p95Ms": 117.16210499999943, + "maxMs": 143.80038499999955 + } + }, + { + "seedBlobs": 100000, + "seedAliases": 200000, + "seedDecisions": 100000, + "seedHistory": 100000, + "adminStats": { + "p50Ms": 66.83604900000137, + "p95Ms": 78.69937500000015, + "maxMs": 87.98320400000011 + }, + "warmSourceHit": { + "p50Ms": 26.310491000000184, + "p95Ms": 82.98941600000035, + "maxMs": 112.1549300000006 + }, + "decisionWrite": { + "p50Ms": 22.948387000000366, + "p95Ms": 45.47333599999911, + "maxMs": 56.50094800000079 + }, + "smallFill": { + "p50Ms": 136.3280279999999, + "p95Ms": 214.8330500000011, + "maxMs": 312.4176129999978 + } + } + ], + "eviction": { + "requests": 300, + "distinctObjects": 100, + "upstreamFills": 300, + "hitRate": 0, + "elapsedMs": 24658.882357999995, + "p50Ms": 74.17433299999539, + "p95Ms": 107.83662400000321, + "peakAllocated": 3997696, + "final": { + "blobs": 60, + "originalBytes": 3932160, + "storedBytes": 3932160, + "allocatedBytes": 3932160, + "oldestAccess": 1793616151486, + "budgetBytes": 4194304, + "reservedBytes": 0, + "maxObjectBytes": 65536, + "activeReaders": 0, + "decisions": 0 + } + }, + "assertions": "passed" + }, + "recommendation": "Keep production disabled pending reduction of synchronous metadata commits and retesting. No application settings changed." +} diff --git a/docs/cache-workload-results.json b/docs/cache-workload-results.json new file mode 100644 index 0000000..60fd2a8 --- /dev/null +++ b/docs/cache-workload-results.json @@ -0,0 +1,455 @@ +{ + "node": "v24.14.1", + "measuredAt": "2026-11-02T10:19:09.724Z", + "scope": "Synthetic local acceptance workload; not a production projection", + "sourceRequests": 5, + "upstreamFills": 1, + "source": { + "blobs": 1, + "originalBytes": 19200, + "storedBytes": 139, + "allocatedBytes": 4096, + "oldestAccess": 1793614746536, + "budgetBytes": 1048576, + "reservedBytes": 0, + "maxObjectBytes": 32768, + "activeReaders": 0, + "decisions": 0 + }, + "results": { + "blobs": 1, + "originalBytes": 19600, + "storedBytes": 140, + "allocatedBytes": 4096, + "oldestAccess": 1793614747125, + "budgetBytes": 1048576, + "reservedBytes": 0, + "maxObjectBytes": 32768, + "activeReaders": 0, + "decisions": 3 + }, + "eviction": { + "blobs": 13, + "originalBytes": 52000, + "storedBytes": 52000, + "allocatedBytes": 53248, + "oldestAccess": 1793614748735, + "budgetBytes": 65536, + "reservedBytes": 0, + "maxObjectBytes": 4096, + "activeReaders": 0, + "decisions": 0 + }, + "decisionsReused": 2, + "unchangedDecisionsComputed": 2, + "changedOutputsComputed": 1, + "compressionSavingPercent": 99.27604166666667, + "responses": [ + { + "status": 200, + "encoding": "gzip", + "bytes": 139 + }, + { + "status": 200, + "encoding": "gzip", + "bytes": 139 + }, + { + "status": 200, + "encoding": "gzip", + "bytes": 139 + }, + { + "status": 200, + "encoding": "gzip", + "bytes": 140 + }, + { + "status": 200, + "encoding": "gzip", + "bytes": 140 + } + ], + "metrics": [ + { + "name": "compress", + "traffic": "file", + "count": 2, + "bytes": 38800, + "ms": 11.220815999999104, + "b0": 0, + "b1": 0, + "b2": 2, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_hit", + "traffic": "file", + "count": 2, + "bytes": 38400, + "ms": 0, + "b0": 2, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decision_miss", + "traffic": "file", + "count": 3, + "bytes": 57600, + "ms": 0, + "b0": 3, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "decompress", + "traffic": "file", + "count": 3, + "bytes": 57600, + "ms": 11.292176999999356, + "b0": 0, + "b1": 0, + "b2": 3, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_changed", + "traffic": "file", + "count": 1, + "bytes": 19200, + "ms": 7.701614000000518, + "b0": 0, + "b1": 0, + "b2": 1, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "inspected_unchanged", + "traffic": "file", + "count": 2, + "bytes": 38400, + "ms": 8.860568000000058, + "b0": 0, + "b1": 0, + "b2": 2, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_fill", + "traffic": "file", + "count": 1, + "bytes": 19600, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_first_seen_miss", + "traffic": "file", + "count": 3, + "bytes": 0, + "ms": 0, + "b0": 3, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_miss", + "traffic": "file", + "count": 3, + "bytes": 57600, + "ms": 0, + "b0": 3, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "result_stored", + "traffic": "file", + "count": 1, + "bytes": 140, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed", + "traffic": "file", + "count": 1, + "bytes": 19200, + "ms": 49.649725999999646, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 1, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_changed_cached", + "traffic": "file", + "count": 1, + "bytes": 19200, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged", + "traffic": "file", + "count": 2, + "bytes": 38400, + "ms": 139.08289400000012, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 2, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "rewrite_unchanged_cached", + "traffic": "file", + "count": 1, + "bytes": 19200, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_fill", + "traffic": "file", + "count": 1, + "bytes": 19200, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_first_seen_miss", + "traffic": "file", + "count": 1, + "bytes": 0, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_hit", + "traffic": "file", + "count": 4, + "bytes": 76800, + "ms": 0, + "b0": 4, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_miss", + "traffic": "file", + "count": 1, + "bytes": 19200, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1d", + "traffic": "file", + "count": 4, + "bytes": 76800, + "ms": 0, + "b0": 4, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_1h", + "traffic": "file", + "count": 4, + "bytes": 76800, + "ms": 0, + "b0": 4, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_reuse_7d", + "traffic": "file", + "count": 4, + "bytes": 76800, + "ms": 0, + "b0": 4, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "source_stored", + "traffic": "file", + "count": 1, + "bytes": 139, + "ms": 0, + "b0": 1, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "workload_eviction", + "traffic": "background", + "count": 17, + "bytes": 68000, + "ms": 16365, + "b0": 0, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 17, + "b5": 0, + "b6": 0 + }, + { + "name": "workload_fill", + "traffic": "background", + "count": 30, + "bytes": 120000, + "ms": 0, + "b0": 30, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "workload_first_seen_miss", + "traffic": "background", + "count": 30, + "bytes": 0, + "ms": 0, + "b0": 30, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "workload_miss", + "traffic": "background", + "count": 30, + "bytes": 0, + "ms": 0, + "b0": 30, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + }, + { + "name": "workload_stored", + "traffic": "background", + "count": 30, + "bytes": 120000, + "ms": 0, + "b0": 30, + "b1": 0, + "b2": 0, + "b3": 0, + "b4": 0, + "b5": 0, + "b6": 0 + } + ], + "assertions": "passed" +} diff --git a/docs/performance-monitoring.md b/docs/performance-monitoring.md index 625dbfc..485558f 100644 --- a/docs/performance-monitoring.md +++ b/docs/performance-monitoring.md @@ -125,3 +125,284 @@ an unavailable file as a successful cache fill. Persistent 404s still require checking the repository's source snapshot. Application rate limits remain in force; 429 replies now include `rate_limited`, `resetAt`, and `Retry-After` so clients can wait for the actual store reset. + +## Shared blob cache + +The optional shared filesystem cache stores immutable source content across projects. +It uses Node's built-in SQLite module and requires Node 22.15 or newer. All API and +streamer processes on one host must mount the same local cache directory. SQLite +WAL is not a distributed lock service: do not put this directory on NFS or share +it across hosts. S3 storage continues to use the existing storage implementation. + +Enable the integrated implementation with `SHARED_CACHE_ENABLED=true`. The default +is false so a code deployment does not silently migrate production data. The other +settings are independent rollback controls: + +- `SHARED_CACHE_PATH`: defaults to `.shared-cache-v1` inside `FOLDER`. +- `SHARED_CACHE_BYTES`: source pool budget, default 10 GiB. +- `SHARED_CACHE_RESULT_BYTES`: transformed output budget, default 512 MiB. +- `SHARED_CACHE_MAX_FILE_BYTES`: maximum source admission size, default 32 MiB. +- `SHARED_CACHE_FREE_BYTES`: free-device-space reserve, default 1 GiB. +- `SHARED_CACHE_LOW_WATER`: eviction target fraction, default 0.9. +- `SHARED_CACHE_GZIP`: store gzip when beneficial, default true. +- `SHARED_CACHE_GZIP_MIN_SAVING`: minimum fractional saving, default 0.10. +- `SHARED_CACHE_DECISIONS`: enable unchanged decisions and changed-output reuse, + default true. +- `CACHE_MONITORING_ENABLED`: collect cache observations, default true. Monitoring + is independent of shared storage and also records legacy cache/inspection events. + +These are initial limits, not capacity recommendations from the production sample. +Restart processes together when changing pool limits. Reserve headroom for SQLite, +filesystem directories, existing caches and other application temporary files. +The budget accounts for blob allocation with a conservative 4 KiB minimum plus +in-flight reservations of three times the maximum object size and a small overhead. +Keep each pool budget larger than this reservation. Admission can bypass the cache +while other fills/readers occupy the budget. Oversized source objects are streamed +without admission, still subject to the application's file-size limit. + +Git blobs are verified against the requested Git SHA before publication. Resolved +LFS content is admitted only after verifying both the Git pointer and its SHA-256 +payload digest and size. Gzip is a representation of the same uncompressed content. +Files are written privately, synced and atomically renamed before index publication. +Fills and readers have renewable leases. Eviction skips readers, and stale fills +are recovered before their reservations are released. LRU access timestamps are +coarsened to 30 seconds. Orphan reconciliation runs at most hourly across processes. +Alias and reuse-history indexes are bounded; decisions expire after seven days and +are capped at 100,000 entries. + +Existing generation caches are read as a migration fallback and verified before +promotion. They are not deleted during promotion, so rollback remains possible. +The new pool budget does not include legacy copies: monitor total filesystem usage +and retire legacy data only after validating rollout. Uploaded ZIP originals and +other durable source material are untouched. Repository removal invalidates access +and project mappings, while shared blobs remain subject to global eviction. + +The HTTP fast path applies to individual file responses backed by the shared source +pool, including small text files. Decisions include content identity, path, project +context, all transformation options, generation/revision, mask, hostname and engine +version. Unchanged decisions serve the original representation. Changed output has +its own bounded pool. Gzip negotiation honors quality values, uses `Vary`, and +preserves MIME type. File validators are weak when shared delivery is enabled so +identity and gzip representations can revalidate the same logical content. HEAD +continues to use metadata only. Range requests receive a complete response; this +implementation does not add random access into gzip files. Website rendering keeps +its renderer cache; ZIP scans do not admit bulk entries into the source blob pool. + +The admin overview's Cache section reads `/api/admin/cache?minutes=60` behind the +existing admin authorization. Windows are 15 minutes, one hour, 24 hours and seven +days. SQLite telemetry batches at most 512 groups every five seconds and retains +minute aggregates for 48 hours and hourly aggregates for 30 days. No paths, terms, +user IDs or blob hashes appear in metric labels. The UI distinguishes unavailable +telemetry, dropped events, disabled storage and empty windows. Rows separate file, +website, ZIP, background and known-monitor traffic. Monitor classification is an +operational heuristic, not a complete bot detector. + +Hit counts and byte hit rates measure source lookups; misses classify first observed +keys, known misses and eviction refetches within bounded seven-day history. Reuse +intervals are consecutive blob accesses, not distinct people or browser visits. +Eviction time measures idle age; codec and inspection timings are elapsed work time, +not CPU samples. Cached decisions are separate from actual inspections. Minute and +hour boundaries make the displayed windows approximate. + +Run the reproducible acceptance workload with: + +```sh +node scripts/cache-workload.js docs/cache-workload-results.json +npx mocha test/shared-blob-cache.test.js test/shared-cache-http.test.js +``` + +The JSON report asserts cross-project source reuse, unchanged-decision reuse, +changed-output reuse, gzip delivery and budget enforcement. Its compression ratio +comes from synthetic text and must not be presented as a production projection. +Production rollout should compare request/byte hit rates, eviction refetches, p95 +latency, upstream errors and free disk over a representative week, with large files, +ZIP work and known monitors visible separately. + +### Benefits and costs + +| Choice | Benefit | Cost or limit | +| --- | --- | --- | +| Global content identity | Reuses identical files across paths and projects; renames do not duplicate content | Requires verified hashes and authorization on every request; uses digest-prefix directories to avoid one huge directory | +| Byte budget with approximate LRU | Predictable blob footprint and automatic reclamation | Evicted files incur upstream fetches; active readers can temporarily prevent admission | +| Selective gzip | Reduces payload storage and can serve compressed bytes directly | First-fill compression costs work; identity consumers and uncached anonymization require decoding | +| Rule-aware decisions and results | Repeated unchanged reads skip regex inspection; changed output is reusable | More metadata and a separate output budget; settings changes produce new decisions | +| SQLite coordination and telemetry | Cross-process coordination without another service; admin can measure actual reuse and rewrite work | Local-filesystem scope; short synchronous transactions; metadata/headroom are outside blob budgets | + +### Rollout sequence + +1. Deploy with shared storage disabled and collect legacy hits, inspections and codec + timings. Keep known-monitor traffic separate from file readers. +2. Enable the shared cache on the single-host filesystem deployment with both byte + budgets configured. Keep legacy copies for rollback. +3. Compare a representative week of byte/request hits, rewrite decisions, eviction + refetches, request latency, upstream errors and whole-device free space. Adjust + admission size and budgets from those observations. +4. Retire legacy cache copies only after the rollback window. Uploaded originals + remain durable and are never candidates for shared-pool eviction. + +The implementation and acceptance workload are local changes; this work does not +enable or migrate production storage. + +### Production observations used for this design + +The read-only audit on 2026-11-02 found 425,312 source files across 31,522 projects, +containing 144.32 GB of payload. Deduplication within projects could remove 1.87 GB; +global deduplication could remove 2.93 GB total (about 2.03%), including another +1.06 GB across projects. One file could not be read. These are decimal GB and +payload savings, not a compression estimate or the expected new working-set size. + +The preceding 24-hour access sample contained 29,980 successful file-body responses, +including 9,249 repeat responses (30.9%). URL repetitions are not the same as blob +cache hits. A separate approximately two-hour metric window recorded 2,302 source +hits out of 3,600 lookups (63.9%). This supports retaining a bounded source cache; +it does not establish the optimal byte budget. + +In the uniform anonymization replay, 937 resident files were measured: 764 text, +173 binary, and 21 with changed output. Thirteen resolved files exceeded the 4 MiB +sample limit, and missing files/mappings were excluded. The sample's mean gzip-6 +work was 1.46 ms per file and mean decompression was 0.24 ms; these replay timings +are not live-request latency or a forecast for large files. Continuous telemetry is +needed to replace these samples with representative workload measurements. + +### Local acceptance evidence + +The checked-in `cache-workload-results.json` is generated by assertions, not hand +written. Five file requests across two projects needed one upstream source fill; +unchanged and changed responses reused decisions, and changed bytes occupied one +result blob. The 64 KiB eviction workload ended at 53,248 allocated bytes with no +remaining fill reservations. Compression figures describe this synthetic fixture. + +Validation also covers separate operating-system producers, failed/invalid fills, +crash publication recovery, active-reader eviction protection, LFS pointer/payload +verification, gzip negotiation, rule changes, admin authorization and HEAD/304. +The disposable MongoDB/Redis performance integration run passed 130 tests. The +admin Cache section was checked at 1280 px and 390 px, including filter layout, +scrollable tables, empty filters and unavailable telemetry. + +The final complete default test run recorded 1,062 passing, 159 pending and one +failure: `test/error-codes.test.js` reports nine missing frontend translations for +the pre-existing maintenance API changes. Cache tests passed in that full run. +TypeScript compilation, the scoped lint checks (existing warnings only), the UI +build and `git diff --check` passed. Production rollout was not performed. + +## Initial cache performance evaluation, 2026-11-02 + +The initial implementation passed functional checks, but its metadata write path regressed small-file performance. The following measurements are preserved as the before-optimization baseline; the implementation and follow-up results below supersede the recommendations in this section. These are local measurements, not production capacity estimates. + +### Warm changed-text responses + +Each percentile pools two batches. Serial measurements contain 32 requests; concurrency-eight measurements contain 64. The small/medium baseline reads a local raw source and repeats anonymization/gzip. The 2 MiB baseline additionally uses the existing transformed-file cache, with 99 measured cache hits out of 100 requests. Authentication and Redis coordination are outside this comparison. + +| File | Baseline median, ms | Current median, ms | Experimental NORMAL median, ms | Baseline p95 at 8 clients, ms | Current p95 at 8 clients, ms | NORMAL p95 at 8 clients, ms | +| --- | ---: | ---: | ---: | ---: | ---: | ---: | +| 16 KiB | 8.3 | 44.9 | 6.9 | 71.8 | 462.1 | 46.8 | +| 256 KiB | 36.5 | 45.9 | 11.7 | 250.8 | 444.1 | 89.6 | +| 2 MiB | 236.2 | 60.5 | 26.0 | 929.2 | 528.2 | 324.8 | + +### Findings + +- The cache hit path performs synchronous SQLite writes for reader leases, reuse history and release. The temporary-database A/B changes only pool connections to `PRAGMA synchronous=NORMAL`; the measured reduction supports commit latency as a major bottleneck. This is a diagnostic experiment, not an implemented fix. +- NORMAL in WAL mode can lose recent committed transactions following power loss or a system crash. Validate recovery/accounting before changing the durability of disposable cache indexes. See [SQLite synchronous documentation](https://www.sqlite.org/pragma.html#pragma_synchronous). +- For changed 2 MiB content at eight clients, current shared caching reduced combined client/server CPU from 253.2 to 55.6 ms per request. Peak sampled RSS was 308.0 versus 296.7 MiB. These are whole-process values, including runtime, HTTP client and worker threads. +- Synthetic text transferred about 62.2% fewer bytes with gzip. Incompressible 256 KiB binary data was stored and served as identity, avoiding ineffective gzip storage. These compression ratios are not production projections. +- Cold responses include first-use initialization. For 16 KiB changed text they took 145.9 ms in the baseline, 709.8 ms currently, and 212.0 ms in the NORMAL experiment. Do not use this single cold sample as steady-state miss latency. +- At 100,000 synthetic blob rows, a single pool stats query took 78.7 ms p95 synchronously; saving a decision took 45.5 ms p95. Cache/materialize admin aggregates and reduce retention scans on request paths. Dummy blob rows have no files, so this measures metadata scaling, not full directory reconciliation. +- A 4 MiB pool cycling sequentially over 100 distinct 64 KiB objects stayed below budget, but all 300 reads fetched again. Its working set was larger than the pool. Reuse, request order and admission policy must inform the budget; LRU alone cannot guarantee hits. + +### Reproduce and limitations + +Node v24.14.1, Linux, Intel Xeon E312xx (Sandy Bridge, IBRS update), 12 logical CPUs. This is a shared host with background load, warm OS page cache, loopback HTTP and a synthetic 20 ms upstream wait. It excludes real upstream bandwidth, TLS, reverse proxies, database authorization, multi-process throughput and production request distributions. Small samples and fixed scenario order mean p95 and speedup ratios are descriptive. An initial ts-node exploration was superseded by the compiled results below. The metadata probe does no worker execution, and excludes TypeScript loading from its timed samples. + +```sh +npx tsc --incremental false +CACHE_BENCH_COMPILED=1 node scripts/cache-performance.js +CACHE_BENCH_COMPILED=1 node scripts/cache-performance.js docs/cache-performance-normal-results.json --normal +CACHE_BENCH_COMPILED=1 node scripts/cache-performance.js docs/cache-performance-legacy-results.json --legacy +node scripts/cache-index-performance.js +``` + +All 2,700 HTTP responses were checked against expected bytes or a validated wire digest. Eviction assertions passed. Raw latency samples, CPU, RSS, event-loop delay, storage and metric counters are in `cache-performance-results.json`, `cache-performance-normal-results.json`, `cache-performance-legacy-results.json` and `cache-index-performance-results.json`. `cache-performance-summary.json` contains pooled comparisons. + +Before rollout: reduce per-read durable commits without weakening active-reader eviction protection; consider NORMAL only for rebuildable indexes with crash/recovery tests; replace full admin stats scans with cached aggregates; then replay a representative mixed workload with several server processes. Application defaults and production were not changed by this evaluation. + + +## Optimized implementation, 2026-11-02 + +The pool now uses NORMAL WAL commits for reader leases, coarsened access history, +anonymization decisions and telemetry. Admission reservations, publication intent +before rename, and final blob/alias publication still use FULL commits. Payload +fsync remains in place. Reader leases still become visible immediately to other +processes and protect active streams from eviction. This saves hit-path disk +flushes without making payload accounting depend on disposable history. + +Recent disposable metadata and telemetry can be lost after system failure. +Reservation and publication recovery conservatively retain accounting until files +are indexed or removed; missing payload files are invalidated and fetched again. +The SIGKILL test stops an actual producer after rename and before index publication, +then verifies reservation retention, orphan cleanup and successful refill. This +tests process failure, not a physical power cut. + +Admin pool statistics now read transactional counters and an indexed oldest-access +lookup. Counters are initialized once for an existing index and maintained by +SQLite triggers in the same transactions as row changes. Decision/history/alias +retention deletes only excess rows through indexes. Expired decision/history +cleanup is limited to 256 rows each per admission or maintenance pass. Access +history persists at most once per key per 30 seconds, so reuse-window boundaries +have that resolution. Metadata remains capped at 100,000 decisions/history rows +and 200,000 aliases per pool. + +Stop all cache-using processes together before upgrading an existing index, then +restart them on the same version. Do not mix old and new writers during migration. +The admin API response shape is unchanged. Shared caching remains opt-in with +`SHARED_CACHE_ENABLED=true`; production configuration was not changed. + +The tradeoff is intentional: cache hits avoid durable flushes, while cold fills +still pay for durable publication and compression. Trigger updates add a small +amount of write work in exchange for constant-time aggregate reads. Approximate +LRU and fixed budgets can still thrash when the working set exceeds the pool. + + +### Follow-up measurements and validation + +All 2,200 responses in the complete optimized HTTP run and all 300 in the focused +repeat matched expected output. The repeat ran after this task's other tests and +benchmarks ended. The early scenarios in the complete run overlapped the metadata +probe, so both results are retained rather than treating the faster run as a +universal estimate. These remain small synthetic samples on a shared host. + +- 16 KiB changed text: warm serial median 44.9 → 7.3 ms; eight-client p95 462.1 → 114.9 ms. +- 256 KiB changed text: warm serial median 45.9 → 9.0 ms; eight-client p95 444.1 → 107.6 ms. +- 2048 KiB changed text: warm serial median 60.5 → 19.0 ms; eight-client p95 528.2 → 216.2 ms. + +At 100,000 synthetic blob rows, admin stats p95 fell from 78.70 to 0.50 ms, +decision-write p95 from 45.47 to 1.11 ms, and warm-source-hit p95 from 82.99 to +6.37 ms. The 4 MiB eviction probe peaked at 3,997,696 allocated bytes; all budget +assertions passed. Its oversized sequential working set still produced no hits. + +The final full suite recorded 1,065 passing, 159 pending and the existing single +error-code translation failure (nine maintenance API codes). New counter, +durability-mode and SIGKILL recovery tests passed, as did HTTP and admin UI +regressions. TypeScript, scoped lint and diff whitespace checks passed. +Production rollout and representative multi-process throughput testing remain +outside this local evaluation. + +Reproduce the follow-up without overwriting the original baselines: + +```sh +npx tsc +CACHE_BENCH_COMPILED=1 node scripts/cache-performance.js docs/cache-performance-optimized-results.json +node scripts/cache-index-performance.js docs/cache-index-performance-optimized-results.json +CACHE_BENCH_COMPILED=1 node scripts/cache-performance.js docs/cache-performance-optimized-repeat-results.json --shared +``` + +Raw results and the pooled comparison are in the corresponding +`cache-*-optimized-*.json` files. + +### PR integration validation + +Reapplied the cache changes onto main at `d0b217a` in an isolated checkout. +The production build and scoped ESLint passed, and 199 cache, HTTP, admin access, +HEAD/revalidation and Vue UI tests passed. Integration also covers public +submodule origin selection and withholding parent credentials. The historical +full-workspace and benchmark measurements above were not rerun as part of this +PR preparation. diff --git a/public/asset-manifest.json b/public/asset-manifest.json index ca5bd4c..6c1b068 100644 --- a/public/asset-manifest.json +++ b/public/asset-manifest.json @@ -1,8 +1,8 @@ { "core.min.js": "core.4a77c8ac41.min.js", - "vendor.min.js": "vendor.906b828b05.min.js", + "vendor.min.js": "vendor.208b4c16f4.min.js", "mermaid.min.js": "mermaid.a7356d5ed1.min.js", - "all.min.css": "all.7b7927afcc.min.css", + "all.min.css": "all.83492de3a4.min.css", "markdown.min.js": "markdown.6c8dfb7b1d.min.js", "pdf.min.js": "pdf.4d9cc6ff49.min.js", "notebook.min.js": "notebook.c3144c18ae.min.js", diff --git a/public/css/all.min.css b/public/css/all.min.css index f3b0c02..7fb52ec 100644 --- a/public/css/all.min.css +++ b/public/css/all.min.css @@ -6,4 +6,4 @@ */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]){color:inherit;text-decoration:none}a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 0%;flex:1 1 0%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal .list-group-item.active{margin-top:0}.list-group-horizontal .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm .list-group-item.active{margin-top:0}.list-group-horizontal-sm .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md .list-group-item.active{margin-top:0}.list-group-horizontal-md .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg .list-group-item.active{margin-top:0}.list-group-horizontal-lg .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl .list-group-item.active{margin-top:0}.list-group-horizontal-xl .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush .list-group-item{border-right-width:0;border-left-width:0;border-radius:0}.list-group-flush .list-group-item:first-child{border-top-width:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}/*! * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bacteria:before{content:"\e059"}.fa-bacterium:before{content:"\e05a"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"\e05b"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudflare:before{content:"\e07d"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\e052"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-deezer:before{content:"\e077"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edge-legacy:before{content:"\e078"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\e005"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\e007"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-pay:before{content:"\e079"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guilded:before{content:"\e07e"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-sparkles:before{content:"\e05d"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-wash:before{content:"\e05e"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt-slash:before{content:"\e05f"}.fa-handshake-slash:before{content:"\e060"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side-cough:before{content:"\e061"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-head-side-mask:before{content:"\e063"}.fa-head-side-virus:before{content:"\e064"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hive:before{content:"\e07f"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-house-user:before{content:"\e065"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\e013"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-innosoft:before{content:"\e080"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\e055"}.fa-instalod:before{content:"\e081"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-house:before{content:"\e066"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\e067"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\e01a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\e056"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-octopus-deploy:before{content:"\e082"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-arrows:before{content:"\e068"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-perbyte:before{content:"\e083"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\e01e"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-slash:before{content:"\e069"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pump-medical:before{content:"\e06a"}.fa-pump-soap:before{content:"\e06b"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-rust:before{content:"\e07a"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-shield-virus:before{content:"\e06c"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\e057"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sink:before{content:"\e06d"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\e06e"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-stopwatch-20:before{content:"\e06f"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-store-alt-slash:before{content:"\e070"}.fa-store-slash:before{content:"\e071"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-tiktok:before{content:"\e07b"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\e041"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-uncharted:before{content:"\e084"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\e049"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-unsplash:before{content:"\e07c"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-users-slash:before{content:"\e073"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vest:before{content:"\e085"}.fa-vest-patches:before{content:"\e086"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-virus:before{content:"\e074"}.fa-virus-slash:before{content:"\e075"}.fa-viruses:before{content:"\e076"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-watchman-monitoring:before{content:"\e087"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wodu:before{content:"\e088"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:'Font Awesome 5 Brands';font-style:normal;font-weight:400;font-display:block;src:url(../fonts/fa-brands-400.eot);src:url(../fonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-brands-400.woff2) format("woff2"),url(../fonts/fa-brands-400.woff) format("woff"),url(../fonts/fa-brands-400.ttf) format("truetype"),url(../fonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:'Font Awesome 5 Brands';font-weight:400}@font-face{font-family:'Font Awesome 5 Free';font-style:normal;font-weight:400;font-display:block;src:url(../fonts/fa-regular-400.eot);src:url(../fonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-regular-400.woff2) format("woff2"),url(../fonts/fa-regular-400.woff) format("woff"),url(../fonts/fa-regular-400.ttf) format("truetype"),url(../fonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-family:'Font Awesome 5 Free';font-weight:400}@font-face{font-family:'Font Awesome 5 Free';font-style:normal;font-weight:900;font-display:block;src:url(../fonts/fa-solid-900.eot);src:url(../fonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-solid-900.woff2) format("woff2"),url(../fonts/fa-solid-900.woff) format("woff"),url(../fonts/fa-solid-900.ttf) format("truetype"),url(../fonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:'Font Awesome 5 Free';font-weight:900}.nb-notebook{line-height:1.5}.nb-stderr,.nb-stdout{white-space:pre-wrap;margin:1em 0;padding:.1em .5em}.nb-stderr{background-color:#faa}.nb-cell+.nb-cell{margin-top:.5em}.nb-output table{border:1px solid #000;border-collapse:collapse}.nb-output th{font-weight:700}.nb-output td,.nb-output th{border:1px solid #000;padding:.25em;text-align:left;vertical-align:middle;border-collapse:collapse}.nb-notebook blockquote{border-left:5px solid #ccc;margin-left:0;padding-left:1em}.nb-cell{position:relative}.nb-raw-cell{white-space:pre-wrap;background-color:#f5f2f0;font-family:Consolas,Monaco,'Andale Mono',monospace;padding:1em;margin:.5em 0}.nb-output{min-height:1em;width:100%;overflow-x:scroll;border-right:1px dotted #ccc}.nb-output img{max-width:100%}.nb-input:before,.nb-output:before{position:absolute;font-family:monospace;color:#999;left:-7.5em;width:7em;text-align:right}.nb-input:before{content:"In [" attr(data-prompt-number) "]:"}.nb-output:before{content:"Out [" attr(data-prompt-number) "]:"}// Fix pandas dataframe formatting div[style="max-height:1000px;max-width:1500px;overflow:auto;"]{max-height:none!important}@font-face{font-display:block;font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:normal;font-weight:700;src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:italic;font-weight:400;src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:normal;font-weight:400;src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(fonts/KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{font:normal 1.21em KaTeX_Main,math,Times New Roman,serif;line-height:1.2;position:relative;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.18.10"}.katex .katex-mathml{border:0;-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.katex-newline{display:block}.katex .katex-base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .katex-base,.katex .katex-strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .mathsfit,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .katex-vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .katex-thinbox{display:inline-flex;flex-direction:row;max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .katex-hdashline,.katex .katex-hline,.katex .katex-overline .overline-line,.katex .katex-rule,.katex .katex-underline .underline-line,.katex .mfrac .frac-line{min-height:1px}.katex .mspace{display:inline-block}.katex .katex-smash{display:inline;line-height:0}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.katex-inner,.katex .llap>.katex-inner,.katex .rlap>.katex-inner{position:absolute}.katex .clap>.katex-fix,.katex .llap>.katex-fix,.katex .rlap>.katex-fix{display:inline-block}.katex .llap>.katex-inner{right:0}.katex .clap>.katex-inner,.katex .rlap>.katex-inner{left:0}.katex .clap>.katex-inner>span{margin-left:-50%;margin-right:50%}.katex .katex-rule{border:0 solid;display:inline-block;position:relative}.katex .katex-hline,.katex .katex-overline .overline-line,.katex .katex-underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .katex-hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.katex-root{margin-left:.2777777778em;margin-right:-.5555555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .katex-sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .katex-sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .katex-sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .katex-sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .katex-sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .katex-sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .katex-sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .katex-sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .katex-sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .katex-sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .katex-sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .katex-sizing.reset-size2.size1{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .katex-sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .katex-sizing.reset-size2.size3{font-size:1.1666666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .katex-sizing.reset-size2.size4{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .katex-sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .katex-sizing.reset-size2.size6{font-size:1.6666666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .katex-sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .katex-sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .katex-sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .katex-sizing.reset-size2.size10{font-size:3.4566666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .katex-sizing.reset-size2.size11{font-size:4.1466666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .katex-sizing.reset-size3.size1{font-size:.7142857143em}.katex .fontsize-ensurer.reset-size3.size2,.katex .katex-sizing.reset-size3.size2{font-size:.8571428571em}.katex .fontsize-ensurer.reset-size3.size3,.katex .katex-sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .katex-sizing.reset-size3.size4{font-size:1.1428571429em}.katex .fontsize-ensurer.reset-size3.size5,.katex .katex-sizing.reset-size3.size5{font-size:1.2857142857em}.katex .fontsize-ensurer.reset-size3.size6,.katex .katex-sizing.reset-size3.size6{font-size:1.4285714286em}.katex .fontsize-ensurer.reset-size3.size7,.katex .katex-sizing.reset-size3.size7{font-size:1.7142857143em}.katex .fontsize-ensurer.reset-size3.size8,.katex .katex-sizing.reset-size3.size8{font-size:2.0571428571em}.katex .fontsize-ensurer.reset-size3.size9,.katex .katex-sizing.reset-size3.size9{font-size:2.4685714286em}.katex .fontsize-ensurer.reset-size3.size10,.katex .katex-sizing.reset-size3.size10{font-size:2.9628571429em}.katex .fontsize-ensurer.reset-size3.size11,.katex .katex-sizing.reset-size3.size11{font-size:3.5542857143em}.katex .fontsize-ensurer.reset-size4.size1,.katex .katex-sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .katex-sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .katex-sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .katex-sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .katex-sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .katex-sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .katex-sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .katex-sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .katex-sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .katex-sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .katex-sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .katex-sizing.reset-size5.size1{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .katex-sizing.reset-size5.size2{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .katex-sizing.reset-size5.size3{font-size:.7777777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .katex-sizing.reset-size5.size4{font-size:.8888888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .katex-sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .katex-sizing.reset-size5.size6{font-size:1.1111111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .katex-sizing.reset-size5.size7{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .katex-sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .katex-sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .katex-sizing.reset-size5.size10{font-size:2.3044444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .katex-sizing.reset-size5.size11{font-size:2.7644444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .katex-sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .katex-sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .katex-sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .katex-sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .katex-sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .katex-sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .katex-sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .katex-sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .katex-sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .katex-sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .katex-sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .katex-sizing.reset-size7.size1{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .katex-sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .katex-sizing.reset-size7.size3{font-size:.5833333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .katex-sizing.reset-size7.size4{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .katex-sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .katex-sizing.reset-size7.size6{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .katex-sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .katex-sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .katex-sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .katex-sizing.reset-size7.size10{font-size:1.7283333333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .katex-sizing.reset-size7.size11{font-size:2.0733333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .katex-sizing.reset-size8.size1{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .katex-sizing.reset-size8.size2{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .katex-sizing.reset-size8.size3{font-size:.4861111111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .katex-sizing.reset-size8.size4{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .katex-sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .katex-sizing.reset-size8.size6{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .katex-sizing.reset-size8.size7{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .katex-sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .katex-sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .katex-sizing.reset-size8.size10{font-size:1.4402777778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .katex-sizing.reset-size8.size11{font-size:1.7277777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .katex-sizing.reset-size9.size1{font-size:.2893518519em}.katex .fontsize-ensurer.reset-size9.size2,.katex .katex-sizing.reset-size9.size2{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .katex-sizing.reset-size9.size3{font-size:.4050925926em}.katex .fontsize-ensurer.reset-size9.size4,.katex .katex-sizing.reset-size9.size4{font-size:.462962963em}.katex .fontsize-ensurer.reset-size9.size5,.katex .katex-sizing.reset-size9.size5{font-size:.5208333333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .katex-sizing.reset-size9.size6{font-size:.5787037037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .katex-sizing.reset-size9.size7{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .katex-sizing.reset-size9.size8{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .katex-sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .katex-sizing.reset-size9.size10{font-size:1.2002314815em}.katex .fontsize-ensurer.reset-size9.size11,.katex .katex-sizing.reset-size9.size11{font-size:1.4398148148em}.katex .fontsize-ensurer.reset-size10.size1,.katex .katex-sizing.reset-size10.size1{font-size:.2410800386em}.katex .fontsize-ensurer.reset-size10.size2,.katex .katex-sizing.reset-size10.size2{font-size:.2892960463em}.katex .fontsize-ensurer.reset-size10.size3,.katex .katex-sizing.reset-size10.size3{font-size:.337512054em}.katex .fontsize-ensurer.reset-size10.size4,.katex .katex-sizing.reset-size10.size4{font-size:.3857280617em}.katex .fontsize-ensurer.reset-size10.size5,.katex .katex-sizing.reset-size10.size5{font-size:.4339440694em}.katex .fontsize-ensurer.reset-size10.size6,.katex .katex-sizing.reset-size10.size6{font-size:.4821600771em}.katex .fontsize-ensurer.reset-size10.size7,.katex .katex-sizing.reset-size10.size7{font-size:.5785920926em}.katex .fontsize-ensurer.reset-size10.size8,.katex .katex-sizing.reset-size10.size8{font-size:.6943105111em}.katex .fontsize-ensurer.reset-size10.size9,.katex .katex-sizing.reset-size10.size9{font-size:.8331726133em}.katex .fontsize-ensurer.reset-size10.size10,.katex .katex-sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .katex-sizing.reset-size10.size11{font-size:1.1996142719em}.katex .fontsize-ensurer.reset-size11.size1,.katex .katex-sizing.reset-size11.size1{font-size:.2009646302em}.katex .fontsize-ensurer.reset-size11.size2,.katex .katex-sizing.reset-size11.size2{font-size:.2411575563em}.katex .fontsize-ensurer.reset-size11.size3,.katex .katex-sizing.reset-size11.size3{font-size:.2813504823em}.katex .fontsize-ensurer.reset-size11.size4,.katex .katex-sizing.reset-size11.size4{font-size:.3215434084em}.katex .fontsize-ensurer.reset-size11.size5,.katex .katex-sizing.reset-size11.size5{font-size:.3617363344em}.katex .fontsize-ensurer.reset-size11.size6,.katex .katex-sizing.reset-size11.size6{font-size:.4019292605em}.katex .fontsize-ensurer.reset-size11.size7,.katex .katex-sizing.reset-size11.size7{font-size:.4823151125em}.katex .fontsize-ensurer.reset-size11.size8,.katex .katex-sizing.reset-size11.size8{font-size:.578778135em}.katex .fontsize-ensurer.reset-size11.size9,.katex .katex-sizing.reset-size11.size9{font-size:.6945337621em}.katex .fontsize-ensurer.reset-size11.size10,.katex .katex-sizing.reset-size11.size10{font-size:.8336012862em}.katex .fontsize-ensurer.reset-size11.size11,.katex .katex-sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .katex-accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .katex-accent .accent-body{position:relative}.katex .katex-accent .accent-body:not(.accent-full){width:0}.katex .katex-overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex svg{fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .katex-stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .katex-stretchy:after,.katex .katex-stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .katex-sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .reflectbox{display:inline-block;transform:scaleX(-1)}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.katex-tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.katex-tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}.mermaid{text-align:center;margin:1em 0;overflow:auto}.mermaid svg{max-width:100%;height:auto}.dark-mode .mermaid{filter:invert(1) hue-rotate(180deg)}.dark-mode .mermaid svg{background:0 0}.dark-mode .mermaid .edgeLabel,.dark-mode .mermaid .nodeLabel{filter:invert(1) hue-rotate(180deg)}.mermaid .node circle,.mermaid .node ellipse,.mermaid .node polygon,.mermaid .node rect{stroke-width:2px}.mermaid .flowchart-link{stroke-width:2px}.mermaid .actor{fill:#f9f9f9;stroke:#333;stroke-width:2px}.mermaid .messageLine0,.mermaid .messageLine1{stroke:#333;stroke-width:1.5px}.mermaid .section0,.mermaid .section1,.mermaid .section2,.mermaid .section3{opacity:.8}.mermaid .pieChart .slice{opacity:.9}.markdown-body .mermaid{background:0 0;border:none;padding:10px}.mermaid .error{color:#d32f2f;font-family:monospace;font-size:12px;padding:10px;border:1px solid #d32f2f;border-radius:4px;background-color:#ffebee}@font-face{font-family:octicons-link;src:url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAZwABAAAAAACFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEU0lHAAAGaAAAAAgAAAAIAAAAAUdTVUIAAAZcAAAACgAAAAoAAQAAT1MvMgAAAyQAAABJAAAAYFYEU3RjbWFwAAADcAAAAEUAAACAAJThvmN2dCAAAATkAAAABAAAAAQAAAAAZnBnbQAAA7gAAACyAAABCUM+8IhnYXNwAAAGTAAAABAAAAAQABoAI2dseWYAAAFsAAABPAAAAZwcEq9taGVhZAAAAsgAAAA0AAAANgh4a91oaGVhAAADCAAAABoAAAAkCA8DRGhtdHgAAAL8AAAADAAAAAwGAACfbG9jYQAAAsAAAAAIAAAACABiATBtYXhwAAACqAAAABgAAAAgAA8ASm5hbWUAAAToAAABQgAAAlXu73sOcG9zdAAABiwAAAAeAAAAME3QpOBwcmVwAAAEbAAAAHYAAAB/aFGpk3jaTY6xa8JAGMW/O62BDi0tJLYQincXEypYIiGJjSgHniQ6umTsUEyLm5BV6NDBP8Tpts6F0v+k/0an2i+itHDw3v2+9+DBKTzsJNnWJNTgHEy4BgG3EMI9DCEDOGEXzDADU5hBKMIgNPZqoD3SilVaXZCER3/I7AtxEJLtzzuZfI+VVkprxTlXShWKb3TBecG11rwoNlmmn1P2WYcJczl32etSpKnziC7lQyWe1smVPy/Lt7Kc+0vWY/gAgIIEqAN9we0pwKXreiMasxvabDQMM4riO+qxM2ogwDGOZTXxwxDiycQIcoYFBLj5K3EIaSctAq2kTYiw+ymhce7vwM9jSqO8JyVd5RH9gyTt2+J/yUmYlIR0s04n6+7Vm1ozezUeLEaUjhaDSuXHwVRgvLJn1tQ7xiuVv/ocTRF42mNgZGBgYGbwZOBiAAFGJBIMAAizAFoAAABiAGIAznjaY2BkYGAA4in8zwXi+W2+MjCzMIDApSwvXzC97Z4Ig8N/BxYGZgcgl52BCSQKAA3jCV8CAABfAAAAAAQAAEB42mNgZGBg4f3vACQZQABIMjKgAmYAKEgBXgAAeNpjYGY6wTiBgZWBg2kmUxoDA4MPhGZMYzBi1AHygVLYQUCaawqDA4PChxhmh/8ODDEsvAwHgMKMIDnGL0x7gJQCAwMAJd4MFwAAAHjaY2BgYGaA4DAGRgYQkAHyGMF8NgYrIM3JIAGVYYDT+AEjAwuDFpBmA9KMDEwMCh9i/v8H8sH0/4dQc1iAmAkALaUKLgAAAHjaTY9LDsIgEIbtgqHUPpDi3gPoBVyRTmTddOmqTXThEXqrob2gQ1FjwpDvfwCBdmdXC5AVKFu3e5MfNFJ29KTQT48Ob9/lqYwOGZxeUelN2U2R6+cArgtCJpauW7UQBqnFkUsjAY/kOU1cP+DAgvxwn1chZDwUbd6CFimGXwzwF6tPbFIcjEl+vvmM/byA48e6tWrKArm4ZJlCbdsrxksL1AwWn/yBSJKpYbq8AXaaTb8AAHja28jAwOC00ZrBeQNDQOWO//sdBBgYGRiYWYAEELEwMTE4uzo5Zzo5b2BxdnFOcALxNjA6b2ByTswC8jYwg0VlNuoCTWAMqNzMzsoK1rEhNqByEyerg5PMJlYuVueETKcd/89uBpnpvIEVomeHLoMsAAe1Id4AAAAAAAB42oWQT07CQBTGv0JBhagk7HQzKxca2sJCE1hDt4QF+9JOS0nbaaYDCQfwCJ7Au3AHj+LO13FMmm6cl7785vven0kBjHCBhfpYuNa5Ph1c0e2Xu3jEvWG7UdPDLZ4N92nOm+EBXuAbHmIMSRMs+4aUEd4Nd3CHD8NdvOLTsA2GL8M9PODbcL+hD7C1xoaHeLJSEao0FEW14ckxC+TU8TxvsY6X0eLPmRhry2WVioLpkrbp84LLQPGI7c6sOiUzpWIWS5GzlSgUzzLBSikOPFTOXqly7rqx0Z1Q5BAIoZBSFihQYQOOBEdkCOgXTOHA07HAGjGWiIjaPZNW13/+lm6S9FT7rLHFJ6fQbkATOG1j2OFMucKJJsxIVfQORl+9Jyda6Sl1dUYhSCm1dyClfoeDve4qMYdLEbfqHf3O/AdDumsjAAB42mNgYoAAZQYjBmyAGYQZmdhL8zLdDEydARfoAqIAAAABAAMABwAKABMAB///AA8AAQAAAAAAAAAAAAAAAAABAAAAAA==) format('woff')}.markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;line-height:1.5;color:#24292e;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:16px;line-height:1.5;word-wrap:break-word}.markdown-body .pl-c{color:#6a737d}.markdown-body .pl-c1,.markdown-body .pl-s .pl-v{color:#005cc5}.markdown-body .pl-e,.markdown-body .pl-en{color:#6f42c1}.markdown-body .pl-s .pl-s1,.markdown-body .pl-smi{color:#24292e}.markdown-body .pl-ent{color:#22863a}.markdown-body .pl-k{color:#d73a49}.markdown-body .pl-pds,.markdown-body .pl-s,.markdown-body .pl-s .pl-pse .pl-s1,.markdown-body .pl-sr,.markdown-body .pl-sr .pl-cce,.markdown-body .pl-sr .pl-sra,.markdown-body .pl-sr .pl-sre{color:#032f62}.markdown-body .pl-smw,.markdown-body .pl-v{color:#e36209}.markdown-body .pl-bu{color:#b31d28}.markdown-body .pl-ii{color:#fafbfc;background-color:#b31d28}.markdown-body .pl-c2{color:#fafbfc;background-color:#d73a49}.markdown-body .pl-c2::before{content:"^M"}.markdown-body .pl-sr .pl-cce{font-weight:700;color:#22863a}.markdown-body .pl-ml{color:#735c0f}.markdown-body .pl-mh,.markdown-body .pl-mh .pl-en,.markdown-body .pl-ms{font-weight:700;color:#005cc5}.markdown-body .pl-mi{font-style:italic;color:#24292e}.markdown-body .pl-mb{font-weight:700;color:#24292e}.markdown-body .pl-md{color:#b31d28;background-color:#ffeef0}.markdown-body .pl-mi1{color:#22863a;background-color:#f0fff4}.markdown-body .pl-mc{color:#e36209;background-color:#ffebda}.markdown-body .pl-mi2{color:#f6f8fa;background-color:#005cc5}.markdown-body .pl-mdr{font-weight:700;color:#6f42c1}.markdown-body .pl-ba{color:#586069}.markdown-body .pl-sg{color:#959da5}.markdown-body .pl-corl{text-decoration:underline;color:#032f62}.markdown-body .octicon{display:inline-block;vertical-align:text-top;fill:currentColor}.markdown-body a{background-color:transparent;-webkit-text-decoration-skip:objects}.markdown-body a:active,.markdown-body a:hover{outline-width:0}.markdown-body strong{font-weight:inherit}.markdown-body strong{font-weight:bolder}.markdown-body h1{font-size:2em;margin:.67em 0}.markdown-body img{border-style:none}.markdown-body svg:not(:root){overflow:hidden}.markdown-body hr{box-sizing:content-box;height:0;overflow:visible}.markdown-body input{font:inherit;margin:0}.markdown-body input{overflow:visible}.markdown-body [type=checkbox]{box-sizing:border-box;padding:0}.markdown-body *{box-sizing:border-box}.markdown-body input{font-family:inherit;font-size:inherit;line-height:inherit}.markdown-body a{color:#0366d6;text-decoration:none}.markdown-body a:hover{text-decoration:underline}.markdown-body strong{font-weight:600}.markdown-body hr{height:0;margin:15px 0;overflow:hidden;background:0 0;border:0;border-bottom:1px solid #dfe2e5}.markdown-body hr::before{display:table;content:""}.markdown-body hr::after{display:table;clear:both;content:""}.markdown-body table{border-spacing:0;border-collapse:collapse}.markdown-body td,.markdown-body th{padding:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:0;margin-bottom:0}.markdown-body h1{font-size:32px;font-weight:600}.markdown-body h2{font-size:24px;font-weight:600}.markdown-body h3{font-size:20px;font-weight:600}.markdown-body h4{font-size:16px;font-weight:600}.markdown-body h5{font-size:14px;font-weight:600}.markdown-body h6{font-size:12px;font-weight:600}.markdown-body p{margin-top:0;margin-bottom:10px}.markdown-body blockquote{margin:0}.markdown-body ol,.markdown-body ul{padding-left:0;margin-top:0;margin-bottom:0}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ol ol ol,.markdown-body ol ul ol,.markdown-body ul ol ol,.markdown-body ul ul ol{list-style-type:lower-alpha}.markdown-body dd{margin-left:0}.markdown-body code{font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px}.markdown-body .octicon{vertical-align:text-bottom}.markdown-body .pl-0{padding-left:0!important}.markdown-body .pl-1{padding-left:4px!important}.markdown-body .pl-2{padding-left:8px!important}.markdown-body .pl-3{padding-left:16px!important}.markdown-body .pl-4{padding-left:24px!important}.markdown-body .pl-5{padding-left:32px!important}.markdown-body .pl-6{padding-left:40px!important}.markdown-body::before{display:table;content:""}.markdown-body::after{display:table;clear:both;content:""}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body .anchor:focus{outline:0}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body hr{height:.25em;padding:0;margin:24px 0;background-color:#e1e4e8;border:0}.markdown-body blockquote{padding:0 1em;color:#6a737d;border-left:.25em solid #dfe2e5}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body kbd{display:inline-block;padding:3px 5px;font-size:11px;line-height:10px;color:#444d56;vertical-align:middle;background-color:#fafbfc;border:solid 1px #c6cbd1;border-bottom-color:#959da5;border-radius:3px;box-shadow:inset 0 -1px 0 #959da5}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#1b1f23;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1{padding-bottom:.3em;font-size:2em;border-bottom:1px solid #eaecef}.markdown-body h2{padding-bottom:.3em;font-size:1.5em;border-bottom:1px solid #eaecef}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1em}.markdown-body h5{font-size:.875em}.markdown-body h6{font-size:.85em;color:#6a737d}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:600}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;overflow:auto}.markdown-body table th{font-weight:600}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #dfe2e5}.markdown-body table tr{background-color:#fff;border-top:1px solid #c6cbd1}.markdown-body table tr:nth-child(2n){background-color:#f6f8fa}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body code{padding:0;padding-top:.2em;padding-bottom:.2em;margin:0;font-size:85%;background-color:rgba(27,31,35,.05);border-radius:3px}.markdown-body .full-commit .btn-outline:not(:disabled):hover{color:#005cc5;border-color:#005cc5}.markdown-body kbd{display:inline-block;padding:3px 5px;font:11px SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;line-height:10px;color:#444d56;vertical-align:middle;background-color:#fafbfc;border:solid 1px #d1d5da;border-bottom-color:#c6cbd1;border-radius:3px;box-shadow:inset 0 -1px 0 #c6cbd1}.markdown-body :checked+.radio-label{position:relative;z-index:1;border-color:#0366d6}.markdown-body .task-list-item{list-style-type:none}.markdown-body .task-list-item+.task-list-item{margin-top:3px}.markdown-body .task-list-item input{margin:0 .2em .25em -1.6em;vertical-align:middle}.markdown-body hr{border-bottom-color:#eee}.dark-mode{--canvas-bg-color:#1B1916;--sidebar-bg-color:#1A1918;--main-bg-color:#1B1916;--header-bg-color:#1A1918;--hover-bg-color:rgba(255, 255, 255, 0.05);--header-color:#FAF9F6;--color:#D6D1C5;--link-color:#A7B2FF;--link-hover-color:#C8CEFF;--border-color:#33302B;--border-soft:#2A2825;--btn-color:#FAF9F6;--input-color:#E6E1D8;--input-bg:#25231F;--primary-bg:#FAF9F6;--primary-hover-bg:#FFFFFF;--primary-color:#1A1815;--primary-active-color:#1A1815;--accent:#A7B2FF;--accent-soft:rgba(167, 178, 255, 0.12);--ink-muted:#A39D92;--ink-faint:#8A857C;--ink-soft:#B5AFA2;--status-ready:#5FB27A;--status-progress:#E0A94A;--status-error:#F08A82;--status-inactive:#8A857C;--status-error-soft:rgba(240, 138, 130, 0.08);--status-error-soft-hover:rgba(240, 138, 130, 0.14);--admin-nav-bg:#1A1918;--admin-nav-active:rgba(167, 178, 255, 0.12);--admin-stat-bg:#25231F;--paper-card:#25231F;--paper-bg-alt:#201E1B;--highlight:#3A341E;background-color:var(--canvas-bg-color);color:var(--color)}body{--canvas-bg-color:#FAF9F6;--sidebar-bg-color:#FFFFFF;--header-bg-color:#FAF9F6;--header-color:#1A1815;--main-bg-color:#FAF9F6;--hover-bg-color:rgba(26, 24, 21, 0.05);--input-color:#1A1815;--color:#1A1815;--link-color:#3B4AD6;--link-hover-color:#2E3BB8;--border-color:#E6E1D8;--border-soft:#EDE9E1;--btn-color:#1A1815;--input-bg:#FFFFFF;--primary-bg:#1A1815;--primary-hover-bg:#000000;--primary-color:#FAF9F6;--primary-active-color:#FAF9F6;--accent:#3B4AD6;--accent-soft:#EEF0FF;--ink-muted:#6F6A61;--ink-faint:#8A857C;--ink-soft:#4A4641;--paper-bg-alt:#F3F1EC;--paper-card:#FFFFFF;--highlight:#FFF3C4;--status-ready:#2F7A44;--status-progress:#946512;--status-error:#B42318;--status-inactive:#8A857C;--status-error-soft:rgba(180, 35, 24, 0.04);--status-error-soft-hover:rgba(180, 35, 24, 0.08);--radius-control:6px;--radius-button:8px;--button-height:36px;--button-font-size:14px;--button-line-height:20px;--button-padding-x:13px;--button-compact-height:32px;--radius-surface:10px;--font-serif:'Instrument Serif','Iowan Old Style',Georgia,serif;--font-sans:'Inter',ui-sans-serif,system-ui,-apple-system,sans-serif;--font-mono:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,monospace;background-color:var(--canvas-bg-color);color:var(--color);font-family:var(--font-sans);font-size:14px;letter-spacing:-.005em;line-height:1.5}.fadeIn{opacity:1;animation-name:fadeInOpacity;animation-iteration-count:1;animation-timing-function:ease-in;animation-duration:.6s}@keyframes fadeInOpacity{0%{opacity:0}100%{opacity:1}}.btn:active,.btn:focus{box-shadow:none}:focus:not(:focus-visible){outline:0}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.btn:focus-visible,.dropdown-item:focus-visible,.form-control:focus-visible{outline:2px solid var(--accent);outline-offset:2px;box-shadow:none}input:active,input:hover{box-shadow:none!important}input:-webkit-autofill,input:-webkit-autofill:focus,input:-webkit-autofill:hover,select:-webkit-autofill,select:-webkit-autofill:focus,select:-webkit-autofill:hover,textarea:-webkit-autofill,textarea:-webkit-autofill:focus,textarea:-webkit-autofill:hover{border-color:var(--border-color);-webkit-text-fill-color:var(--color);-webkit-box-shadow:none;transition:background-color 1000s ease-in-out 0s}.custom-select,.form-control,input:-internal-autofill-selected{color:var(--input-color);background-color:var(--input-bg)!important;border-color:var(--border-color)}.form-control:focus{border-color:var(--border-color)}body,html{position:relative;height:100%;overflow-x:hidden}body{overflow-y:hidden}#app{flex:1 1 auto;min-height:0}.app-header{flex:0 0 auto}.app-view{display:block;flex:1 1 auto;min-height:0;overflow-x:hidden!important;overflow-y:auto!important;max-width:100%}.markdown-body a,a{color:var(--link-color)}.markdown-body a:hover,a:hover{text-decoration:none;color:var(--link-hover-color)}.dropdown-menu a.dropdown-item{color:var(--color)}.dropdown-menu a.dropdown-item:hover{color:var(--color);text-decoration:none}.markdown-body .emoji{height:1.3em;margin:0;vertical-align:-.1em}.navbar.navbar-expand-lg{background:var(--header-bg-color)!important;border-bottom:1px solid var(--border-color);transition:background-color .5s ease;padding:10px max(20px,calc((100vw - 1200px)/ 2));font-family:var(--font-sans)}.navbar-toggler{border:1px solid var(--border-color)!important;color:var(--color)!important}.navbar-toggler .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='%231A1815' stroke-width='2' stroke-linecap='round' d='M4 8h22M4 15h22M4 22h22'/%3E%3C/svg%3E")!important}.navbar .navbar-nav{align-items:center}.navbar .nav-link{display:inline-flex;align-items:center;font-size:13px;color:var(--ink-muted)!important;padding:6px 0!important;margin:0 12px;border-bottom:1px solid transparent;letter-spacing:-.005em;line-height:1}.navbar .nav-link:hover{color:var(--color)!important}.navbar .nav-link.active{color:var(--color)!important;border-bottom-color:var(--color)}.navbar .nav-link.nav-icon{padding:0!important;margin:0 8px;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px}.navbar .nav-link .fa,.navbar .nav-link .fab{font-size:15px;line-height:1}.navbar #navbarSupportedContent{align-items:center}.navbar-brand{font-family:var(--font-serif)!important;font-size:20px!important;letter-spacing:-.01em;color:var(--color)!important;padding-right:18px;margin-right:12px;border-right:1px solid var(--border-color)}.navbar-brand em,.navbar-brand i{font-style:italic;font-weight:400}.navbar-dark .navbar-toggler{border-color:var(--border-color);color:var(--color)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='%231A1815' stroke-width='2' stroke-linecap='round' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar .btn-signin{display:inline-flex;align-items:center;height:32px;padding:0 14px!important;margin-left:6px;border:1px solid var(--color);background:var(--color);color:var(--canvas-bg-color)!important;border-radius:6px;font-size:13px;font-weight:500;line-height:1}.navbar .btn-signin:hover{background:var(--primary-hover-bg);color:var(--canvas-bg-color)!important}.navbar .nav-support{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;order:3;gap:6px;min-height:36px;margin-left:12px;padding:0 12px;border:1px solid var(--border-color);border-radius:8px;color:var(--color);font-size:13px;font-weight:500;text-decoration:none}.navbar .nav-support:hover{background:var(--hover-bg-color);border-color:var(--color);color:var(--color)}@media (max-width:991px){.navbar .nav-support{order:0;width:44px;min-height:44px;margin:0 8px 0 auto;padding:0}.navbar .nav-support-label{display:none}[class*=floatingchat-container-wrap],iframe.floatingchat-container{display:none!important}}.navbar .user-chip{display:inline-flex!important;align-items:center;gap:8px;padding:4px 12px 4px 6px!important;margin-left:6px;border:1px solid var(--border-color);border-radius:999px;background:var(--sidebar-bg-color);font-size:13px;color:var(--color)!important}.navbar .user-chip:hover{background:var(--hover-bg-color)}.navbar .user-chip img{width:22px;height:22px}.navbar .user-chip .user-chip-name{color:var(--color);font-weight:500}.navbar .user-chip::after{color:var(--ink-muted)}#navbarSupportedContent{padding-right:0}.generalMessage{display:block;text-align:center;color:var(--header-color)}.rgba-gradient{background:var(--canvas-bg-color);color:var(--color)}.paper-landing{overflow-x:clip}.paper-wrap{max-width:1140px;margin-left:auto;margin-right:auto;padding-left:32px;padding-right:32px}.paper-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);font-weight:500}.paper-hero{max-width:1140px;margin:0 auto;padding:64px 32px 0;display:grid;grid-template-columns:.95fr 1.05fr;gap:48px;align-items:center}.paper-hero h1.hero-title{font-family:var(--font-serif);font-weight:400;font-size:clamp(2.6rem,5.4vw,4.4rem);line-height:1.02;letter-spacing:-.025em;margin:14px 0 0;color:var(--color);text-wrap:balance}.paper-hero h1 .accent{color:var(--accent);font-style:italic}.hero-subtitle{margin-top:18px;font-size:18px;line-height:1.55;color:var(--ink-soft);max-width:30em;text-wrap:pretty}.paper-cta-row{display:flex;flex-wrap:wrap;gap:18px;align-items:center;margin-top:26px}.btn-hero{display:inline-flex;align-items:center;font-family:var(--font-sans);border:1px solid var(--color);background:var(--color);color:var(--canvas-bg-color);padding:12px 20px;font-size:14px;font-weight:500;border-radius:var(--radius-control);letter-spacing:-.005em;transition:background .15s,border-color .15s,transform .1s}.btn-hero:hover{background:var(--primary-hover-bg);border-color:var(--primary-hover-bg);color:var(--canvas-bg-color);text-decoration:none;transform:translateY(-1px)}.btn-hero-ghost{background:0 0;border:1px solid var(--border-color);color:var(--color);padding:12px 20px;font-size:14px;font-weight:500;border-radius:var(--radius-control)}.btn-hero-ghost:hover{background:var(--hover-bg-color);border-color:var(--color);color:var(--color)}.paper-link-arrow{font-size:14px;color:var(--ink-soft);text-decoration:underline;text-underline-offset:4px;text-decoration-color:var(--border-color)}.paper-link-arrow:hover{color:var(--color);text-decoration-color:var(--color)}.paper-reassure{list-style:none;margin:16px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:6px 16px;font-size:13px;color:var(--ink-muted)}.paper-reassure li::before{content:"\2713";color:var(--status-ready);margin-right:6px;font-size:11px}.paper-frame{border-radius:var(--radius-surface);background:var(--paper-card);border:1px solid var(--border-color);box-shadow:0 24px 60px rgba(26,24,21,.1),0 2px 6px rgba(26,24,21,.04);overflow:hidden}.dark-mode .paper-frame{box-shadow:0 24px 60px rgba(0,0,0,.45)}.paper-frame-bar{display:flex;align-items:center;gap:8px;height:34px;padding:0 12px;border-bottom:1px solid var(--border-soft);background:var(--paper-bg-alt);font-family:var(--font-mono);font-size:11px;color:var(--ink-muted)}.paper-frame-bar .dots{display:flex;gap:5px}.paper-frame-bar .dots i{width:8px;height:8px;border-radius:50%;background:var(--border-color)}.paper-frame-bar .url{flex:1;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-frame img{display:block;width:100%;height:auto}.paper-hero-shot .paper-frame{width:112%}.paper-proof{margin-top:64px;padding-top:18px;padding-bottom:18px;border-top:1px solid var(--border-color);display:flex;flex-wrap:wrap;gap:12px 30px;align-items:center}.paper-proof-venues{display:flex;gap:22px;align-items:center;font-family:var(--font-serif);font-size:22px;letter-spacing:-.01em;color:var(--ink-soft)}.paper-proof-venues i{font-style:normal;font-family:var(--font-sans);font-size:14px;color:var(--ink-faint)}.paper-stats{margin-top:12px;padding-top:22px;border-top:1px solid var(--border-color)}.paper-stats-meta{display:flex;justify-content:space-between;align-items:center;font-family:var(--font-mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-muted);margin-bottom:14px}.paper-stats-meta-right{display:inline-flex;align-items:center;gap:6px}.paper-stats-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--status-ready)}.paper-stats-grid{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--border-color);border-bottom:1px solid var(--border-color)}.paper-stat-card{display:flex;flex-direction:column;padding:22px 26px 20px 0;margin-right:26px;border-right:1px solid var(--border-color);min-width:0}.paper-stat-card:last-child{border-right:0;margin-right:0;padding-right:0}.paper-stat-value{font-size:44px;font-weight:500;letter-spacing:-.04em;line-height:1;color:var(--color);font-variant-numeric:tabular-nums}.paper-stat-label{margin-top:6px;font-size:13px;color:var(--ink-soft)}.paper-stat-bars{display:block;width:100%;height:34px;margin-top:18px;overflow:visible}.paper-stat-bars rect{fill:var(--border-color)}.paper-stat-bars rect.is-latest{fill:var(--accent)}.paper-stat-delta{margin-top:10px;font-family:var(--font-mono);font-size:11px;color:var(--status-ready)}.paper-section-head{margin-top:110px;display:grid;grid-template-columns:1fr 1fr;gap:40px;align-items:end}.paper-qa h2,.paper-section-head h2{font-family:var(--font-serif);font-weight:400;font-size:clamp(2rem,4.2vw,3.25rem);line-height:1.05;letter-spacing:-.02em;margin:10px 0 0;color:var(--color);text-wrap:balance}.paper-feature-title em,.paper-qa h2 em,.paper-section-head h2 em{font-style:italic;color:var(--accent)}.paper-section-head p{font-size:15px;color:var(--ink-soft);max-width:32em;margin:0;line-height:1.6}.paper-preview{margin-top:28px;display:grid;grid-template-columns:1fr 1fr;gap:14px}.paper-preview .pane{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);overflow:hidden;min-width:0}.paper-preview .pane-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 14px;border-bottom:1px solid var(--border-soft)}.paper-preview .pane-label{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);white-space:nowrap}.paper-preview .pane-url{font-family:var(--font-mono);font-size:11px;color:var(--ink-soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.paper-preview .pane-body{padding:16px 18px;font-family:var(--font-mono);font-size:13px;line-height:1.9;color:var(--ink-soft)}.paper-preview .pane-body strong{color:var(--color);font-weight:600}.paper-preview .tok{color:var(--ink-faint)}.paper-preview .redact{background:var(--accent-soft);color:var(--accent);border-radius:4px;padding:0 5px}.paper-features{margin-top:28px;padding-top:28px;border-top:1px solid var(--border-color);display:grid;grid-template-columns:5fr 7fr;gap:48px;align-items:start}.paper-features-list{display:flex;flex-direction:column}.paper-feature{border-left:2px solid var(--border-soft);padding:16px 0 16px 20px;transition:border-color .2s}.paper-feature.is-on{border-left-color:var(--color)}.paper-feature-tab{all:unset;display:block;width:100%;cursor:pointer;color:inherit;border-radius:4px}.paper-feature-tab:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.paper-feature-tab .paper-eyebrow{display:block;margin-bottom:6px}.paper-feature-title{display:block;font-family:var(--font-serif);font-size:24px;line-height:1.15;letter-spacing:-.015em;color:var(--ink-muted);transition:color .2s}.paper-feature-title em{color:inherit}.paper-feature-tab:hover .paper-feature-title,.paper-feature.is-on .paper-feature-title{color:var(--color)}.paper-feature.is-on .paper-feature-title em{color:var(--accent)}.paper-feature-more{display:none}.paper-feature.is-on .paper-feature-more{display:block}.paper-feature-more .paper-feature-title-m{display:none}.paper-feature-more p{font-size:15px;color:var(--ink-soft);line-height:1.55;margin:10px 0 12px;max-width:30em}.paper-features-stage{min-width:0}.paper-feature-panel{animation:paper-feature-in .25s ease-out}@keyframes paper-feature-in{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){.paper-feature-panel{animation:none}}.paper-crop{position:relative;height:380px;overflow:hidden;background:var(--paper-card)}.paper-crop img{position:absolute;left:0;top:0;max-width:none;height:auto;display:block}.paper-crop-anonymize img{width:150%;transform:translate(-1.5%,-8%)}.paper-crop-review img{width:160%;transform:translate(-1%,-8%)}.paper-crop-manage img{width:150%;transform:translate(-6%,-9%)}.paper-qa{margin-top:110px;display:grid;grid-template-columns:1fr 1.4fr;gap:40px;align-items:start}.paper-qa h2{margin-bottom:12px}.paper-qa .q{border-top:1px solid var(--border-color);padding:18px 0}.paper-qa .q:last-child{border-bottom:1px solid var(--border-color)}.paper-qa .q a{display:block;font-weight:500;font-size:15px;color:var(--color);margin-bottom:6px}.paper-qa .q a:hover{color:var(--accent);text-decoration:none}.paper-qa .q p{margin:0;font-size:14px;color:var(--ink-soft);line-height:1.6}@media (max-width:1100px){.paper-hero-shot .paper-frame{width:100%}}@media (max-width:991px){.paper-hero{grid-template-columns:1fr;gap:36px;padding-top:40px}.paper-qa,.paper-section-head{grid-template-columns:1fr;gap:16px}.paper-stats-grid{grid-template-columns:1fr 1fr}.paper-stat-card:nth-child(2n){border-right:0;margin-right:0;padding-right:0}.paper-stat-card:nth-child(-n+2){border-bottom:1px solid var(--border-color)}}@media (max-width:767px){.paper-hero,.paper-wrap{padding-left:20px;padding-right:20px}.paper-hero h1.hero-title{font-size:clamp(2.4rem,11vw,3.25rem)}.hero-subtitle{font-size:16px}.paper-cta-row .btn-hero{width:100%;justify-content:center}.paper-proof{margin-top:48px}.paper-stat-card{padding:18px 16px 16px 0;margin-right:16px}.paper-stat-value{font-size:40px}.paper-qa,.paper-section-head{margin-top:72px}.paper-preview{grid-template-columns:1fr}.paper-preview .pane-body{font-size:12px;line-height:1.8}.paper-features{display:flex;flex-wrap:wrap;gap:0;padding-top:0;border-top:0;margin-top:24px}.paper-feature,.paper-features-list,.paper-features-stage{display:contents}.paper-feature-tab{order:1;flex:1 1 0;width:auto;padding:12px 0 10px;border-bottom:2px solid var(--border-color);border-radius:0;text-align:left}.paper-feature.is-on .paper-feature-tab{border-bottom-color:var(--color)}.paper-feature-tab .paper-eyebrow{margin:0;font-size:11px;letter-spacing:.08em}.paper-feature-tab .paper-feature-title{display:none}.paper-feature-panel{order:2;width:100%;margin-top:20px;animation:none}.paper-crop{height:240px}.paper-crop-anonymize img{width:230%;transform:translate(-1.5%,-8%)}.paper-crop-review img{width:240%;transform:translate(-1%,-8%)}.paper-crop-manage img{width:220%;transform:translate(-3%,-9%)}.paper-feature-more{order:3;width:100%}.paper-feature.is-on .paper-feature-more{margin-top:18px}.paper-feature-more .paper-feature-title-m{display:block;font-size:28px;line-height:1.1}.paper-feature-more p{max-width:none}.paper-footer-inner>.paper-footer-brand{grid-column:1/-1}.paper-footer-foot{flex-direction:column;gap:6px}}.dropdown-menu{background-color:var(--paper-card,var(--main-bg-color))!important;color:var(--color)!important;border:1px solid var(--border-color)!important;border-radius:8px!important;box-shadow:0 12px 28px rgba(26,24,21,.08),0 2px 6px rgba(26,24,21,.05)!important;padding:6px!important;font-family:var(--font-sans);font-size:13px;min-width:11rem}.dropdown-menu .dropdown-item{color:var(--color)!important;padding:7px 10px!important;border-radius:5px;font-size:13px}.dropdown-menu .dropdown-item:focus,.dropdown-menu .dropdown-item:hover{background:var(--hover-bg-color)!important;color:var(--color)!important}.dropdown-menu .dropdown-divider{border-top-color:var(--border-color)!important;margin:4px 2px}.dropdown-menu .dropdown-header{color:var(--ink-muted);font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase}.body,.file-content,.markdown-body{background-color:var(--main-bg-color)!important;color:var(--color)!important}.markdown-body table tr{background-color:var(--main-bg-color);border-top:1px solid var(--border-color)}.markdown-body table tr:nth-child(2n){background-color:var(--paper-bg-alt)}.markdown-body table td,.markdown-body table th{border:1px solid var(--border-color)}.file-content{padding:4px 7px;text-align:left;min-height:100%}.badge{font-size:75%;font-weight:500;padding:3px 8px;border-radius:10px;vertical-align:middle}.warning-feedback{width:100%;margin-top:.25rem;font-size:80%;color:#dc8e35}.dropdown-item:focus,.dropdown-item:hover{background-color:var(--hover-bg-color)}.card-header .btn,.card-header .btn:focus,.card-header .btn:hover{border:none!important;background:0 0!important}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:var(--button-height);padding:7px var(--button-padding-x);font:500 var(--button-font-size)/var(--button-line-height) var(--font-sans);vertical-align:middle;max-width:100%;transition:background-color 120ms ease,border-color 120ms ease,color 120ms ease;color:var(--btn-color);border:1px solid var(--border-color);background:var(--paper-card);border-radius:var(--radius-button);white-space:nowrap}.btn:active,.btn:hover{color:var(--btn-color);border:1px solid var(--border-color);background-color:var(--hover-bg-color);box-shadow:none!important}.btn.btn-primary{color:var(--primary-color);background-color:var(--primary-bg)}.btn.btn-primary:active,.btn.btn-primary:hover{color:var(--primary-active-color);background-color:var(--primary-hover-bg)!important}.btn::placeholder{color:var(--color);opacity:1}.white_border{border:1px solid #fff;color:#fff}.leftCol{display:flex;position:relative;flex:0 0 auto;width:100%;z-index:9;flex-direction:column}.card,.leftCol,.sidePanel{background-color:var(--sidebar-bg-color);border:1px solid var(--border-color)}@media (min-width:768px){.leftCol{flex:0 0 310px;width:310px;height:100%}}.leftCol-search{padding:10px 12px 0}.tree-search-box{display:flex;align-items:center;gap:8px;background:var(--canvas-bg-color);border:1px solid var(--border-color);border-radius:8px;padding:7px 10px;transition:border-color .15s}.tree-search-box:focus-within{border-color:var(--ink-muted)}.tree-search-icon{font-size:12px;color:var(--ink-muted);flex-shrink:0}.tree-search-input{flex:1;border:none;outline:0;background:0 0;font-family:var(--font-sans);font-size:13px;color:var(--color);min-width:0}.tree-search-input::placeholder{color:var(--ink-muted)}.tree-search-kbd{font-family:var(--font-sans);font-size:11px;color:var(--ink-muted);background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:4px;padding:1px 6px;line-height:1.4;flex-shrink:0}.tree-search-clear{background:0 0;border:none;color:var(--ink-muted);font-size:16px;cursor:pointer;padding:0 2px;line-height:1}.tree-search-clear:hover{color:var(--color)}.leftCol-project-header{display:flex;align-items:baseline;justify-content:space-between;padding:12px 14px 4px;gap:8px}.project-name{font-family:var(--font-sans);font-size:13px;font-weight:600;color:var(--color);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.project-file-count{font-family:var(--font-sans);font-size:12px;color:var(--ink-muted);white-space:nowrap;flex-shrink:0}.files{position:relative;display:block;overflow:auto;height:100%;padding:4px 6px}.files ul{list-style:none;margin:0;padding:0}.files li ul{padding-left:8px;margin-left:7px;border-left:1px solid var(--border-color)}.files .folder>ul{display:none}.files .folder.open>ul{display:block}.files .file,.files .folder{position:relative;color:var(--ink-soft);cursor:pointer;word-break:break-all}.files a{display:flex;align-items:center;gap:4px;padding:1px 8px 1px 2px;font-family:var(--font-sans);font-size:13px;color:var(--ink-soft);border-radius:4px;text-decoration:none;line-height:1.5;position:relative}.files a:hover{background:var(--hover-bg-color);color:var(--color);text-decoration:none}.files:focus{outline:0}.files a.tree-focused{background:var(--hover-bg-color);color:var(--color)}.files .file.active>a{background:rgba(128,128,128,.15);color:var(--color)}.files .file.active>a .tree-icon-file{color:#5b7ba5}.files .file.active>a .tree-count{color:var(--ink-muted)}.tree-icon-file,.tree-icon-folder{display:inline-block;flex-shrink:0}.tree-icon-folder{width:14px;height:12px;color:var(--ink-muted);opacity:.75}.tree-icon-folder svg{display:block;width:100%;height:100%;fill:currentColor;fill-opacity:0;stroke:currentColor;stroke-width:1.2;stroke-linejoin:round}.files .folder.open>a .tree-icon-folder{color:#a07d2e;opacity:.9}.files .folder.open>a .tree-icon-folder svg{fill-opacity:.12}.dark-mode .files .folder.open>a .tree-icon-folder{color:#c9a03a}.tree-icon-file{width:16px;font-size:14px;text-align:center;color:#5b7ba5}.dark-mode .files .file.active>a .tree-icon-file,.dark-mode .tree-icon-file{color:#7ba3d0}.tree-toggle{display:inline-flex;align-items:center;justify-content:center;width:10px;height:14px;flex-shrink:0;opacity:.6}.tree-toggle::after{content:"";display:block;width:0;height:0;border-style:solid;border-width:3px 0 3px 4.5px;border-color:transparent transparent transparent var(--ink-muted);transition:transform .12s ease}.files .folder.open>a .tree-toggle::after{transform:rotate(90deg)}.tree-spacer{display:inline-block;width:10px;flex-shrink:0}.tree-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tree-count{font-family:var(--font-sans);font-size:11px;color:var(--ink-muted);flex-shrink:0;margin-left:auto;padding-left:8px;opacity:.7}.files .folder>a{color:var(--color)}.files .file::before,.files .folder::before{display:none}.files .folder>a::after{display:none}.tree-search-path{color:var(--ink-muted);font-size:11px}.tree-search-empty{padding:16px 12px;color:var(--ink-muted);font-size:13px;font-family:var(--font-sans);text-align:center}.leftCol{background:var(--paper-bg-alt,#f3f1ec);border-right:1px solid var(--border-color)}.dark-mode .leftCol{background:var(--sidebar-bg-color)}.status-bar{background:var(--canvas-bg-color);border-bottom:1px solid var(--border-color);padding:10px 14px}.paths .breadcrumb-item,.paths .breadcrumb-item a{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);letter-spacing:.02em}.paths .breadcrumb-item.active,.paths .breadcrumb-item:last-child{color:var(--color)}.paths .breadcrumb-item+.breadcrumb-item::before{content:'/';color:var(--ink-muted)}.last-update{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);padding:8px 10px;border-top:1px solid var(--border-color);letter-spacing:.02em}.ace_editor{height:100%}.ace_scroller{cursor:default}.status-bar{display:flex;align-items:center;gap:12px;background-color:var(--canvas-bg-color);padding:10px 14px;margin:0;border-bottom:1px solid var(--border-color);border-radius:0;flex-shrink:0}.status-bar-actions{display:flex;align-items:center;gap:6px;flex-shrink:0}.status-bar-actions .btn{display:inline-flex;align-items:center;gap:6px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color);border-radius:6px;padding:4px 10px;font-size:13px;min-height:30px}.status-bar-actions .btn:hover{background:var(--hover-bg-color);color:var(--color)}.status-bar-actions .btn.btn-active{border-color:currentColor;font-weight:600}.paths{flex:1 1 auto;min-width:0;padding:0;margin:0;background-color:initial;border:none;border-radius:0;align-items:center;overflow-x:auto;white-space:nowrap;flex-wrap:nowrap}.paths::-webkit-scrollbar{display:none}.paths a{color:var(--color)}.paths .breadcrumb-item{padding-left:3px}.paths .breadcrumb-item::before{padding-right:3px}.content{height:100%;overflow:scroll;padding-top:42px;background-color:var(--main-bg-color);text-align:center}.image-content{max-width:100%;max-height:100%;text-align:center;padding:4px}.pdf-viewer{display:flex;flex-direction:column;height:100%;min-height:0;background-color:var(--main-bg-color)}.pdf-toolbar{display:flex;align-items:center;gap:4px;flex:0 0 auto;padding:4px 8px;border-bottom:1px solid var(--border-color,rgba(0,0,0,.12))}.pdf-toolbar-group{display:inline-flex;align-items:center;gap:4px}.pdf-toolbar-right{margin-left:auto}.pdf-toolbar-btn{border:0;background:0 0;color:inherit;padding:4px 8px;border-radius:4px;font-size:13px;line-height:1.2;cursor:pointer}.pdf-toolbar-btn:hover:not(:disabled){background-color:rgba(128,128,128,.18)}.pdf-toolbar-btn:disabled{opacity:.4;cursor:default}.pdf-toolbar-zoom{min-width:52px;font-variant-numeric:tabular-nums}.pdf-toolbar-page{width:3.5em;text-align:right;padding:2px 4px;font-size:13px;color:inherit;background:0 0;border:1px solid var(--border-color,rgba(0,0,0,.2));border-radius:4px}.pdf-toolbar-count{font-size:13px;opacity:.75;font-variant-numeric:tabular-nums}.pdf-pages{flex:1 1 auto;min-height:0;overflow:auto;padding:8px 0}.pdf-viewer-page{margin:0 auto 12px}.pdf-viewer-page canvas{display:block;box-shadow:0 1px 4px rgba(0,0,0,.25)}.pdf-viewer-error{padding:24px;text-align:center;font-weight:700}.html-doc{display:block;height:100%}.html-doc-frame{display:block;width:100%;height:100%;border:0;background-color:#fff}.file-error{font-weight:700;font-size:50px;text-align:center}pdfviewer{display:block;padding:15px}pdfpageviewer{display:block;width:100%;margin-bottom:10px}notebook{display:block;text-align:left;padding:15px}@media (min-width:768px){notebook{padding-left:100px}}.nb-output td,.nb-output th{border:1px solid var(--border-color)!important}.paper-faq{max-width:1180px;margin:0 auto;padding:48px 32px 80px;font-family:var(--font-sans)}.paper-faq-hero{padding-bottom:40px;border-bottom:1px solid var(--border-color);margin-bottom:36px}.paper-faq-eyebrow{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.14em;text-transform:uppercase;margin-bottom:32px}.paper-faq-title{font-family:var(--font-serif);font-weight:400;font-size:clamp(2.6rem,5.5vw,4.6rem);line-height:1.03;letter-spacing:-.02em;color:var(--color);margin:0 0 22px;max-width:14em}.paper-faq-title em{font-style:italic;color:var(--color)}.paper-faq-lede{color:var(--ink-soft);font-size:18px;line-height:1.55;max-width:38em;margin:0}.paper-faq-lede a{color:var(--color);border-bottom:1px solid var(--color)}.paper-faq-lede a:hover{color:var(--accent);border-bottom-color:var(--accent)}.paper-faq-body{display:grid;grid-template-columns:220px 1fr;gap:60px;align-items:start}.paper-faq-toc{position:sticky;top:32px;font-size:14px}.paper-faq-toc-head{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.14em;text-transform:uppercase;padding-bottom:10px;margin-bottom:6px;border-bottom:1px solid var(--border-color)}.paper-faq-toc nav{display:flex;flex-direction:column}.paper-faq-toc nav a{color:var(--ink-soft);padding:8px 0 8px 14px;border-left:2px solid transparent;text-decoration:none;margin-left:-2px}.paper-faq-toc nav a.active,.paper-faq-toc nav a:hover{color:var(--color);border-left-color:var(--color)}.faq-section{min-width:0}.faq-section>div{width:100%}.faq-section h4.faq-cat{font-family:var(--font-serif);font-weight:400;font-size:clamp(1.7rem,2.6vw,2.2rem);letter-spacing:-.015em;color:var(--color);margin:0 0 6px;padding-bottom:14px;border-bottom:1px solid var(--border-color)}.faq-section h4.faq-cat i{display:none}.faq-section .panel-group{margin-bottom:56px}.faq-section .panel-default .panel-title a{display:block;position:relative;padding:22px 0 22px 42px;font-family:var(--font-serif);font-weight:400;font-size:20px;line-height:1.35;letter-spacing:-.005em;color:var(--color);text-decoration:none;cursor:pointer}.faq-section .panel-default .panel-title a:hover{color:var(--accent)}.faq-section .panel-heading{background:0 0;padding:0!important;border:none}.faq-section .panel-default{background:0 0;border:none;border-bottom:1px solid var(--border-soft);border-radius:0;margin-bottom:0!important;box-shadow:none}.faq-section .panel-default .panel-title{margin-bottom:0}.faq-section .panel-default .panel-title a:after{content:"−";position:absolute;left:0;right:auto;top:22px;transform:none;font-family:var(--font-mono);font-size:18px;line-height:1.35;color:var(--ink-muted);float:none;margin:0;font-weight:400}.faq-section .panel-default .panel-title a.collapsed:after{content:"+"}.faq-section .panel-default .panel-body{padding:0 0 22px 42px!important;color:var(--ink-soft);font-size:15px;line-height:1.65;border-top:none;max-width:42em}.table{color:var(--color)}.dropdown-divider,.table td,.table th,hr{border-color:var(--border-color)}.table.repositories td{word-break:break-word}loc{display:block;position:relative;width:100%;height:5px}loc .lang{float:left;height:100%}.rounded-circle.fa{display:inline-block;font-size:75px;height:140px;width:140px;border:4px solid;line-height:140px;text-align:center}.featurette-divider{margin:4.5rem 0;border-color:var(--border-color)}.featurette-heading{font-family:var(--font-serif);font-weight:400;font-size:2rem;line-height:1.15;letter-spacing:-.02em;margin-bottom:14px;color:var(--color)}.dark-mode .shadow{box-shadow:none}.dark-mode .overflow-auto::-webkit-scrollbar{width:10px}.dark-mode .overflow-auto::-webkit-scrollbar-track{-webkit-box-shadow:none;background:inherit;border-radius:0}.dark-mode .overflow-auto::-webkit-scrollbar-thumb{border-radius:10px;border:1px solid var(--border-color);background-color:var(--hover-bg-color)}.dark-mode .rgba-gradient{background:linear-gradient(135deg,#2a2d4a,#151728)}.section-number{padding-right:10px;font-weight:700;font-style:italic}.org-subscript-child{font-size:85%}.highlighted-line{position:absolute;background:rgba(100,200,100,.5);z-index:20}code,pre{font-family:"Fira Code","Courier New",Courier,monospace;line-height:1.1;color:var(--color)}.diff-file,.diff-index,.diff-lines{background:rgba(172,172,172,.5)}.diff-add{background:rgba(100,200,100,.5)}.diff-remove{background:rgba(200,100,100,.5)}.dashboard-title{font-size:1.375rem;font-weight:600;letter-spacing:-.01em}.quota-row{display:flex;gap:16px;margin-bottom:16px;padding:0}.quota-item{flex:1;min-width:0}.quota-header{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:4px}.quota-label{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.3px;opacity:.7}.quota-value{font-size:.8125rem;font-weight:500;font-variant-numeric:tabular-nums}.quota-progress{height:6px;border-radius:3px;background:var(--hover-bg-color)}.quota-progress .progress-bar{border-radius:3px}.filter-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;font-size:.8125rem;font-weight:500;background:var(--primary-bg);color:var(--primary-color);border-radius:12px;line-height:1.4}.filter-chip-close{display:inline-flex;align-items:center;justify-content:center;background:0 0;border:none;color:inherit;opacity:.7;cursor:pointer;padding:0;min-width:24px;min-height:24px;margin:-6px -6px -6px 0;font-size:1rem;line-height:1;border-radius:999px}.filter-chip-close:hover{opacity:1}.repo-list{list-style:none;padding:0;margin:0}.repo-list-item{display:flex;align-items:flex-start;justify-content:space-between;padding:16px 0;border-bottom:1px solid var(--border-color);gap:12px}.repo-list-item:first-child{border-top:1px solid var(--border-color)}.repo-list-item.repo-inactive{opacity:.6}.repo-list-item-content{flex:1;min-width:0}.repo-list-item-header{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:4px}.repo-name{font-family:var(--font-mono);font-size:14px;font-weight:500;color:var(--color);word-break:break-word}.repo-name:hover{color:var(--accent)}.repo-source{font-size:.875rem;opacity:.8;display:flex;flex-wrap:wrap;align-items:center;gap:6px}.repo-date{opacity:.7}.repo-meta{display:flex;flex-wrap:wrap;gap:12px;margin-top:8px;font-size:.8125rem;opacity:.7}.repo-meta span{display:inline-flex;align-items:center;gap:4px;white-space:nowrap}.repo-list-item-actions{flex-shrink:0;padding-top:2px;margin-left:14px}.repo-list-empty{display:flex;flex-direction:column;align-items:center;gap:8px;padding:48px 20px;opacity:.5;font-size:.9375rem;list-style:none;border-bottom:1px solid var(--border-color);border-top:1px solid var(--border-color)}.repo-list-empty i{font-size:1.75rem}.type-badge{display:inline-flex;align-items:center;gap:3px;font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:.3px;padding:2px 8px;border-radius:4px;white-space:nowrap}.type-badge{font-family:var(--font-mono);letter-spacing:.06em;padding:2px 8px;border-radius:999px;border:1px solid var(--border-color);background:var(--paper-bg-alt,transparent)}.type-badge.type-pr,.type-badge.type-repo{background:var(--paper-bg-alt);color:var(--ink-muted);border-color:var(--border-color)}.dark-mode .type-badge.type-pr,.dark-mode .type-badge.type-repo{background:rgba(255,255,255,.06);color:var(--ink-muted);border-color:var(--border-color)}.type-badge.type-coauthor{background:rgba(99,102,241,.12);color:#4f46e5;border-color:rgba(99,102,241,.35);margin-left:6px}.dark-mode .type-badge.type-coauthor{background:rgba(129,140,248,.18);color:#a5b4fc;border-color:rgba(165,180,252,.45)}.btn-group .btn:not(.btn-primary){background:var(--hover-bg-color)}.anonymize-page{display:flex;flex-direction:column;min-height:0}.anonymize-landing{flex:1 1 0;min-height:min-content;display:flex;align-items:center;justify-content:center;padding:20px}.anonymize-landing-inner{width:100%;max-width:600px}.anonymize-landing-inner h2{font-weight:700}.anonymize-workspace{display:flex;flex-direction:column;flex:1 1 0;min-height:0;background:var(--canvas-bg-color)}.anonymize-topbar{background:var(--paper-card);border-bottom:1px solid var(--border-color);padding:18px 28px;flex:0 0 auto}.anonymize-topbar-inner{max-width:1400px;margin:0 auto}.anonymize-topbar-head{display:flex;align-items:center;gap:14px;flex-wrap:wrap}.anonymize-topbar-title{margin:4px 0 0;font-size:clamp(1.8rem,3vw,2.4rem)}.anonymize-split{flex:1 1 auto;display:flex;min-height:0}.anonymize-form-col{flex:0 0 auto;width:100%;min-width:0;background:var(--canvas-bg-color);border-right:1px solid var(--border-color);overflow-y:auto}.anonymize-form-col .paper-settings-main{max-width:720px;padding:28px 32px 40px;margin:0}.anonymize-form-col .paper-settings-section:first-child{padding-top:0}.anonymize-form-col .anonymize-submit-bar{position:sticky;bottom:0;background:var(--canvas-bg-color);padding:14px 0 0;border-top:1px solid var(--border-color);margin-top:20px}.anonymize-form-col .anonymize-submit-bar .btn{width:100%;padding:12px 16px;font-size:15px}.anonymize-preview-col{flex:1 1 auto;min-width:0;overflow:auto;background:var(--paper-bg-alt);padding:28px 32px}.anonymize-preview-head{display:flex;align-items:baseline;gap:12px;padding-bottom:12px;border-bottom:1px solid var(--border-color);margin-bottom:20px}.anonymize-preview-head .paper-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted)}.anonymize-preview-sub{color:var(--ink-soft);font-size:13px}.anonymize-preview-body{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:28px 32px}.form-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.form-grid-3{display:grid;grid-template-columns:2fr 1fr 1fr;gap:16px}@media (max-width:700px){.form-grid-2,.form-grid-3{grid-template-columns:1fr}}.paper-optional{font-family:var(--font-sans);font-weight:400;color:var(--ink-muted);text-transform:none;letter-spacing:0;font-size:11px;margin-left:6px}.paper-plan-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px}.paper-plan-card{position:relative;display:block;padding:18px 20px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease;margin:0}.paper-plan-card input[type=radio]{position:absolute;opacity:0;pointer-events:none}.paper-plan-card.selected{border-color:var(--color);box-shadow:0 0 0 2px var(--color) inset}.paper-plan-head{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted)}.paper-plan-price{font-family:var(--font-serif);font-size:2rem;color:var(--color);margin:6px 0 4px}.paper-plan-price .paper-plan-per{font-family:var(--font-sans);font-size:12px;color:var(--ink-soft)}.paper-plan-desc{font-size:13px;color:var(--ink-soft)}.paper-plan-desc ul{padding-left:18px;margin:0}.paper-settings-copy{color:var(--ink-soft);font-size:13px;margin:0 0 14px}.anonymize-section-title{font-size:.875rem;font-weight:600;text-transform:uppercase;letter-spacing:.3px;margin:18px 0 8px 0;padding-bottom:6px;border-bottom:1px solid var(--border-color);opacity:.7}.anonymize-section-title i{margin-right:4px}.anonymize-submit-bar{padding:12px 0 4px 0}.anonymize-submit-bar .btn{font-size:1rem;padding:10px 20px;font-weight:600}.anonymize-page .form-check{padding-top:4px;padding-bottom:4px}.anonymize-page .form-check-label{font-weight:500}.anonymize-preview-col{min-height:0;min-width:0}.pr-diff pre{overflow-x:auto;max-width:100%}@media (min-width:768px){.anonymize-form-col{height:100%;width:520px;flex:0 0 520px}.anonymize-preview-col{height:100%;flex:1}}@media (max-width:767px){.anonymize-workspace{flex:0 0 auto;min-height:0}.anonymize-topbar{padding:14px 16px}.anonymize-topbar-title{font-size:1.5rem;margin-top:2px}.anonymize-split{display:flex;flex-direction:column;flex:1 1 auto;min-height:0}.anonymize-form-col{width:100%!important;flex:0 0 auto!important;height:auto!important;border-right:none;border-bottom:1px solid var(--border-color);overflow:visible}.anonymize-form-col .paper-settings-main{padding:18px 16px 24px;max-width:none}.anonymize-form-col .anonymize-submit-bar{position:sticky;bottom:0;margin:20px -16px 0;padding:12px 16px;background:var(--canvas-bg-color);border-top:1px solid var(--border-color);z-index:10}.anonymize-form-col .anonymize-submit-bar .btn{width:100%;padding:12px 16px;font-size:15px}.anonymize-preview-col{width:100%;flex:0 0 auto;height:auto!important;max-height:none;padding:18px 16px 24px;overflow:visible}.anonymize-preview-body{padding:16px;border-radius:8px}.anonymize-preview-body .pr-diff pre,.anonymize-preview-body pre{overflow-x:auto;max-width:100%}.anonymize-landing-inner{padding:16px}}@media (min-width:1280px){.anonymize-form-col{width:620px;flex:0 0 620px}}@media (max-width:767px){.btn{min-height:38px;padding:6px 14px;font-size:14px}.btn-sm{min-height:34px;padding:5px 10px}.navbar .nav-link{padding:8px 12px}.navbar .nav-link .fa,.navbar .nav-link .fab{font-size:24px;line-height:32px}.container.page{padding-left:15px;padding-right:15px;max-width:100%}h1{font-size:1.5rem}h2{font-size:1.375rem}h3{font-size:1.125rem}.repo-list-item{flex-direction:column}.repo-list-item-actions{align-self:flex-start}.quota-row{flex-direction:column;gap:10px;padding:10px 12px}.dropdown-menu{position:absolute;right:0;left:auto}.form-group{margin-bottom:12px}.form-control{font-size:16px}.status-bar{gap:6px;padding:8px 10px}.status-bar .btn{font-size:12px;padding:4px 10px;min-height:32px}.status-bar .paths{font-size:12px;overflow-x:auto;flex-wrap:nowrap;white-space:nowrap;-webkit-overflow-scrolling:touch}.status-bar .paths::-webkit-scrollbar{display:none}.status-bar-actions{flex-shrink:0;gap:4px}#home .display-4{font-size:1.75rem}#home h4.subtext-header{font-size:1rem}.progress:not(.quota-progress){min-width:120px!important}.badge{font-size:70%}.col-2.input-group{width:100%!important;max-width:100%;flex:0 0 100%}.color-text-secondary span{display:inline-block;margin-bottom:2px}.floatingchat-container-wrap{display:none!important}.anonymize-landing{align-items:flex-start;padding-top:60px}.anonymize-page .container-fluid>.row{height:auto!important;min-height:100%}.anonymize-form-col{width:100%!important;flex:0 0 100%!important;border-right:none;border-top:1px solid var(--border-color)}.anonymize-preview-col{height:auto!important;max-height:none}.anonymize-section-title{font-size:.8125rem;margin:12px 0 8px 0}.anonymize-submit-bar{position:sticky;bottom:0;background:var(--sidebar-bg-color);padding:10px 0;margin:0 -12px;padding-left:12px;padding-right:12px;border-top:1px solid var(--border-color);z-index:10}.anonymize-submit-bar .btn{font-size:1rem;padding:12px 20px}.anonymize-page .form-check{padding-top:6px;padding-bottom:6px;min-height:36px}.anonymize-page .form-check-label{font-size:.9375rem}.anonymize-page .card-body{padding:12px}.pr-title{font-size:1.125rem}.pr-diff pre{font-size:.75rem}.pr-comment .mb-1 h5{font-size:1rem}.nav-tabs .nav-link{padding:8px 12px;font-size:.875rem}}@media (min-width:768px) and (max-width:991px){.container.page{max-width:100%;padding-left:15px;padding-right:15px}.leftCol{flex:0 0 250px;width:250px}}.explorer-page{display:flex;height:100%;width:100%;background:var(--canvas-bg-color);position:relative}.explorer-main{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;overflow:hidden;background:var(--canvas-bg-color)}.explorer-content{flex:1 1 auto;min-height:0;width:100%;overflow:auto}.leftCol-close,.leftCol-head{display:none}.leftCol-body{flex:1 1 auto;min-height:0;overflow:auto}.leftCol-foot{padding:8px 12px;border-top:1px solid var(--border-color);background:var(--paper-bg-alt)}.leftCol-foot .last-update{display:block;border-top:none;padding:0}.leftCol-backdrop{display:none}.paper-inline-warning{display:flex;align-items:flex-start;gap:8px;margin:8px;padding:10px 12px;background:rgba(138,107,30,.08);border:1px solid rgba(138,107,30,.35);border-radius:8px;color:var(--color);font-size:13px;line-height:1.4}.paper-inline-warning i{color:#8a6b1e;margin-top:2px;flex-shrink:0}.dark-mode .paper-inline-warning i{color:#ffd37a}@media (min-width:768px){.leftCol-body{padding:8px 4px}}.sidebar-toggle{display:none;align-items:center;gap:8px;position:fixed;bottom:18px;right:18px;z-index:1100;padding:10px 14px;background:var(--color);color:var(--canvas-bg-color);border:1px solid var(--color);border-radius:999px;font-family:var(--font-sans);font-size:13px;font-weight:500;box-shadow:0 6px 20px rgba(0,0,0,.15);cursor:pointer;outline:0}.sidebar-toggle:hover{background:var(--primary-hover-bg)}.sidebar-toggle:focus,.sidebar-toggle:focus-visible{outline:0;box-shadow:0 6px 20px rgba(0,0,0,.15)}@media (max-width:991px){.sidebar-toggle{display:inline-flex}.leftCol{position:fixed;top:0;left:0;bottom:0;width:min(86vw,340px);max-width:340px;z-index:1200;border:none;border-right:1px solid var(--border-color);transform:translateX(0);transition:transform .22s ease;box-shadow:4px 0 24px rgba(0,0,0,.18);background:var(--sidebar-bg-color)}.leftCol.collapsed{transform:translateX(-105%);box-shadow:none;pointer-events:none}.leftCol-head{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;border-bottom:1px solid var(--border-color);background:var(--paper-bg-alt)}.leftCol-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted)}.leftCol-close{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;background:0 0;border:1px solid var(--border-color);border-radius:8px;color:var(--ink-muted);cursor:pointer}.leftCol-close:hover{color:var(--color);border-color:var(--color)}.leftCol-foot{display:block}.leftCol-body{padding:4px 0}.leftCol-backdrop{display:block;position:fixed;inset:0;background:rgba(0,0,0,.32);z-index:1150;backdrop-filter:blur(2px)}.dark-mode .leftCol-backdrop{background:rgba(0,0,0,.5)}}.admin-nav{display:flex;gap:4px;padding:4px;margin:8px 0 20px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;flex-wrap:wrap}.admin-nav a{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;border-radius:7px;color:var(--ink-muted);text-decoration:none;font-family:var(--font-mono);font-size:12px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;transition:background-color .15s,color .15s;white-space:nowrap}.admin-nav a:hover{background:var(--paper-bg-alt);color:var(--color)}.admin-nav a.active{background:var(--color);color:var(--paper-card)}.admin-nav a i{font-size:12px;width:14px;text-align:center}@media (max-width:767px){.admin-nav{flex-direction:column}.admin-nav a{justify-content:flex-start}}.admin-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px;margin-bottom:16px}.admin-stat-card{background:var(--paper-card);border:1px solid var(--border-color);border-radius:8px;padding:10px 12px}.admin-stat-card .stat-value{font-family:var(--font-serif);font-size:1.375rem;font-weight:400;line-height:1.1;color:var(--color)}.admin-stat-card .stat-label{font-family:var(--font-mono);font-size:10px;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;margin-top:4px}.admin-toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:16px 0 12px}.admin-toolbar .form-control{max-width:320px}@media (max-width:767px){.admin-toolbar .form-control{max-width:100%;width:100%}}.pagination-compact{display:inline-flex;align-items:center;gap:6px;flex-wrap:nowrap;font-family:var(--font-mono);font-size:12px;color:var(--ink-muted)}.pagination-compact input{width:60px;text-align:center;flex-shrink:0}.pagination-compact .btn{padding:4px 10px;min-height:34px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color);flex-shrink:0}.pagination-compact>span{white-space:nowrap}.admin-list-item{display:flex;align-items:flex-start;gap:12px;padding:12px 0;border-bottom:1px solid var(--border-color)}.admin-list-item:last-child{border-bottom:none}.admin-list-item .item-main{flex:1;min-width:0}.admin-list-item .item-title{font-size:1rem;font-weight:600;margin-bottom:4px;word-break:break-word}.admin-list-item .item-meta{font-size:.875rem;opacity:.8}.admin-list-item .item-meta span{margin-right:12px;display:inline-block;margin-bottom:2px}.admin-list-item .item-actions{flex-shrink:0}@media (max-width:767px){.admin-list-item{flex-direction:column;gap:8px}.admin-list-item .item-actions{align-self:flex-start}}.status-badge{display:inline-block;font-size:11px;font-weight:600;padding:2px 8px;border-radius:10px;text-transform:uppercase;letter-spacing:.3px;vertical-align:middle}.status-badge{font-family:var(--font-sans);font-weight:500;letter-spacing:.02em;border:1px solid transparent;text-transform:none;font-size:12px;padding:1px 9px 2px;border-radius:999px}.status-badge.status-ready{background:#e8f3ec;color:#2f7a44;border-color:#cfe6d6}.status-badge.status-error{background:#fbe7e7;color:#b42318;border-color:#f3c7c7}.status-badge.status-download,.status-badge.status-preparing{background:#eef0ff;color:#3b4ad6;border-color:#d4d8fa}.status-badge.status-expired,.status-badge.status-expiring,.status-badge.status-removed,.status-badge.status-removing{background:var(--paper-bg-alt);color:var(--ink-muted);border-color:var(--border-color)}.status-badge.status-active{background:#e8f3ec;color:#2f7a44;border-color:#cfe6d6}.queue-job-card{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:16px 18px;margin-bottom:10px}.queue-job-card .job-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;flex-wrap:wrap;gap:8px}.queue-job-card .job-id{font-family:var(--font-mono);font-size:.9375rem;color:var(--color);word-break:break-all;display:flex;align-items:center;gap:10px}.queue-job-card .job-timestamps{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);display:flex;flex-wrap:wrap;gap:14px}.queue-job-card .job-actions{display:flex;gap:8px;margin-top:10px}.queue-job-card .job-actions .btn{font-size:12px;padding:4px 12px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color)}.admin-section-header{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:24px 0 12px;padding-bottom:8px;border-bottom:1px solid var(--border-color)}.admin-section-header h2{margin:0;font-family:var(--font-mono);font-size:11px;font-weight:500;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em}.admin-section-header h2 i{margin-right:6px;color:var(--ink-muted)}.admin-section-header .section-count{background:var(--paper-bg-alt);color:var(--ink-muted);border:1px solid var(--border-color);font-family:var(--font-mono);font-size:11px;padding:1px 10px;border-radius:999px}.user-detail-card{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:22px;margin-bottom:24px}.user-detail-card .user-header{display:flex;align-items:center;gap:16px;margin-bottom:18px;padding-bottom:16px;border-bottom:1px solid var(--border-color);flex-wrap:wrap}.user-detail-card .user-header img{border-radius:50%}.user-detail-card .user-header h2{margin:0;font-family:var(--font-serif);font-weight:400;font-size:1.5rem;display:flex;align-items:center;gap:10px;flex-wrap:wrap}.user-detail-grid{display:grid;grid-template-columns:160px 1fr;gap:10px 20px;font-size:.9375rem}.user-detail-grid .detail-label{font-family:var(--font-mono);font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);white-space:nowrap;padding-top:2px}.user-detail-grid .detail-value{word-break:break-all;color:var(--color)}@media (max-width:767px){.user-detail-grid{grid-template-columns:1fr}.user-detail-grid .detail-label{margin-top:8px;border-top:1px solid var(--border-color);padding-top:8px}.user-detail-grid .detail-label:first-child{border-top:none;margin-top:0;padding-top:0}}.paper-empty{min-height:calc(100vh - 60px);display:flex;align-items:center;justify-content:center;padding:40px 24px}.paper-empty-inner{max-width:560px;text-align:left}.paper-empty-title{font-family:var(--font-serif);font-weight:400;font-size:clamp(2.4rem,6vw,4.4rem);line-height:1.02;letter-spacing:-.025em;margin:18px 0 20px;color:var(--color)}.paper-empty-title em{color:var(--accent);font-style:italic}.paper-empty-lede{font-size:18px;line-height:1.55;color:var(--ink-soft);text-wrap:pretty}.paper-empty-cta{display:flex;gap:10px;margin-top:28px;flex-wrap:wrap}.paper-page{max-width:1100px;margin:0 auto;padding:32px 32px 80px}@media (max-width:991px){.paper-page,.paper-page.container,.paper-page.container-fluid{padding:20px 18px 60px!important}.paper-page .row{margin-left:0;margin-right:0}.paper-page .row>.w-100,.paper-page .row>[class*=col]{padding-left:0;padding-right:0}.navbar.navbar-expand-lg{padding:10px 18px!important}.navbar .navbar-collapse{margin:10px -18px 0;padding:12px 18px 16px;border-top:1px solid var(--border-color);background:var(--header-bg-color)}.navbar .navbar-nav{align-items:stretch!important;gap:2px}.navbar .navbar-nav .nav-item,.navbar .navbar-nav .nav-link{width:100%}.navbar .nav-link{display:flex!important;align-items:center;justify-content:flex-start;margin:0!important;padding:12px 4px!important;border-bottom:1px solid var(--border-color)!important;border-radius:0;font-size:14px;line-height:1.2;gap:0;min-height:44px;box-sizing:border-box}.navbar .nav-link:not(.btn-signin):not(.user-chip){color:var(--color)!important}.navbar .nav-link .fa,.navbar .nav-link .fab,.navbar .nav-link .fas,.navbar .nav-link i{display:inline-flex!important;align-items:center;justify-content:center;width:28px;flex-shrink:0;font-size:16px;line-height:1;margin:0 10px 0 0!important}.navbar .navbar-nav .nav-item:last-child .nav-link,.navbar .navbar-nav>.nav-link:last-child{border-bottom-color:transparent!important}.navbar .nav-link.active{color:var(--color)!important;border-bottom-color:var(--border-color)!important}.navbar .nav-item>.nav-link:not(.btn-signin):not(.user-chip)::before{content:'';display:inline-block;width:28px;margin-right:10px;flex-shrink:0}.navbar .nav-link.nav-icon::before,.navbar .nav-link:has(>i)::before{display:none!important}.navbar .nav-link.nav-icon{width:100%!important;height:auto!important;justify-content:flex-start!important;padding:12px 4px!important}.navbar .nav-link.nav-icon::after{content:attr(title);font-family:var(--font-sans);font-size:14px;color:var(--color)}.navbar .btn-signin{display:inline-flex!important;width:auto!important;align-self:flex-start;justify-content:center;height:40px;padding:0 18px!important;margin:14px 0 0!important;border-radius:8px;border-bottom:none!important}.navbar .btn-signin i{margin:0 8px 0 0!important;width:auto!important}.navbar .user-chip-wrap{width:100%}.navbar .user-chip{display:flex!important;width:100%;margin:0!important;padding:10px 4px!important;background:0 0!important;border:none!important;border-bottom:1px solid var(--border-color)!important;border-radius:0!important;justify-content:flex-start;gap:0;min-height:44px}.navbar .user-chip::before{display:none!important}.navbar .user-chip img{width:28px!important;height:28px!important;margin-right:10px!important;flex-shrink:0}.navbar .user-chip .user-chip-name{font-size:14px;font-weight:500;color:var(--color)!important}.navbar .user-chip.dropdown-toggle::after{margin-left:auto;color:var(--ink-muted)}.navbar .user-chip-wrap .dropdown-menu{position:static!important;float:none;width:100%;margin:0!important;padding:0!important;background:0 0!important;border:none!important;box-shadow:none!important;transform:none!important}.navbar .user-chip-wrap .dropdown-menu .dropdown-item{padding:10px 4px 10px 42px!important;font-size:14px;color:var(--ink-muted)!important;background:0 0!important;border-bottom:1px solid var(--border-color);text-align:left!important}.navbar .user-chip-wrap .dropdown-menu .dropdown-item:last-child{border-bottom:none}.navbar .user-chip-wrap .dropdown-divider{display:none}.navbar-brand{border-right:none!important;padding-right:0!important;margin-right:0!important}.dark-mode .navbar .navbar-collapse{background:var(--header-bg-color);border-top-color:var(--border-color)}.dark-mode .navbar .nav-link{border-bottom-color:var(--border-color)!important}.dark-mode .navbar-toggler .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='%23f5f5f5' stroke-width='2' stroke-linecap='round' d='M4 8h22M4 15h22M4 22h22'/%3E%3C/svg%3E")!important}}.status-pill{display:inline-flex;align-items:center;gap:8px;padding:6px 12px;border-radius:999px;background:var(--paper-bg-alt);border:1px solid var(--border-color);color:var(--ink-soft);font-family:var(--font-mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase}.paper-progress{position:relative;height:auto;background:0 0;margin:18px 0 8px}.paper-progress::before{content:"";display:block;height:8px;background:var(--paper-bg-alt);border-radius:999px}.paper-progress .paper-progress-bar{position:absolute;top:0;left:0;height:8px;background:var(--color);border-radius:999px;transition:width .4s ease;min-width:4px}.paper-progress .paper-progress-label{display:flex;justify-content:space-between;align-items:center;margin-top:10px;font-family:var(--font-mono);font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-muted)}.paper-progress .paper-progress-pct{color:var(--color)}.paper-progress.paper-progress-ready .paper-progress-bar{background:var(--color)}.paper-error-card{margin-top:18px;padding:20px 22px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-left:3px solid #c53030;border-radius:10px;color:var(--color)}.dark-mode .paper-error-card{border-left-color:#ff8b7b}.paper-ratelimit-card{margin-top:18px;padding:20px 22px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-left:3px solid #d69e2e;border-radius:10px;color:var(--color)}.dark-mode .paper-ratelimit-card{border-left-color:#f6e05e}.paper-ratelimit-head{display:flex;align-items:flex-start;gap:14px}.paper-ratelimit-head>i{font-size:18px;color:#d69e2e;margin-top:4px;flex-shrink:0}.dark-mode .paper-ratelimit-head>i{color:#f6e05e}.paper-ratelimit-card strong{color:var(--color)}.status-pill-ratelimit{border-color:#d69e2e;color:#d69e2e}.dark-mode .status-pill-ratelimit{border-color:#f6e05e;color:#f6e05e}.status-ratelimit{background:#d69e2e}.dark-mode .status-ratelimit{background:#f6e05e}.paper-error-head{display:flex;align-items:flex-start;gap:14px}.paper-error-head>i{font-size:18px;color:#c53030;margin-top:4px;flex-shrink:0}.dark-mode .paper-error-head>i{color:#ff8b7b}.paper-error-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted)}.paper-error-title{font-family:var(--font-serif);font-size:1.375rem;line-height:1.2;margin-top:2px;color:var(--color)}.paper-error-msg{margin:12px 0 0;font-size:14px;line-height:1.55;color:var(--ink-soft);font-family:var(--font-mono);word-break:break-word;white-space:pre-wrap}.paper-error-hints{margin:14px 0 0;padding-left:18px;color:var(--ink-soft);font-size:14px;line-height:1.6}.paper-error-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:18px}.paper-detail-grid{display:grid;grid-template-columns:160px 1fr;gap:10px 20px;margin-top:18px;font-size:.9375rem}.paper-detail-grid .detail-label{font-family:var(--font-mono);font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);white-space:nowrap;padding-top:2px}.paper-detail-grid .detail-value{word-break:break-all;color:var(--color)}.paper-detail-grid .detail-value a{color:var(--color);border-bottom:1px solid var(--border-color)}.paper-detail-grid .detail-value a:hover{border-bottom-color:var(--color)}@media (max-width:700px){.paper-detail-grid{grid-template-columns:1fr;gap:4px 0}.paper-detail-grid .detail-label{padding-top:8px}}.paper-support-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px;margin:18px 0 28px}.paper-support-card{display:flex;flex-direction:column;gap:10px;padding:20px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;color:var(--color);text-decoration:none;transition:border-color .15s ease,transform .15s ease}.paper-support-card:hover{border-color:var(--color);text-decoration:none;color:var(--color)}.paper-support-card .paper-support-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);display:flex;align-items:center;gap:8px}.paper-support-card p{margin:0;font-size:14px;line-height:1.55;color:var(--ink-soft)}.paper-support-card .paper-support-cta{margin-top:auto;font-size:13px;font-weight:500;color:var(--color);display:inline-flex;align-items:center;gap:6px}.paper-support-card:hover .paper-support-cta i{transform:translateX(2px)}.paper-support-card .paper-support-cta i{transition:transform .15s ease}.pr-page{min-height:100%;background:var(--canvas-bg-color)}.pr-page-inner{padding-top:24px;padding-bottom:60px}.pr-header{margin:6px 0 18px}.pr-title{margin:4px 0 10px;font-size:clamp(1.6rem,3vw,2.4rem);line-height:1.15;word-break:break-word}.pr-header-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;font-family:var(--font-mono);font-size:12px;color:var(--ink-muted)}.pr-header-meta .pr-meta-item{display:inline-flex;align-items:center;gap:6px}.pr-header-meta .pr-meta-item i{color:var(--ink-muted)}.pr-body-card{margin:18px 0 24px;padding:20px 22px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px}.pr-body-card .paper-section-eyebrow{margin-bottom:12px}.paper-tabs{display:flex;flex-wrap:wrap;gap:0;border-bottom:1px solid var(--border-color);margin:18px 0 0}.paper-tabs .paper-tab{display:inline-flex;align-items:center;gap:8px;padding:10px 16px;background:0 0;border:0;border-bottom:2px solid transparent;font-family:var(--font-sans);font-size:14px;font-weight:500;color:var(--ink-muted);cursor:pointer;transition:color .15s ease,border-color .15s ease;margin-bottom:-1px}.paper-tabs .paper-tab:hover{color:var(--color)}.paper-tabs .paper-tab.active{color:var(--color);border-bottom-color:var(--color)}.paper-tabs .paper-tab i{color:inherit;opacity:.85}.paper-tabs .paper-tab:active,.paper-tabs .paper-tab:focus,.paper-tabs .paper-tab:focus-visible{outline:0;box-shadow:none}.paper-tabs .paper-tab:focus-visible{color:var(--color);background:var(--hover-bg-color);border-radius:6px 6px 0 0}.pr-diff{margin:16px 0 28px;display:flex;flex-direction:column;gap:16px}.diff-file-block{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;overflow:hidden}.diff-file-header{display:flex;align-items:center;gap:10px;padding:10px 14px;background:var(--paper-bg-alt);border-bottom:1px solid var(--border-color);font-family:var(--font-mono);font-size:13px;color:var(--color)}.diff-file-icon{color:var(--ink-muted);flex-shrink:0}.diff-file-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-break:break-all}.diff-file-status{flex-shrink:0;padding:2px 8px;border-radius:999px;font-size:10px;letter-spacing:.12em;text-transform:uppercase;border:1px solid var(--border-color);color:var(--ink-muted);background:var(--paper-card)}.diff-file-status-added{color:#2f6b3e;border-color:rgba(47,107,62,.35);background:rgba(47,107,62,.08)}.diff-file-status-deleted{color:#a13a2e;border-color:rgba(161,58,46,.35);background:rgba(161,58,46,.08)}.diff-file-status-renamed{color:#8a6b1e;border-color:rgba(138,107,30,.35);background:rgba(138,107,30,.08)}.dark-mode .diff-file-status-added{color:#a7e2a7;border-color:rgba(167,226,167,.35);background:rgba(167,226,167,.08)}.dark-mode .diff-file-status-deleted{color:#ff8b7b;border-color:rgba(255,139,123,.35);background:rgba(255,139,123,.08)}.dark-mode .diff-file-status-renamed{color:#ffd37a;border-color:rgba(255,211,122,.35);background:rgba(255,211,122,.08)}.diff-file-table{width:100%;border-collapse:collapse;font-family:var(--font-mono);font-size:13px;line-height:1.55;table-layout:fixed}.diff-file-table tr.diff-row{vertical-align:top}.diff-file-table .diff-gutter{width:48px;padding:0 10px;text-align:right;color:var(--ink-muted);background:var(--paper-bg-alt);border-right:1px solid var(--border-color);user-select:none;font-variant-numeric:tabular-nums;vertical-align:top;white-space:nowrap}.diff-file-table .diff-gutter-new{border-right:1px solid var(--border-color)}.diff-file-table .diff-sign{width:18px;padding:0 6px;text-align:center;color:var(--ink-muted);background:var(--paper-bg-alt);user-select:none;vertical-align:top}.diff-file-table .diff-code{padding:1px 12px;white-space:pre-wrap;word-break:break-word;color:var(--color)}.diff-row-hunk td{background:var(--paper-bg-alt)!important;color:var(--ink-muted);border-top:1px solid var(--border-color);border-bottom:1px solid var(--border-color);font-size:12px;letter-spacing:.02em;padding-top:6px;padding-bottom:6px}.diff-row-hunk .diff-code{color:var(--ink-muted)}.diff-row-add .diff-code{background:rgba(47,107,62,.1);color:#1f4a2a}.diff-row-add .diff-gutter,.diff-row-add .diff-sign{background:rgba(47,107,62,.06);color:#2f6b3e}.diff-row-remove .diff-code{background:rgba(161,58,46,.1);color:#6e1f1a}.diff-row-remove .diff-gutter,.diff-row-remove .diff-sign{background:rgba(161,58,46,.06);color:#a13a2e}.dark-mode .diff-row-add .diff-code{background:rgba(167,226,167,.1);color:#c9f0c9}.dark-mode .diff-row-add .diff-gutter,.dark-mode .diff-row-add .diff-sign{background:rgba(167,226,167,.06);color:#a7e2a7}.dark-mode .diff-row-remove .diff-code{background:rgba(255,139,123,.1);color:#ffc9c0}.dark-mode .diff-row-remove .diff-gutter,.dark-mode .diff-row-remove .diff-sign{background:rgba(255,139,123,.06);color:#ff8b7b}@media (max-width:700px){.diff-file-table{font-size:12px}.diff-file-table .diff-gutter{width:36px;padding:0 6px}.diff-file-table .diff-sign{width:14px;padding:0 4px}.diff-file-table .diff-code{padding:1px 8px}}.pr-comments{list-style:none;margin:16px 0 28px;padding:0;display:flex;flex-direction:column;gap:12px}.pr-comment{padding:16px 18px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px}.pr-comment-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;flex-wrap:wrap;padding-bottom:8px;margin-bottom:8px;border-bottom:1px solid var(--border-color)}.pr-comment-author{font-weight:600;color:var(--color);font-size:14px;display:inline-flex;align-items:center;gap:6px}.pr-comment-author i{color:var(--ink-muted);font-size:12px}.pr-comment-date{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);letter-spacing:.02em}.pr-comment-body{color:var(--color);font-size:14px;line-height:1.6}.pr-comment-body :last-child{margin-bottom:0}@media (max-width:700px){.pr-page-inner{padding-top:14px;padding-bottom:40px}.pr-body-card{padding:14px 14px;border-radius:8px}.pr-comment{padding:12px 14px}.paper-tabs .paper-tab{padding:10px 12px;font-size:13px}.pr-diff pre{font-size:12px;padding:12px}}.toast{background-color:var(--paper-card)!important;color:var(--color)!important;border:1px solid var(--border-color)!important;border-radius:10px!important;box-shadow:0 8px 24px rgba(0,0,0,.08);backdrop-filter:none;min-width:280px;max-width:calc(100vw - 24px)}.toast .toast-header{background:0 0!important;color:var(--color)!important;border-bottom:1px solid var(--border-color)!important;font-family:var(--font-sans);padding:10px 12px}.toast .toast-header strong{font-weight:600;color:var(--color);letter-spacing:.01em}.toast .toast-header .close{color:var(--ink-muted)!important;text-shadow:none;opacity:.9;font-size:1.25rem}.toast .toast-header .close:hover{color:var(--color)!important;opacity:1}.toast .toast-body{color:var(--color)!important;padding:12px;font-size:14px;line-height:1.45}.dark-mode .toast{box-shadow:0 8px 24px rgba(0,0,0,.5)}.paper-crumbs{font-family:var(--font-sans);font-size:12px;color:var(--ink-muted);letter-spacing:0}.paper-crumbs .here,.paper-crumbs a{color:var(--color);text-decoration:none}.paper-page-title{font-family:var(--font-sans);font-weight:600;font-size:32px;line-height:1.2;letter-spacing:-.035em;margin:8px 0 6px;color:var(--color)}.paper-page-title em{color:inherit;font-style:normal}.paper-page-lede{color:var(--ink-soft);font-size:16px;max-width:640px;line-height:1.55}.paper-meta-rule{display:flex;flex-wrap:wrap;gap:16px 24px;align-items:center;margin:22px 0 18px;padding:12px 0;border-top:1px solid var(--border-color);border-bottom:1px solid var(--border-color);font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);letter-spacing:.02em}.paper-meta-rule b{color:var(--color);font-weight:500}.paper-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:10px;padding:20px 22px}.dark-mode .paper-card{background:var(--admin-stat-bg)}.paper-section-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);font-weight:500;margin-bottom:10px;display:block}.paper-section-title{font-family:var(--font-serif);font-weight:400;font-size:22px;letter-spacing:-.01em;margin:0 0 8px}.paper-kbd{display:inline-block;font-family:var(--font-mono);font-size:11px;padding:1px 6px;border:1px solid var(--border-color);border-bottom-width:2px;border-radius:3px;background:var(--paper-card,#fff);color:var(--color)}.paper-pill{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-mono);font-size:11px;padding:2px 8px;border:1px solid var(--border-color);border-radius:999px;color:var(--ink-soft);background:var(--paper-card,#fff);letter-spacing:.04em}.paper-pill.accent{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.paper-pill.good{border-color:#2f6b3e;color:#2f6b3e}.paper-pill.warn{border-color:#8a6b1e;color:#8a6b1e}.paper-pill.bad{border-color:#a13a2e;color:#a13a2e}.paper-row{display:grid;grid-template-columns:1fr auto;gap:16px;align-items:start;padding:18px 0;border-bottom:1px solid var(--border-color)}.paper-row:first-child{border-top:1px solid var(--border-color)}.paper-row .row-title{font-family:var(--font-serif);font-size:20px;letter-spacing:-.01em;line-height:1.2}.paper-row .row-title a{color:var(--color)}.paper-row .row-meta{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.03em;margin-top:6px;display:flex;flex-wrap:wrap;gap:14px}.paper-row .row-actions{display:flex;gap:6px;flex-shrink:0}.paper-form-step{display:grid;grid-template-columns:48px 1fr;gap:20px;padding:22px 0;border-bottom:1px solid var(--border-color)}.paper-form-step:first-child{border-top:1px solid var(--border-color)}.paper-form-step .step-num{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);padding-top:4px;letter-spacing:.02em}.paper-form-step .step-title{font-family:var(--font-serif);font-size:22px;letter-spacing:-.01em;line-height:1.2;margin-bottom:4px}.paper-form-step .step-sub{color:var(--ink-soft);font-size:14px;margin-bottom:14px;text-wrap:pretty}.paper-field-label{font-family:var(--font-sans);font-size:13px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--color);margin-bottom:6px;display:block}.paper-switch-row{display:flex;align-items:center;justify-content:space-between;padding:10px 0;gap:16px}.paper-switch-row+.paper-switch-row{border-top:1px dashed var(--border-soft)}.paper-switch-row .sw-label{font-weight:500}.paper-switch-row .sw-sub{display:block;font-size:13px;color:var(--ink-muted);margin-top:2px}.paper-page .custom-select,.paper-page .form-control{border-radius:6px;border-color:var(--border-color);font-size:14px;padding:8px 12px;height:auto;background:var(--input-bg);color:var(--input-color)}.paper-page .custom-select:focus,.paper-page .form-control:focus{color:var(--input-color);background:var(--input-bg);border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}.custom-select:focus,.form-control:focus,input:focus,select:focus,textarea:focus{color:var(--input-color)!important;background-color:var(--input-bg)!important}.form-control::selection,input::selection,textarea::selection{background:var(--accent-soft);color:var(--input-color)}.dark-mode .form-control::selection,.dark-mode input::selection,.dark-mode textarea::selection{background:rgba(167,178,255,.3);color:var(--input-color)}.btn.btn-ink{background:var(--color);color:var(--canvas-bg-color);border:1px solid var(--color);font-weight:500;border-radius:6px;padding:8px 14px}.btn.btn-ink:hover{background:var(--primary-hover-bg);color:var(--canvas-bg-color);border-color:var(--primary-hover-bg)}.btn.btn-accent{background:var(--accent);color:#fff;border:1px solid var(--accent);font-weight:500;border-radius:6px}.btn.btn-accent:hover{background:#2e3bb8;border-color:#2e3bb8;color:#fff}.paper-page .dashboard-filter-row{display:flex;align-items:center;gap:10px;padding:14px 0;border-top:1px solid var(--border-color);border-bottom:1px solid var(--border-color);margin:18px 0 0;flex-wrap:wrap}.paper-page .dashboard-filter-row .form-control{height:38px;background:var(--paper-card)}.paper-page .dashboard-filter-controls{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.paper-page .dashboard-filter-row .btn-group .btn,.paper-page .dashboard-filter-row .dropdown-toggle{background:var(--paper-card);border:1px solid var(--border-color);color:var(--color);height:38px;padding:0 14px;font-size:14px;font-weight:500;border-radius:var(--radius-control,6px);display:inline-flex;align-items:center;gap:6px;line-height:1}.paper-page .dashboard-filter-row .dropdown-toggle .filter-btn-label{color:var(--ink-muted);font-weight:500}.paper-page .dashboard-filter-row .dropdown-toggle .filter-btn-label::after{content:"·";margin-left:6px;color:var(--ink-faint)}.paper-page .dashboard-filter-row .dropdown-toggle .filter-btn-value{font-weight:500}.paper-page .dashboard-filter-row .dropdown-toggle .fas{font-size:11px;color:var(--ink-muted)}.paper-page .dashboard-filter-row .btn-group .btn:hover,.paper-page .dashboard-filter-row .dropdown-toggle:hover{background:var(--hover-bg-color);border-color:var(--border-color);color:var(--color)}.paper-page .dashboard-filter-row .btn-group{gap:0}.paper-page .dashboard-filter-row .btn-group .btn{border-radius:0;border-right-width:0}.paper-page .dashboard-filter-row .btn-group .btn:first-child{border-top-left-radius:6px;border-bottom-left-radius:6px}.paper-page .dashboard-filter-row .btn-group .btn:last-child{border-top-right-radius:6px;border-bottom-right-radius:6px;border-right-width:1px}.paper-page .dashboard-filter-row .btn-group .btn.btn-primary{background:var(--color);color:var(--canvas-bg-color);border-color:var(--color)}.paper-page .dashboard-filter-row .search-wrap{flex:1 1 280px;min-width:220px}.paper-page .quota-row{display:grid;grid-template-columns:repeat(3,1fr);gap:40px;margin:24px 0 0;padding:0;background:0 0;border:none;border-radius:0}.paper-page .quota-label{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);opacity:1}.paper-page .quota-value{font-family:var(--font-mono);font-size:13px;font-variant-numeric:tabular-nums;color:var(--color)}.paper-page .quota-value .quota-unlimited-tag{font-family:var(--font-sans);font-size:12px;color:var(--ink-muted);margin-left:4px}.paper-page .quota-track{height:6px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:999px;overflow:hidden;width:100%;min-width:0}.paper-page .quota-track .quota-fill{height:100%;min-width:2px;border-radius:999px;background:var(--color);transition:width .3s ease}.paper-page .quota-track.quota-warn .quota-fill{background:var(--status-progress)}.paper-page .quota-track.quota-danger .quota-fill{background:var(--status-error)}.paper-page .quota-track.quota-unlimited{background:repeating-linear-gradient(-45deg,var(--paper-bg-alt) 0 4px,var(--border-soft,var(--border-color)) 4px 6px)}.paper-page .repo-list{margin-top:8px}.paper-page .repo-list-item{padding:20px 0;gap:16px;border-bottom:1px solid var(--border-soft,var(--border-color))}.paper-page .repo-list-item:first-child{border-top:none}.paper-page .repo-list-item-header{gap:10px;margin-bottom:6px}.paper-page .repo-name{font-family:var(--font-mono);font-size:15px;color:var(--color)}.paper-page .repo-source{font-size:13px;color:var(--ink-soft);opacity:1;gap:10px}.paper-page .repo-source a{color:var(--ink-soft);border-bottom:1px dotted var(--border-color)}.paper-page .repo-source a:hover{color:var(--color)}.paper-page .repo-meta{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);opacity:1;gap:16px;margin-top:10px}.paper-page .type-badge{font-family:var(--font-mono);font-size:11px;padding:3px 8px;letter-spacing:.1em}.paper-page .repo-list-item-actions .dropdown-toggle{background:var(--paper-card);border:1px solid var(--border-color);color:var(--color);border-radius:6px;font-size:13px;padding:6px 12px;height:auto}.paper-settings{max-width:1180px;margin:0 auto;padding:48px 32px 80px}.paper-settings .paper-page-title{max-width:14em}.paper-settings-body{display:grid;grid-template-columns:220px 1fr;gap:60px;margin-top:32px;border-top:1px solid var(--border-color);padding-top:28px}.paper-settings-toc{position:sticky;top:32px;align-self:start}.paper-settings-toc-head{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);margin-bottom:12px}.paper-settings-toc nav{display:flex;flex-direction:column;gap:2px}.paper-settings-toc nav a{padding:8px 0 8px 14px;border-left:2px solid transparent;color:var(--ink-soft);font-size:14px;text-decoration:none}.paper-settings-toc nav a.active,.paper-settings-toc nav a:hover{color:var(--color);border-left-color:var(--color)}.paper-settings-main{min-width:0;max-width:720px}.paper-settings-section{padding:28px 0;border-bottom:1px solid var(--border-soft,var(--border-color))}.paper-settings-section:first-child{padding-top:0}.paper-settings-section:last-of-type{border-bottom:none}.paper-settings-section .form-group{margin-bottom:18px}.paper-settings-section .form-check{padding:10px 0 10px 28px;border-bottom:1px solid var(--border-soft,var(--border-color))}.paper-settings-section .form-check:last-child{border-bottom:none}.paper-settings-section .form-check-label{font-family:var(--font-sans);font-size:14px;font-weight:500;color:var(--color);cursor:pointer}.paper-settings-section .form-check-input{cursor:pointer;width:16px;height:16px;margin-top:3px;margin-left:-28px;accent-color:var(--color)}.paper-settings-section .form-text{color:var(--ink-soft);font-size:13px;margin-top:4px;max-width:48em}.paper-settings-section .paper-section-copy{margin:-4px 0 14px}.paper-settings-footer{padding-top:24px;display:flex;flex-direction:column;gap:14px}.paper-settings-footer .btn-ink{align-self:flex-start}.paper-settings-actions{display:flex;align-items:center;flex-wrap:wrap;gap:14px}.paper-settings-hint{font-size:13px;color:var(--ink-muted)}.paper-inline-alert{display:flex;align-items:flex-start;gap:8px;padding:10px 12px;border-radius:var(--radius-control,6px);border:1px solid var(--border-color);background:var(--paper-bg-alt);font-size:13px;color:var(--color)}.paper-inline-alert i{margin-top:2px;color:var(--ink-muted)}.paper-inline-alert-error{border-color:var(--status-error);background:var(--status-error-soft)}.paper-inline-alert-error i{color:var(--status-error)}.paper-account-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border:1px solid var(--border-color);border-radius:var(--radius-surface,10px);background:var(--paper-card);margin-bottom:20px}.paper-account-card img{flex-shrink:0}.paper-account-identity{flex:1 1 auto;min-width:0}.paper-account-name{font-family:var(--font-mono);font-size:14px;font-weight:500;color:var(--color)}.paper-account-meta{font-size:13px;color:var(--ink-muted);margin-top:2px}.paper-danger-zone{padding:16px;border:1px solid var(--status-error);border-radius:var(--radius-surface,10px);background:var(--status-error-soft)}.paper-danger-head{font-weight:600;font-size:14px;color:var(--status-error);margin-bottom:6px}.paper-danger-copy{font-size:13px;color:var(--ink-soft);max-width:52em;margin-bottom:12px}.paper-danger-zone .paper-inline-alert{margin-bottom:12px}.btn.btn-outline-danger{background:0 0;color:var(--status-error);border:1px solid var(--status-error);font-weight:500;border-radius:var(--radius-control,6px);padding:8px 14px}.btn.btn-outline-danger:hover{background:var(--status-error);color:#fff;border-color:var(--status-error)}.navbar .user-menu{min-width:260px}.navbar .user-menu .dropdown-item{display:flex;align-items:flex-start;gap:10px;padding:8px 10px!important}.navbar .user-menu .dropdown-item i{width:16px;margin-top:3px;font-size:13px;color:var(--ink-muted);text-align:center}.navbar .user-menu .dropdown-item span{display:flex;flex-direction:column;line-height:1.3}.navbar .user-menu .dropdown-item small{font-size:12px;color:var(--ink-muted)}.navbar .user-menu .dropdown-header{font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-muted);padding:8px 10px 6px}.paper-field-label{font-family:var(--font-sans);font-size:13px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--color);margin-bottom:6px;display:block}@media (max-width:900px){.paper-settings-body{grid-template-columns:1fr;gap:24px}.paper-settings-toc{position:static}.paper-settings-toc nav{flex-direction:row;flex-wrap:wrap;gap:8px}.paper-settings-toc nav a{border-left:none;border-bottom:2px solid transparent;padding:4px 0}.paper-settings-toc nav a.active,.paper-settings-toc nav a:hover{border-bottom-color:var(--color);border-left:none}}.paper-table{display:block;margin-top:20px;background:0 0;border:none;border-top:1px solid var(--border-color);border-radius:0;overflow:visible}.paper-table .paper-table-head,.paper-table .paper-table-row{display:grid;grid-template-columns:minmax(280px,2.4fr) minmax(140px,1fr) 140px 90px 140px 52px;align-items:center;gap:18px;padding:12px 4px}.paper-table.paper-table-conferences .paper-table-head,.paper-table.paper-table-conferences .paper-table-row{grid-template-columns:minmax(280px,2.4fr) 140px 90px 220px 52px}.paper-table.paper-table-repos .paper-table-head,.paper-table.paper-table-repos .paper-table-row{grid-template-columns:minmax(280px,2.4fr) minmax(140px,1fr) 90px 140px 52px}.paper-table.paper-table-repos.has-bulk .paper-table-head,.paper-table.paper-table-repos.has-bulk .paper-table-row{grid-template-columns:28px minmax(280px,2.4fr) minmax(140px,1fr) 90px 140px 52px;gap:12px}.paper-table .admin-users-row{grid-template-columns:28px minmax(280px,2.4fr) 90px 120px 100px 52px!important;gap:12px!important}.paper-table.paper-table-dashboard .paper-table-head,.paper-table.paper-table-dashboard .paper-table-row{grid-template-columns:minmax(320px,3fr) 190px 90px 170px 52px;gap:20px;padding:8px 4px}.paper-table.paper-table-dashboard .cell-anon .anon-text{gap:2px}.paper-table.paper-table-dashboard .cell-anon .repo-name{padding:0}.paper-table .paper-table-head{background:0 0;border-bottom:1px solid var(--border-color);font-family:var(--font-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-muted);padding-top:8px;padding-bottom:8px}.paper-table .paper-table-head .sortable{cursor:pointer;user-select:none;display:inline-flex;align-items:center;gap:6px;background:0 0;border:none;padding:2px 0;margin:0;font:inherit;letter-spacing:inherit;text-transform:inherit;color:inherit;border-radius:4px}.paper-table .paper-table-head .sortable:hover{color:var(--color)}.paper-table .paper-table-head .sortable.active{color:var(--color)}.paper-table .paper-table-head .sortable i{font-size:10px}.paper-table .paper-table-head .num,.paper-table .paper-table-row .num{text-align:right}.paper-table .paper-table-head .num .sortable{flex-direction:row-reverse}.paper-table .paper-table-row{border-top:1px solid var(--border-soft,var(--border-color));font-size:14px;transition:background-color .12s ease}.paper-table .paper-table-row:hover{background:var(--hover-bg-color)}.paper-table .paper-table-row.row-clickable{cursor:pointer}.paper-table .paper-table-row.repo-inactive>:not(.cell-actions){opacity:.55}.paper-table .paper-table-row.repo-error{background:var(--status-error-soft);border-left:2px solid var(--status-error);padding-left:6px}.paper-table .paper-table-row.repo-error:hover{background:var(--status-error-soft-hover)}.cell-status .status-sub.status-sub-error,.paper-table .cell-status .status-sub-error{color:var(--status-error)}.paper-table .cell-status .status-sub-warn{color:var(--status-progress)}.paper-table .cell-anon{display:flex;align-items:center;gap:12px;min-width:0}.paper-table .cell-anon .type-badge{flex-shrink:0;min-width:52px;justify-content:center}.paper-table .cell-anon .anon-text{min-width:0;display:flex;flex-direction:column;gap:3px}.paper-table .cell-anon .anon-title{display:flex;align-items:center;gap:8px;min-width:0}.paper-table .cell-anon .anon-title .type-badge{margin-left:0}.paper-table .cell-anon .repo-name{font-family:var(--font-mono);font-size:14px;color:var(--color);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;max-width:100%;padding:2px 0}.paper-table .cell-anon .repo-name-static{color:var(--ink-muted);font-style:italic}.paper-table .cell-anon .anon-sub{font-family:var(--font-sans);font-size:13px;color:var(--ink-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:10px;min-width:0}.paper-table .cell-anon .anon-sub .anon-source{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-anon .anon-sub .conf-tag{flex:0 1 auto;min-width:72px;max-width:50%}.paper-table .cell-anon .anon-sub a{color:var(--ink-muted);border-bottom:1px dotted var(--border-color);padding:4px 0;margin:-4px 0}.paper-table .cell-anon .anon-sub a:hover{color:var(--color)}.paper-table .cell-anon .anon-sub .commit-hash{font-family:var(--font-mono);font-size:12px}.paper-table .cell-conf{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-muted);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-conf span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-status{display:flex;flex-wrap:wrap;align-items:center;gap:2px 8px;font-size:14px;color:var(--color);min-width:0}.paper-table .cell-status .status-line{display:inline-flex;align-items:center;gap:8px}.paper-table .cell-status .status-sub{flex-basis:100%;font-family:var(--font-sans);font-size:13px;line-height:1.3;color:var(--ink-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-views{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--color)}.paper-table .cell-expires{font-family:var(--font-sans);font-size:13px;color:var(--ink-soft)}.paper-table .cell-expires .expires-never{color:var(--ink-muted)}.paper-table .cell-expires .expires-past{color:var(--ink-muted)}.paper-table .empty-dash{color:var(--ink-faint)}.paper-table .cell-actions{display:flex;justify-content:flex-end}.status-dot{width:8px;height:8px;border-radius:999px;display:inline-block;flex-shrink:0;background:var(--status-inactive)}.status-dot.status-ready{background:var(--status-ready)}.status-dot.status-error{background:var(--status-error)}.status-dot.status-preparing,.status-dot.status-progress{background:var(--status-progress)}.status-dot.status-expired,.status-dot.status-removed{background:var(--status-inactive)}.dashboard-page{padding-bottom:96px}.dashboard-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;margin-top:12px;font-size:13px;color:var(--ink-muted)}.dashboard-meta .dashboard-count{font-variant-numeric:tabular-nums}.btn-link-inline{background:0 0;border:none;padding:2px 4px;margin:-2px 0;font:inherit;color:var(--link-color);cursor:pointer;border-radius:4px}.btn-link-inline:hover{color:var(--link-hover-color);text-decoration:underline}.btn.btn-outline-ink{background:0 0;color:var(--color);border:1px solid var(--border-color);font-weight:500;border-radius:var(--radius-control,6px);padding:8px 14px}.btn.btn-outline-ink:hover{background:var(--hover-bg-color);color:var(--color);border-color:var(--ink-faint)}.paper-page .dropdown-menu .dropdown-item-danger,.paper-page .dropdown-menu .dropdown-item-danger i{color:var(--status-error)}.paper-page .dropdown-menu .dropdown-item-danger:focus,.paper-page .dropdown-menu .dropdown-item-danger:hover{background:var(--status-error-soft-hover);color:var(--status-error)}.paper-page .dropdown-menu button.dropdown-item{width:100%;text-align:left;background:0 0;border:none}.paper-page .dropdown-menu .dropdown-divider{border-top-color:var(--border-soft,var(--border-color));margin:4px 0}.paper-table .paper-table-skeleton{pointer-events:none}.skeleton{display:block;background:var(--paper-bg-alt);border-radius:4px;position:relative;overflow:hidden}.skeleton::after{content:"";position:absolute;inset:0;transform:translateX(-100%);background:linear-gradient(90deg,transparent,var(--hover-bg-color),transparent);animation:skeleton-shimmer 1.4s infinite}.skeleton-line{height:12px}.skeleton-line+.skeleton-line{margin-top:8px}.skeleton-line-sm{height:10px}.skeleton-badge{width:52px;height:22px;border-radius:999px;flex-shrink:0}@keyframes skeleton-shimmer{to{transform:translateX(100%)}}@media (prefers-reduced-motion:reduce){.skeleton::after{animation:none}}.paper-table .paper-table-empty{display:flex;flex-direction:column;align-items:center;gap:8px;padding:56px 20px;color:var(--ink-muted);text-align:center;border-top:1px solid var(--border-soft,var(--border-color))}.paper-table .paper-table-empty>i{font-size:1.5rem;color:var(--ink-faint)}.paper-table .paper-table-empty-actions{display:flex;gap:8px;margin-top:8px}.bulk-bar{display:flex;align-items:center;gap:8px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:8px;padding:8px 12px;margin:8px 0}.paper-page.admin-page .paper-page-title{font-size:1.5rem;margin:4px 0}.paper-page.admin-page .paper-page-lede{display:none}.paper-page.admin-page .paper-crumbs{margin-bottom:4px}.paper-page.admin-page .admin-nav{margin:6px 0 12px}.admin-filter-toolbar{display:flex;flex-direction:column;gap:6px;margin:8px 0 12px;position:sticky;top:0;z-index:4;background:var(--canvas-bg-color);padding:6px 0;border-bottom:1px solid var(--border-soft,var(--border-color));box-shadow:0 1px 0 var(--canvas-bg-color)}@media (max-width:900px){.admin-filter-toolbar{position:static;box-shadow:none}}.admin-filter-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.admin-filter-row .search-wrap{flex:1;min-width:220px}.admin-filter-row .search-wrap .form-control{height:34px}.admin-filter-inline{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--ink-muted)}.admin-filter-inline>label{font-family:var(--font-mono);font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted);margin:0;white-space:nowrap}.admin-filter-inline .form-control-sm{height:28px;padding:2px 8px;font-size:12px}.admin-filter-inline input[type=search].form-control-sm,.admin-filter-inline input[type=text].form-control-sm{width:130px}.admin-filter-inline input[type=date].form-control-sm{width:130px}.admin-filter-inline select.form-control-sm{width:auto;min-width:88px}.admin-filter-inline .arrow{color:var(--ink-muted);font-size:11px}.admin-filter-spacer{flex:1}.admin-active-chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center;font-size:12px;color:var(--ink-muted)}.admin-active-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 4px 2px 10px;border:1px solid var(--border-color);border-radius:999px;background:var(--hover-bg-color);font-size:12px;color:var(--color)}.admin-active-chip .key{color:var(--ink-muted);font-family:var(--font-mono);font-size:10px;text-transform:uppercase;letter-spacing:.06em}.admin-active-chip button{background:0 0;border:none;cursor:pointer;padding:0 4px;color:var(--ink-muted);font-size:12px;border-radius:50%}.admin-active-chip button:hover{color:#b42318}.admin-search-hint{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);pointer-events:none;border:1px solid var(--border-color);border-radius:4px;padding:1px 5px;background:var(--paper-card)}.admin-filter-row .search-wrap{position:relative}.admin-filter-row .search-wrap .form-control{padding-right:40px}.paper-table-row.row-selected{background:rgba(47,122,68,.06)}.queue-state-pills{display:inline-flex;gap:6px;margin-left:8px;flex-wrap:wrap}.queue-state-pills .pill{font-size:11px;padding:2px 8px;border-radius:999px;border:1px solid var(--border-color);background:var(--paper-card);color:var(--ink-muted)}.queue-state-pills .pill-active{color:#c48a2e;border-color:rgba(196,138,46,.4)}.queue-state-pills .pill-failed{color:#b42318;border-color:rgba(180,35,24,.4)}.queue-state-pills .pill-completed{color:#2f7a44;border-color:rgba(47,122,68,.3)}.queue-state-pills .pill-waiting{color:var(--ink-soft)}.queue-state-pills .pill-delayed{color:var(--ink-muted)}.admin-summary{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:8px 0 12px;font-size:13px}.admin-summary .summary-total{font-family:var(--font-serif);font-size:1rem;color:var(--color);margin-right:8px}.admin-summary .summary-meta{color:var(--ink-muted);font-size:12px;margin-right:8px}.admin-summary .summary-pill{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;border:1px solid var(--border-color);background:var(--paper-card);color:var(--ink-muted);cursor:pointer;font-size:12px;user-select:none;transition:background-color .1s,border-color .1s}.admin-summary .summary-pill:hover{background:var(--hover-bg-color)}.admin-summary .summary-pill .count{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--color)}.admin-summary .summary-pill.active{background:var(--primary-bg);color:var(--primary-color);border-color:var(--primary-bg)}.admin-summary .summary-pill.active .count{color:inherit}.admin-summary .summary-pill.error .count{color:#b42318}.admin-summary .summary-pill.warn .count{color:#c48a2e}.admin-summary .summary-pill.ok .count{color:#2f7a44}.dark-mode .admin-summary .summary-pill.error .count{color:#f08a82}.dark-mode .admin-summary .summary-pill.warn .count{color:#e8b970}.dark-mode .admin-summary .summary-pill.ok .count{color:#7dc894}.dark-mode .queue-state-pills .pill-active{color:#e8b970;border-color:rgba(232,185,112,.4)}.dark-mode .queue-state-pills .pill-failed{color:#f08a82;border-color:rgba(240,138,130,.4)}.dark-mode .queue-state-pills .pill-completed{color:#7dc894;border-color:rgba(125,200,148,.3)}.job-progress{flex:1;height:6px;background:var(--border-soft,var(--border-color));border-radius:999px;overflow:hidden;margin-left:12px;max-width:200px}.job-progress-bar{height:100%;background:#2f7a44;transition:width .3s}.paper-table-empty{padding:48px 4px;text-align:center;color:var(--ink-muted);display:flex;flex-direction:column;align-items:center;gap:8px;border-top:1px solid var(--border-soft,var(--border-color))}.paper-table-empty>i{font-size:1.5rem}.q-header{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:4px}.q-header-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.q-range-btns{display:inline-flex;border:1px solid var(--border-color);border-radius:8px;overflow:hidden}.q-range-btns .btn{border:none;border-radius:0;padding:5px 14px;font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);background:var(--paper-card)}.q-range-btns .btn+.btn{border-left:1px solid var(--border-color)}.q-range-btns .btn.active{background:var(--color);color:var(--paper-card)}.q-cards{display:flex;gap:10px;margin:16px 0;flex-wrap:wrap}.q-card{flex:1;min-width:140px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:14px 16px;cursor:pointer;transition:border-color .15s,box-shadow .15s}.q-card:hover{border-color:var(--ink-muted)}.q-card.selected{border-color:var(--color);box-shadow:0 0 0 1px var(--color)}.q-card-head{display:flex;align-items:center;gap:8px;margin-bottom:8px}.q-dot{width:8px;height:8px;border-radius:50%;background:#2f7a44;flex-shrink:0}.q-dot-red{background:#b42318}.dark-mode .q-dot{background:#7dc894}.dark-mode .q-dot-red{background:#f08a82}.q-card-name{font-family:var(--font-mono);font-size:12px;font-weight:500;color:var(--ink-muted);letter-spacing:.04em}.q-card-count{font-family:var(--font-serif);font-size:2rem;font-weight:400;line-height:1.1;color:var(--color);margin-bottom:6px}.q-card-sub{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.04em}.q-card-bar{height:4px;background:var(--border-color);border-radius:2px;overflow:hidden;margin-top:6px}.q-card-bar-fill{height:100%;background:#3b4ad6;border-radius:2px;transition:width .3s}.dark-mode .q-card-bar-fill{background:#a7b2ff}.q-detail{display:grid;grid-template-columns:1fr 320px;gap:16px;margin-bottom:20px}.q-throughput{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:16px 20px}.q-chart-wrap{position:relative}.q-throughput canvas{width:100%;display:block}.q-chart-tooltip{position:absolute;pointer-events:none;background:var(--paper-card);border:1px solid var(--border-color);border-radius:6px;padding:6px 10px;font-family:var(--font-mono);font-size:11px;line-height:1.6;white-space:nowrap;box-shadow:0 2px 8px rgba(0,0,0,.15);z-index:10}.q-chart-tooltip .q-tip-time{color:var(--ink-muted);margin-bottom:2px}.q-chart-tooltip .q-tip-completed{color:#3b4ad6}.q-chart-tooltip .q-tip-failed{color:#b42318}.dark-mode .q-chart-tooltip .q-tip-completed{color:#a7b2ff}.dark-mode .q-chart-tooltip .q-tip-failed{color:#f08a82}.q-chart-crosshair{position:absolute;top:0;width:1px;height:100%;background:var(--ink-muted);opacity:.3;pointer-events:none;z-index:9}.q-stats-panel{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:16px 20px;display:flex;flex-direction:column}.q-section-label{font-family:var(--font-mono);font-size:11px;font-weight:500;color:var(--ink-muted);text-transform:lowercase;letter-spacing:.04em;margin-bottom:14px}.q-section-right{float:right;text-transform:uppercase;font-size:10px;letter-spacing:.08em}.q-legend-completed{color:#3b4ad6}.q-legend-failed{color:#b42318;margin-left:8px}.q-legend-exec{color:#b8860b;margin-left:8px;letter-spacing:2px}.dark-mode .q-legend-completed{color:#a7b2ff}.dark-mode .q-legend-failed{color:#f08a82}.dark-mode .q-legend-exec{color:#f5c842}.q-chart-tooltip .q-tip-exec{color:#b8860b}.dark-mode .q-chart-tooltip .q-tip-exec{color:#f5c842}.q-stats-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px 20px;flex:1}.q-stat-label{font-family:var(--font-mono);font-size:10px;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:2px}.q-stat-value{font-family:var(--font-serif);font-size:1.25rem;font-weight:400;color:var(--color);line-height:1.2}.q-stats-actions{display:flex;gap:8px;margin-top:16px;padding-top:14px;border-top:1px solid var(--border-color)}.q-stats-actions .btn{font-family:var(--font-mono);font-size:11px;padding:6px 14px;border-radius:8px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color)}.q-jobs{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:16px 20px}.q-jobs-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;margin-bottom:12px}.q-state-filters{display:inline-flex;gap:6px;flex-wrap:wrap}.q-state-toggle{cursor:pointer;display:inline-flex;align-items:center}.q-state-toggle input{display:none}.q-state-chip{font-family:var(--font-mono);font-size:11px;padding:3px 10px;border-radius:10px;border:1px solid var(--border-color);background:var(--paper-card);color:var(--ink-muted);transition:opacity .15s,background .15s;text-transform:capitalize}.q-state-toggle input:checked+.q-state-chip{opacity:1}.q-state-toggle input:not(:checked)+.q-state-chip{opacity:.4;text-decoration:line-through}.q-state-badge,.q-state-chip{font-family:var(--font-mono);font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.3px}.q-state-badge{display:inline-block;padding:2px 8px;border-radius:8px}.q-state-active{background:#dbeafe;color:#1d4ed8}.q-state-waiting{background:#fef3c7;color:#92400e}.q-state-delayed{background:#e0e7ff;color:#4338ca}.q-state-failed{background:#fee2e2;color:#b91c1c}.q-state-completed{background:#dcfce7;color:#166534}.dark-mode .q-state-active{background:rgba(59,130,246,.2);color:#93bbfd}.dark-mode .q-state-waiting{background:rgba(251,191,36,.15);color:#fbbf24}.dark-mode .q-state-delayed{background:rgba(99,102,241,.2);color:#a5b4fc}.dark-mode .q-state-failed{background:rgba(239,68,68,.2);color:#fca5a5}.dark-mode .q-state-completed{background:rgba(34,197,94,.15);color:#86efac}.q-cell-state{width:120px}.q-delay-hint{display:block;font-size:10px;color:var(--ink-muted);margin-top:2px;font-family:var(--font-mono)}.q-search-row{display:flex;align-items:center;gap:10px;margin-bottom:12px}.q-search-row .form-control{max-width:320px;height:34px}.q-auto-refresh{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);display:inline-flex;align-items:center;gap:6px;cursor:pointer;white-space:nowrap}.q-table{width:100%;border-collapse:collapse}.q-table thead th{font-family:var(--font-mono);font-size:10px;font-weight:500;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;padding:8px 10px;border-bottom:1px solid var(--border-color);text-align:left;white-space:nowrap}.q-table tbody tr{border-bottom:1px solid var(--border-color);transition:background .1s}.q-table tbody tr:hover{background:var(--paper-bg-alt)}.q-table tbody tr:last-child{border-bottom:none}.q-table tbody td{padding:10px 10px;font-size:.875rem;vertical-align:middle}.q-cell-id{font-family:var(--font-mono);font-size:12px;white-space:nowrap}.q-cell-id{display:flex;align-items:center;gap:8px}.q-chevron{font-size:10px;color:var(--ink-muted);transition:transform .15s;flex-shrink:0}.q-chevron-open{transform:rotate(90deg)}.q-cell-id a{color:var(--color)}.q-cell-payload{font-family:var(--font-mono);font-size:12px;color:var(--color)}.q-payload-detail{color:var(--ink-muted)}.q-cell-num{font-family:var(--font-mono);font-size:12px;text-align:center;white-space:nowrap}.q-cell-progress{min-width:120px}.q-progress-wrap{display:flex;align-items:center;gap:8px}.q-progress-bar{flex:1;height:6px;border-radius:3px;overflow:hidden;background-image:linear-gradient(to right,#3b4ad6 var(--pct,0),var(--border-color) var(--pct,0))}.dark-mode .q-progress-bar{background-image:linear-gradient(to right,#a7b2ff var(--pct,0),var(--border-color) var(--pct,0))}.q-progress-label{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);white-space:nowrap;min-width:32px;text-align:right}.q-cell-actions{text-align:right;white-space:nowrap}.q-cell-actions .btn{padding:3px 8px;font-size:11px;background:0 0;border:1px solid var(--border-color);color:var(--ink-muted)}.q-cell-actions .btn:hover{color:var(--color)}.q-row-failed{background:rgba(180,35,24,.04)}.dark-mode .q-row-failed{background:rgba(240,138,130,.06)}.q-error-detail{padding:4px 10px 12px;font-size:12px}.q-error-reason{color:#b42318;font-size:.8125rem;margin-bottom:4px}.dark-mode .q-error-reason{color:#f08a82}.q-toast-error{background:#fbe7e7;color:#b42318;border:1px solid #f3c7c7;border-radius:8px;padding:10px 16px;margin-bottom:12px;font-family:var(--font-mono);font-size:12px;cursor:pointer;display:flex;align-items:center;gap:8px}.dark-mode .q-toast-error{background:rgba(240,138,130,.1);color:#f08a82;border-color:rgba(240,138,130,.25)}.q-error-stack{font-size:.75rem;max-height:120px;overflow:auto;margin:4px 0 0;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:6px;padding:8px 10px}.q-row-expanded>td{border-bottom-color:transparent}.q-detail-row>td{padding:0 10px 14px!important;border-bottom:1px solid var(--border-color)}.q-job-detail{background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:8px;padding:14px 16px}.q-job-detail-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px 20px;margin-bottom:10px}.q-job-detail-item{display:flex;flex-direction:column;gap:2px}.q-job-detail-label{font-family:var(--font-mono);font-size:10px;font-weight:500;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em}.q-job-detail-value{font-family:var(--font-mono);font-size:12px;color:var(--color);word-break:break-all}.q-job-detail-value a{color:var(--color)}.q-job-detail-error{margin:8px 0}.q-job-detail-actions{display:flex;gap:8px;margin-top:12px;padding-top:10px;border-top:1px solid var(--border-color)}.q-job-detail-actions .btn{font-family:var(--font-mono);font-size:11px;padding:5px 12px;border-radius:6px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color)}@media (max-width:900px){.q-detail{grid-template-columns:1fr}.q-cards{flex-direction:column}.q-card{min-width:100%}.q-jobs-header{flex-direction:column;align-items:flex-start}.q-tabs{flex-wrap:wrap}.q-search-row{flex-wrap:wrap}.q-search-row .form-control{max-width:100%;flex:1}.q-table{font-size:12px}.q-header{flex-direction:column}.q-job-detail-grid{grid-template-columns:1fr 1fr}}@media (max-width:900px){.paper-table .paper-table-head{display:none}.paper-table .admin-users-row,.paper-table .paper-table-row,.paper-table.paper-table-conferences .paper-table-row,.paper-table.paper-table-repos .paper-table-row{display:flex!important;flex-wrap:wrap;align-items:center;gap:6px 12px;padding:14px 0;grid-template-columns:none!important}.paper-table .cell-anon{flex:1 1 calc(100% - 52px);min-width:0;order:1}.paper-table .cell-actions{flex:0 0 auto;order:2;align-self:center}.paper-table .cell-conf,.paper-table .cell-expires,.paper-table .cell-status,.paper-table .cell-views{order:3;font-size:13px;color:var(--ink-muted);display:inline-flex;align-items:center;gap:6px;text-align:left}.paper-table .cell-status{flex-wrap:nowrap;gap:6px;min-width:0}.paper-table .cell-status .status-sub{flex-basis:auto;font-size:13px;line-height:inherit}.paper-table .cell-status .status-sub::before{content:"·";margin-right:6px;color:var(--ink-faint)}.paper-table .cell-conf{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-views.num{text-align:left}.paper-table .paper-table-skeleton .cell-expires,.paper-table .paper-table-skeleton .cell-status,.paper-table .paper-table-skeleton .cell-views{flex:1 1 30%}.paper-table .cell-views::before{content:'\f06e';font-family:'Font Awesome 5 Free';font-weight:900;font-size:10px;color:var(--ink-muted)}.paper-table .cell-expires::before{content:'\f017';font-family:'Font Awesome 5 Free';font-weight:400;font-size:10px;color:var(--ink-muted)}.paper-table .cell-conf::before{content:'\f51c';font-family:'Font Awesome 5 Free';font-weight:900;font-size:10px;color:var(--ink-muted)}.paper-table-dashboard .cell-conf::before{content:none}.paper-table .cell-conf:has(.empty-dash),.paper-table .cell-expires:has(.empty-dash){display:none}.paper-table .cell-expires::before,.paper-table .cell-views::before{color:var(--ink-faint)}}.paper-page .dropdown-menu{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface,10px);box-shadow:0 12px 28px rgba(26,24,21,.08);padding:6px;min-width:220px;font-family:var(--font-sans);font-size:14px;color:var(--color);margin-top:6px}.paper-page .dropdown-menu .dropdown-header{font-family:var(--font-mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);padding:8px 10px 6px;font-weight:500}.paper-page .dropdown-menu .dropdown-item{border-radius:6px;padding:8px 10px;color:var(--color);font-size:14px;display:flex;align-items:center;gap:8px}.paper-page .dropdown-menu .dropdown-item:focus,.paper-page .dropdown-menu .dropdown-item:hover{background:var(--hover-bg-color);color:var(--color)}.paper-page .dropdown-menu .dropdown-item i{width:16px;font-size:13px;color:var(--ink-muted)}.paper-page .dropdown-menu .form-check.dropdown-item{padding:8px 10px 8px 36px!important;position:relative}.paper-page .dropdown-menu .form-check.dropdown-item .form-check-input{position:absolute;left:12px;top:50%;transform:translateY(-50%);margin:0;width:16px;height:16px;accent-color:var(--color);cursor:pointer}.paper-page .dropdown-menu .form-check.dropdown-item .form-check-label{font-family:var(--font-sans);font-size:14px;color:var(--color);font-weight:400;margin:0;cursor:pointer}.btn.btn-icon-dots{width:32px;height:32px;padding:0;border:1px solid transparent;background:0 0;color:var(--ink-muted);border-radius:6px;display:inline-flex;align-items:center;justify-content:center;line-height:1}.btn.btn-icon-dots:focus,.btn.btn-icon-dots:hover,.btn.btn-icon-dots[aria-expanded=true]{background:var(--hover-bg-color);border-color:var(--border-color);color:var(--color)}.btn.btn-icon-dots::after{display:none}.btn.btn-icon-dots i{font-size:15px}.paper-page .repo-list-empty{border-top:none;padding:56px 20px;color:var(--ink-muted)}.paper-page .filter-chip{background:var(--paper-bg-alt);color:var(--color);border:1px solid var(--border-color);font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;padding:4px 10px;border-radius:999px}@media (max-width:768px){.paper-page .paper-page-title{font-size:clamp(1.4rem,6vw,1.9rem);margin:4px 0 2px}.paper-page .paper-page-lede{font-size:13px;line-height:1.4;margin-bottom:0}.paper-page .btn-ink{padding:6px 12px;font-size:13px}.paper-page .quota-row{grid-template-columns:1fr;gap:12px;padding:0;margin:16px 0 0}.paper-page .dashboard-filter-row{padding:10px 0;margin-top:12px;gap:8px}.paper-page .quota-header{flex-direction:row;align-items:baseline;gap:8px}.paper-page .quota-value{white-space:nowrap}.paper-page .dashboard-filter-controls{width:100%}.paper-page .dashboard-filter-controls .btn-group{flex:1 1 100%;display:flex}.paper-page .dashboard-filter-controls .btn-group .btn{flex:1;justify-content:center}.paper-page .dashboard-filter-controls .dropdown{flex:1 1 0;min-width:0}.paper-page .dashboard-filter-controls .dropdown .dropdown-toggle{width:100%;justify-content:space-between}.paper-page .dashboard-filter-controls .dropdown .filter-btn-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media (max-width:480px){.paper-page .paper-page-lede{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}}.empty-state{text-align:center;padding:40px 20px;opacity:.6}.empty-state i{font-size:2rem;margin-bottom:10px;display:block}.paper-page .progress{height:10px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:999px;overflow:hidden;margin-bottom:20px}.paper-page .progress .progress-bar{background:var(--color);color:var(--canvas-bg-color);font-family:var(--font-mono);font-size:10px;line-height:10px}.paper-page .progress .progress-bar.bg-success{background:var(--status-ready)!important}.paper-page .progress .progress-bar.bg-warning{background:var(--status-progress)!important;color:#fff}.paper-page .progress .progress-bar.bg-danger{background:var(--status-error)!important}.paper-page .progress .progress-bar.bg-dark{background:var(--ink-faint)!important}.paper-page .form>h5,.paper-page form>h5,.paper-page>h5{font-family:var(--font-mono);font-size:11px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-muted);margin:24px 0 8px}.paper-page .accordion .card{background:var(--paper-card,var(--sidebar-bg-color));border:1px solid var(--border-color);border-radius:8px!important;margin-bottom:8px;overflow:hidden}.paper-page .accordion .card+.card{border-top:1px solid var(--border-color)}.paper-page .accordion .card-header{background:0 0;border:none;padding:0}.paper-page .accordion .card-header .btn{color:var(--color)!important;font-family:var(--font-sans);font-weight:500;font-size:14px;padding:14px 18px!important;background:0 0!important;border:none!important;position:relative}.paper-page .accordion .card-header .btn::after{content:"+";position:absolute;right:18px;font-family:var(--font-serif);font-size:20px;color:var(--ink-muted)}.paper-page .accordion .card-header .btn:not(.collapsed)::after{content:"–"}.paper-page .accordion .card-body{padding:6px 18px 18px!important;border-top:1px solid var(--border-soft)}.paper-page .accordion .form-check-label{color:var(--color);font-weight:500;font-size:14px}.paper-page .accordion .form-text{color:var(--ink-muted);font-size:12px;margin-top:2px}.faq-section .panel-body code{font-family:var(--font-mono);font-size:13px;padding:1px 6px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:3px;color:var(--color)}.faq-section .panel-body a{color:var(--accent)}@media (max-width:820px){.paper-faq-body{grid-template-columns:1fr;gap:24px}.paper-faq-toc{position:static}}.paper-footer{margin-top:80px;padding:56px max(20px,calc((100vw - 1200px)/ 2)) 28px;border-top:1px solid var(--border-color);background:var(--canvas-bg-color);font-family:var(--font-sans)}.paper-footer-inner{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:40px}.paper-footer-brand .paper-footer-mark{font-family:var(--font-serif);font-size:22px;letter-spacing:-.01em;color:var(--color)}.paper-footer-brand .paper-footer-mark em{font-style:italic;font-weight:400}.paper-footer-tag{margin-top:10px;color:var(--ink-soft);font-size:14px;line-height:1.55;max-width:340px}.paper-footer-head{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.1em;text-transform:uppercase;margin-bottom:14px}.paper-footer-col a{display:block;color:var(--color);font-size:14px;padding:4px 0;text-decoration:none}.paper-footer-col a:hover{color:var(--accent)}.paper-footer-rule{height:1px;background:var(--border-color);margin:40px 0 16px}.paper-footer-foot{display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px;font-size:12px;color:var(--ink-muted);font-family:var(--font-mono);letter-spacing:.02em}.paper-footer-foot .paper-footer-meta{font-family:var(--font-serif);font-style:italic;font-size:14px;letter-spacing:0;color:var(--ink-soft)}@media (max-width:768px){.paper-footer-inner{grid-template-columns:1fr 1fr}}.file.folder.truncated .truncated-warning{color:#d39e00;margin-left:4px;font-size:.85em;flex-shrink:0}.file.folder.truncated>a{color:#d39e00}body{--bucket-error-bg:#FCEDED;--bucket-error-fg:#8A1F1F;--bucket-error-bd:#F0C4C4;--bucket-error-dot:#B53737;--bucket-warn-bg:#FFF3DF;--bucket-warn-fg:#7A4D00;--bucket-warn-bd:#F0D8A0;--bucket-warn-dot:#B07A2F;--bucket-info-bg:#EAF2EC;--bucket-info-fg:#2C5D3A;--bucket-info-bd:#C5DCCD;--bucket-info-dot:#5B8D6B;--card-shadow:0 1px 2px rgba(26, 24, 21, 0.04),0 4px 14px rgba(26, 24, 21, 0.05);--card-shadow-hover:0 1px 2px rgba(26, 24, 21, 0.06),0 8px 24px rgba(26, 24, 21, 0.08)}.dark-mode{--bucket-error-bg:rgba(255, 139, 123, 0.10);--bucket-error-fg:#FF8B7B;--bucket-error-bd:rgba(255, 139, 123, 0.28);--bucket-error-dot:#FF8B7B;--bucket-warn-bg:rgba(255, 211, 122, 0.10);--bucket-warn-fg:#FFD37A;--bucket-warn-bd:rgba(255, 211, 122, 0.28);--bucket-warn-dot:#FFD37A;--bucket-info-bg:rgba(152, 200, 168, 0.10);--bucket-info-fg:#98C8A8;--bucket-info-bd:rgba(152, 200, 168, 0.28);--bucket-info-dot:#98C8A8;--card-shadow:0 1px 2px rgba(0, 0, 0, 0.35),0 6px 18px rgba(0, 0, 0, 0.30);--card-shadow-hover:0 2px 4px rgba(0, 0, 0, 0.45),0 12px 28px rgba(0, 0, 0, 0.40)}.errors-page .errors-header{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:4px 0 8px}.errors-page .errors-actions{display:flex;gap:6px}.errors-page .kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px;margin:14px 0 18px}.errors-page .kpi-card{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;padding:18px 20px;display:flex;flex-direction:column;gap:4px;box-shadow:var(--card-shadow);transition:box-shadow 160ms ease,transform 160ms ease}.errors-page .kpi-card:hover{box-shadow:var(--card-shadow-hover)}.errors-page .kpi-label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted)}.errors-page .kpi-value{font-family:var(--font-serif);font-size:2.6rem;font-weight:400;line-height:1;margin-top:2px;color:var(--color)}.errors-page .kpi-card.kpi-error .kpi-value{color:var(--bucket-error-fg)}.errors-page .kpi-card.kpi-warn .kpi-value{color:var(--bucket-warn-fg)}.errors-page .kpi-card.kpi-info .kpi-value{color:var(--bucket-info-fg)}.errors-page .kpi-sub{font-size:.75rem;color:var(--ink-muted);font-style:italic}.errors-page .kpi-sub.up{color:var(--bucket-error-fg);font-style:normal}.errors-page .kpi-sub.down{color:var(--bucket-info-fg);font-style:normal}.errors-page .dropped-warn{color:var(--bucket-error-fg);font-weight:600;font-style:normal}.errors-page .volume-chart{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px;margin-bottom:18px;box-shadow:var(--card-shadow)}.errors-page .volume-head{display:flex;justify-content:space-between;align-items:center;font-family:var(--font-mono);font-size:.6875rem;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px}.errors-page .volume-legend{display:flex;gap:14px;align-items:center;text-transform:none;letter-spacing:0;font-family:var(--font-sans)}.errors-page .volume-legend .dot{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:5px;vertical-align:middle}.errors-page .dot.dot-error{background:var(--bucket-error-dot)}.errors-page .dot.dot-warn{background:var(--bucket-warn-dot)}.errors-page .dot.dot-info{background:var(--bucket-info-dot)}.errors-page .volume-bars{display:flex;align-items:flex-end;gap:4px;height:80px}.errors-page .volume-bar{display:flex;flex-direction:column-reverse;flex:1 1 0;min-width:6px;height:100%}.errors-page .volume-bar .seg{display:block;width:100%}.errors-page .seg.seg-error{background:var(--bucket-error-dot)}.errors-page .seg.seg-warn{background:var(--bucket-warn-dot)}.errors-page .seg.seg-info{background:var(--bucket-info-dot);opacity:.7}.errors-page .errors-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:12px}.errors-page .seg-tabs{display:inline-flex;border:1px solid var(--border-color);border-radius:8px;overflow:hidden;background:var(--paper-card)}.errors-page .seg-tabs button{background:0 0;border:none;padding:6px 14px;font-size:.875rem;cursor:pointer;color:var(--color);font-family:var(--font-sans)}.errors-page .seg-tabs button+button{border-left:1px solid var(--border-color)}.errors-page .seg-tabs button.active{background:var(--primary-bg);color:var(--primary-color)}.errors-page .errors-toolbar .search-wrap{position:relative;flex:1 1 320px;min-width:220px}.errors-page .errors-toolbar .search-wrap input{width:100%;padding:6px 10px 6px 32px;border:1px solid var(--border-color);border-radius:8px;font-family:var(--font-mono);font-size:.8125rem;background:var(--input-bg);color:var(--input-color)}.errors-page .errors-toolbar .search-icon{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--ink-muted);font-size:.875rem}.errors-page .errors-toolbar .filter-count{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-size:.75rem;color:var(--ink-muted)}.errors-page .errors-toolbar .select-wrap{display:inline-flex;align-items:center;gap:6px}.errors-page .errors-toolbar .select-wrap label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);margin:0}.errors-page .errors-toolbar .select-wrap select{background:var(--input-bg);color:var(--input-color);border:1px solid var(--border-color);border-radius:8px}.errors-page .errors-toolbar .autoref{display:inline-flex;gap:6px;align-items:center;font-size:.8125rem;color:var(--color);cursor:pointer;margin:0}.errors-page .btn-icon{width:32px;padding:4px 0}.errors-page .errors-list{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;overflow:hidden;box-shadow:var(--card-shadow)}.errors-page .errors-list-head,.errors-page .errors-row-main{display:grid;grid-template-columns:110px 100px 100px 1fr 60px 70px;gap:16px;padding:18px 20px;align-items:start}.errors-page .errors-list-head{padding:12px 20px;align-items:center}.errors-page .errors-list-head{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);border-bottom:1px solid var(--border-color);background:var(--paper-bg-alt)}.errors-page .errors-row{border-bottom:1px solid var(--border-soft)}.errors-page .errors-row:last-child{border-bottom:none}.errors-page .errors-row.open{background:var(--paper-bg-alt)}.errors-page .errors-row-main{cursor:pointer}.errors-page .errors-row-main:hover{background:var(--hover-bg-color)}.errors-page .col-when .when-rel{font-size:.9375rem;color:var(--color);font-variant-numeric:tabular-nums}.errors-page .col-when .when-abs{font-family:var(--font-mono);font-size:.75rem;color:var(--ink-muted);font-variant-numeric:tabular-nums;margin-top:2px}.errors-page .col-sev{display:flex;align-items:center;gap:8px}.errors-page .sev-dot{width:8px;height:8px;border-radius:50%;display:inline-block}.errors-page .sev-dot.sev-error{background:var(--bucket-error-dot)}.errors-page .sev-dot.sev-warn{background:var(--bucket-warn-dot)}.errors-page .sev-dot.sev-info{background:var(--bucket-info-dot)}.errors-page .sev-label{font-family:var(--font-mono);font-size:.75rem;letter-spacing:.08em;color:var(--color)}.errors-page .pill-module{display:inline-block;font-family:var(--font-mono);font-size:.75rem;background:var(--paper-bg-alt);color:var(--ink-soft);border:1px solid var(--border-color);padding:3px 10px;border-radius:6px}.errors-page .col-msg .msg-code{font-family:var(--font-mono);font-size:1rem;color:var(--color);font-weight:600}.errors-page .col-msg .msg-context{color:var(--ink-muted);font-style:italic;font-size:.875rem;margin-left:10px}.errors-page .col-msg .msg-detail{color:var(--ink-soft);font-family:var(--font-mono);font-size:.8125rem;margin-left:10px}.errors-page .col-msg .msg-url{color:var(--ink-muted);font-family:var(--font-mono);font-size:.8125rem;margin-top:6px;word-break:break-all}.errors-page .count-pill{display:inline-block;padding:2px 8px;border-radius:4px;background:var(--primary-bg);color:var(--primary-color);font-family:var(--font-mono);font-size:.75rem;font-variant-numeric:tabular-nums}.errors-page .count-pill.count-pill-muted{background:0 0;color:var(--ink-muted);border:1px solid var(--border-color)}.errors-page .status-pill{display:inline-block;padding:2px 10px;border-radius:4px;font-family:var(--font-mono);font-size:.8125rem;font-variant-numeric:tabular-nums;border:1px solid transparent}.errors-page .status-pill.status-error{background:var(--bucket-error-bg);color:var(--bucket-error-fg);border-color:var(--bucket-error-bd)}.errors-page .status-pill.status-warn{background:var(--bucket-warn-bg);color:var(--bucket-warn-fg);border-color:var(--bucket-warn-bd)}.errors-page .status-pill.status-info{background:var(--bucket-info-bg);color:var(--bucket-info-fg);border-color:var(--bucket-info-bd)}.errors-page .errors-row-detail{padding:0 16px 16px}.errors-page .detail-tabs{display:flex;gap:4px;border-bottom:1px solid var(--border-color);margin-bottom:12px}.errors-page .detail-tabs button{background:0 0;border:0;border-bottom:2px solid transparent;padding:8px 12px;font-size:.875rem;cursor:pointer;color:var(--ink-muted);font-family:var(--font-sans)}.errors-page .detail-tabs button.active{color:var(--color);border-bottom-color:var(--color)}.errors-page .detail-body{display:grid;grid-template-columns:1fr 260px;gap:20px}.errors-page .detail-main pre{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px;font-family:var(--font-mono);font-size:.875rem;line-height:1.7;color:var(--color);max-height:26em;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;margin:0;box-shadow:var(--card-shadow)}.errors-page .related-list{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;max-height:22em;overflow:auto;box-shadow:var(--card-shadow)}.errors-page .stack-pre{line-height:1.45;white-space:pre;overflow-x:auto}.errors-page .related-row{display:flex;gap:10px;padding:6px 12px;align-items:center;border-bottom:1px solid var(--border-soft);font-size:.8125rem}.errors-page .related-row:last-child{border-bottom:none}.errors-page .detail-actions{display:flex;gap:6px;align-items:center;margin-top:10px}.errors-page .copy-hint{font-size:.75rem;color:var(--bucket-info-fg)}.errors-page .detail-aside{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;padding:18px;box-shadow:var(--card-shadow)}.errors-page .aside-block+.aside-block{margin-top:16px}.errors-page .aside-label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);margin-bottom:4px}.errors-page .aside-value{font-family:var(--font-serif);font-size:1rem;color:var(--color);word-break:break-word;line-height:1.3}.errors-page .aside-value.mono{font-family:var(--font-mono);font-size:.8125rem}.errors-page .aside-sub{color:var(--ink-muted);font-style:italic;font-size:.8125rem;font-family:var(--font-sans)}.errors-page .errors-pager{display:flex;justify-content:space-between;align-items:center;padding:10px 0;color:var(--ink-muted);font-size:.875rem}@media (max-width:720px){.errors-page .errors-list-head,.errors-page .errors-row-main{grid-template-columns:80px 80px 1fr 60px}.errors-page .errors-list-head .col-mod,.errors-page .errors-list-head .col-sev,.errors-page .errors-row-main .col-mod,.errors-page .errors-row-main .col-sev{display:none}.errors-page .detail-body{grid-template-columns:1fr}}.overview-page .ov-header{display:flex;align-items:baseline;justify-content:space-between;gap:16px;margin-bottom:2px}.overview-page .ov-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-left:6px;vertical-align:middle}.overview-page .ov-dot-ok{background:#2f7a44}.overview-page .ov-dot-warn{background:#c48a2e}.overview-page .ov-dot-idle{background:var(--ink-muted)}.dark-mode .overview-page .ov-dot-ok{background:#7dc894}.dark-mode .overview-page .ov-dot-warn{background:#e8b970}.overview-page .ov-kpi-row{display:grid;grid-template-columns:repeat(5,1fr);gap:16px;margin:16px 0 22px}.overview-page .ov-kpi-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px;display:flex;flex-direction:column;gap:4px;box-shadow:var(--card-shadow);transition:box-shadow 160ms ease}.overview-page .ov-kpi-card:hover{box-shadow:var(--card-shadow-hover)}.overview-page .ov-kpi-label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted)}.overview-page .ov-kpi-value{font-family:var(--font-serif);font-size:2.6rem;font-weight:400;line-height:1;margin-top:2px;color:var(--color)}.overview-page .ov-kpi-value.ov-val-warn{color:#b42318}.dark-mode .overview-page .ov-kpi-value.ov-val-warn{color:#f08a82}.overview-page .ov-kpi-sub{font-size:.75rem;color:var(--ink-muted);margin-top:2px}.overview-page .ov-daily-row{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:-4px 0 22px}.overview-page .ov-daily-card{background:var(--primary-bg);border:1px solid var(--border-color);border-radius:12px;padding:16px 20px;box-shadow:var(--card-shadow)}.overview-page .ov-daily-label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted)}.overview-page .ov-daily-value{font-family:var(--font-serif);font-size:2.5rem;font-weight:400;line-height:1;color:var(--accent,#3b4ad6);margin-top:6px}.overview-page .ov-daily-sub{font-size:.75rem;color:var(--ink-muted);margin-top:5px}.dark-mode .overview-page .ov-daily-card{background:var(--paper-card)}.dark-mode .overview-page .ov-daily-value{color:#a7b2ff}.overview-page .ov-chart-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-bottom:18px}.overview-page .ov-chart-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px 14px;box-shadow:var(--card-shadow)}.overview-page .ov-chart-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}.overview-page .ov-chart-title{font-family:var(--font-serif);font-size:1rem}.overview-page .ov-chart-legend{font-family:var(--font-mono);font-size:.6875rem;color:var(--ink-muted);display:flex;align-items:center;gap:5px}.overview-page .ov-dot-legend{display:inline-block;width:8px;height:8px;border-radius:50%}.overview-page .ov-dot-accent{background:var(--accent,#3b4ad6)}.overview-page .ov-dot-ok-fill{background:#2f7a44}.overview-page .ov-dot-user-fill{background:#8b5e2e}.overview-page .ov-dot-new-user-fill{background:#c48a2e}.dark-mode .overview-page .ov-dot-ok-fill{background:#7dc894}.dark-mode .overview-page .ov-dot-user-fill{background:#d0a15f}.dark-mode .overview-page .ov-dot-new-user-fill{background:#e8b970}.overview-page .ov-spark-bars{display:flex;align-items:flex-end;gap:3px;height:140px}.overview-page .ov-spark-col{flex:1;display:flex;align-items:flex-end;height:100%;position:relative}.overview-page .ov-spark-fill{width:100%;background:var(--accent,#3b4ad6);border-radius:2px 2px 0 0;transition:height .3s ease;opacity:.55}.overview-page .ov-spark-fill-alt{background:#2f7a44}.overview-page .ov-spark-fill-user{background:#8b5e2e}.overview-page .ov-spark-fill-new-user{background:#c48a2e}.dark-mode .overview-page .ov-spark-fill-alt{background:#7dc894}.dark-mode .overview-page .ov-spark-fill-user{background:#d0a15f}.dark-mode .overview-page .ov-spark-fill-new-user{background:#e8b970}.overview-page .ov-spark-col:hover .ov-spark-fill{opacity:1}.overview-page .ov-spark-col.has-tip::after{content:attr(data-tip);position:absolute;left:50%;bottom:calc(100% + 10px);transform:translateX(-50%) translateY(4px);z-index:10;padding:6px 8px;border-radius:6px;background:var(--color);color:var(--canvas-bg-color);font-family:var(--font-mono);font-size:.6875rem;line-height:1;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity 120ms ease,transform 120ms ease}.overview-page .ov-spark-col.has-tip::before{content:"";position:absolute;left:50%;bottom:calc(100% + 4px);transform:translateX(-50%) translateY(4px);z-index:10;border:5px solid transparent;border-top-color:var(--color);opacity:0;pointer-events:none;transition:opacity 120ms ease,transform 120ms ease}.overview-page .ov-spark-col.has-tip:hover::after,.overview-page .ov-spark-col.has-tip:hover::before{opacity:1;transform:translateX(-50%) translateY(0)}.overview-page .ov-spark-x{display:flex;justify-content:space-between;font-family:var(--font-mono);font-size:.6875rem;color:var(--ink-muted);margin-top:6px}.overview-page .ov-triple-row{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px;margin-bottom:18px}.overview-page .ov-panel-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:12px;padding:18px 20px;box-shadow:var(--card-shadow)}.overview-page .ov-panel-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:14px}.overview-page .ov-panel-title{font-family:var(--font-serif);font-size:1rem}.overview-page .ov-panel-meta{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted)}.overview-page .ov-panel-foot{margin-top:12px;padding-top:10px;border-top:1px solid var(--border-color);font-size:.8125rem}.overview-page .ov-panel-foot a{color:var(--link-color);text-decoration:none}.overview-page .ov-panel-foot a:hover{text-decoration:underline}.overview-page .ov-performance{min-width:0;margin:22px 0}.overview-page .ov-performance-head{align-items:center;flex-wrap:wrap;gap:12px 20px}.overview-page .ov-performance-head h2{margin:0 0 4px}.overview-page .ov-performance-note{margin:0 0 12px;font-size:12px;line-height:1.5;color:var(--ink-muted)}.overview-page .ov-performance-head .ov-performance-note{margin:0}.overview-page .ov-performance-window{display:flex;align-items:center;gap:8px;flex-shrink:0}.overview-page .ov-performance-window label{margin:0;font-size:12px;color:var(--ink-muted)}.overview-page .ov-performance-window select{width:auto}.overview-page .ov-performance-tabs{margin:0 0 16px;gap:4px}.overview-page .ov-performance-tabs .paper-tab{white-space:nowrap}.overview-page .ov-metrics-scroll{max-width:100%;overflow-x:auto;border:1px solid var(--border-color);border-radius:var(--radius-control,8px)}.overview-page .ov-metrics-table{width:100%;border-collapse:collapse;color:var(--color);font-size:13px;line-height:1.5;font-variant-numeric:tabular-nums}.overview-page .ov-metrics-table td,.overview-page .ov-metrics-table th{padding:10px 12px;border-bottom:1px solid var(--border-color);vertical-align:middle;white-space:nowrap}.overview-page .ov-metrics-table thead th{background:var(--paper-bg-alt);color:var(--ink-muted);font-size:12px;font-weight:500}.overview-page .ov-metrics-table .num{text-align:right}.overview-page .ov-metrics-table tr:last-child>*{border-bottom:0}.overview-page .ov-metrics-table thead tr:last-child>*{border-bottom:1px solid var(--border-color)}.overview-page .ov-metrics-table tbody tr:hover{background:var(--hover-bg-color)}.overview-page .ov-metrics-table .ov-metric-name{min-width:190px;max-width:280px;text-align:left;white-space:normal;overflow-wrap:anywhere;font-weight:500}.overview-page .ov-metrics-table small{display:block;margin-top:3px;font-size:11px;font-weight:400;color:var(--ink-muted)}.overview-page .ov-metrics-table small .ui-icon{width:12px;height:12px}.overview-page .ov-metric-warning-row{background:rgba(196,138,46,.07)}.overview-page .ov-metric-warn,.overview-page .ov-metrics-table small.ov-metric-warn{color:#946519}.dark-mode .overview-page .ov-metric-warn,.dark-mode .overview-page .ov-metrics-table small.ov-metric-warn{color:#e8b970}.overview-page .ov-performance-message{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:10px 12px;margin:0 0 16px;border:1px solid var(--border-color);border-radius:var(--radius-control,8px);font-size:13px;line-height:1.5}.overview-page .ov-performance-message span{flex:1;min-width:160px}.overview-page .ov-performance-warning{background:rgba(196,138,46,.07)}.overview-page .ov-performance-empty{margin:0;padding:24px 12px;text-align:center;font-size:13px;color:var(--ink-muted)}.overview-page .ov-performance-help{margin-top:16px;font-size:12px;line-height:1.6;color:var(--ink-muted)}.overview-page .ov-performance-help summary{width:fit-content;cursor:pointer}.overview-page .ov-performance-help p{margin:8px 0 0;max-width:80ch}@media (max-width:575px){.overview-page .ov-performance{padding:16px 12px}.overview-page .ov-performance-window{width:100%}.overview-page .ov-performance-window select{flex:1;min-width:0}.overview-page .ov-performance-tabs .paper-tab{flex:1;padding:10px 8px}}.overview-page .ov-stacked-bar{display:flex;height:18px;border-radius:6px;overflow:hidden;margin-bottom:14px}.overview-page .ov-bar-seg{min-width:2px;transition:width .4s ease}.overview-page .ov-bar-ready{background:#2f7a44}.overview-page .ov-bar-preparing{background:#c48a2e}.overview-page .ov-bar-error{background:#b42318}.overview-page .ov-bar-expired{background:#8a857c}.overview-page .ov-bar-removed{background:#b5afa2}.dark-mode .overview-page .ov-bar-ready{background:#7dc894}.dark-mode .overview-page .ov-bar-preparing{background:#e8b970}.dark-mode .overview-page .ov-bar-error{background:#f08a82}.dark-mode .overview-page .ov-bar-expired{background:#6b665e}.dark-mode .overview-page .ov-bar-removed{background:#4a453e}.overview-page .ov-bar-legend{display:flex;flex-direction:column;gap:6px}.overview-page .ov-legend-item{display:flex;align-items:center;gap:8px;font-size:.8125rem;text-decoration:none;color:inherit}.overview-page .ov-legend-item:hover{text-decoration:none;color:inherit}.overview-page .ov-swatch{display:inline-block;width:12px;height:12px;border-radius:3px;flex-shrink:0}.overview-page .ov-legend-n{margin-left:auto;font-family:var(--font-mono);font-size:.8125rem;font-weight:600}.overview-page .ov-error-bars{display:flex;flex-direction:column;gap:12px}.overview-page .ov-ebar-row{display:flex;align-items:center;gap:10px}.overview-page .ov-ebar-label{width:30px;flex-shrink:0;font-family:var(--font-mono);font-size:.75rem;text-transform:uppercase;color:var(--ink-muted)}.overview-page .ov-ebar-track{flex:1;height:10px;background:var(--hover-bg-color);border-radius:5px;overflow:hidden}.overview-page .ov-ebar-fill{height:100%;border-radius:5px;transition:width .4s ease}.overview-page .ov-ebar-error{background:#b42318}.overview-page .ov-ebar-warn{background:#c48a2e}.overview-page .ov-ebar-info{background:var(--accent,#3b4ad6)}.dark-mode .overview-page .ov-ebar-error{background:#f08a82}.dark-mode .overview-page .ov-ebar-warn{background:#e8b970}.overview-page .ov-ebar-n{width:36px;text-align:right;font-family:var(--font-mono);font-size:.8125rem;font-weight:600;flex-shrink:0}.overview-page .ov-routes-table{display:flex;flex-direction:column}.overview-page .ov-route-row{display:grid;grid-template-columns:1fr 60px 60px 60px;padding:8px 0;border-bottom:1px solid var(--border-soft,var(--border-color));text-decoration:none;color:inherit;font-size:.875rem;align-items:center}.overview-page .ov-route-row:last-child{border-bottom:none}.overview-page .ov-route-row:hover{background:var(--hover-bg-color);text-decoration:none;color:inherit}.overview-page .ov-route-head{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted);border-bottom:1px solid var(--border-color)}.overview-page .ov-route-head:hover{background:0 0}.overview-page .ov-route-name{font-family:var(--font-mono);font-size:.8125rem}.overview-page .ov-route-n{text-align:right;font-family:var(--font-mono);font-size:.8125rem}.overview-page .ov-route-lat{color:var(--ink-muted)}.overview-page .ov-n-bad{color:#b42318;font-weight:600}.dark-mode .overview-page .ov-n-bad{color:#f08a82}.overview-page .ov-services-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px;box-shadow:var(--card-shadow);margin-bottom:18px}.overview-page .ov-services-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:16px}.overview-page .ov-services-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px}.overview-page .ov-svc{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border:1px solid var(--border-soft,var(--border-color));border-radius:10px}.overview-page .ov-svc-dot{width:10px;height:10px;border-radius:50%;margin-top:3px;flex-shrink:0}.overview-page .ov-svc-info{display:flex;flex-direction:column;gap:1px;flex:1}.overview-page .ov-svc-name{font-family:var(--font-mono);font-size:.875rem;font-weight:600}.overview-page .ov-svc-meta{font-size:.75rem;color:var(--ink-muted)}.overview-page .ov-svc-detail{font-size:.75rem;color:var(--ink-muted);white-space:nowrap}@media (max-width:900px){.overview-page .ov-kpi-row{grid-template-columns:repeat(3,1fr)}.overview-page .ov-daily-row{grid-template-columns:repeat(3,1fr)}.overview-page .ov-triple-row{grid-template-columns:1fr}}@media (max-width:720px){.overview-page .ov-kpi-row{grid-template-columns:repeat(2,1fr)}.overview-page .ov-daily-row{grid-template-columns:1fr}.overview-page .ov-chart-row{grid-template-columns:1fr}.overview-page .ov-header{flex-direction:column;gap:8px}}@media (max-width:480px){.overview-page .ov-kpi-row{grid-template-columns:1fr 1fr}.overview-page .ov-services-grid{grid-template-columns:1fr 1fr}}.dashboard-heading-actions{display:flex;flex-direction:column;align-items:flex-end;gap:8px;padding-bottom:12px}.dashboard-heading-actions .btn{display:inline-flex;align-items:center;justify-content:center;gap:8px}.dashboard-connections-link{display:inline-flex;align-items:center;gap:7px;min-height:32px;color:var(--ink-muted);font-size:12px;line-height:1.5}.dashboard-connections-link:hover{color:var(--accent);text-decoration:none}.dashboard-connections-link:focus-visible{outline:2px solid var(--accent);outline-offset:4px;border-radius:2px}@media (max-width:767px){.dashboard-heading-actions{align-items:flex-start;padding-bottom:0;gap:4px}.dashboard-connections-link{min-height:44px}}.paper-settings-connection-link{display:flex;align-items:center;gap:12px;padding:18px 0;color:var(--color);font-size:14px}.paper-settings-connection-link>i{color:var(--ink-muted);font-size:18px}.paper-settings-connection-link>span:first-of-type{flex:1}.paper-settings-connection-link small{display:block;margin-top:4px;color:var(--ink-muted);font-size:12px}.paper-settings-connection-link:hover{color:var(--accent);text-decoration:none}.paper-settings-connection-link:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.connections-heading{margin-bottom:36px}.connections-heading .paper-page-title{font-size:clamp(38px,4.5vw,56px);margin-bottom:12px}.connections-heading .paper-page-lede{font-size:15px}.connections-grid{display:grid;grid-template-columns:1.15fr 1fr;gap:56px;align-items:start;border-top:1px solid var(--border-color);padding-top:28px}.connections-grid>section{min-width:0}.connection-title,.connection-top{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.connection-top{margin-bottom:24px;min-height:28px}.connection-top>i{color:var(--ink-muted);font-size:24px}.connection-top>.fa-key{font-size:18px}.connection-title{margin-bottom:10px}.connections-page h2{font-family:inherit;font-size:22px;font-weight:600;letter-spacing:-.5px;margin:0}.connections-page p{font-size:14px;line-height:1.65;color:var(--ink-muted)}.connection-badge{background:var(--accent-soft);color:var(--accent);font-size:11px;font-weight:600;border-radius:5px;padding:4px 8px;white-space:nowrap}.connection-badge-muted{background:var(--paper-bg-alt);color:var(--ink-muted)}.connection-status{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--ink-muted)}.connection-status::before{content:'';width:6px;height:6px;border-radius:50%;background:currentColor}.connection-status.is-connected{color:var(--status-ready)}.connection-actions{display:flex;flex-wrap:wrap;align-items:center;gap:16px;margin:22px 0 16px}.connections-page .btn{font-size:13px;padding:9px 13px;white-space:normal}.connection-revoke p,.connections-page .connection-help{font-size:12px}.connection-link{display:inline-flex;align-items:center;gap:8px;border:0;padding:0;background:0 0;color:var(--accent);font-size:13px;line-height:1.6;font-weight:500;text-align:left;cursor:pointer}.connection-link:hover{color:var(--link-hover-color);text-decoration:underline}.connection-link:disabled{color:var(--ink-muted);opacity:.65;cursor:not-allowed;text-decoration:none}.connection-link:focus-visible{outline:2px solid var(--accent);outline-offset:5px}.connection-installations{list-style:none;padding:0;margin:18px 0;border-top:1px solid var(--border-soft)}.connection-installations li{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:14px 0;font-size:12px;border-bottom:1px solid var(--border-soft)}.connection-revoke{border-top:1px solid var(--border-soft);padding-top:18px;margin-top:24px}.connection-danger{color:var(--status-error)}.connection-resources{margin-top:36px;padding-top:28px;border-top:1px solid var(--border-color)}.connection-count{color:var(--ink-muted);font-size:12px}.connection-empty{display:flex;align-items:center;gap:18px;padding:20px 0;margin:22px 0}.connection-empty>i{font-size:22px;color:var(--ink-muted)}.connection-empty h3{font-size:14px;font-weight:600;margin:0 0 5px}.connection-empty p{font-size:12px;margin:0}.connection-empty>a{margin-left:auto;flex-shrink:0}.connection-resource{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:20px 0;border-bottom:1px solid var(--border-color)}.connection-resource-name{flex:1;min-width:180px;overflow-wrap:anywhere;font-size:14px}.connection-resource-name small{display:block;color:var(--ink-muted);font-size:11px;margin-top:5px}.connection-resource-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.connection-resource-actions .connection-help{flex-basis:100%}.connections-page .connection-footnote{display:flex;align-items:baseline;gap:10px;margin-top:22px;font-size:12px}@media (max-width:767px){.connections-grid{grid-template-columns:1fr;gap:28px}.connections-grid>section+section{border-top:1px solid var(--border-color);padding-top:28px}.connection-empty{flex-wrap:wrap}.connection-empty>div{flex:1;min-width:180px}.connection-empty>a{margin-left:40px}.connection-resource-actions{flex-basis:100%}}.paper-table-empty-actions .btn{display:inline-flex;align-items:center;justify-content:center;gap:6px}.paper-table-empty-actions .btn>i{font-size:1em;line-height:1;color:inherit;margin-right:0!important}.auth-back{display:inline-flex;align-items:center;gap:10px;font-size:13px;color:var(--ink-muted);margin-bottom:48px}.auth-layout{display:grid;grid-template-columns:1fr 1fr;gap:64px;align-items:start}.auth-intro,.auth-options{padding-top:28px}.auth-title-mobile{display:none}.auth-intro .paper-page-title{font-size:clamp(48px,5vw,76px);line-height:1.06;margin:18px 0 24px}.auth-intro .paper-page-lede{max-width:330px}.auth-options{display:grid;gap:28px}.auth-options h2{font-family:inherit;font-size:22px;font-weight:600;margin:0 0 10px}.auth-options p{font-size:14px;line-height:1.65;color:var(--ink-muted)}.auth-options .auth-existing{font-size:12px;border-left:2px solid var(--accent);padding-left:14px;margin:0}.auth-permissions{padding:6px 0 12px;list-style:none;font-size:13px;line-height:1.6}.auth-permissions li{display:flex;gap:10px;margin:12px 0}.auth-permissions i{color:var(--status-ready);margin-top:4px}.auth-continue{display:flex!important;align-items:center;justify-content:space-between;min-height:48px;padding:12px 16px!important}.auth-options small{display:block;font-size:12px;text-align:center;color:var(--ink-muted);margin-top:12px}.auth-legacy{border-top:1px solid var(--border-color);padding-top:24px}.auth-legacy h2{font-size:16px;margin:0}.auth-legacy p{font-size:13px}.source-url-label-row{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px 16px;margin-bottom:8px}.source-url-label-row>.paper-field-label{font-family:var(--font-sans);font-size:13px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--color);margin-bottom:6px;display:block}.repo-access{margin:0}.repo-access-details{margin:12px 0 24px}.source-url-label-row .repo-access-switch{padding:2px}.source-url-label-row .repo-access-switch button{padding:6px 10px;font-size:12px;line-height:20px}.repo-access-main{display:flex;align-items:center;gap:10px;padding:0 0 8px;flex-wrap:wrap}.repo-access-controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.repo-access-switch{display:inline-flex;gap:3px;padding:3px;border:1px solid var(--border-color);border-radius:7px;flex-wrap:wrap}.repo-access-switch button{border:0;border-radius:4px;background:0 0;color:var(--ink-muted);padding:7px 10px;font:inherit;font-size:12px;cursor:pointer}.repo-access-switch button[aria-pressed=true]{background:var(--accent-soft);color:var(--accent);opacity:1;cursor:default;font-weight:600}.repo-access-switch button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.repo-access-details .btn{font-size:12px;padding:8px 12px}.repo-access-note{display:flex;gap:6px 16px;flex-wrap:wrap;padding:0;color:var(--ink-muted);font-size:11px;line-height:1.6}@media (max-width:767px){.auth-page{max-width:480px}.auth-back,.auth-intro .paper-eyebrow,.auth-title-desktop{display:none}.auth-title-mobile{display:inline}.auth-layout{grid-template-columns:1fr;gap:24px}.auth-intro,.auth-options{padding-top:0}.auth-intro .paper-page-title{font-size:40px;line-height:1.15;margin:6px 0 12px}.auth-intro .paper-page-lede{max-width:none;font-size:14px;margin:0}.auth-options{gap:24px}.auth-options .connection-top{margin-bottom:16px}.auth-options h2{font-size:18px}.auth-options p{font-size:13px;margin-bottom:12px}.auth-permissions{padding:0;margin:14px 0 20px;font-size:12px}.auth-permissions li{margin:8px 0}.auth-continue{font-size:14px}.auth-legacy{padding-top:20px}.auth-legacy h2{font-size:15px}.auth-legacy .connection-link{min-height:44px}.repo-access-controls{width:100%;gap:12px}}.text-muted{color:var(--ink-muted)!important}.anonymize-review-note,.draft-status{font-size:13px;color:var(--ink-muted)}.anonymize-review-note{padding:12px 0;margin:0}.anonymize-preview-status{padding:20px 32px;color:var(--ink-muted)}.anonymize-preview-status p{margin:0 0 12px}@media (max-width:575px){.dashboard-page .paper-page-lede{margin-bottom:8px}.dashboard-page .dashboard-heading-actions{gap:4px}.dashboard-page .dashboard-connections-link{min-height:32px}.dashboard-page .dashboard-filter-row{margin-top:12px}.anonymize-preview-status{padding:16px}}.paper-page .paper-page-title{font-size:32px}.paper-page.admin-page .paper-page-title{font-size:28px}.paper-page .paper-page-lede{font-size:14px;line-height:1.5}.paper-settings{padding-top:32px}.paper-settings-body{grid-template-columns:180px minmax(0,1fr);gap:40px;margin-top:24px;padding-top:24px;border-top:0}.paper-settings-main .paper-settings-section{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);padding:20px;margin-bottom:16px}.anonymize-page .paper-section-eyebrow,.paper-settings .paper-section-eyebrow{font-family:var(--font-sans);font-size:16px;font-weight:600;color:var(--color);text-transform:none;letter-spacing:-.01em;margin-bottom:12px}.paper-settings .paper-settings-toc-head{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.paper-settings-section .paper-section-copy{margin-top:0}.paper-settings .quota-row{gap:24px}.paper-settings .quota-header{flex-direction:column;align-items:flex-start;gap:4px}.paper-settings .quota-value{white-space:nowrap}.paper-settings .paper-settings-footer{padding:0 0 20px}.paper-settings .form-control{font-size:14px;border-color:var(--border-color);border-radius:var(--radius-control)}.paper-settings .form-check{padding-top:8px;padding-bottom:8px}.anonymize-page .btn-ink,.explorer-page .btn-ink,.paper-page .btn-ink{background:var(--accent);color:#fff;border-color:var(--accent)}.dark-mode .anonymize-page .btn-ink,.dark-mode .explorer-page .btn-ink,.dark-mode .paper-page .btn-ink{color:#1a1815}.anonymize-page .btn-ink:hover,.explorer-page .btn-ink:hover,.paper-page .btn-ink:hover{background:var(--accent);border-color:var(--accent);color:#fff;filter:brightness(.94)}.dark-mode .anonymize-page .btn-ink:hover,.dark-mode .explorer-page .btn-ink:hover,.dark-mode .paper-page .btn-ink:hover{color:#1a1815}.anonymize-page .btn-ink:active,.explorer-page .btn-ink:active,.paper-page .btn-ink:active{filter:brightness(.9)}input[type=date],select{color-scheme:light}.dark-mode input[type=date],.dark-mode select{color-scheme:dark}.draft-status{display:flex;align-items:center;flex-wrap:wrap;gap:6px 12px;padding:10px 0}.draft-discard{padding:0;border:0;color:var(--accent);font:inherit;font-size:13px;text-decoration:underline;background:0 0;cursor:pointer}.conference-feedback{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px;margin-top:16px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);width:100%}.paper-table{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);margin-top:12px}.dashboard-page .paper-table-dashboard{width:100%}.paper-account-email{margin:20px 0}.paper-account-email .form-control{max-width:420px}.paper-settings .paper-account-email .btn[type=submit]{min-height:36px;padding:7px 18px;white-space:nowrap}.paper-table .paper-table-head{font-family:var(--font-sans);text-transform:none;letter-spacing:0;font-size:12px;background:var(--paper-bg-alt);border-radius:var(--radius-surface) var(--radius-surface) 0 0}.paper-table .paper-table-head,.paper-table .paper-table-row{padding-left:16px;padding-right:16px}.dashboard-page{--dashboard-space-xs:4px;--dashboard-space-sm:8px;--dashboard-space-md:12px;--dashboard-space-lg:16px;--dashboard-space-xl:24px;padding-top:var(--dashboard-space-xl)}.project-icon-definitions{position:absolute;width:0;height:0;overflow:hidden}.project-type-svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}.project-empty-icon{width:28px;height:28px;color:var(--ink-faint)}.project-type-icon{display:inline-flex;color:var(--ink-muted);flex-shrink:0}.dashboard-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--dashboard-space-lg)}.dashboard-heading .paper-page-title{font-size:28px;margin-bottom:var(--dashboard-space-xs)}.dashboard-heading .paper-page-lede{display:none}.dashboard-heading .btn{min-height:40px;display:inline-flex;gap:var(--dashboard-space-sm);align-items:center}.dashboard-new-mobile{display:none}.dashboard-quota{position:relative;margin:0;padding:0;border:0;background:0 0}.dashboard-quota>summary{display:inline-flex;align-items:center;gap:6px;min-height:32px;padding:5px 10px;border:1px solid var(--border-color);border-radius:6px;background:var(--paper-card);color:var(--color);font-family:var(--font-sans);font-size:12px;cursor:pointer;list-style:none;white-space:nowrap}.dashboard-quota>summary::-webkit-details-marker{display:none}.dashboard-quota>summary:hover,.dashboard-quota[open]>summary{background:var(--paper-bg-alt);border-color:var(--ink-faint)}.quota-summary-label{font-weight:600}.quota-summary-value{color:var(--ink-muted);font-variant-numeric:tabular-nums}.quota-summary-ring{width:18px;height:18px;flex-shrink:0;fill:none;stroke-width:2.5}.quota-ring-track{stroke:var(--border-color)}.quota-ring-fill{stroke:var(--accent);transform:rotate(-90deg);transform-origin:50% 50%}.quota-summary-ring.quota-warn .quota-ring-fill{stroke:var(--status-progress)}.quota-summary-ring.quota-danger .quota-ring-fill{stroke:var(--status-error)}.quota-ring-unlimited{stroke:var(--accent);stroke-width:1.7}.quota-summary-chevron{width:14px;height:14px;margin-left:2px;color:var(--ink-muted);transition:transform .15s ease}.dashboard-quota[open] .quota-summary-chevron{transform:rotate(180deg)}.dashboard-quota .quota-panel{position:absolute;z-index:25;top:calc(100% + 8px);left:0;width:344px;max-width:calc(100vw - 36px);padding:16px;border:1px solid var(--border-color);border-radius:12px;background:var(--paper-card);box-shadow:0 12px 36px rgba(26,24,21,.16)}.quota-panel-heading{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.quota-panel-heading h2{font:600 15px var(--font-sans);margin:0}.quota-panel-heading .project-close{margin:-8px -8px -8px 0}.paper-page .quota-usage{display:grid;grid-template-columns:1fr;gap:16px;margin:0;padding:0}.quota-usage .quota-item+.quota-item{padding-top:16px;border-top:1px solid var(--border-soft,var(--border-color))}.quota-usage .quota-header{display:flex;align-items:center;gap:8px;margin-bottom:6px}.quota-usage .quota-label{display:inline-flex;align-items:center;gap:8px;font:500 12px var(--font-sans);letter-spacing:0;text-transform:none;color:var(--ink-muted)}.quota-usage .quota-label .project-type-svg{width:16px;height:16px}.quota-usage .quota-value{display:flex;align-items:baseline;gap:4px;font:12px var(--font-sans);font-variant-numeric:tabular-nums;color:var(--ink-muted);margin-bottom:8px}.quota-usage .quota-value strong{font-size:20px;line-height:1.2;font-weight:600;color:var(--color)}.quota-percent,.quota-usage .quota-unlimited-tag{margin-left:auto;padding:2px 6px;border-radius:4px;background:var(--paper-bg-alt);font:11px var(--font-sans);color:var(--ink-muted);white-space:nowrap}.quota-warn>.quota-header .quota-percent{color:var(--status-progress)}.quota-danger>.quota-header .quota-percent{color:var(--status-error)}.quota-usage .quota-track{height:5px;border:0;background:var(--paper-bg-alt)}.quota-usage .quota-track .quota-fill{min-width:0;background:var(--accent)}.quota-remaining{margin:6px 0 0;color:var(--ink-muted);font-size:11px}.quota-remaining.quota-limit{color:var(--status-error)}.quota-loading{font-size:12px;color:var(--ink-muted);margin:12px 0 0}.dashboard-page .dashboard-filter-row{display:flex;align-items:center;gap:var(--dashboard-space-md);padding:0;margin:var(--dashboard-space-lg) 0 0;border:0;background:0 0}.dashboard-page .dashboard-filter-row .search-wrap{flex:1 1 240px;min-width:0}.dashboard-page .dashboard-filter-row .form-control{height:40px;padding:8px 12px;font-size:13px;background:var(--paper-card)}.dashboard-page .dashboard-filter-controls{display:flex;flex-wrap:nowrap;align-items:center;gap:var(--dashboard-space-sm)}.dashboard-extra-filters{display:flex;gap:var(--dashboard-space-sm)}.dashboard-filters-toggle{display:none}.dashboard-page .dashboard-filter-row .btn-group .btn{border:0;background:0 0;border-radius:6px;height:36px;padding:6px 10px}.dashboard-page .dashboard-filter-row .btn-group .btn.btn-primary{background:var(--accent-soft);color:var(--accent)}.dashboard-page .dashboard-filter-row .btn-group .btn.btn-primary:active,.dashboard-page .dashboard-filter-row .btn-group .btn.btn-primary:hover{background:var(--accent-soft)!important;color:var(--accent)}.dashboard-page .dashboard-filter-row .dropdown-toggle{height:36px;padding:6px 10px}.dashboard-type-filter .project-type-svg{display:none}.sort-direction{width:14px;height:14px}.sort-direction.ascending{transform:rotate(180deg)}.dashboard-page .dashboard-meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--dashboard-space-sm) var(--dashboard-space-md);margin:var(--dashboard-space-md) 0 0;padding:0}.dashboard-view-tabs{display:flex;align-items:center;gap:var(--dashboard-space-lg)}.dashboard-view-short{display:none}.dashboard-view-tabs button{min-height:36px;border:0;border-bottom:2px solid transparent;border-radius:0;background:0 0;font:inherit;font-size:13px;color:var(--ink-muted);padding:4px 0}.dashboard-view-tabs button[aria-pressed=true]{color:var(--color);border-bottom-color:var(--color);font-weight:600}.attention-count{padding:1px 5px;margin-left:4px;border-radius:4px;background:var(--paper-bg-alt);font-size:11px;font-variant-numeric:tabular-nums}.attention-count.has-attention{color:var(--status-error)}.dashboard-count{margin-left:auto;font-size:12px;color:var(--ink-muted)}.dashboard-active-filters{display:flex;align-items:center;flex-wrap:wrap;gap:var(--dashboard-space-sm);width:100%}.dashboard-page .filter-chip{display:inline-flex;font-family:var(--font-sans);font-size:11px;text-transform:none;letter-spacing:0;border-radius:6px}.dashboard-page .filter-chip .project-type-svg{width:12px;height:12px;margin-left:4px}.dashboard-page .filter-chip-close{min-width:24px;min-height:24px;display:inline-flex;align-items:center;justify-content:center;margin:-2px -4px -2px 2px}.dashboard-page .btn-link-inline{color:var(--ink-muted);font-size:12px}.dashboard-page .paper-table-dashboard{margin-top:var(--dashboard-space-md);border-left:0;border-right:0;border-radius:0}.dashboard-page .paper-table-dashboard .paper-table-head,.dashboard-page .paper-table-dashboard .paper-table-row{grid-template-columns:minmax(280px,3fr) 180px 72px 148px 64px;gap:var(--dashboard-space-lg);padding:8px 12px}.dashboard-page .paper-table-dashboard .paper-table-head{border-radius:0}.dashboard-page .paper-table .cell-anon{gap:var(--dashboard-space-sm)}.dashboard-page .paper-table .anon-text{flex:1}.dashboard-page .paper-table .repo-name{font-family:var(--font-sans);font-size:14px;font-weight:600}.dashboard-page .paper-table .anon-sub{display:flex;align-items:center;gap:var(--dashboard-space-sm);min-width:0}.anonymous-id{font-size:12px;font-family:var(--font-mono);color:var(--ink-muted);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dashboard-page .paper-table .type-badge{font-family:var(--font-sans);letter-spacing:0;font-size:11px;text-transform:none;border-radius:6px}.dashboard-page .paper-table .status-sub{font-size:12px}.dashboard-page .paper-table .cell-conf{font-family:var(--font-sans);letter-spacing:0;text-transform:none}.dashboard-page .conf-tag .project-type-svg{width:14px;height:14px}.dashboard-row-meta{display:contents}.dashboard-page .cell-actions{gap:0;align-items:center}.copy-link-inline,.dashboard-page .btn-icon-dots,.project-close{display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:6px;background:0 0;color:var(--ink-muted);padding:0;width:32px;height:32px;min-width:32px;cursor:pointer}.copy-link-inline:focus-visible,.copy-link-inline:hover,.dashboard-page .btn-icon-dots:hover,.project-close:hover{background:var(--accent-soft);color:var(--accent)}.copy-link-inline:disabled{opacity:.5;cursor:wait}.mobile-meta-icon{display:none}.project-attention-action{display:inline-block;color:var(--accent);border:0;background:0 0;padding:0;font:inherit;font-size:12px;cursor:pointer;text-decoration:underline;text-underline-offset:3px}.project-attention-action{text-align:left}.dashboard-page .cell-status .project-attention-action{flex-basis:100%}.project-details-row{width:100%;border-bottom:1px solid var(--border-color)}.project-details{padding:var(--dashboard-space-xl);background:var(--paper-bg-alt)}.project-details-heading{display:flex;align-items:center;justify-content:space-between;gap:var(--dashboard-space-sm)}.project-details-heading h2{font:600 16px var(--font-sans);margin:0}.project-details-list{display:grid;grid-template-columns:1fr 1fr;gap:var(--dashboard-space-md) var(--dashboard-space-xl);margin:12px 0}.project-details-list dt{font-size:12px;color:var(--ink-muted);font-weight:500;margin-bottom:4px}.project-details-list dd{margin:0;font-size:13px;overflow-wrap:anywhere}.project-details-list code{color:var(--color);font-size:12px}.project-name-form{margin-top:var(--dashboard-space-lg);padding-top:var(--dashboard-space-lg);border-top:1px solid var(--border-color)}.project-name-form label{display:block;font-size:13px;font-weight:500;margin-bottom:4px}.project-name-form p,.project-progress-help{font-size:12px;color:var(--ink-muted);margin-bottom:8px}.project-name-controls{display:flex;gap:var(--dashboard-space-sm);max-width:560px}.project-name-controls .form-control{min-width:0;font-size:14px}.project-name-controls .btn{flex-shrink:0;min-height:40px}.project-name-form .project-name-error{color:var(--status-error)}.project-details-button{min-height:44px;padding:0 8px;border:0;border-radius:6px;background:0 0;font:inherit;font-size:12px;color:var(--ink-muted);cursor:pointer}.anonymize-page .anonymize-topbar-title{font-family:var(--font-sans);font-size:28px;font-weight:600}.anonymize-topbar{padding:16px 24px}.anonymize-form-col{background:var(--paper-bg-alt)}.anonymize-form-col .paper-settings-main{padding:20px 24px}.anonymize-form-col .paper-settings-section{padding:18px}.anonymize-form-col .paper-settings-section:first-child{padding-top:18px}.anonymize-form-col .anonymize-submit-bar{background:var(--paper-bg-alt);padding:12px 0}.anonymize-preview-head .paper-eyebrow{font-family:var(--font-sans);font-size:14px;font-weight:600;color:var(--color);text-transform:none;letter-spacing:0}.anonymize-preview-col{background:var(--canvas-bg-color);padding:24px}.anonymize-preview-head{flex-wrap:wrap;gap:6px 12px;margin-bottom:16px}.anonymize-preview-body{padding:24px}.anonymize-mobile-tabs,.anonymize-preview-empty,.mobile-preview-jump{display:none}.anonymize-page .repo-access-note{font-size:12px}@media (max-width:900px){.paper-settings-body{grid-template-columns:1fr;gap:18px}.paper-settings-toc{padding:0}.paper-settings-toc-head{display:none}.paper-table .paper-table-row{padding-left:14px;padding-right:14px}}@media (max-width:767px){.anonymize-page .paper-page-title,.paper-page .paper-page-title{font-size:24px}.paper-settings{padding:20px 16px 40px}.paper-settings-main .paper-settings-section{padding:16px}.anonymize-topbar{padding:12px 16px}.anonymize-topbar .paper-crumbs{display:none}.anonymize-mobile-tabs{display:flex;gap:4px;padding:8px 16px;border-bottom:1px solid var(--border-color);background:var(--paper-card)}.anonymize-mobile-tabs button{flex:1;font:inherit;font-size:13px;padding:10px;border:0;border-radius:6px;background:0 0;color:var(--ink-muted)}.anonymize-mobile-tabs button[aria-selected=true]{background:var(--accent-soft);color:var(--accent);font-weight:600}.anonymize-page:not(.mobile-preview-active) .anonymize-preview-col{display:none}.mobile-preview-active .anonymize-form-col{display:none}.mobile-preview-active .anonymize-preview-empty{display:block;padding:24px 16px;color:var(--ink-muted)}.anonymize-form-col .paper-settings-main{padding:16px}.anonymize-form-col .anonymize-submit-bar{background:var(--paper-bg-alt)}.mobile-preview-jump{display:block;width:100%;min-height:44px}.anonymize-preview-col{padding:16px}.anonymize-preview-body{padding:16px}}@media (max-width:575px){.paper-settings .quota-header{flex-direction:row;flex-wrap:wrap;align-items:baseline;gap:4px 8px}}@media (max-width:1100px) and (min-width:901px){.dashboard-page .dashboard-filter-row{flex-wrap:wrap}.dashboard-page .dashboard-filter-row .search-wrap{flex-basis:100%}.dashboard-page .dashboard-filter-controls{width:100%;justify-content:space-between}}@media (max-width:900px){.dashboard-page .paper-table.paper-table-dashboard .paper-table-row{gap:4px 8px;padding:8px 12px}.dashboard-page .paper-table .cell-anon{flex:1 1 calc(100% - 96px);min-width:0}.dashboard-page .paper-table .cell-actions{flex:0 0 88px}.dashboard-row-meta{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px;order:3;width:100%}.dashboard-page .dashboard-row-meta .cell-status{flex:1 1 80px;flex-wrap:wrap;gap:2px 8px}.dashboard-page .dashboard-row-meta .cell-expires,.dashboard-page .dashboard-row-meta .cell-views{flex-shrink:0;font-size:12px}.dashboard-page .cell-expires::before,.dashboard-page .cell-views::before{content:none}.dashboard-page .mobile-meta-icon{display:inline-block;width:14px;height:14px}.dashboard-page .dashboard-row-meta .status-sub-date{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.dashboard-page .dashboard-row-meta .status-sub-error,.dashboard-page .dashboard-row-meta .status-sub-warn{flex-basis:100%;white-space:normal;overflow-wrap:anywhere}.dashboard-page .dashboard-row-meta .status-sub::before{content:none}.dashboard-page .project-attention-action{min-height:44px;display:inline-flex;align-items:center}.dashboard-page .paper-table .anon-sub .commit-hash,.dashboard-page .paper-table .anon-sub .conf-tag{display:none}}@media (max-width:767px){.container.dashboard-page{padding-top:12px}.dashboard-heading .paper-page-title{font-size:24px}.dashboard-heading-actions .btn-ink{min-height:44px}.dashboard-new-label{display:none}.dashboard-new-mobile{display:inline}.dashboard-quota>summary{min-height:44px;gap:6px;padding:10px;font-size:12px;line-height:20px}.dashboard-quota .quota-panel{max-height:calc(100dvh - 184px);overflow-y:auto;overscroll-behavior:contain}.dashboard-page .dashboard-filter-row{flex-wrap:wrap;gap:8px;margin-top:12px}.dashboard-page .dashboard-filter-row .search-wrap{flex:1 1 0}.dashboard-page .dashboard-filter-row .form-control{height:44px}.dashboard-page .dashboard-filters-toggle{display:inline-flex;align-items:center;gap:6px;font-size:12px;padding:8px;min-height:44px;background:0 0;border:0}.dashboard-page .dashboard-filter-controls{display:none;width:100%}.dashboard-page .dashboard-filter-controls.expanded{display:flex;flex-wrap:wrap;gap:8px}.dashboard-page .dashboard-filter-controls .btn-group{width:100%;display:flex}.dashboard-page .dashboard-filter-controls .btn-group .btn{flex:1;min-height:44px}.dashboard-extra-filters{display:flex;width:100%}.dashboard-page .dashboard-extra-filters .dropdown{flex:1;min-width:0}.dashboard-page .dashboard-extra-filters .dropdown-toggle{width:100%;height:44px}.dashboard-type-filter .type-filter-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.dashboard-type-filter .project-type-svg{display:inline-block}.dashboard-page .dashboard-meta{margin-top:8px;gap:4px 8px}.dashboard-view-tabs{gap:16px}.dashboard-view-tabs button{min-width:44px;min-height:44px;font-size:12px}.dashboard-count{font-size:11px}.dashboard-count{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.dashboard-view-long{display:none}.dashboard-view-short{display:inline}.dashboard-active-filters{display:contents}.dashboard-page .filter-chip{font-size:11px;padding:0 8px;min-height:44px;gap:4px}.dashboard-page .filter-chip-close{min-width:44px;min-height:44px;margin:0}.dashboard-page .btn-link-inline{min-height:44px;font-size:12px}.dashboard-page .paper-table-dashboard{width:calc(100% + 36px);margin:8px -18px 0;border-left:0;border-right:0;border-radius:0}.dashboard-page .paper-table .repo-name{font-size:13px}.project-details{padding:16px 12px}.project-details-list{grid-template-columns:1fr;gap:12px}.project-name-controls{flex-wrap:wrap}.project-name-controls .form-control{flex-basis:100%}.project-name-controls .btn{min-height:44px}}@media (max-width:360px){.dashboard-attention-prefix{display:none}.dashboard-attention-prefix+span{text-transform:capitalize}}.ui-icon-definitions{position:absolute;width:0;height:0;overflow:hidden;pointer-events:none}.ui-icon{display:inline-block;width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0;vertical-align:-3px}.ui-icon.sort-direction{width:14px;height:14px}.pr-title-row{display:flex;align-items:flex-start;gap:16px}.pr-title-row .pr-title{flex:1;min-width:0}.pr-title-row>.btn{flex-shrink:0}.ui-icon.record-type-icon{color:var(--ink-muted)}.btn .ui-icon,.dropdown-item .ui-icon{width:16px;height:16px}.btn-icon-dots .ui-icon{width:18px;height:18px}.anonymize-page .paper-page-title,.paper-page .paper-page-title{font-size:28px}.paper-faq,.paper-page{padding-top:24px}.paper-page .paper-page-lede{margin-bottom:16px;overflow-wrap:anywhere}.paper-page-title{overflow-wrap:anywhere}.anonymize-page .form-control,.paper-page .form-control{min-height:40px;font-family:var(--font-sans);font-size:14px;border-radius:var(--radius-control)}.anonymize-page textarea.form-control,.paper-page textarea.form-control{height:auto}.anonymize-page .btn,.paper-page .btn,.status-bar-actions .btn{min-height:var(--button-height);padding:7px var(--button-padding-x);font:500 var(--button-font-size)/var(--button-line-height) var(--font-sans);border-radius:var(--radius-button);gap:6px}.anonymize-page .btn.btn-sm,.paper-page .btn.btn-sm,.status-bar-actions .btn{min-height:var(--button-compact-height);padding:5px 10px;font-size:13px;border-radius:6px}.anonymize-page .btn-ink,.paper-page .btn-ink{min-height:40px;padding:9px 15px}.btn-hero>i,.btn>.project-type-svg,.btn>.ui-icon,.btn>i{width:16px;height:16px;margin:0!important;flex-shrink:0}.btn.dropdown-toggle::after{margin-left:0}.btn.disabled,.btn:disabled{cursor:not-allowed}.btn.disabled:hover,.btn:disabled:hover{filter:none}.paper-page .btn.btn-link{background:0 0;border-color:transparent}.auth-continue.btn{min-height:44px;padding:11px 16px!important}.anonymize-page .btn.btn-icon,.paper-page .btn.btn-icon{width:32px;height:32px;min-width:32px;min-height:32px;padding:0}.paper-page .btn.btn-icon-dots{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;min-width:32px;min-height:32px;padding:0;border:0;background:0 0;color:var(--ink-muted)}.paper-page .btn-icon-dots:hover{background:var(--accent-soft);color:var(--accent)}.paper-page .btn-group .btn-primary:active,.paper-page .btn-group .btn-primary:hover{background:var(--accent-soft)!important;color:var(--accent)}.paper-page .paper-section-eyebrow{font-family:var(--font-sans);font-size:16px;font-weight:600;color:var(--color);text-transform:none;letter-spacing:0;margin-bottom:12px}.paper-page .paper-field-label{font-family:var(--font-sans);font-size:13px;letter-spacing:0}.paper-tabs .paper-tab{min-height:44px}.paper-pill,.status-pill{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none;border-radius:6px}.paper-meta-rule{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none;gap:12px 24px}.paper-meta-rule b:not(.commit-hash){font-family:var(--font-sans);font-weight:500}.connections-grid{gap:16px}.connections-grid>section{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);padding:20px}.connections-heading{margin-bottom:24px}.claim-page .claim-form,.status-page>.paper-settings-section{padding:20px;margin-top:24px;border:1px solid var(--border-color);border-radius:var(--radius-surface);background:var(--paper-card)}.claim-page .claim-form{max-width:640px}.status-page .anonymize-submit-bar{background:0 0;gap:8px;flex-wrap:wrap}.anonymize-landing{padding-top:32px}.paper-settings .quota-usage{grid-template-columns:repeat(3,minmax(0,1fr));gap:24px}.paper-settings .quota-usage .quota-item+.quota-item{padding-top:0;border-top:0;padding-left:16px;border-left:1px solid var(--border-color)}.paper-settings .quota-usage .quota-header{flex-direction:row;align-items:center;flex-wrap:wrap}.paper-settings .quota-usage .quota-value{white-space:normal;flex-wrap:wrap}.paper-faq-hero{padding-bottom:24px;margin-bottom:24px}.paper-faq-eyebrow,.paper-faq-toc-head{font-family:var(--font-sans);font-size:12px;text-transform:none;letter-spacing:0;margin-bottom:8px}.paper-faq-title{font:600 28px/1.2 var(--font-sans);letter-spacing:-.025em;max-width:720px;margin-bottom:12px}.paper-faq-title em{font-style:normal}.paper-faq-lede{font-size:14px}.paper-faq-body{grid-template-columns:180px minmax(0,1fr);gap:40px}.faq-section h4.faq-cat{font:600 18px/1.4 var(--font-sans);padding-bottom:12px}.faq-section h4.faq-cat .ui-icon{display:none}.faq-section .panel-group{margin-bottom:32px}.faq-section .panel-default .panel-title a{font:500 15px/1.5 var(--font-sans);padding:16px 0 16px 28px;min-height:44px}.faq-section .panel-default .panel-title a:after{top:16px}.paper-empty-title{font:600 32px/1.2 var(--font-sans);letter-spacing:-.025em}.paper-empty-title em{font-style:normal}.btn-hero{justify-content:center;gap:8px;min-height:48px;padding:13px 20px;font-size:15px;line-height:20px;background:var(--accent);border-color:var(--accent);color:#fff;border-radius:var(--radius-button)}.dark-mode .btn-hero{color:#1a1815}.btn-hero:hover{background:var(--accent);color:#fff;filter:brightness(.94)}.dark-mode .btn-hero:hover{color:#1a1815}.paper-table:not(.paper-table-dashboard){border-left:0;border-right:0;border-radius:0}.paper-table:not(.paper-table-dashboard) .paper-table-head{border-radius:0}.paper-table .cell-anon{gap:8px}.paper-table .cell-anon .anon-text{flex:1}.paper-table-conferences .cell-anon .repo-name{font-family:var(--font-sans);font-weight:600}.paper-table .anon-sub>a,.paper-table .anon-sub>span{min-width:0;overflow:hidden;text-overflow:ellipsis}.paper-table .anon-sub .ui-icon{width:14px;height:14px}.paper-page .filter-chip{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none;border-radius:6px}.paper-page .filter-chip-close .ui-icon{width:12px;height:12px}.admin-nav{gap:4px;border:0;border-bottom:1px solid var(--border-color);border-radius:0;padding:0 0 8px;background:0 0}.admin-nav a{font-family:var(--font-sans);font-size:13px;letter-spacing:0;text-transform:none;border-radius:6px;min-height:40px;padding:8px 12px}.admin-nav a.active{background:var(--accent-soft);color:var(--accent)}.admin-nav .ui-icon{width:16px;height:16px}.admin-filter-toolbar{background:0 0;border:0;padding:0}.admin-filter-inline>label,.admin-filter-inline>span{font-family:var(--font-sans);text-transform:none;letter-spacing:0}.admin-summary .summary-total{font-family:var(--font-sans);font-size:18px;font-weight:600}.admin-summary .summary-pill{font:500 13px/20px var(--font-sans);min-height:32px;padding:5px 10px;border-radius:6px}.admin-summary .summary-pill.active{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.admin-summary .summary-pill .count{font-family:var(--font-sans)}.admin-active-chip{font-family:var(--font-sans);font-size:12px}.admin-active-chip button .ui-icon{width:12px;height:12px}.user-detail-card .user-header h2{font:600 20px/1.4 var(--font-sans)}.errors-page .errors-toolbar .select-wrap label,.errors-page .volume-head,.overview-page .ov-panel-meta,.paper-detail-grid .detail-label,.paper-progress .paper-progress-label,.status-page .paper-error-eyebrow,.user-detail-grid .detail-label{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.overview-page .ov-chart-title,.overview-page .ov-panel-title,.paper-error-title{font:600 16px/1.4 var(--font-sans)}.paper-error-head>.ui-icon,.paper-ratelimit-head>.ui-icon{margin-top:3px;color:var(--status-error)}.paper-ratelimit-head>.ui-icon{color:var(--status-progress)}.errors-page .seg-tabs{border-radius:var(--radius-control)}.errors-page .seg-tabs button{min-height:36px;padding:7px 12px;font:500 14px/20px var(--font-sans)}.errors-page .seg-tabs button.active{background:var(--accent-soft);color:var(--accent)}.errors-page .errors-list,.errors-page .kpi-card:hover,.errors-page .volume-chart,.overview-page .ov-chart-card,.overview-page .ov-panel-card{box-shadow:none}.errors-page .kpi-value,.overview-page .ov-daily-value,.overview-page .ov-kpi-value,.q-card-count,.user-hero-name{font-family:var(--font-sans);font-size:28px;font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:-.02em}.errors-page .kpi-label,.overview-page .ov-daily-label,.overview-page .ov-kpi-label,.q-card-name,.q-section-label,.user-hero-details .detail-label{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.overview-page .ov-daily-card{background:var(--paper-card);box-shadow:none;border-radius:var(--radius-surface)}.dark-mode .overview-page .ov-daily-value,.overview-page .ov-daily-value{color:var(--accent)}.errors-page .kpi-card,.overview-page .ov-kpi-card{box-shadow:none;border-radius:var(--radius-surface)}.q-card{border-radius:var(--radius-surface)}.q-card.selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.q-range-btns{border-radius:var(--radius-control)}.q-job-detail-actions .btn,.q-range-btns .btn{font-family:var(--font-sans);font-size:13px}.q-range-btns .btn.active{background:var(--accent-soft);color:var(--accent)}@media (max-width:900px){.paper-settings .quota-usage{grid-template-columns:1fr;gap:16px}.paper-settings .quota-usage .quota-item+.quota-item{padding-left:0;border-left:0;border-top:1px solid var(--border-color);padding-top:16px}.paper-table:not(.paper-table-dashboard) .paper-table-row{gap:4px 8px!important;padding:8px 12px}.paper-table:not(.paper-table-dashboard) .cell-anon{flex:1 1 calc(100% - 52px);order:1}.paper-table:not(.paper-table-dashboard) .cell-actions{order:2;flex:0 0 44px}.paper-table .admin-users-row>[role=cell]:first-child,.paper-table.paper-table-repos.has-bulk .paper-table-row>[role=cell]:first-child{flex:0 0 24px;order:0}.paper-table .admin-users-row .cell-anon,.paper-table.paper-table-repos.has-bulk .cell-anon{flex-basis:calc(100% - 84px)}.paper-table:not(.paper-table-dashboard) .cell-anon .anon-sub{font-size:12px;gap:6px}.paper-table:not(.paper-table-dashboard) .cell-status .status-sub{font-size:12px}.paper-table .cell-expires::before,.paper-table .cell-views::before{content:none}.paper-table .cell-expires .mobile-meta-icon,.paper-table .cell-views .mobile-meta-icon{display:inline-block;width:14px;height:14px}.paper-faq-body{grid-template-columns:1fr;gap:24px}}@media (max-width:767px){.paper-faq,.paper-page{padding-top:20px}.paper-settings .paper-account-email .btn[type=submit]{min-height:40px;padding:9px 18px}.anonymize-page .paper-page-title,.paper-faq-title,.paper-page .paper-page-title,.paper-page.admin-page .paper-page-title{font-size:24px}.anonymize-page .form-control,.paper-page .form-control{min-height:44px}.anonymize-page .btn,.connection-link,.draft-discard,.paper-faq-toc a,.paper-page .btn,.paper-settings-toc nav a{min-height:44px}.anonymize-page .btn,.paper-page .btn,.status-bar-actions .btn{min-height:44px;padding:11px 14px;font-size:14px;line-height:20px;white-space:normal}.anonymize-page .btn.btn-sm,.paper-page .btn.btn-sm{min-height:44px;padding:11px 12px;font-size:14px}.anonymize-page .btn.btn-icon,.copy-link-inline,.paper-page .btn.btn-icon,.paper-page .btn.btn-icon-dots,.project-close{width:44px;height:44px;min-width:44px;min-height:44px;padding:0}.dashboard-page .dashboard-filter-row .btn-group .btn,.dashboard-page .dashboard-filter-row .dropdown-toggle{height:auto;min-height:44px;font-size:14px;padding:11px 10px}.dashboard-heading-actions .btn-ink{padding:11px 16px}.dashboard-page .dashboard-filters-toggle{padding:11px 10px}.errors-page .btn-icon,.pr-title-row .btn,.status-bar-actions .btn{min-width:44px;min-height:44px;padding:0}.status-bar-actions .btn{width:44px;height:44px}.errors-page .seg-tabs button,.paper-tab{min-height:44px}.errors-page .seg-tabs button{padding:11px 12px}.status-bar-actions{flex-wrap:wrap;max-width:100%}.leftCol-close,.tree-search-clear{min-width:44px;min-height:44px}.anonymize-landing{padding:20px 18px}.anonymize-landing .repo-access-switch button,.source-url-label-row .repo-access-switch button{min-height:44px;padding:11px 10px;font-size:13px}.paper-settings-body{margin-top:16px;padding-top:0;gap:16px}.paper-settings-toc nav{gap:0 12px}.paper-settings-toc nav a{display:inline-flex;align-items:center}.paper-faq{padding-left:18px;padding-right:18px}.paper-faq-toc nav{display:flex;flex-direction:row;flex-wrap:wrap;gap:0 16px}.paper-faq-toc a{display:inline-flex;align-items:center;padding:8px 0;border-left:0;border-bottom:2px solid transparent;margin-left:0}.paper-faq-toc nav a.active,.paper-faq-toc nav a:hover{border-bottom-color:var(--accent);color:var(--accent)}.claim-page .claim-form,.status-page>.paper-settings-section{padding:16px;margin-top:16px}.admin-nav{flex-direction:row;flex-wrap:nowrap;overflow-x:auto;gap:4px;max-width:100%;margin:8px 0 16px}.admin-nav a{flex-shrink:0;min-height:44px}.admin-summary .summary-pill{min-height:44px;padding:11px 12px;font-size:14px}.admin-active-chip button{min-width:44px;min-height:44px}.admin-filter-row{gap:8px}.admin-filter-row .admin-filter-inline{gap:8px;flex-wrap:wrap}.errors-page .kpi-grid{grid-template-columns:1fr 1fr;gap:12px}.q-cards{flex-direction:row}.q-card{min-width:130px}.q-header-actions{flex-wrap:wrap;gap:8px}}.paper-page.container:not(.auth-page){max-width:1180px}.paper-page>.row{margin-left:0;margin-right:0}.paper-page>.row>.w-100,.paper-page>.row>[class*=col]{padding-left:0;padding-right:0}.anonymize-landing{align-items:flex-start}.status-page .paper-support-grid{margin-bottom:0}.explorer-content .ace_editor{font-family:var(--font-mono);line-height:1.6}.dark-mode .explorer-content .ace-nord-dark,.dark-mode .explorer-content .ace-nord-dark .ace_gutter{background:var(--main-bg-color)}.explorer-content .file-content.markdown-body{max-width:960px;padding:32px 40px 96px}.leftCol-project-header .project-name{white-space:normal;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.file-error{font-size:inherit;font-weight:inherit;text-align:left}.file-error-card{width:100%;max-width:520px;margin-top:0}.file-error-msg{margin:12px 0 0;font-size:14px;line-height:1.55;color:var(--ink-soft)}.file-error-actions{display:flex;gap:8px;margin-top:16px}.file-error .paper-empty-title{font-size:20px;text-align:center}@media (min-width:992px){.leftCol-foot{padding-bottom:72px}}.explorer-content .ace-chrome,.explorer-content .ace-chrome .ace_gutter{background:var(--main-bg-color)}@media (max-width:991px){.explorer-content .file-content.markdown-body{padding:20px 16px 96px}.anonymize-landing{padding:20px 18px}.anonymize-landing-inner{padding:0}.paper-faq-toc nav,.paper-settings-toc nav{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}.paper-faq-toc nav a,.paper-settings-toc nav a{flex-shrink:0;white-space:nowrap}.paper-faq-body,.paper-settings-body{grid-template-columns:minmax(0,1fr)}.paper-faq-toc,.paper-settings-toc{position:static}.paper-faq-toc nav,.paper-settings-toc nav{display:flex;flex-direction:row;gap:0 16px}.paper-faq-toc nav a,.paper-settings-toc nav a{display:inline-flex;align-items:center;padding:8px 0;margin-left:0;border-left:0;border-bottom:2px solid transparent}.paper-faq-toc nav a.active,.paper-faq-toc nav a:hover,.paper-settings-toc nav a.active,.paper-settings-toc nav a:hover{border-bottom-color:var(--accent)}.paper-page .dashboard-filter-controls .dropdown .dropdown-toggle{justify-content:flex-start;gap:6px}.paper-page .dashboard-filter-controls .dropdown .dropdown-toggle::after{margin-left:auto}}@media (max-width:480px){.paper-page .paper-page-lede{display:block;-webkit-line-clamp:unset;overflow:visible}}.navbar .btn-signin,.navbar .btn-signin:hover{background:var(--accent);border-color:var(--accent);color:#fff!important}.dark-mode .navbar .btn-signin,.dark-mode .navbar .btn-signin:hover{color:#1a1815!important}.navbar .btn-signin:hover{filter:brightness(.94)}.paper-progress .paper-progress-bar,.paper-progress.paper-progress-ready .paper-progress-bar{background:var(--accent)}.paper-progress .paper-progress-label{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.paper-error-eyebrow,.paper-support-card .paper-support-eyebrow{font-family:var(--font-sans);font-size:12px;font-weight:500;letter-spacing:0;text-transform:none}.leftCol-foot .last-update{font-family:var(--font-sans);font-size:11px;letter-spacing:0}.paper-proof-venues span{font-family:var(--font-sans);font-size:18px;font-weight:600;letter-spacing:.02em;color:var(--ink-soft)}.markdown-body mark.redaction{background:var(--accent-soft);color:var(--accent);border-radius:3px;padding:0 2px}.ace_marker-layer .ace_redaction{position:absolute;background:var(--accent-soft);border-radius:3px}.leftCol-project-header{flex-wrap:wrap;row-gap:2px}.project-expiry{flex:1 0 100%;display:flex;align-items:center;gap:4px;font-size:12px;color:var(--ink-muted)}.project-expiry .ui-icon{width:12px;height:12px}.status-bar-actions .btn-icon-only{width:32px;padding:0;justify-content:center}.share-link-row{display:flex;gap:8px;margin-top:4px}.share-link-input{flex:1;min-width:0;font-family:var(--font-mono);font-size:14px;background:var(--paper-bg-alt)}.share-link-row .btn{flex-shrink:0;display:inline-flex;align-items:center;gap:6px;min-width:112px;justify-content:center}.share-link-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.share-link-actions .btn{display:inline-flex;align-items:center;gap:6px}.status-page .paper-support-grid{gap:0 32px}.status-page .paper-support-card{padding:16px 0 0;border:0;border-top:1px solid var(--border-color);border-radius:0;background:0 0}.status-page .paper-support-card:hover{border-color:var(--color)}@media (min-width:992px){.paper-table .cell-expires{white-space:nowrap}}.paper-settings .paper-settings-main .paper-settings-section{background:0 0;border:0;border-bottom:1px solid var(--border-color);border-radius:0;padding:0 0 28px;margin-bottom:28px}.paper-settings .paper-settings-main .paper-settings-section:last-of-type{border-bottom:0}@media (max-width:991px){.paper-settings .paper-settings-main .paper-settings-section{padding:0 0 20px;margin-bottom:20px}.share-link-row{flex-direction:column}.share-link-actions{flex-direction:column}.share-link-actions .btn{justify-content:center}.status-page .paper-support-grid{row-gap:20px}}.paper-page .q-range-btns{display:inline-flex;gap:2px;padding:2px;border:1px solid var(--border-color);border-radius:var(--radius-control);background:var(--paper-card);overflow:visible}.paper-page .q-range-btns .btn,.paper-page .q-range-btns .btn+.btn{min-height:0;height:28px;padding:0 10px;border:0;border-radius:4px;background:0 0;color:var(--ink-muted);font:500 13px/1 var(--font-sans)}.paper-page .q-range-btns .btn:hover{background:var(--hover-bg-color);color:var(--color)}.paper-page .q-range-btns .btn.active{background:var(--accent-soft);color:var(--accent)}.q-header-actions>.btn{height:34px;min-height:34px}.paper-page .btn.btn-danger-soft{background:0 0;border-color:var(--status-error);color:var(--status-error)}.paper-page .btn.btn-danger-soft:hover{background:var(--status-error-soft-hover);border-color:var(--status-error);color:var(--status-error)}.q-auto-refresh,.q-section-label,.q-state-chip{font-family:var(--font-sans);letter-spacing:0;text-transform:none}.q-state-chip{font-size:12px;text-transform:capitalize}.overview-page .ov-ebar-fill{display:block}.paper-table .paper-table-row.repo-error{border-left:0;box-shadow:inset 2px 0 0 var(--status-error);padding-left:16px}.admin-page .q-table th,.admin-page .type-badge,.admin-page .user-detail-section h2,.admin-page section>h2,.admin-page th,.admin-page>h2,.errors-page .col-count,.errors-page .col-mod,.errors-page .col-msg,.errors-page .col-sev,.errors-page .col-status,.errors-page .col-when,.overview-page .ov-chart-legend,.overview-page .ov-ebar-label,.overview-page .ov-route-n,.overview-page .ov-route-name,.q-card-sub,.q-delay-hint,.q-legend-completed,.q-legend-exec,.q-legend-failed,.q-section-right,.q-stat-label,.user-detail-grid .detail-label{font-family:var(--font-sans);letter-spacing:0;text-transform:none}.admin-page th,.errors-page [class^=col-]{font-size:12px;font-weight:500;color:var(--ink-muted)}.q-card-sub,.q-stat-label,.user-detail-grid .detail-label{font-size:12px}.q-stat-value{font-family:var(--font-sans);font-size:20px;font-weight:600;font-variant-numeric:tabular-nums}.q-state-badge{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:capitalize}.admin-page .type-badge{font-size:12px;text-transform:none}.errors-page .col-sev span,.errors-page .sev-label{text-transform:capitalize}.dark-mode .overview-page .ov-daily-value,.overview-page .ov-daily-value{color:var(--color)}.dark-mode .overview-page .ov-spark-fill-alt,.dark-mode .overview-page .ov-spark-fill-new-user,.dark-mode .overview-page .ov-spark-fill-user,.overview-page .ov-spark-fill-alt,.overview-page .ov-spark-fill-new-user,.overview-page .ov-spark-fill-user{background:var(--accent)}.dark-mode .overview-page .ov-dot-new-user-fill,.dark-mode .overview-page .ov-dot-ok-fill,.dark-mode .overview-page .ov-dot-user-fill,.overview-page .ov-dot-new-user-fill,.overview-page .ov-dot-ok-fill,.overview-page .ov-dot-user-fill{background:var(--accent)}.errors-page .seg-tabs{display:inline-flex;gap:2px;padding:2px;border:1px solid var(--border-color);border-radius:var(--radius-control);background:var(--paper-card)}.errors-page .seg-tabs button,.errors-page .seg-tabs button+button{min-height:0;height:30px;padding:0 10px;border:0;border-radius:4px;background:0 0;color:var(--ink-muted);font:500 13px/1 var(--font-sans)}.errors-page .seg-tabs button:hover{background:var(--hover-bg-color);color:var(--color)}.errors-page .seg-tabs button.active{background:var(--accent-soft);color:var(--accent)}.user-detail-card .user-header .status-dot-wrap{display:inline-flex;align-items:center;gap:6px;font-size:14px;font-weight:400;color:var(--ink-soft)}.user-detail-card .user-actions{display:flex;flex-wrap:wrap;gap:8px}.admin-page .paper-table .cell-anon .anon-sub{flex-wrap:wrap;row-gap:2px}.admin-page .paper-table .anon-sub>a,.admin-page .paper-table .anon-sub>span{flex:0 1 auto;max-width:100%;white-space:nowrap}.admin-page .paper-table .cell-views .mobile-meta-icon{margin-right:4px}.q-jobs{overflow-x:auto}.q-job-detail-label{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.admin-section-header h2{font-family:var(--font-sans);font-size:16px;font-weight:600;letter-spacing:0;text-transform:none;color:var(--color)}.errors-page .sev-label{font-family:var(--font-sans);font-size:13px;letter-spacing:0}.email-prompt{width:min(560px,calc(100vw - 32px));padding:28px;border:1px solid var(--paper-border,#e5e1d9);border-radius:12px;background:var(--paper-bg,#faf9f6);color:inherit;box-shadow:0 16px 64px #0003}.email-prompt::backdrop{background:#0006}.email-prompt h2{margin:0 0 12px;font-size:24px}.email-prompt p{margin-bottom:20px}.email-prompt-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end;margin-top:24px}body.dark-mode .email-prompt{background:#242320;color:#faf9f6}.file-error .viewer-error{width:100%;max-width:65ch;padding:2rem 1rem;overflow-wrap:anywhere;font-size:1rem;font-weight:400;text-align:left}.viewer-error .paper-empty-title{margin-bottom:1rem}.viewer-error p{line-height:1.6}.viewer-error .paper-error-actions{display:flex;flex-wrap:wrap;gap:.75rem}.markdown-body .markdown-alert{margin:1rem 0;padding:.5rem 1rem;border-left:4px solid var(--alert-color,#0969da)}.markdown-body .markdown-alert-note{--alert-color:#0969da}.markdown-body .markdown-alert-tip{--alert-color:#1a7f37}.markdown-body .markdown-alert-important{--alert-color:#8250df}.markdown-body .markdown-alert-warning{--alert-color:#9a6700}.markdown-body .markdown-alert-caution{--alert-color:#cf222e}.markdown-body .markdown-alert-title{color:var(--alert-color);font-weight:600;display:flex;align-items:center;gap:.5rem}.markdown-body .markdown-alert-title svg{fill:currentColor;flex-shrink:0}.markdown-body .markdown-alert>:last-child{margin-bottom:0}body.dark-mode .markdown-alert-note{--alert-color:#79c0ff}body.dark-mode .markdown-alert-tip{--alert-color:#7ee787}body.dark-mode .markdown-alert-important{--alert-color:#d2a8ff}body.dark-mode .markdown-alert-warning{--alert-color:#e3b341}body.dark-mode .markdown-alert-caution{--alert-color:#ff7b72}.markdown-body .emoji{display:inline;vertical-align:text-bottom}.markdown-body .footnotes{margin-top:2rem;border-top:1px solid var(--border-color,#d0d7de);padding-top:1rem;font-size:.875em}.markdown-body .katex-display{overflow-x:auto;overflow-y:hidden;padding:.25rem 0}.markdown-body .markdown-diagram{margin:1rem 0;border:1px solid var(--border-color,#d0d7de);padding:.75rem}.markdown-body .markdown-diagram svg{display:block;width:100%;max-height:360px}.markdown-body .markdown-diagram path{fill:#a7b2ff;fill-opacity:.5;stroke:var(--link-color,#3b4ad6);stroke-width:1;vector-effect:non-scaling-stroke}.markdown-body .diagram-controls{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.5rem}.markdown-body .diagram-controls button{min-width:44px;min-height:44px;padding:.25rem .75rem;border:1px solid var(--border-color,#d0d7de);background:var(--main-bg-color,#fff);color:inherit;border-radius:4px}.markdown-body .diagram-controls button:hover{background:var(--hover-bg-color,#f6f8fa)}.markdown-body .diagram-controls button:focus-visible{outline:2px solid var(--link-color,#0969da);outline-offset:2px}.markdown-body .hljs-keyword,.markdown-body .hljs-selector-tag{color:#cf222e}.markdown-body .hljs-attr,.markdown-body .hljs-string{color:#0a3069}.markdown-body .hljs-literal,.markdown-body .hljs-number,.markdown-body .hljs-title{color:#8250df}.markdown-body .hljs-comment{color:#57606a}body.dark-mode .markdown-body .hljs-keyword{color:#ff7b72}body.dark-mode .markdown-body .hljs-attr,body.dark-mode .markdown-body .hljs-string{color:#a5d6ff}body.dark-mode .markdown-body .hljs-literal,body.dark-mode .markdown-body .hljs-number,body.dark-mode .markdown-body .hljs-title{color:#d2a8ff}body.dark-mode .markdown-body .hljs-comment{color:#b1bac4}body.dark-mode .markdown-body .gh-light-mode-only,body:not(.dark-mode) .markdown-body .gh-dark-mode-only{display:none} \ No newline at end of file + */.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bacteria:before{content:"\e059"}.fa-bacterium:before{content:"\e05a"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"\e05b"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudflare:before{content:"\e07d"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\e052"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-deezer:before{content:"\e077"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edge-legacy:before{content:"\e078"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\e005"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\e007"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-pay:before{content:"\e079"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guilded:before{content:"\e07e"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-sparkles:before{content:"\e05d"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-wash:before{content:"\e05e"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt-slash:before{content:"\e05f"}.fa-handshake-slash:before{content:"\e060"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side-cough:before{content:"\e061"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-head-side-mask:before{content:"\e063"}.fa-head-side-virus:before{content:"\e064"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hive:before{content:"\e07f"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-house-user:before{content:"\e065"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\e013"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-innosoft:before{content:"\e080"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\e055"}.fa-instalod:before{content:"\e081"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-house:before{content:"\e066"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\e067"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\e01a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\e056"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-octopus-deploy:before{content:"\e082"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-arrows:before{content:"\e068"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-perbyte:before{content:"\e083"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\e01e"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-slash:before{content:"\e069"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pump-medical:before{content:"\e06a"}.fa-pump-soap:before{content:"\e06b"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-rust:before{content:"\e07a"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-shield-virus:before{content:"\e06c"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\e057"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sink:before{content:"\e06d"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\e06e"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-stopwatch-20:before{content:"\e06f"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-store-alt-slash:before{content:"\e070"}.fa-store-slash:before{content:"\e071"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-tiktok:before{content:"\e07b"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\e041"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-uncharted:before{content:"\e084"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\e049"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-unsplash:before{content:"\e07c"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-users-slash:before{content:"\e073"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vest:before{content:"\e085"}.fa-vest-patches:before{content:"\e086"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-virus:before{content:"\e074"}.fa-virus-slash:before{content:"\e075"}.fa-viruses:before{content:"\e076"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-watchman-monitoring:before{content:"\e087"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wodu:before{content:"\e088"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:'Font Awesome 5 Brands';font-style:normal;font-weight:400;font-display:block;src:url(../fonts/fa-brands-400.eot);src:url(../fonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-brands-400.woff2) format("woff2"),url(../fonts/fa-brands-400.woff) format("woff"),url(../fonts/fa-brands-400.ttf) format("truetype"),url(../fonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:'Font Awesome 5 Brands';font-weight:400}@font-face{font-family:'Font Awesome 5 Free';font-style:normal;font-weight:400;font-display:block;src:url(../fonts/fa-regular-400.eot);src:url(../fonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-regular-400.woff2) format("woff2"),url(../fonts/fa-regular-400.woff) format("woff"),url(../fonts/fa-regular-400.ttf) format("truetype"),url(../fonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-family:'Font Awesome 5 Free';font-weight:400}@font-face{font-family:'Font Awesome 5 Free';font-style:normal;font-weight:900;font-display:block;src:url(../fonts/fa-solid-900.eot);src:url(../fonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-solid-900.woff2) format("woff2"),url(../fonts/fa-solid-900.woff) format("woff"),url(../fonts/fa-solid-900.ttf) format("truetype"),url(../fonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:'Font Awesome 5 Free';font-weight:900}.nb-notebook{line-height:1.5}.nb-stderr,.nb-stdout{white-space:pre-wrap;margin:1em 0;padding:.1em .5em}.nb-stderr{background-color:#faa}.nb-cell+.nb-cell{margin-top:.5em}.nb-output table{border:1px solid #000;border-collapse:collapse}.nb-output th{font-weight:700}.nb-output td,.nb-output th{border:1px solid #000;padding:.25em;text-align:left;vertical-align:middle;border-collapse:collapse}.nb-notebook blockquote{border-left:5px solid #ccc;margin-left:0;padding-left:1em}.nb-cell{position:relative}.nb-raw-cell{white-space:pre-wrap;background-color:#f5f2f0;font-family:Consolas,Monaco,'Andale Mono',monospace;padding:1em;margin:.5em 0}.nb-output{min-height:1em;width:100%;overflow-x:scroll;border-right:1px dotted #ccc}.nb-output img{max-width:100%}.nb-input:before,.nb-output:before{position:absolute;font-family:monospace;color:#999;left:-7.5em;width:7em;text-align:right}.nb-input:before{content:"In [" attr(data-prompt-number) "]:"}.nb-output:before{content:"Out [" attr(data-prompt-number) "]:"}// Fix pandas dataframe formatting div[style="max-height:1000px;max-width:1500px;overflow:auto;"]{max-height:none!important}@font-face{font-display:block;font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:normal;font-weight:700;src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:italic;font-weight:400;src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:normal;font-weight:400;src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(fonts/KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{font:normal 1.21em KaTeX_Main,math,Times New Roman,serif;line-height:1.2;position:relative;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.18.10"}.katex .katex-mathml{border:0;-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.katex-newline{display:block}.katex .katex-base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .katex-base,.katex .katex-strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .mathsfit,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .katex-vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .katex-thinbox{display:inline-flex;flex-direction:row;max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .katex-hdashline,.katex .katex-hline,.katex .katex-overline .overline-line,.katex .katex-rule,.katex .katex-underline .underline-line,.katex .mfrac .frac-line{min-height:1px}.katex .mspace{display:inline-block}.katex .katex-smash{display:inline;line-height:0}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.katex-inner,.katex .llap>.katex-inner,.katex .rlap>.katex-inner{position:absolute}.katex .clap>.katex-fix,.katex .llap>.katex-fix,.katex .rlap>.katex-fix{display:inline-block}.katex .llap>.katex-inner{right:0}.katex .clap>.katex-inner,.katex .rlap>.katex-inner{left:0}.katex .clap>.katex-inner>span{margin-left:-50%;margin-right:50%}.katex .katex-rule{border:0 solid;display:inline-block;position:relative}.katex .katex-hline,.katex .katex-overline .overline-line,.katex .katex-underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .katex-hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.katex-root{margin-left:.2777777778em;margin-right:-.5555555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .katex-sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .katex-sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .katex-sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .katex-sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .katex-sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .katex-sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .katex-sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .katex-sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .katex-sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .katex-sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .katex-sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .katex-sizing.reset-size2.size1{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .katex-sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .katex-sizing.reset-size2.size3{font-size:1.1666666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .katex-sizing.reset-size2.size4{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .katex-sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .katex-sizing.reset-size2.size6{font-size:1.6666666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .katex-sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .katex-sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .katex-sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .katex-sizing.reset-size2.size10{font-size:3.4566666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .katex-sizing.reset-size2.size11{font-size:4.1466666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .katex-sizing.reset-size3.size1{font-size:.7142857143em}.katex .fontsize-ensurer.reset-size3.size2,.katex .katex-sizing.reset-size3.size2{font-size:.8571428571em}.katex .fontsize-ensurer.reset-size3.size3,.katex .katex-sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .katex-sizing.reset-size3.size4{font-size:1.1428571429em}.katex .fontsize-ensurer.reset-size3.size5,.katex .katex-sizing.reset-size3.size5{font-size:1.2857142857em}.katex .fontsize-ensurer.reset-size3.size6,.katex .katex-sizing.reset-size3.size6{font-size:1.4285714286em}.katex .fontsize-ensurer.reset-size3.size7,.katex .katex-sizing.reset-size3.size7{font-size:1.7142857143em}.katex .fontsize-ensurer.reset-size3.size8,.katex .katex-sizing.reset-size3.size8{font-size:2.0571428571em}.katex .fontsize-ensurer.reset-size3.size9,.katex .katex-sizing.reset-size3.size9{font-size:2.4685714286em}.katex .fontsize-ensurer.reset-size3.size10,.katex .katex-sizing.reset-size3.size10{font-size:2.9628571429em}.katex .fontsize-ensurer.reset-size3.size11,.katex .katex-sizing.reset-size3.size11{font-size:3.5542857143em}.katex .fontsize-ensurer.reset-size4.size1,.katex .katex-sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .katex-sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .katex-sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .katex-sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .katex-sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .katex-sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .katex-sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .katex-sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .katex-sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .katex-sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .katex-sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .katex-sizing.reset-size5.size1{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .katex-sizing.reset-size5.size2{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .katex-sizing.reset-size5.size3{font-size:.7777777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .katex-sizing.reset-size5.size4{font-size:.8888888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .katex-sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .katex-sizing.reset-size5.size6{font-size:1.1111111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .katex-sizing.reset-size5.size7{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .katex-sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .katex-sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .katex-sizing.reset-size5.size10{font-size:2.3044444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .katex-sizing.reset-size5.size11{font-size:2.7644444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .katex-sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .katex-sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .katex-sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .katex-sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .katex-sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .katex-sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .katex-sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .katex-sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .katex-sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .katex-sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .katex-sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .katex-sizing.reset-size7.size1{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .katex-sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .katex-sizing.reset-size7.size3{font-size:.5833333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .katex-sizing.reset-size7.size4{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .katex-sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .katex-sizing.reset-size7.size6{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .katex-sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .katex-sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .katex-sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .katex-sizing.reset-size7.size10{font-size:1.7283333333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .katex-sizing.reset-size7.size11{font-size:2.0733333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .katex-sizing.reset-size8.size1{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .katex-sizing.reset-size8.size2{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .katex-sizing.reset-size8.size3{font-size:.4861111111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .katex-sizing.reset-size8.size4{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .katex-sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .katex-sizing.reset-size8.size6{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .katex-sizing.reset-size8.size7{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .katex-sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .katex-sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .katex-sizing.reset-size8.size10{font-size:1.4402777778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .katex-sizing.reset-size8.size11{font-size:1.7277777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .katex-sizing.reset-size9.size1{font-size:.2893518519em}.katex .fontsize-ensurer.reset-size9.size2,.katex .katex-sizing.reset-size9.size2{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .katex-sizing.reset-size9.size3{font-size:.4050925926em}.katex .fontsize-ensurer.reset-size9.size4,.katex .katex-sizing.reset-size9.size4{font-size:.462962963em}.katex .fontsize-ensurer.reset-size9.size5,.katex .katex-sizing.reset-size9.size5{font-size:.5208333333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .katex-sizing.reset-size9.size6{font-size:.5787037037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .katex-sizing.reset-size9.size7{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .katex-sizing.reset-size9.size8{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .katex-sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .katex-sizing.reset-size9.size10{font-size:1.2002314815em}.katex .fontsize-ensurer.reset-size9.size11,.katex .katex-sizing.reset-size9.size11{font-size:1.4398148148em}.katex .fontsize-ensurer.reset-size10.size1,.katex .katex-sizing.reset-size10.size1{font-size:.2410800386em}.katex .fontsize-ensurer.reset-size10.size2,.katex .katex-sizing.reset-size10.size2{font-size:.2892960463em}.katex .fontsize-ensurer.reset-size10.size3,.katex .katex-sizing.reset-size10.size3{font-size:.337512054em}.katex .fontsize-ensurer.reset-size10.size4,.katex .katex-sizing.reset-size10.size4{font-size:.3857280617em}.katex .fontsize-ensurer.reset-size10.size5,.katex .katex-sizing.reset-size10.size5{font-size:.4339440694em}.katex .fontsize-ensurer.reset-size10.size6,.katex .katex-sizing.reset-size10.size6{font-size:.4821600771em}.katex .fontsize-ensurer.reset-size10.size7,.katex .katex-sizing.reset-size10.size7{font-size:.5785920926em}.katex .fontsize-ensurer.reset-size10.size8,.katex .katex-sizing.reset-size10.size8{font-size:.6943105111em}.katex .fontsize-ensurer.reset-size10.size9,.katex .katex-sizing.reset-size10.size9{font-size:.8331726133em}.katex .fontsize-ensurer.reset-size10.size10,.katex .katex-sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .katex-sizing.reset-size10.size11{font-size:1.1996142719em}.katex .fontsize-ensurer.reset-size11.size1,.katex .katex-sizing.reset-size11.size1{font-size:.2009646302em}.katex .fontsize-ensurer.reset-size11.size2,.katex .katex-sizing.reset-size11.size2{font-size:.2411575563em}.katex .fontsize-ensurer.reset-size11.size3,.katex .katex-sizing.reset-size11.size3{font-size:.2813504823em}.katex .fontsize-ensurer.reset-size11.size4,.katex .katex-sizing.reset-size11.size4{font-size:.3215434084em}.katex .fontsize-ensurer.reset-size11.size5,.katex .katex-sizing.reset-size11.size5{font-size:.3617363344em}.katex .fontsize-ensurer.reset-size11.size6,.katex .katex-sizing.reset-size11.size6{font-size:.4019292605em}.katex .fontsize-ensurer.reset-size11.size7,.katex .katex-sizing.reset-size11.size7{font-size:.4823151125em}.katex .fontsize-ensurer.reset-size11.size8,.katex .katex-sizing.reset-size11.size8{font-size:.578778135em}.katex .fontsize-ensurer.reset-size11.size9,.katex .katex-sizing.reset-size11.size9{font-size:.6945337621em}.katex .fontsize-ensurer.reset-size11.size10,.katex .katex-sizing.reset-size11.size10{font-size:.8336012862em}.katex .fontsize-ensurer.reset-size11.size11,.katex .katex-sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .katex-accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .katex-accent .accent-body{position:relative}.katex .katex-accent .accent-body:not(.accent-full){width:0}.katex .katex-overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex svg{fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .katex-stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .katex-stretchy:after,.katex .katex-stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .katex-sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .reflectbox{display:inline-block;transform:scaleX(-1)}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.katex-tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.katex-tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}.mermaid{text-align:center;margin:1em 0;overflow:auto}.mermaid svg{max-width:100%;height:auto}.dark-mode .mermaid{filter:invert(1) hue-rotate(180deg)}.dark-mode .mermaid svg{background:0 0}.dark-mode .mermaid .edgeLabel,.dark-mode .mermaid .nodeLabel{filter:invert(1) hue-rotate(180deg)}.mermaid .node circle,.mermaid .node ellipse,.mermaid .node polygon,.mermaid .node rect{stroke-width:2px}.mermaid .flowchart-link{stroke-width:2px}.mermaid .actor{fill:#f9f9f9;stroke:#333;stroke-width:2px}.mermaid .messageLine0,.mermaid .messageLine1{stroke:#333;stroke-width:1.5px}.mermaid .section0,.mermaid .section1,.mermaid .section2,.mermaid .section3{opacity:.8}.mermaid .pieChart .slice{opacity:.9}.markdown-body .mermaid{background:0 0;border:none;padding:10px}.mermaid .error{color:#d32f2f;font-family:monospace;font-size:12px;padding:10px;border:1px solid #d32f2f;border-radius:4px;background-color:#ffebee}@font-face{font-family:octicons-link;src:url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAZwABAAAAAACFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEU0lHAAAGaAAAAAgAAAAIAAAAAUdTVUIAAAZcAAAACgAAAAoAAQAAT1MvMgAAAyQAAABJAAAAYFYEU3RjbWFwAAADcAAAAEUAAACAAJThvmN2dCAAAATkAAAABAAAAAQAAAAAZnBnbQAAA7gAAACyAAABCUM+8IhnYXNwAAAGTAAAABAAAAAQABoAI2dseWYAAAFsAAABPAAAAZwcEq9taGVhZAAAAsgAAAA0AAAANgh4a91oaGVhAAADCAAAABoAAAAkCA8DRGhtdHgAAAL8AAAADAAAAAwGAACfbG9jYQAAAsAAAAAIAAAACABiATBtYXhwAAACqAAAABgAAAAgAA8ASm5hbWUAAAToAAABQgAAAlXu73sOcG9zdAAABiwAAAAeAAAAME3QpOBwcmVwAAAEbAAAAHYAAAB/aFGpk3jaTY6xa8JAGMW/O62BDi0tJLYQincXEypYIiGJjSgHniQ6umTsUEyLm5BV6NDBP8Tpts6F0v+k/0an2i+itHDw3v2+9+DBKTzsJNnWJNTgHEy4BgG3EMI9DCEDOGEXzDADU5hBKMIgNPZqoD3SilVaXZCER3/I7AtxEJLtzzuZfI+VVkprxTlXShWKb3TBecG11rwoNlmmn1P2WYcJczl32etSpKnziC7lQyWe1smVPy/Lt7Kc+0vWY/gAgIIEqAN9we0pwKXreiMasxvabDQMM4riO+qxM2ogwDGOZTXxwxDiycQIcoYFBLj5K3EIaSctAq2kTYiw+ymhce7vwM9jSqO8JyVd5RH9gyTt2+J/yUmYlIR0s04n6+7Vm1ozezUeLEaUjhaDSuXHwVRgvLJn1tQ7xiuVv/ocTRF42mNgZGBgYGbwZOBiAAFGJBIMAAizAFoAAABiAGIAznjaY2BkYGAA4in8zwXi+W2+MjCzMIDApSwvXzC97Z4Ig8N/BxYGZgcgl52BCSQKAA3jCV8CAABfAAAAAAQAAEB42mNgZGBg4f3vACQZQABIMjKgAmYAKEgBXgAAeNpjYGY6wTiBgZWBg2kmUxoDA4MPhGZMYzBi1AHygVLYQUCaawqDA4PChxhmh/8ODDEsvAwHgMKMIDnGL0x7gJQCAwMAJd4MFwAAAHjaY2BgYGaA4DAGRgYQkAHyGMF8NgYrIM3JIAGVYYDT+AEjAwuDFpBmA9KMDEwMCh9i/v8H8sH0/4dQc1iAmAkALaUKLgAAAHjaTY9LDsIgEIbtgqHUPpDi3gPoBVyRTmTddOmqTXThEXqrob2gQ1FjwpDvfwCBdmdXC5AVKFu3e5MfNFJ29KTQT48Ob9/lqYwOGZxeUelN2U2R6+cArgtCJpauW7UQBqnFkUsjAY/kOU1cP+DAgvxwn1chZDwUbd6CFimGXwzwF6tPbFIcjEl+vvmM/byA48e6tWrKArm4ZJlCbdsrxksL1AwWn/yBSJKpYbq8AXaaTb8AAHja28jAwOC00ZrBeQNDQOWO//sdBBgYGRiYWYAEELEwMTE4uzo5Zzo5b2BxdnFOcALxNjA6b2ByTswC8jYwg0VlNuoCTWAMqNzMzsoK1rEhNqByEyerg5PMJlYuVueETKcd/89uBpnpvIEVomeHLoMsAAe1Id4AAAAAAAB42oWQT07CQBTGv0JBhagk7HQzKxca2sJCE1hDt4QF+9JOS0nbaaYDCQfwCJ7Au3AHj+LO13FMmm6cl7785vven0kBjHCBhfpYuNa5Ph1c0e2Xu3jEvWG7UdPDLZ4N92nOm+EBXuAbHmIMSRMs+4aUEd4Nd3CHD8NdvOLTsA2GL8M9PODbcL+hD7C1xoaHeLJSEao0FEW14ckxC+TU8TxvsY6X0eLPmRhry2WVioLpkrbp84LLQPGI7c6sOiUzpWIWS5GzlSgUzzLBSikOPFTOXqly7rqx0Z1Q5BAIoZBSFihQYQOOBEdkCOgXTOHA07HAGjGWiIjaPZNW13/+lm6S9FT7rLHFJ6fQbkATOG1j2OFMucKJJsxIVfQORl+9Jyda6Sl1dUYhSCm1dyClfoeDve4qMYdLEbfqHf3O/AdDumsjAAB42mNgYoAAZQYjBmyAGYQZmdhL8zLdDEydARfoAqIAAAABAAMABwAKABMAB///AA8AAQAAAAAAAAAAAAAAAAABAAAAAA==) format('woff')}.markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;line-height:1.5;color:#24292e;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:16px;line-height:1.5;word-wrap:break-word}.markdown-body .pl-c{color:#6a737d}.markdown-body .pl-c1,.markdown-body .pl-s .pl-v{color:#005cc5}.markdown-body .pl-e,.markdown-body .pl-en{color:#6f42c1}.markdown-body .pl-s .pl-s1,.markdown-body .pl-smi{color:#24292e}.markdown-body .pl-ent{color:#22863a}.markdown-body .pl-k{color:#d73a49}.markdown-body .pl-pds,.markdown-body .pl-s,.markdown-body .pl-s .pl-pse .pl-s1,.markdown-body .pl-sr,.markdown-body .pl-sr .pl-cce,.markdown-body .pl-sr .pl-sra,.markdown-body .pl-sr .pl-sre{color:#032f62}.markdown-body .pl-smw,.markdown-body .pl-v{color:#e36209}.markdown-body .pl-bu{color:#b31d28}.markdown-body .pl-ii{color:#fafbfc;background-color:#b31d28}.markdown-body .pl-c2{color:#fafbfc;background-color:#d73a49}.markdown-body .pl-c2::before{content:"^M"}.markdown-body .pl-sr .pl-cce{font-weight:700;color:#22863a}.markdown-body .pl-ml{color:#735c0f}.markdown-body .pl-mh,.markdown-body .pl-mh .pl-en,.markdown-body .pl-ms{font-weight:700;color:#005cc5}.markdown-body .pl-mi{font-style:italic;color:#24292e}.markdown-body .pl-mb{font-weight:700;color:#24292e}.markdown-body .pl-md{color:#b31d28;background-color:#ffeef0}.markdown-body .pl-mi1{color:#22863a;background-color:#f0fff4}.markdown-body .pl-mc{color:#e36209;background-color:#ffebda}.markdown-body .pl-mi2{color:#f6f8fa;background-color:#005cc5}.markdown-body .pl-mdr{font-weight:700;color:#6f42c1}.markdown-body .pl-ba{color:#586069}.markdown-body .pl-sg{color:#959da5}.markdown-body .pl-corl{text-decoration:underline;color:#032f62}.markdown-body .octicon{display:inline-block;vertical-align:text-top;fill:currentColor}.markdown-body a{background-color:transparent;-webkit-text-decoration-skip:objects}.markdown-body a:active,.markdown-body a:hover{outline-width:0}.markdown-body strong{font-weight:inherit}.markdown-body strong{font-weight:bolder}.markdown-body h1{font-size:2em;margin:.67em 0}.markdown-body img{border-style:none}.markdown-body svg:not(:root){overflow:hidden}.markdown-body hr{box-sizing:content-box;height:0;overflow:visible}.markdown-body input{font:inherit;margin:0}.markdown-body input{overflow:visible}.markdown-body [type=checkbox]{box-sizing:border-box;padding:0}.markdown-body *{box-sizing:border-box}.markdown-body input{font-family:inherit;font-size:inherit;line-height:inherit}.markdown-body a{color:#0366d6;text-decoration:none}.markdown-body a:hover{text-decoration:underline}.markdown-body strong{font-weight:600}.markdown-body hr{height:0;margin:15px 0;overflow:hidden;background:0 0;border:0;border-bottom:1px solid #dfe2e5}.markdown-body hr::before{display:table;content:""}.markdown-body hr::after{display:table;clear:both;content:""}.markdown-body table{border-spacing:0;border-collapse:collapse}.markdown-body td,.markdown-body th{padding:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:0;margin-bottom:0}.markdown-body h1{font-size:32px;font-weight:600}.markdown-body h2{font-size:24px;font-weight:600}.markdown-body h3{font-size:20px;font-weight:600}.markdown-body h4{font-size:16px;font-weight:600}.markdown-body h5{font-size:14px;font-weight:600}.markdown-body h6{font-size:12px;font-weight:600}.markdown-body p{margin-top:0;margin-bottom:10px}.markdown-body blockquote{margin:0}.markdown-body ol,.markdown-body ul{padding-left:0;margin-top:0;margin-bottom:0}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ol ol ol,.markdown-body ol ul ol,.markdown-body ul ol ol,.markdown-body ul ul ol{list-style-type:lower-alpha}.markdown-body dd{margin-left:0}.markdown-body code{font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px}.markdown-body .octicon{vertical-align:text-bottom}.markdown-body .pl-0{padding-left:0!important}.markdown-body .pl-1{padding-left:4px!important}.markdown-body .pl-2{padding-left:8px!important}.markdown-body .pl-3{padding-left:16px!important}.markdown-body .pl-4{padding-left:24px!important}.markdown-body .pl-5{padding-left:32px!important}.markdown-body .pl-6{padding-left:40px!important}.markdown-body::before{display:table;content:""}.markdown-body::after{display:table;clear:both;content:""}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body .anchor:focus{outline:0}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body hr{height:.25em;padding:0;margin:24px 0;background-color:#e1e4e8;border:0}.markdown-body blockquote{padding:0 1em;color:#6a737d;border-left:.25em solid #dfe2e5}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body kbd{display:inline-block;padding:3px 5px;font-size:11px;line-height:10px;color:#444d56;vertical-align:middle;background-color:#fafbfc;border:solid 1px #c6cbd1;border-bottom-color:#959da5;border-radius:3px;box-shadow:inset 0 -1px 0 #959da5}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#1b1f23;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1{padding-bottom:.3em;font-size:2em;border-bottom:1px solid #eaecef}.markdown-body h2{padding-bottom:.3em;font-size:1.5em;border-bottom:1px solid #eaecef}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1em}.markdown-body h5{font-size:.875em}.markdown-body h6{font-size:.85em;color:#6a737d}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:600}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;overflow:auto}.markdown-body table th{font-weight:600}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #dfe2e5}.markdown-body table tr{background-color:#fff;border-top:1px solid #c6cbd1}.markdown-body table tr:nth-child(2n){background-color:#f6f8fa}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body code{padding:0;padding-top:.2em;padding-bottom:.2em;margin:0;font-size:85%;background-color:rgba(27,31,35,.05);border-radius:3px}.markdown-body .full-commit .btn-outline:not(:disabled):hover{color:#005cc5;border-color:#005cc5}.markdown-body kbd{display:inline-block;padding:3px 5px;font:11px SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;line-height:10px;color:#444d56;vertical-align:middle;background-color:#fafbfc;border:solid 1px #d1d5da;border-bottom-color:#c6cbd1;border-radius:3px;box-shadow:inset 0 -1px 0 #c6cbd1}.markdown-body :checked+.radio-label{position:relative;z-index:1;border-color:#0366d6}.markdown-body .task-list-item{list-style-type:none}.markdown-body .task-list-item+.task-list-item{margin-top:3px}.markdown-body .task-list-item input{margin:0 .2em .25em -1.6em;vertical-align:middle}.markdown-body hr{border-bottom-color:#eee}.dark-mode{--canvas-bg-color:#1B1916;--sidebar-bg-color:#1A1918;--main-bg-color:#1B1916;--header-bg-color:#1A1918;--hover-bg-color:rgba(255, 255, 255, 0.05);--header-color:#FAF9F6;--color:#D6D1C5;--link-color:#A7B2FF;--link-hover-color:#C8CEFF;--border-color:#33302B;--border-soft:#2A2825;--btn-color:#FAF9F6;--input-color:#E6E1D8;--input-bg:#25231F;--primary-bg:#FAF9F6;--primary-hover-bg:#FFFFFF;--primary-color:#1A1815;--primary-active-color:#1A1815;--accent:#A7B2FF;--accent-soft:rgba(167, 178, 255, 0.12);--ink-muted:#A39D92;--ink-faint:#8A857C;--ink-soft:#B5AFA2;--status-ready:#5FB27A;--status-progress:#E0A94A;--status-error:#F08A82;--status-inactive:#8A857C;--status-error-soft:rgba(240, 138, 130, 0.08);--status-error-soft-hover:rgba(240, 138, 130, 0.14);--admin-nav-bg:#1A1918;--admin-nav-active:rgba(167, 178, 255, 0.12);--admin-stat-bg:#25231F;--paper-card:#25231F;--paper-bg-alt:#201E1B;--highlight:#3A341E;background-color:var(--canvas-bg-color);color:var(--color)}body{--canvas-bg-color:#FAF9F6;--sidebar-bg-color:#FFFFFF;--header-bg-color:#FAF9F6;--header-color:#1A1815;--main-bg-color:#FAF9F6;--hover-bg-color:rgba(26, 24, 21, 0.05);--input-color:#1A1815;--color:#1A1815;--link-color:#3B4AD6;--link-hover-color:#2E3BB8;--border-color:#E6E1D8;--border-soft:#EDE9E1;--btn-color:#1A1815;--input-bg:#FFFFFF;--primary-bg:#1A1815;--primary-hover-bg:#000000;--primary-color:#FAF9F6;--primary-active-color:#FAF9F6;--accent:#3B4AD6;--accent-soft:#EEF0FF;--ink-muted:#6F6A61;--ink-faint:#8A857C;--ink-soft:#4A4641;--paper-bg-alt:#F3F1EC;--paper-card:#FFFFFF;--highlight:#FFF3C4;--status-ready:#2F7A44;--status-progress:#946512;--status-error:#B42318;--status-inactive:#8A857C;--status-error-soft:rgba(180, 35, 24, 0.04);--status-error-soft-hover:rgba(180, 35, 24, 0.08);--radius-control:6px;--radius-button:8px;--button-height:36px;--button-font-size:14px;--button-line-height:20px;--button-padding-x:13px;--button-compact-height:32px;--radius-surface:10px;--font-serif:'Instrument Serif','Iowan Old Style',Georgia,serif;--font-sans:'Inter',ui-sans-serif,system-ui,-apple-system,sans-serif;--font-mono:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,monospace;background-color:var(--canvas-bg-color);color:var(--color);font-family:var(--font-sans);font-size:14px;letter-spacing:-.005em;line-height:1.5}.fadeIn{opacity:1;animation-name:fadeInOpacity;animation-iteration-count:1;animation-timing-function:ease-in;animation-duration:.6s}@keyframes fadeInOpacity{0%{opacity:0}100%{opacity:1}}.btn:active,.btn:focus{box-shadow:none}:focus:not(:focus-visible){outline:0}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.btn:focus-visible,.dropdown-item:focus-visible,.form-control:focus-visible{outline:2px solid var(--accent);outline-offset:2px;box-shadow:none}input:active,input:hover{box-shadow:none!important}input:-webkit-autofill,input:-webkit-autofill:focus,input:-webkit-autofill:hover,select:-webkit-autofill,select:-webkit-autofill:focus,select:-webkit-autofill:hover,textarea:-webkit-autofill,textarea:-webkit-autofill:focus,textarea:-webkit-autofill:hover{border-color:var(--border-color);-webkit-text-fill-color:var(--color);-webkit-box-shadow:none;transition:background-color 1000s ease-in-out 0s}.custom-select,.form-control,input:-internal-autofill-selected{color:var(--input-color);background-color:var(--input-bg)!important;border-color:var(--border-color)}.form-control:focus{border-color:var(--border-color)}body,html{position:relative;height:100%;overflow-x:hidden}body{overflow-y:hidden}#app{flex:1 1 auto;min-height:0}.app-header{flex:0 0 auto}.app-view{display:block;flex:1 1 auto;min-height:0;overflow-x:hidden!important;overflow-y:auto!important;max-width:100%}.markdown-body a,a{color:var(--link-color)}.markdown-body a:hover,a:hover{text-decoration:none;color:var(--link-hover-color)}.dropdown-menu a.dropdown-item{color:var(--color)}.dropdown-menu a.dropdown-item:hover{color:var(--color);text-decoration:none}.markdown-body .emoji{height:1.3em;margin:0;vertical-align:-.1em}.navbar.navbar-expand-lg{background:var(--header-bg-color)!important;border-bottom:1px solid var(--border-color);transition:background-color .5s ease;padding:10px max(20px,calc((100vw - 1200px)/ 2));font-family:var(--font-sans)}.navbar-toggler{border:1px solid var(--border-color)!important;color:var(--color)!important}.navbar-toggler .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='%231A1815' stroke-width='2' stroke-linecap='round' d='M4 8h22M4 15h22M4 22h22'/%3E%3C/svg%3E")!important}.navbar .navbar-nav{align-items:center}.navbar .nav-link{display:inline-flex;align-items:center;font-size:13px;color:var(--ink-muted)!important;padding:6px 0!important;margin:0 12px;border-bottom:1px solid transparent;letter-spacing:-.005em;line-height:1}.navbar .nav-link:hover{color:var(--color)!important}.navbar .nav-link.active{color:var(--color)!important;border-bottom-color:var(--color)}.navbar .nav-link.nav-icon{padding:0!important;margin:0 8px;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px}.navbar .nav-link .fa,.navbar .nav-link .fab{font-size:15px;line-height:1}.navbar #navbarSupportedContent{align-items:center}.navbar-brand{font-family:var(--font-serif)!important;font-size:20px!important;letter-spacing:-.01em;color:var(--color)!important;padding-right:18px;margin-right:12px;border-right:1px solid var(--border-color)}.navbar-brand em,.navbar-brand i{font-style:italic;font-weight:400}.navbar-dark .navbar-toggler{border-color:var(--border-color);color:var(--color)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='%231A1815' stroke-width='2' stroke-linecap='round' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar .btn-signin{display:inline-flex;align-items:center;height:32px;padding:0 14px!important;margin-left:6px;border:1px solid var(--color);background:var(--color);color:var(--canvas-bg-color)!important;border-radius:6px;font-size:13px;font-weight:500;line-height:1}.navbar .btn-signin:hover{background:var(--primary-hover-bg);color:var(--canvas-bg-color)!important}.navbar .nav-support{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;order:3;gap:6px;min-height:36px;margin-left:12px;padding:0 12px;border:1px solid var(--border-color);border-radius:8px;color:var(--color);font-size:13px;font-weight:500;text-decoration:none}.navbar .nav-support:hover{background:var(--hover-bg-color);border-color:var(--color);color:var(--color)}@media (max-width:991px){.navbar .nav-support{order:0;width:44px;min-height:44px;margin:0 8px 0 auto;padding:0}.navbar .nav-support-label{display:none}[class*=floatingchat-container-wrap],iframe.floatingchat-container{display:none!important}}.navbar .user-chip{display:inline-flex!important;align-items:center;gap:8px;padding:4px 12px 4px 6px!important;margin-left:6px;border:1px solid var(--border-color);border-radius:999px;background:var(--sidebar-bg-color);font-size:13px;color:var(--color)!important}.navbar .user-chip:hover{background:var(--hover-bg-color)}.navbar .user-chip img{width:22px;height:22px}.navbar .user-chip .user-chip-name{color:var(--color);font-weight:500}.navbar .user-chip::after{color:var(--ink-muted)}#navbarSupportedContent{padding-right:0}.generalMessage{display:block;text-align:center;color:var(--header-color)}.rgba-gradient{background:var(--canvas-bg-color);color:var(--color)}.paper-landing{overflow-x:clip}.paper-wrap{max-width:1140px;margin-left:auto;margin-right:auto;padding-left:32px;padding-right:32px}.paper-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);font-weight:500}.paper-hero{max-width:1140px;margin:0 auto;padding:64px 32px 0;display:grid;grid-template-columns:.95fr 1.05fr;gap:48px;align-items:center}.paper-hero h1.hero-title{font-family:var(--font-serif);font-weight:400;font-size:clamp(2.6rem,5.4vw,4.4rem);line-height:1.02;letter-spacing:-.025em;margin:14px 0 0;color:var(--color);text-wrap:balance}.paper-hero h1 .accent{color:var(--accent);font-style:italic}.hero-subtitle{margin-top:18px;font-size:18px;line-height:1.55;color:var(--ink-soft);max-width:30em;text-wrap:pretty}.paper-cta-row{display:flex;flex-wrap:wrap;gap:18px;align-items:center;margin-top:26px}.btn-hero{display:inline-flex;align-items:center;font-family:var(--font-sans);border:1px solid var(--color);background:var(--color);color:var(--canvas-bg-color);padding:12px 20px;font-size:14px;font-weight:500;border-radius:var(--radius-control);letter-spacing:-.005em;transition:background .15s,border-color .15s,transform .1s}.btn-hero:hover{background:var(--primary-hover-bg);border-color:var(--primary-hover-bg);color:var(--canvas-bg-color);text-decoration:none;transform:translateY(-1px)}.btn-hero-ghost{background:0 0;border:1px solid var(--border-color);color:var(--color);padding:12px 20px;font-size:14px;font-weight:500;border-radius:var(--radius-control)}.btn-hero-ghost:hover{background:var(--hover-bg-color);border-color:var(--color);color:var(--color)}.paper-link-arrow{font-size:14px;color:var(--ink-soft);text-decoration:underline;text-underline-offset:4px;text-decoration-color:var(--border-color)}.paper-link-arrow:hover{color:var(--color);text-decoration-color:var(--color)}.paper-reassure{list-style:none;margin:16px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:6px 16px;font-size:13px;color:var(--ink-muted)}.paper-reassure li::before{content:"\2713";color:var(--status-ready);margin-right:6px;font-size:11px}.paper-frame{border-radius:var(--radius-surface);background:var(--paper-card);border:1px solid var(--border-color);box-shadow:0 24px 60px rgba(26,24,21,.1),0 2px 6px rgba(26,24,21,.04);overflow:hidden}.dark-mode .paper-frame{box-shadow:0 24px 60px rgba(0,0,0,.45)}.paper-frame-bar{display:flex;align-items:center;gap:8px;height:34px;padding:0 12px;border-bottom:1px solid var(--border-soft);background:var(--paper-bg-alt);font-family:var(--font-mono);font-size:11px;color:var(--ink-muted)}.paper-frame-bar .dots{display:flex;gap:5px}.paper-frame-bar .dots i{width:8px;height:8px;border-radius:50%;background:var(--border-color)}.paper-frame-bar .url{flex:1;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-frame img{display:block;width:100%;height:auto}.paper-hero-shot .paper-frame{width:112%}.paper-proof{margin-top:64px;padding-top:18px;padding-bottom:18px;border-top:1px solid var(--border-color);display:flex;flex-wrap:wrap;gap:12px 30px;align-items:center}.paper-proof-venues{display:flex;gap:22px;align-items:center;font-family:var(--font-serif);font-size:22px;letter-spacing:-.01em;color:var(--ink-soft)}.paper-proof-venues i{font-style:normal;font-family:var(--font-sans);font-size:14px;color:var(--ink-faint)}.paper-stats{margin-top:12px;padding-top:22px;border-top:1px solid var(--border-color)}.paper-stats-meta{display:flex;justify-content:space-between;align-items:center;font-family:var(--font-mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-muted);margin-bottom:14px}.paper-stats-meta-right{display:inline-flex;align-items:center;gap:6px}.paper-stats-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--status-ready)}.paper-stats-grid{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--border-color);border-bottom:1px solid var(--border-color)}.paper-stat-card{display:flex;flex-direction:column;padding:22px 26px 20px 0;margin-right:26px;border-right:1px solid var(--border-color);min-width:0}.paper-stat-card:last-child{border-right:0;margin-right:0;padding-right:0}.paper-stat-value{font-size:44px;font-weight:500;letter-spacing:-.04em;line-height:1;color:var(--color);font-variant-numeric:tabular-nums}.paper-stat-label{margin-top:6px;font-size:13px;color:var(--ink-soft)}.paper-stat-bars{display:block;width:100%;height:34px;margin-top:18px;overflow:visible}.paper-stat-bars rect{fill:var(--border-color)}.paper-stat-bars rect.is-latest{fill:var(--accent)}.paper-stat-delta{margin-top:10px;font-family:var(--font-mono);font-size:11px;color:var(--status-ready)}.paper-section-head{margin-top:110px;display:grid;grid-template-columns:1fr 1fr;gap:40px;align-items:end}.paper-qa h2,.paper-section-head h2{font-family:var(--font-serif);font-weight:400;font-size:clamp(2rem,4.2vw,3.25rem);line-height:1.05;letter-spacing:-.02em;margin:10px 0 0;color:var(--color);text-wrap:balance}.paper-feature-title em,.paper-qa h2 em,.paper-section-head h2 em{font-style:italic;color:var(--accent)}.paper-section-head p{font-size:15px;color:var(--ink-soft);max-width:32em;margin:0;line-height:1.6}.paper-preview{margin-top:28px;display:grid;grid-template-columns:1fr 1fr;gap:14px}.paper-preview .pane{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);overflow:hidden;min-width:0}.paper-preview .pane-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 14px;border-bottom:1px solid var(--border-soft)}.paper-preview .pane-label{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);white-space:nowrap}.paper-preview .pane-url{font-family:var(--font-mono);font-size:11px;color:var(--ink-soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.paper-preview .pane-body{padding:16px 18px;font-family:var(--font-mono);font-size:13px;line-height:1.9;color:var(--ink-soft)}.paper-preview .pane-body strong{color:var(--color);font-weight:600}.paper-preview .tok{color:var(--ink-faint)}.paper-preview .redact{background:var(--accent-soft);color:var(--accent);border-radius:4px;padding:0 5px}.paper-features{margin-top:28px;padding-top:28px;border-top:1px solid var(--border-color);display:grid;grid-template-columns:5fr 7fr;gap:48px;align-items:start}.paper-features-list{display:flex;flex-direction:column}.paper-feature{border-left:2px solid var(--border-soft);padding:16px 0 16px 20px;transition:border-color .2s}.paper-feature.is-on{border-left-color:var(--color)}.paper-feature-tab{all:unset;display:block;width:100%;cursor:pointer;color:inherit;border-radius:4px}.paper-feature-tab:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.paper-feature-tab .paper-eyebrow{display:block;margin-bottom:6px}.paper-feature-title{display:block;font-family:var(--font-serif);font-size:24px;line-height:1.15;letter-spacing:-.015em;color:var(--ink-muted);transition:color .2s}.paper-feature-title em{color:inherit}.paper-feature-tab:hover .paper-feature-title,.paper-feature.is-on .paper-feature-title{color:var(--color)}.paper-feature.is-on .paper-feature-title em{color:var(--accent)}.paper-feature-more{display:none}.paper-feature.is-on .paper-feature-more{display:block}.paper-feature-more .paper-feature-title-m{display:none}.paper-feature-more p{font-size:15px;color:var(--ink-soft);line-height:1.55;margin:10px 0 12px;max-width:30em}.paper-features-stage{min-width:0}.paper-feature-panel{animation:paper-feature-in .25s ease-out}@keyframes paper-feature-in{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){.paper-feature-panel{animation:none}}.paper-crop{position:relative;height:380px;overflow:hidden;background:var(--paper-card)}.paper-crop img{position:absolute;left:0;top:0;max-width:none;height:auto;display:block}.paper-crop-anonymize img{width:150%;transform:translate(-1.5%,-8%)}.paper-crop-review img{width:160%;transform:translate(-1%,-8%)}.paper-crop-manage img{width:150%;transform:translate(-6%,-9%)}.paper-qa{margin-top:110px;display:grid;grid-template-columns:1fr 1.4fr;gap:40px;align-items:start}.paper-qa h2{margin-bottom:12px}.paper-qa .q{border-top:1px solid var(--border-color);padding:18px 0}.paper-qa .q:last-child{border-bottom:1px solid var(--border-color)}.paper-qa .q a{display:block;font-weight:500;font-size:15px;color:var(--color);margin-bottom:6px}.paper-qa .q a:hover{color:var(--accent);text-decoration:none}.paper-qa .q p{margin:0;font-size:14px;color:var(--ink-soft);line-height:1.6}@media (max-width:1100px){.paper-hero-shot .paper-frame{width:100%}}@media (max-width:991px){.paper-hero{grid-template-columns:1fr;gap:36px;padding-top:40px}.paper-qa,.paper-section-head{grid-template-columns:1fr;gap:16px}.paper-stats-grid{grid-template-columns:1fr 1fr}.paper-stat-card:nth-child(2n){border-right:0;margin-right:0;padding-right:0}.paper-stat-card:nth-child(-n+2){border-bottom:1px solid var(--border-color)}}@media (max-width:767px){.paper-hero,.paper-wrap{padding-left:20px;padding-right:20px}.paper-hero h1.hero-title{font-size:clamp(2.4rem,11vw,3.25rem)}.hero-subtitle{font-size:16px}.paper-cta-row .btn-hero{width:100%;justify-content:center}.paper-proof{margin-top:48px}.paper-stat-card{padding:18px 16px 16px 0;margin-right:16px}.paper-stat-value{font-size:40px}.paper-qa,.paper-section-head{margin-top:72px}.paper-preview{grid-template-columns:1fr}.paper-preview .pane-body{font-size:12px;line-height:1.8}.paper-features{display:flex;flex-wrap:wrap;gap:0;padding-top:0;border-top:0;margin-top:24px}.paper-feature,.paper-features-list,.paper-features-stage{display:contents}.paper-feature-tab{order:1;flex:1 1 0;width:auto;padding:12px 0 10px;border-bottom:2px solid var(--border-color);border-radius:0;text-align:left}.paper-feature.is-on .paper-feature-tab{border-bottom-color:var(--color)}.paper-feature-tab .paper-eyebrow{margin:0;font-size:11px;letter-spacing:.08em}.paper-feature-tab .paper-feature-title{display:none}.paper-feature-panel{order:2;width:100%;margin-top:20px;animation:none}.paper-crop{height:240px}.paper-crop-anonymize img{width:230%;transform:translate(-1.5%,-8%)}.paper-crop-review img{width:240%;transform:translate(-1%,-8%)}.paper-crop-manage img{width:220%;transform:translate(-3%,-9%)}.paper-feature-more{order:3;width:100%}.paper-feature.is-on .paper-feature-more{margin-top:18px}.paper-feature-more .paper-feature-title-m{display:block;font-size:28px;line-height:1.1}.paper-feature-more p{max-width:none}.paper-footer-inner>.paper-footer-brand{grid-column:1/-1}.paper-footer-foot{flex-direction:column;gap:6px}}.dropdown-menu{background-color:var(--paper-card,var(--main-bg-color))!important;color:var(--color)!important;border:1px solid var(--border-color)!important;border-radius:8px!important;box-shadow:0 12px 28px rgba(26,24,21,.08),0 2px 6px rgba(26,24,21,.05)!important;padding:6px!important;font-family:var(--font-sans);font-size:13px;min-width:11rem}.dropdown-menu .dropdown-item{color:var(--color)!important;padding:7px 10px!important;border-radius:5px;font-size:13px}.dropdown-menu .dropdown-item:focus,.dropdown-menu .dropdown-item:hover{background:var(--hover-bg-color)!important;color:var(--color)!important}.dropdown-menu .dropdown-divider{border-top-color:var(--border-color)!important;margin:4px 2px}.dropdown-menu .dropdown-header{color:var(--ink-muted);font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase}.body,.file-content,.markdown-body{background-color:var(--main-bg-color)!important;color:var(--color)!important}.markdown-body table tr{background-color:var(--main-bg-color);border-top:1px solid var(--border-color)}.markdown-body table tr:nth-child(2n){background-color:var(--paper-bg-alt)}.markdown-body table td,.markdown-body table th{border:1px solid var(--border-color)}.file-content{padding:4px 7px;text-align:left;min-height:100%}.badge{font-size:75%;font-weight:500;padding:3px 8px;border-radius:10px;vertical-align:middle}.warning-feedback{width:100%;margin-top:.25rem;font-size:80%;color:#dc8e35}.dropdown-item:focus,.dropdown-item:hover{background-color:var(--hover-bg-color)}.card-header .btn,.card-header .btn:focus,.card-header .btn:hover{border:none!important;background:0 0!important}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:var(--button-height);padding:7px var(--button-padding-x);font:500 var(--button-font-size)/var(--button-line-height) var(--font-sans);vertical-align:middle;max-width:100%;transition:background-color 120ms ease,border-color 120ms ease,color 120ms ease;color:var(--btn-color);border:1px solid var(--border-color);background:var(--paper-card);border-radius:var(--radius-button);white-space:nowrap}.btn:active,.btn:hover{color:var(--btn-color);border:1px solid var(--border-color);background-color:var(--hover-bg-color);box-shadow:none!important}.btn.btn-primary{color:var(--primary-color);background-color:var(--primary-bg)}.btn.btn-primary:active,.btn.btn-primary:hover{color:var(--primary-active-color);background-color:var(--primary-hover-bg)!important}.btn::placeholder{color:var(--color);opacity:1}.white_border{border:1px solid #fff;color:#fff}.leftCol{display:flex;position:relative;flex:0 0 auto;width:100%;z-index:9;flex-direction:column}.card,.leftCol,.sidePanel{background-color:var(--sidebar-bg-color);border:1px solid var(--border-color)}@media (min-width:768px){.leftCol{flex:0 0 310px;width:310px;height:100%}}.leftCol-search{padding:10px 12px 0}.tree-search-box{display:flex;align-items:center;gap:8px;background:var(--canvas-bg-color);border:1px solid var(--border-color);border-radius:8px;padding:7px 10px;transition:border-color .15s}.tree-search-box:focus-within{border-color:var(--ink-muted)}.tree-search-icon{font-size:12px;color:var(--ink-muted);flex-shrink:0}.tree-search-input{flex:1;border:none;outline:0;background:0 0;font-family:var(--font-sans);font-size:13px;color:var(--color);min-width:0}.tree-search-input::placeholder{color:var(--ink-muted)}.tree-search-kbd{font-family:var(--font-sans);font-size:11px;color:var(--ink-muted);background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:4px;padding:1px 6px;line-height:1.4;flex-shrink:0}.tree-search-clear{background:0 0;border:none;color:var(--ink-muted);font-size:16px;cursor:pointer;padding:0 2px;line-height:1}.tree-search-clear:hover{color:var(--color)}.leftCol-project-header{display:flex;align-items:baseline;justify-content:space-between;padding:12px 14px 4px;gap:8px}.project-name{font-family:var(--font-sans);font-size:13px;font-weight:600;color:var(--color);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.project-file-count{font-family:var(--font-sans);font-size:12px;color:var(--ink-muted);white-space:nowrap;flex-shrink:0}.files{position:relative;display:block;overflow:auto;height:100%;padding:4px 6px}.files ul{list-style:none;margin:0;padding:0}.files li ul{padding-left:8px;margin-left:7px;border-left:1px solid var(--border-color)}.files .folder>ul{display:none}.files .folder.open>ul{display:block}.files .file,.files .folder{position:relative;color:var(--ink-soft);cursor:pointer;word-break:break-all}.files a{display:flex;align-items:center;gap:4px;padding:1px 8px 1px 2px;font-family:var(--font-sans);font-size:13px;color:var(--ink-soft);border-radius:4px;text-decoration:none;line-height:1.5;position:relative}.files a:hover{background:var(--hover-bg-color);color:var(--color);text-decoration:none}.files:focus{outline:0}.files a.tree-focused{background:var(--hover-bg-color);color:var(--color)}.files .file.active>a{background:rgba(128,128,128,.15);color:var(--color)}.files .file.active>a .tree-icon-file{color:#5b7ba5}.files .file.active>a .tree-count{color:var(--ink-muted)}.tree-icon-file,.tree-icon-folder{display:inline-block;flex-shrink:0}.tree-icon-folder{width:14px;height:12px;color:var(--ink-muted);opacity:.75}.tree-icon-folder svg{display:block;width:100%;height:100%;fill:currentColor;fill-opacity:0;stroke:currentColor;stroke-width:1.2;stroke-linejoin:round}.files .folder.open>a .tree-icon-folder{color:#a07d2e;opacity:.9}.files .folder.open>a .tree-icon-folder svg{fill-opacity:.12}.dark-mode .files .folder.open>a .tree-icon-folder{color:#c9a03a}.tree-icon-file{width:16px;font-size:14px;text-align:center;color:#5b7ba5}.dark-mode .files .file.active>a .tree-icon-file,.dark-mode .tree-icon-file{color:#7ba3d0}.tree-toggle{display:inline-flex;align-items:center;justify-content:center;width:10px;height:14px;flex-shrink:0;opacity:.6}.tree-toggle::after{content:"";display:block;width:0;height:0;border-style:solid;border-width:3px 0 3px 4.5px;border-color:transparent transparent transparent var(--ink-muted);transition:transform .12s ease}.files .folder.open>a .tree-toggle::after{transform:rotate(90deg)}.tree-spacer{display:inline-block;width:10px;flex-shrink:0}.tree-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tree-count{font-family:var(--font-sans);font-size:11px;color:var(--ink-muted);flex-shrink:0;margin-left:auto;padding-left:8px;opacity:.7}.files .folder>a{color:var(--color)}.files .file::before,.files .folder::before{display:none}.files .folder>a::after{display:none}.tree-search-path{color:var(--ink-muted);font-size:11px}.tree-search-empty{padding:16px 12px;color:var(--ink-muted);font-size:13px;font-family:var(--font-sans);text-align:center}.leftCol{background:var(--paper-bg-alt,#f3f1ec);border-right:1px solid var(--border-color)}.dark-mode .leftCol{background:var(--sidebar-bg-color)}.status-bar{background:var(--canvas-bg-color);border-bottom:1px solid var(--border-color);padding:10px 14px}.paths .breadcrumb-item,.paths .breadcrumb-item a{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);letter-spacing:.02em}.paths .breadcrumb-item.active,.paths .breadcrumb-item:last-child{color:var(--color)}.paths .breadcrumb-item+.breadcrumb-item::before{content:'/';color:var(--ink-muted)}.last-update{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);padding:8px 10px;border-top:1px solid var(--border-color);letter-spacing:.02em}.ace_editor{height:100%}.ace_scroller{cursor:default}.status-bar{display:flex;align-items:center;gap:12px;background-color:var(--canvas-bg-color);padding:10px 14px;margin:0;border-bottom:1px solid var(--border-color);border-radius:0;flex-shrink:0}.status-bar-actions{display:flex;align-items:center;gap:6px;flex-shrink:0}.status-bar-actions .btn{display:inline-flex;align-items:center;gap:6px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color);border-radius:6px;padding:4px 10px;font-size:13px;min-height:30px}.status-bar-actions .btn:hover{background:var(--hover-bg-color);color:var(--color)}.status-bar-actions .btn.btn-active{border-color:currentColor;font-weight:600}.paths{flex:1 1 auto;min-width:0;padding:0;margin:0;background-color:initial;border:none;border-radius:0;align-items:center;overflow-x:auto;white-space:nowrap;flex-wrap:nowrap}.paths::-webkit-scrollbar{display:none}.paths a{color:var(--color)}.paths .breadcrumb-item{padding-left:3px}.paths .breadcrumb-item::before{padding-right:3px}.content{height:100%;overflow:scroll;padding-top:42px;background-color:var(--main-bg-color);text-align:center}.image-content{max-width:100%;max-height:100%;text-align:center;padding:4px}.pdf-viewer{display:flex;flex-direction:column;height:100%;min-height:0;background-color:var(--main-bg-color)}.pdf-toolbar{display:flex;align-items:center;gap:4px;flex:0 0 auto;padding:4px 8px;border-bottom:1px solid var(--border-color,rgba(0,0,0,.12))}.pdf-toolbar-group{display:inline-flex;align-items:center;gap:4px}.pdf-toolbar-right{margin-left:auto}.pdf-toolbar-btn{border:0;background:0 0;color:inherit;padding:4px 8px;border-radius:4px;font-size:13px;line-height:1.2;cursor:pointer}.pdf-toolbar-btn:hover:not(:disabled){background-color:rgba(128,128,128,.18)}.pdf-toolbar-btn:disabled{opacity:.4;cursor:default}.pdf-toolbar-zoom{min-width:52px;font-variant-numeric:tabular-nums}.pdf-toolbar-page{width:3.5em;text-align:right;padding:2px 4px;font-size:13px;color:inherit;background:0 0;border:1px solid var(--border-color,rgba(0,0,0,.2));border-radius:4px}.pdf-toolbar-count{font-size:13px;opacity:.75;font-variant-numeric:tabular-nums}.pdf-pages{flex:1 1 auto;min-height:0;overflow:auto;padding:8px 0}.pdf-viewer-page{margin:0 auto 12px}.pdf-viewer-page canvas{display:block;box-shadow:0 1px 4px rgba(0,0,0,.25)}.pdf-viewer-error{padding:24px;text-align:center;font-weight:700}.html-doc{display:block;height:100%}.html-doc-frame{display:block;width:100%;height:100%;border:0;background-color:#fff}.file-error{font-weight:700;font-size:50px;text-align:center}pdfviewer{display:block;padding:15px}pdfpageviewer{display:block;width:100%;margin-bottom:10px}notebook{display:block;text-align:left;padding:15px}@media (min-width:768px){notebook{padding-left:100px}}.nb-output td,.nb-output th{border:1px solid var(--border-color)!important}.paper-faq{max-width:1180px;margin:0 auto;padding:48px 32px 80px;font-family:var(--font-sans)}.paper-faq-hero{padding-bottom:40px;border-bottom:1px solid var(--border-color);margin-bottom:36px}.paper-faq-eyebrow{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.14em;text-transform:uppercase;margin-bottom:32px}.paper-faq-title{font-family:var(--font-serif);font-weight:400;font-size:clamp(2.6rem,5.5vw,4.6rem);line-height:1.03;letter-spacing:-.02em;color:var(--color);margin:0 0 22px;max-width:14em}.paper-faq-title em{font-style:italic;color:var(--color)}.paper-faq-lede{color:var(--ink-soft);font-size:18px;line-height:1.55;max-width:38em;margin:0}.paper-faq-lede a{color:var(--color);border-bottom:1px solid var(--color)}.paper-faq-lede a:hover{color:var(--accent);border-bottom-color:var(--accent)}.paper-faq-body{display:grid;grid-template-columns:220px 1fr;gap:60px;align-items:start}.paper-faq-toc{position:sticky;top:32px;font-size:14px}.paper-faq-toc-head{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.14em;text-transform:uppercase;padding-bottom:10px;margin-bottom:6px;border-bottom:1px solid var(--border-color)}.paper-faq-toc nav{display:flex;flex-direction:column}.paper-faq-toc nav a{color:var(--ink-soft);padding:8px 0 8px 14px;border-left:2px solid transparent;text-decoration:none;margin-left:-2px}.paper-faq-toc nav a.active,.paper-faq-toc nav a:hover{color:var(--color);border-left-color:var(--color)}.faq-section{min-width:0}.faq-section>div{width:100%}.faq-section h4.faq-cat{font-family:var(--font-serif);font-weight:400;font-size:clamp(1.7rem,2.6vw,2.2rem);letter-spacing:-.015em;color:var(--color);margin:0 0 6px;padding-bottom:14px;border-bottom:1px solid var(--border-color)}.faq-section h4.faq-cat i{display:none}.faq-section .panel-group{margin-bottom:56px}.faq-section .panel-default .panel-title a{display:block;position:relative;padding:22px 0 22px 42px;font-family:var(--font-serif);font-weight:400;font-size:20px;line-height:1.35;letter-spacing:-.005em;color:var(--color);text-decoration:none;cursor:pointer}.faq-section .panel-default .panel-title a:hover{color:var(--accent)}.faq-section .panel-heading{background:0 0;padding:0!important;border:none}.faq-section .panel-default{background:0 0;border:none;border-bottom:1px solid var(--border-soft);border-radius:0;margin-bottom:0!important;box-shadow:none}.faq-section .panel-default .panel-title{margin-bottom:0}.faq-section .panel-default .panel-title a:after{content:"−";position:absolute;left:0;right:auto;top:22px;transform:none;font-family:var(--font-mono);font-size:18px;line-height:1.35;color:var(--ink-muted);float:none;margin:0;font-weight:400}.faq-section .panel-default .panel-title a.collapsed:after{content:"+"}.faq-section .panel-default .panel-body{padding:0 0 22px 42px!important;color:var(--ink-soft);font-size:15px;line-height:1.65;border-top:none;max-width:42em}.table{color:var(--color)}.dropdown-divider,.table td,.table th,hr{border-color:var(--border-color)}.table.repositories td{word-break:break-word}loc{display:block;position:relative;width:100%;height:5px}loc .lang{float:left;height:100%}.rounded-circle.fa{display:inline-block;font-size:75px;height:140px;width:140px;border:4px solid;line-height:140px;text-align:center}.featurette-divider{margin:4.5rem 0;border-color:var(--border-color)}.featurette-heading{font-family:var(--font-serif);font-weight:400;font-size:2rem;line-height:1.15;letter-spacing:-.02em;margin-bottom:14px;color:var(--color)}.dark-mode .shadow{box-shadow:none}.dark-mode .overflow-auto::-webkit-scrollbar{width:10px}.dark-mode .overflow-auto::-webkit-scrollbar-track{-webkit-box-shadow:none;background:inherit;border-radius:0}.dark-mode .overflow-auto::-webkit-scrollbar-thumb{border-radius:10px;border:1px solid var(--border-color);background-color:var(--hover-bg-color)}.dark-mode .rgba-gradient{background:linear-gradient(135deg,#2a2d4a,#151728)}.section-number{padding-right:10px;font-weight:700;font-style:italic}.org-subscript-child{font-size:85%}.highlighted-line{position:absolute;background:rgba(100,200,100,.5);z-index:20}code,pre{font-family:"Fira Code","Courier New",Courier,monospace;line-height:1.1;color:var(--color)}.diff-file,.diff-index,.diff-lines{background:rgba(172,172,172,.5)}.diff-add{background:rgba(100,200,100,.5)}.diff-remove{background:rgba(200,100,100,.5)}.dashboard-title{font-size:1.375rem;font-weight:600;letter-spacing:-.01em}.quota-row{display:flex;gap:16px;margin-bottom:16px;padding:0}.quota-item{flex:1;min-width:0}.quota-header{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:4px}.quota-label{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.3px;opacity:.7}.quota-value{font-size:.8125rem;font-weight:500;font-variant-numeric:tabular-nums}.quota-progress{height:6px;border-radius:3px;background:var(--hover-bg-color)}.quota-progress .progress-bar{border-radius:3px}.filter-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;font-size:.8125rem;font-weight:500;background:var(--primary-bg);color:var(--primary-color);border-radius:12px;line-height:1.4}.filter-chip-close{display:inline-flex;align-items:center;justify-content:center;background:0 0;border:none;color:inherit;opacity:.7;cursor:pointer;padding:0;min-width:24px;min-height:24px;margin:-6px -6px -6px 0;font-size:1rem;line-height:1;border-radius:999px}.filter-chip-close:hover{opacity:1}.repo-list{list-style:none;padding:0;margin:0}.repo-list-item{display:flex;align-items:flex-start;justify-content:space-between;padding:16px 0;border-bottom:1px solid var(--border-color);gap:12px}.repo-list-item:first-child{border-top:1px solid var(--border-color)}.repo-list-item.repo-inactive{opacity:.6}.repo-list-item-content{flex:1;min-width:0}.repo-list-item-header{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:4px}.repo-name{font-family:var(--font-mono);font-size:14px;font-weight:500;color:var(--color);word-break:break-word}.repo-name:hover{color:var(--accent)}.repo-source{font-size:.875rem;opacity:.8;display:flex;flex-wrap:wrap;align-items:center;gap:6px}.repo-date{opacity:.7}.repo-meta{display:flex;flex-wrap:wrap;gap:12px;margin-top:8px;font-size:.8125rem;opacity:.7}.repo-meta span{display:inline-flex;align-items:center;gap:4px;white-space:nowrap}.repo-list-item-actions{flex-shrink:0;padding-top:2px;margin-left:14px}.repo-list-empty{display:flex;flex-direction:column;align-items:center;gap:8px;padding:48px 20px;opacity:.5;font-size:.9375rem;list-style:none;border-bottom:1px solid var(--border-color);border-top:1px solid var(--border-color)}.repo-list-empty i{font-size:1.75rem}.type-badge{display:inline-flex;align-items:center;gap:3px;font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:.3px;padding:2px 8px;border-radius:4px;white-space:nowrap}.type-badge{font-family:var(--font-mono);letter-spacing:.06em;padding:2px 8px;border-radius:999px;border:1px solid var(--border-color);background:var(--paper-bg-alt,transparent)}.type-badge.type-pr,.type-badge.type-repo{background:var(--paper-bg-alt);color:var(--ink-muted);border-color:var(--border-color)}.dark-mode .type-badge.type-pr,.dark-mode .type-badge.type-repo{background:rgba(255,255,255,.06);color:var(--ink-muted);border-color:var(--border-color)}.type-badge.type-coauthor{background:rgba(99,102,241,.12);color:#4f46e5;border-color:rgba(99,102,241,.35);margin-left:6px}.dark-mode .type-badge.type-coauthor{background:rgba(129,140,248,.18);color:#a5b4fc;border-color:rgba(165,180,252,.45)}.btn-group .btn:not(.btn-primary){background:var(--hover-bg-color)}.anonymize-page{display:flex;flex-direction:column;min-height:0}.anonymize-landing{flex:1 1 0;min-height:min-content;display:flex;align-items:center;justify-content:center;padding:20px}.anonymize-landing-inner{width:100%;max-width:600px}.anonymize-landing-inner h2{font-weight:700}.anonymize-workspace{display:flex;flex-direction:column;flex:1 1 0;min-height:0;background:var(--canvas-bg-color)}.anonymize-topbar{background:var(--paper-card);border-bottom:1px solid var(--border-color);padding:18px 28px;flex:0 0 auto}.anonymize-topbar-inner{max-width:1400px;margin:0 auto}.anonymize-topbar-head{display:flex;align-items:center;gap:14px;flex-wrap:wrap}.anonymize-topbar-title{margin:4px 0 0;font-size:clamp(1.8rem,3vw,2.4rem)}.anonymize-split{flex:1 1 auto;display:flex;min-height:0}.anonymize-form-col{flex:0 0 auto;width:100%;min-width:0;background:var(--canvas-bg-color);border-right:1px solid var(--border-color);overflow-y:auto}.anonymize-form-col .paper-settings-main{max-width:720px;padding:28px 32px 40px;margin:0}.anonymize-form-col .paper-settings-section:first-child{padding-top:0}.anonymize-form-col .anonymize-submit-bar{position:sticky;bottom:0;background:var(--canvas-bg-color);padding:14px 0 0;border-top:1px solid var(--border-color);margin-top:20px}.anonymize-form-col .anonymize-submit-bar .btn{width:100%;padding:12px 16px;font-size:15px}.anonymize-preview-col{flex:1 1 auto;min-width:0;overflow:auto;background:var(--paper-bg-alt);padding:28px 32px}.anonymize-preview-head{display:flex;align-items:baseline;gap:12px;padding-bottom:12px;border-bottom:1px solid var(--border-color);margin-bottom:20px}.anonymize-preview-head .paper-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted)}.anonymize-preview-sub{color:var(--ink-soft);font-size:13px}.anonymize-preview-body{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:28px 32px}.form-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.form-grid-3{display:grid;grid-template-columns:2fr 1fr 1fr;gap:16px}@media (max-width:700px){.form-grid-2,.form-grid-3{grid-template-columns:1fr}}.paper-optional{font-family:var(--font-sans);font-weight:400;color:var(--ink-muted);text-transform:none;letter-spacing:0;font-size:11px;margin-left:6px}.paper-plan-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px}.paper-plan-card{position:relative;display:block;padding:18px 20px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease;margin:0}.paper-plan-card input[type=radio]{position:absolute;opacity:0;pointer-events:none}.paper-plan-card.selected{border-color:var(--color);box-shadow:0 0 0 2px var(--color) inset}.paper-plan-head{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted)}.paper-plan-price{font-family:var(--font-serif);font-size:2rem;color:var(--color);margin:6px 0 4px}.paper-plan-price .paper-plan-per{font-family:var(--font-sans);font-size:12px;color:var(--ink-soft)}.paper-plan-desc{font-size:13px;color:var(--ink-soft)}.paper-plan-desc ul{padding-left:18px;margin:0}.paper-settings-copy{color:var(--ink-soft);font-size:13px;margin:0 0 14px}.anonymize-section-title{font-size:.875rem;font-weight:600;text-transform:uppercase;letter-spacing:.3px;margin:18px 0 8px 0;padding-bottom:6px;border-bottom:1px solid var(--border-color);opacity:.7}.anonymize-section-title i{margin-right:4px}.anonymize-submit-bar{padding:12px 0 4px 0}.anonymize-submit-bar .btn{font-size:1rem;padding:10px 20px;font-weight:600}.anonymize-page .form-check{padding-top:4px;padding-bottom:4px}.anonymize-page .form-check-label{font-weight:500}.anonymize-preview-col{min-height:0;min-width:0}.pr-diff pre{overflow-x:auto;max-width:100%}@media (min-width:768px){.anonymize-form-col{height:100%;width:520px;flex:0 0 520px}.anonymize-preview-col{height:100%;flex:1}}@media (max-width:767px){.anonymize-workspace{flex:0 0 auto;min-height:0}.anonymize-topbar{padding:14px 16px}.anonymize-topbar-title{font-size:1.5rem;margin-top:2px}.anonymize-split{display:flex;flex-direction:column;flex:1 1 auto;min-height:0}.anonymize-form-col{width:100%!important;flex:0 0 auto!important;height:auto!important;border-right:none;border-bottom:1px solid var(--border-color);overflow:visible}.anonymize-form-col .paper-settings-main{padding:18px 16px 24px;max-width:none}.anonymize-form-col .anonymize-submit-bar{position:sticky;bottom:0;margin:20px -16px 0;padding:12px 16px;background:var(--canvas-bg-color);border-top:1px solid var(--border-color);z-index:10}.anonymize-form-col .anonymize-submit-bar .btn{width:100%;padding:12px 16px;font-size:15px}.anonymize-preview-col{width:100%;flex:0 0 auto;height:auto!important;max-height:none;padding:18px 16px 24px;overflow:visible}.anonymize-preview-body{padding:16px;border-radius:8px}.anonymize-preview-body .pr-diff pre,.anonymize-preview-body pre{overflow-x:auto;max-width:100%}.anonymize-landing-inner{padding:16px}}@media (min-width:1280px){.anonymize-form-col{width:620px;flex:0 0 620px}}@media (max-width:767px){.btn{min-height:38px;padding:6px 14px;font-size:14px}.btn-sm{min-height:34px;padding:5px 10px}.navbar .nav-link{padding:8px 12px}.navbar .nav-link .fa,.navbar .nav-link .fab{font-size:24px;line-height:32px}.container.page{padding-left:15px;padding-right:15px;max-width:100%}h1{font-size:1.5rem}h2{font-size:1.375rem}h3{font-size:1.125rem}.repo-list-item{flex-direction:column}.repo-list-item-actions{align-self:flex-start}.quota-row{flex-direction:column;gap:10px;padding:10px 12px}.dropdown-menu{position:absolute;right:0;left:auto}.form-group{margin-bottom:12px}.form-control{font-size:16px}.status-bar{gap:6px;padding:8px 10px}.status-bar .btn{font-size:12px;padding:4px 10px;min-height:32px}.status-bar .paths{font-size:12px;overflow-x:auto;flex-wrap:nowrap;white-space:nowrap;-webkit-overflow-scrolling:touch}.status-bar .paths::-webkit-scrollbar{display:none}.status-bar-actions{flex-shrink:0;gap:4px}#home .display-4{font-size:1.75rem}#home h4.subtext-header{font-size:1rem}.progress:not(.quota-progress){min-width:120px!important}.badge{font-size:70%}.col-2.input-group{width:100%!important;max-width:100%;flex:0 0 100%}.color-text-secondary span{display:inline-block;margin-bottom:2px}.floatingchat-container-wrap{display:none!important}.anonymize-landing{align-items:flex-start;padding-top:60px}.anonymize-page .container-fluid>.row{height:auto!important;min-height:100%}.anonymize-form-col{width:100%!important;flex:0 0 100%!important;border-right:none;border-top:1px solid var(--border-color)}.anonymize-preview-col{height:auto!important;max-height:none}.anonymize-section-title{font-size:.8125rem;margin:12px 0 8px 0}.anonymize-submit-bar{position:sticky;bottom:0;background:var(--sidebar-bg-color);padding:10px 0;margin:0 -12px;padding-left:12px;padding-right:12px;border-top:1px solid var(--border-color);z-index:10}.anonymize-submit-bar .btn{font-size:1rem;padding:12px 20px}.anonymize-page .form-check{padding-top:6px;padding-bottom:6px;min-height:36px}.anonymize-page .form-check-label{font-size:.9375rem}.anonymize-page .card-body{padding:12px}.pr-title{font-size:1.125rem}.pr-diff pre{font-size:.75rem}.pr-comment .mb-1 h5{font-size:1rem}.nav-tabs .nav-link{padding:8px 12px;font-size:.875rem}}@media (min-width:768px) and (max-width:991px){.container.page{max-width:100%;padding-left:15px;padding-right:15px}.leftCol{flex:0 0 250px;width:250px}}.explorer-page{display:flex;height:100%;width:100%;background:var(--canvas-bg-color);position:relative}.explorer-main{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;overflow:hidden;background:var(--canvas-bg-color)}.explorer-content{flex:1 1 auto;min-height:0;width:100%;overflow:auto}.leftCol-close,.leftCol-head{display:none}.leftCol-body{flex:1 1 auto;min-height:0;overflow:auto}.leftCol-foot{padding:8px 12px;border-top:1px solid var(--border-color);background:var(--paper-bg-alt)}.leftCol-foot .last-update{display:block;border-top:none;padding:0}.leftCol-backdrop{display:none}.paper-inline-warning{display:flex;align-items:flex-start;gap:8px;margin:8px;padding:10px 12px;background:rgba(138,107,30,.08);border:1px solid rgba(138,107,30,.35);border-radius:8px;color:var(--color);font-size:13px;line-height:1.4}.paper-inline-warning i{color:#8a6b1e;margin-top:2px;flex-shrink:0}.dark-mode .paper-inline-warning i{color:#ffd37a}@media (min-width:768px){.leftCol-body{padding:8px 4px}}.sidebar-toggle{display:none;align-items:center;gap:8px;position:fixed;bottom:18px;right:18px;z-index:1100;padding:10px 14px;background:var(--color);color:var(--canvas-bg-color);border:1px solid var(--color);border-radius:999px;font-family:var(--font-sans);font-size:13px;font-weight:500;box-shadow:0 6px 20px rgba(0,0,0,.15);cursor:pointer;outline:0}.sidebar-toggle:hover{background:var(--primary-hover-bg)}.sidebar-toggle:focus,.sidebar-toggle:focus-visible{outline:0;box-shadow:0 6px 20px rgba(0,0,0,.15)}@media (max-width:991px){.sidebar-toggle{display:inline-flex}.leftCol{position:fixed;top:0;left:0;bottom:0;width:min(86vw,340px);max-width:340px;z-index:1200;border:none;border-right:1px solid var(--border-color);transform:translateX(0);transition:transform .22s ease;box-shadow:4px 0 24px rgba(0,0,0,.18);background:var(--sidebar-bg-color)}.leftCol.collapsed{transform:translateX(-105%);box-shadow:none;pointer-events:none}.leftCol-head{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;border-bottom:1px solid var(--border-color);background:var(--paper-bg-alt)}.leftCol-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted)}.leftCol-close{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;background:0 0;border:1px solid var(--border-color);border-radius:8px;color:var(--ink-muted);cursor:pointer}.leftCol-close:hover{color:var(--color);border-color:var(--color)}.leftCol-foot{display:block}.leftCol-body{padding:4px 0}.leftCol-backdrop{display:block;position:fixed;inset:0;background:rgba(0,0,0,.32);z-index:1150;backdrop-filter:blur(2px)}.dark-mode .leftCol-backdrop{background:rgba(0,0,0,.5)}}.admin-nav{display:flex;gap:4px;padding:4px;margin:8px 0 20px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;flex-wrap:wrap}.admin-nav a{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;border-radius:7px;color:var(--ink-muted);text-decoration:none;font-family:var(--font-mono);font-size:12px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;transition:background-color .15s,color .15s;white-space:nowrap}.admin-nav a:hover{background:var(--paper-bg-alt);color:var(--color)}.admin-nav a.active{background:var(--color);color:var(--paper-card)}.admin-nav a i{font-size:12px;width:14px;text-align:center}@media (max-width:767px){.admin-nav{flex-direction:column}.admin-nav a{justify-content:flex-start}}.admin-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px;margin-bottom:16px}.admin-stat-card{background:var(--paper-card);border:1px solid var(--border-color);border-radius:8px;padding:10px 12px}.admin-stat-card .stat-value{font-family:var(--font-serif);font-size:1.375rem;font-weight:400;line-height:1.1;color:var(--color)}.admin-stat-card .stat-label{font-family:var(--font-mono);font-size:10px;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;margin-top:4px}.admin-toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:16px 0 12px}.admin-toolbar .form-control{max-width:320px}@media (max-width:767px){.admin-toolbar .form-control{max-width:100%;width:100%}}.pagination-compact{display:inline-flex;align-items:center;gap:6px;flex-wrap:nowrap;font-family:var(--font-mono);font-size:12px;color:var(--ink-muted)}.pagination-compact input{width:60px;text-align:center;flex-shrink:0}.pagination-compact .btn{padding:4px 10px;min-height:34px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color);flex-shrink:0}.pagination-compact>span{white-space:nowrap}.admin-list-item{display:flex;align-items:flex-start;gap:12px;padding:12px 0;border-bottom:1px solid var(--border-color)}.admin-list-item:last-child{border-bottom:none}.admin-list-item .item-main{flex:1;min-width:0}.admin-list-item .item-title{font-size:1rem;font-weight:600;margin-bottom:4px;word-break:break-word}.admin-list-item .item-meta{font-size:.875rem;opacity:.8}.admin-list-item .item-meta span{margin-right:12px;display:inline-block;margin-bottom:2px}.admin-list-item .item-actions{flex-shrink:0}@media (max-width:767px){.admin-list-item{flex-direction:column;gap:8px}.admin-list-item .item-actions{align-self:flex-start}}.status-badge{display:inline-block;font-size:11px;font-weight:600;padding:2px 8px;border-radius:10px;text-transform:uppercase;letter-spacing:.3px;vertical-align:middle}.status-badge{font-family:var(--font-sans);font-weight:500;letter-spacing:.02em;border:1px solid transparent;text-transform:none;font-size:12px;padding:1px 9px 2px;border-radius:999px}.status-badge.status-ready{background:#e8f3ec;color:#2f7a44;border-color:#cfe6d6}.status-badge.status-error{background:#fbe7e7;color:#b42318;border-color:#f3c7c7}.status-badge.status-download,.status-badge.status-preparing{background:#eef0ff;color:#3b4ad6;border-color:#d4d8fa}.status-badge.status-expired,.status-badge.status-expiring,.status-badge.status-removed,.status-badge.status-removing{background:var(--paper-bg-alt);color:var(--ink-muted);border-color:var(--border-color)}.status-badge.status-active{background:#e8f3ec;color:#2f7a44;border-color:#cfe6d6}.queue-job-card{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:16px 18px;margin-bottom:10px}.queue-job-card .job-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;flex-wrap:wrap;gap:8px}.queue-job-card .job-id{font-family:var(--font-mono);font-size:.9375rem;color:var(--color);word-break:break-all;display:flex;align-items:center;gap:10px}.queue-job-card .job-timestamps{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);display:flex;flex-wrap:wrap;gap:14px}.queue-job-card .job-actions{display:flex;gap:8px;margin-top:10px}.queue-job-card .job-actions .btn{font-size:12px;padding:4px 12px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color)}.admin-section-header{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:24px 0 12px;padding-bottom:8px;border-bottom:1px solid var(--border-color)}.admin-section-header h2{margin:0;font-family:var(--font-mono);font-size:11px;font-weight:500;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em}.admin-section-header h2 i{margin-right:6px;color:var(--ink-muted)}.admin-section-header .section-count{background:var(--paper-bg-alt);color:var(--ink-muted);border:1px solid var(--border-color);font-family:var(--font-mono);font-size:11px;padding:1px 10px;border-radius:999px}.user-detail-card{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:22px;margin-bottom:24px}.user-detail-card .user-header{display:flex;align-items:center;gap:16px;margin-bottom:18px;padding-bottom:16px;border-bottom:1px solid var(--border-color);flex-wrap:wrap}.user-detail-card .user-header img{border-radius:50%}.user-detail-card .user-header h2{margin:0;font-family:var(--font-serif);font-weight:400;font-size:1.5rem;display:flex;align-items:center;gap:10px;flex-wrap:wrap}.user-detail-grid{display:grid;grid-template-columns:160px 1fr;gap:10px 20px;font-size:.9375rem}.user-detail-grid .detail-label{font-family:var(--font-mono);font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);white-space:nowrap;padding-top:2px}.user-detail-grid .detail-value{word-break:break-all;color:var(--color)}@media (max-width:767px){.user-detail-grid{grid-template-columns:1fr}.user-detail-grid .detail-label{margin-top:8px;border-top:1px solid var(--border-color);padding-top:8px}.user-detail-grid .detail-label:first-child{border-top:none;margin-top:0;padding-top:0}}.paper-empty{min-height:calc(100vh - 60px);display:flex;align-items:center;justify-content:center;padding:40px 24px}.paper-empty-inner{max-width:560px;text-align:left}.paper-empty-title{font-family:var(--font-serif);font-weight:400;font-size:clamp(2.4rem,6vw,4.4rem);line-height:1.02;letter-spacing:-.025em;margin:18px 0 20px;color:var(--color)}.paper-empty-title em{color:var(--accent);font-style:italic}.paper-empty-lede{font-size:18px;line-height:1.55;color:var(--ink-soft);text-wrap:pretty}.paper-empty-cta{display:flex;gap:10px;margin-top:28px;flex-wrap:wrap}.paper-page{max-width:1100px;margin:0 auto;padding:32px 32px 80px}@media (max-width:991px){.paper-page,.paper-page.container,.paper-page.container-fluid{padding:20px 18px 60px!important}.paper-page .row{margin-left:0;margin-right:0}.paper-page .row>.w-100,.paper-page .row>[class*=col]{padding-left:0;padding-right:0}.navbar.navbar-expand-lg{padding:10px 18px!important}.navbar .navbar-collapse{margin:10px -18px 0;padding:12px 18px 16px;border-top:1px solid var(--border-color);background:var(--header-bg-color)}.navbar .navbar-nav{align-items:stretch!important;gap:2px}.navbar .navbar-nav .nav-item,.navbar .navbar-nav .nav-link{width:100%}.navbar .nav-link{display:flex!important;align-items:center;justify-content:flex-start;margin:0!important;padding:12px 4px!important;border-bottom:1px solid var(--border-color)!important;border-radius:0;font-size:14px;line-height:1.2;gap:0;min-height:44px;box-sizing:border-box}.navbar .nav-link:not(.btn-signin):not(.user-chip){color:var(--color)!important}.navbar .nav-link .fa,.navbar .nav-link .fab,.navbar .nav-link .fas,.navbar .nav-link i{display:inline-flex!important;align-items:center;justify-content:center;width:28px;flex-shrink:0;font-size:16px;line-height:1;margin:0 10px 0 0!important}.navbar .navbar-nav .nav-item:last-child .nav-link,.navbar .navbar-nav>.nav-link:last-child{border-bottom-color:transparent!important}.navbar .nav-link.active{color:var(--color)!important;border-bottom-color:var(--border-color)!important}.navbar .nav-item>.nav-link:not(.btn-signin):not(.user-chip)::before{content:'';display:inline-block;width:28px;margin-right:10px;flex-shrink:0}.navbar .nav-link.nav-icon::before,.navbar .nav-link:has(>i)::before{display:none!important}.navbar .nav-link.nav-icon{width:100%!important;height:auto!important;justify-content:flex-start!important;padding:12px 4px!important}.navbar .nav-link.nav-icon::after{content:attr(title);font-family:var(--font-sans);font-size:14px;color:var(--color)}.navbar .btn-signin{display:inline-flex!important;width:auto!important;align-self:flex-start;justify-content:center;height:40px;padding:0 18px!important;margin:14px 0 0!important;border-radius:8px;border-bottom:none!important}.navbar .btn-signin i{margin:0 8px 0 0!important;width:auto!important}.navbar .user-chip-wrap{width:100%}.navbar .user-chip{display:flex!important;width:100%;margin:0!important;padding:10px 4px!important;background:0 0!important;border:none!important;border-bottom:1px solid var(--border-color)!important;border-radius:0!important;justify-content:flex-start;gap:0;min-height:44px}.navbar .user-chip::before{display:none!important}.navbar .user-chip img{width:28px!important;height:28px!important;margin-right:10px!important;flex-shrink:0}.navbar .user-chip .user-chip-name{font-size:14px;font-weight:500;color:var(--color)!important}.navbar .user-chip.dropdown-toggle::after{margin-left:auto;color:var(--ink-muted)}.navbar .user-chip-wrap .dropdown-menu{position:static!important;float:none;width:100%;margin:0!important;padding:0!important;background:0 0!important;border:none!important;box-shadow:none!important;transform:none!important}.navbar .user-chip-wrap .dropdown-menu .dropdown-item{padding:10px 4px 10px 42px!important;font-size:14px;color:var(--ink-muted)!important;background:0 0!important;border-bottom:1px solid var(--border-color);text-align:left!important}.navbar .user-chip-wrap .dropdown-menu .dropdown-item:last-child{border-bottom:none}.navbar .user-chip-wrap .dropdown-divider{display:none}.navbar-brand{border-right:none!important;padding-right:0!important;margin-right:0!important}.dark-mode .navbar .navbar-collapse{background:var(--header-bg-color);border-top-color:var(--border-color)}.dark-mode .navbar .nav-link{border-bottom-color:var(--border-color)!important}.dark-mode .navbar-toggler .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='%23f5f5f5' stroke-width='2' stroke-linecap='round' d='M4 8h22M4 15h22M4 22h22'/%3E%3C/svg%3E")!important}}.status-pill{display:inline-flex;align-items:center;gap:8px;padding:6px 12px;border-radius:999px;background:var(--paper-bg-alt);border:1px solid var(--border-color);color:var(--ink-soft);font-family:var(--font-mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase}.paper-progress{position:relative;height:auto;background:0 0;margin:18px 0 8px}.paper-progress::before{content:"";display:block;height:8px;background:var(--paper-bg-alt);border-radius:999px}.paper-progress .paper-progress-bar{position:absolute;top:0;left:0;height:8px;background:var(--color);border-radius:999px;transition:width .4s ease;min-width:4px}.paper-progress .paper-progress-label{display:flex;justify-content:space-between;align-items:center;margin-top:10px;font-family:var(--font-mono);font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-muted)}.paper-progress .paper-progress-pct{color:var(--color)}.paper-progress.paper-progress-ready .paper-progress-bar{background:var(--color)}.paper-error-card{margin-top:18px;padding:20px 22px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-left:3px solid #c53030;border-radius:10px;color:var(--color)}.dark-mode .paper-error-card{border-left-color:#ff8b7b}.paper-ratelimit-card{margin-top:18px;padding:20px 22px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-left:3px solid #d69e2e;border-radius:10px;color:var(--color)}.dark-mode .paper-ratelimit-card{border-left-color:#f6e05e}.paper-ratelimit-head{display:flex;align-items:flex-start;gap:14px}.paper-ratelimit-head>i{font-size:18px;color:#d69e2e;margin-top:4px;flex-shrink:0}.dark-mode .paper-ratelimit-head>i{color:#f6e05e}.paper-ratelimit-card strong{color:var(--color)}.status-pill-ratelimit{border-color:#d69e2e;color:#d69e2e}.dark-mode .status-pill-ratelimit{border-color:#f6e05e;color:#f6e05e}.status-ratelimit{background:#d69e2e}.dark-mode .status-ratelimit{background:#f6e05e}.paper-error-head{display:flex;align-items:flex-start;gap:14px}.paper-error-head>i{font-size:18px;color:#c53030;margin-top:4px;flex-shrink:0}.dark-mode .paper-error-head>i{color:#ff8b7b}.paper-error-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted)}.paper-error-title{font-family:var(--font-serif);font-size:1.375rem;line-height:1.2;margin-top:2px;color:var(--color)}.paper-error-msg{margin:12px 0 0;font-size:14px;line-height:1.55;color:var(--ink-soft);font-family:var(--font-mono);word-break:break-word;white-space:pre-wrap}.paper-error-hints{margin:14px 0 0;padding-left:18px;color:var(--ink-soft);font-size:14px;line-height:1.6}.paper-error-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:18px}.paper-detail-grid{display:grid;grid-template-columns:160px 1fr;gap:10px 20px;margin-top:18px;font-size:.9375rem}.paper-detail-grid .detail-label{font-family:var(--font-mono);font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);white-space:nowrap;padding-top:2px}.paper-detail-grid .detail-value{word-break:break-all;color:var(--color)}.paper-detail-grid .detail-value a{color:var(--color);border-bottom:1px solid var(--border-color)}.paper-detail-grid .detail-value a:hover{border-bottom-color:var(--color)}@media (max-width:700px){.paper-detail-grid{grid-template-columns:1fr;gap:4px 0}.paper-detail-grid .detail-label{padding-top:8px}}.paper-support-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px;margin:18px 0 28px}.paper-support-card{display:flex;flex-direction:column;gap:10px;padding:20px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;color:var(--color);text-decoration:none;transition:border-color .15s ease,transform .15s ease}.paper-support-card:hover{border-color:var(--color);text-decoration:none;color:var(--color)}.paper-support-card .paper-support-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);display:flex;align-items:center;gap:8px}.paper-support-card p{margin:0;font-size:14px;line-height:1.55;color:var(--ink-soft)}.paper-support-card .paper-support-cta{margin-top:auto;font-size:13px;font-weight:500;color:var(--color);display:inline-flex;align-items:center;gap:6px}.paper-support-card:hover .paper-support-cta i{transform:translateX(2px)}.paper-support-card .paper-support-cta i{transition:transform .15s ease}.pr-page{min-height:100%;background:var(--canvas-bg-color)}.pr-page-inner{padding-top:24px;padding-bottom:60px}.pr-header{margin:6px 0 18px}.pr-title{margin:4px 0 10px;font-size:clamp(1.6rem,3vw,2.4rem);line-height:1.15;word-break:break-word}.pr-header-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;font-family:var(--font-mono);font-size:12px;color:var(--ink-muted)}.pr-header-meta .pr-meta-item{display:inline-flex;align-items:center;gap:6px}.pr-header-meta .pr-meta-item i{color:var(--ink-muted)}.pr-body-card{margin:18px 0 24px;padding:20px 22px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px}.pr-body-card .paper-section-eyebrow{margin-bottom:12px}.paper-tabs{display:flex;flex-wrap:wrap;gap:0;border-bottom:1px solid var(--border-color);margin:18px 0 0}.paper-tabs .paper-tab{display:inline-flex;align-items:center;gap:8px;padding:10px 16px;background:0 0;border:0;border-bottom:2px solid transparent;font-family:var(--font-sans);font-size:14px;font-weight:500;color:var(--ink-muted);cursor:pointer;transition:color .15s ease,border-color .15s ease;margin-bottom:-1px}.paper-tabs .paper-tab:hover{color:var(--color)}.paper-tabs .paper-tab.active{color:var(--color);border-bottom-color:var(--color)}.paper-tabs .paper-tab i{color:inherit;opacity:.85}.paper-tabs .paper-tab:active,.paper-tabs .paper-tab:focus,.paper-tabs .paper-tab:focus-visible{outline:0;box-shadow:none}.paper-tabs .paper-tab:focus-visible{color:var(--color);background:var(--hover-bg-color);border-radius:6px 6px 0 0}.pr-diff{margin:16px 0 28px;display:flex;flex-direction:column;gap:16px}.diff-file-block{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;overflow:hidden}.diff-file-header{display:flex;align-items:center;gap:10px;padding:10px 14px;background:var(--paper-bg-alt);border-bottom:1px solid var(--border-color);font-family:var(--font-mono);font-size:13px;color:var(--color)}.diff-file-icon{color:var(--ink-muted);flex-shrink:0}.diff-file-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-break:break-all}.diff-file-status{flex-shrink:0;padding:2px 8px;border-radius:999px;font-size:10px;letter-spacing:.12em;text-transform:uppercase;border:1px solid var(--border-color);color:var(--ink-muted);background:var(--paper-card)}.diff-file-status-added{color:#2f6b3e;border-color:rgba(47,107,62,.35);background:rgba(47,107,62,.08)}.diff-file-status-deleted{color:#a13a2e;border-color:rgba(161,58,46,.35);background:rgba(161,58,46,.08)}.diff-file-status-renamed{color:#8a6b1e;border-color:rgba(138,107,30,.35);background:rgba(138,107,30,.08)}.dark-mode .diff-file-status-added{color:#a7e2a7;border-color:rgba(167,226,167,.35);background:rgba(167,226,167,.08)}.dark-mode .diff-file-status-deleted{color:#ff8b7b;border-color:rgba(255,139,123,.35);background:rgba(255,139,123,.08)}.dark-mode .diff-file-status-renamed{color:#ffd37a;border-color:rgba(255,211,122,.35);background:rgba(255,211,122,.08)}.diff-file-table{width:100%;border-collapse:collapse;font-family:var(--font-mono);font-size:13px;line-height:1.55;table-layout:fixed}.diff-file-table tr.diff-row{vertical-align:top}.diff-file-table .diff-gutter{width:48px;padding:0 10px;text-align:right;color:var(--ink-muted);background:var(--paper-bg-alt);border-right:1px solid var(--border-color);user-select:none;font-variant-numeric:tabular-nums;vertical-align:top;white-space:nowrap}.diff-file-table .diff-gutter-new{border-right:1px solid var(--border-color)}.diff-file-table .diff-sign{width:18px;padding:0 6px;text-align:center;color:var(--ink-muted);background:var(--paper-bg-alt);user-select:none;vertical-align:top}.diff-file-table .diff-code{padding:1px 12px;white-space:pre-wrap;word-break:break-word;color:var(--color)}.diff-row-hunk td{background:var(--paper-bg-alt)!important;color:var(--ink-muted);border-top:1px solid var(--border-color);border-bottom:1px solid var(--border-color);font-size:12px;letter-spacing:.02em;padding-top:6px;padding-bottom:6px}.diff-row-hunk .diff-code{color:var(--ink-muted)}.diff-row-add .diff-code{background:rgba(47,107,62,.1);color:#1f4a2a}.diff-row-add .diff-gutter,.diff-row-add .diff-sign{background:rgba(47,107,62,.06);color:#2f6b3e}.diff-row-remove .diff-code{background:rgba(161,58,46,.1);color:#6e1f1a}.diff-row-remove .diff-gutter,.diff-row-remove .diff-sign{background:rgba(161,58,46,.06);color:#a13a2e}.dark-mode .diff-row-add .diff-code{background:rgba(167,226,167,.1);color:#c9f0c9}.dark-mode .diff-row-add .diff-gutter,.dark-mode .diff-row-add .diff-sign{background:rgba(167,226,167,.06);color:#a7e2a7}.dark-mode .diff-row-remove .diff-code{background:rgba(255,139,123,.1);color:#ffc9c0}.dark-mode .diff-row-remove .diff-gutter,.dark-mode .diff-row-remove .diff-sign{background:rgba(255,139,123,.06);color:#ff8b7b}@media (max-width:700px){.diff-file-table{font-size:12px}.diff-file-table .diff-gutter{width:36px;padding:0 6px}.diff-file-table .diff-sign{width:14px;padding:0 4px}.diff-file-table .diff-code{padding:1px 8px}}.pr-comments{list-style:none;margin:16px 0 28px;padding:0;display:flex;flex-direction:column;gap:12px}.pr-comment{padding:16px 18px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px}.pr-comment-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;flex-wrap:wrap;padding-bottom:8px;margin-bottom:8px;border-bottom:1px solid var(--border-color)}.pr-comment-author{font-weight:600;color:var(--color);font-size:14px;display:inline-flex;align-items:center;gap:6px}.pr-comment-author i{color:var(--ink-muted);font-size:12px}.pr-comment-date{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);letter-spacing:.02em}.pr-comment-body{color:var(--color);font-size:14px;line-height:1.6}.pr-comment-body :last-child{margin-bottom:0}@media (max-width:700px){.pr-page-inner{padding-top:14px;padding-bottom:40px}.pr-body-card{padding:14px 14px;border-radius:8px}.pr-comment{padding:12px 14px}.paper-tabs .paper-tab{padding:10px 12px;font-size:13px}.pr-diff pre{font-size:12px;padding:12px}}.toast{background-color:var(--paper-card)!important;color:var(--color)!important;border:1px solid var(--border-color)!important;border-radius:10px!important;box-shadow:0 8px 24px rgba(0,0,0,.08);backdrop-filter:none;min-width:280px;max-width:calc(100vw - 24px)}.toast .toast-header{background:0 0!important;color:var(--color)!important;border-bottom:1px solid var(--border-color)!important;font-family:var(--font-sans);padding:10px 12px}.toast .toast-header strong{font-weight:600;color:var(--color);letter-spacing:.01em}.toast .toast-header .close{color:var(--ink-muted)!important;text-shadow:none;opacity:.9;font-size:1.25rem}.toast .toast-header .close:hover{color:var(--color)!important;opacity:1}.toast .toast-body{color:var(--color)!important;padding:12px;font-size:14px;line-height:1.45}.dark-mode .toast{box-shadow:0 8px 24px rgba(0,0,0,.5)}.paper-crumbs{font-family:var(--font-sans);font-size:12px;color:var(--ink-muted);letter-spacing:0}.paper-crumbs .here,.paper-crumbs a{color:var(--color);text-decoration:none}.paper-page-title{font-family:var(--font-sans);font-weight:600;font-size:32px;line-height:1.2;letter-spacing:-.035em;margin:8px 0 6px;color:var(--color)}.paper-page-title em{color:inherit;font-style:normal}.paper-page-lede{color:var(--ink-soft);font-size:16px;max-width:640px;line-height:1.55}.paper-meta-rule{display:flex;flex-wrap:wrap;gap:16px 24px;align-items:center;margin:22px 0 18px;padding:12px 0;border-top:1px solid var(--border-color);border-bottom:1px solid var(--border-color);font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);letter-spacing:.02em}.paper-meta-rule b{color:var(--color);font-weight:500}.paper-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:10px;padding:20px 22px}.dark-mode .paper-card{background:var(--admin-stat-bg)}.paper-section-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);font-weight:500;margin-bottom:10px;display:block}.paper-section-title{font-family:var(--font-serif);font-weight:400;font-size:22px;letter-spacing:-.01em;margin:0 0 8px}.paper-kbd{display:inline-block;font-family:var(--font-mono);font-size:11px;padding:1px 6px;border:1px solid var(--border-color);border-bottom-width:2px;border-radius:3px;background:var(--paper-card,#fff);color:var(--color)}.paper-pill{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-mono);font-size:11px;padding:2px 8px;border:1px solid var(--border-color);border-radius:999px;color:var(--ink-soft);background:var(--paper-card,#fff);letter-spacing:.04em}.paper-pill.accent{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.paper-pill.good{border-color:#2f6b3e;color:#2f6b3e}.paper-pill.warn{border-color:#8a6b1e;color:#8a6b1e}.paper-pill.bad{border-color:#a13a2e;color:#a13a2e}.paper-row{display:grid;grid-template-columns:1fr auto;gap:16px;align-items:start;padding:18px 0;border-bottom:1px solid var(--border-color)}.paper-row:first-child{border-top:1px solid var(--border-color)}.paper-row .row-title{font-family:var(--font-serif);font-size:20px;letter-spacing:-.01em;line-height:1.2}.paper-row .row-title a{color:var(--color)}.paper-row .row-meta{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.03em;margin-top:6px;display:flex;flex-wrap:wrap;gap:14px}.paper-row .row-actions{display:flex;gap:6px;flex-shrink:0}.paper-form-step{display:grid;grid-template-columns:48px 1fr;gap:20px;padding:22px 0;border-bottom:1px solid var(--border-color)}.paper-form-step:first-child{border-top:1px solid var(--border-color)}.paper-form-step .step-num{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);padding-top:4px;letter-spacing:.02em}.paper-form-step .step-title{font-family:var(--font-serif);font-size:22px;letter-spacing:-.01em;line-height:1.2;margin-bottom:4px}.paper-form-step .step-sub{color:var(--ink-soft);font-size:14px;margin-bottom:14px;text-wrap:pretty}.paper-field-label{font-family:var(--font-sans);font-size:13px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--color);margin-bottom:6px;display:block}.paper-switch-row{display:flex;align-items:center;justify-content:space-between;padding:10px 0;gap:16px}.paper-switch-row+.paper-switch-row{border-top:1px dashed var(--border-soft)}.paper-switch-row .sw-label{font-weight:500}.paper-switch-row .sw-sub{display:block;font-size:13px;color:var(--ink-muted);margin-top:2px}.paper-page .custom-select,.paper-page .form-control{border-radius:6px;border-color:var(--border-color);font-size:14px;padding:8px 12px;height:auto;background:var(--input-bg);color:var(--input-color)}.paper-page .custom-select:focus,.paper-page .form-control:focus{color:var(--input-color);background:var(--input-bg);border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}.custom-select:focus,.form-control:focus,input:focus,select:focus,textarea:focus{color:var(--input-color)!important;background-color:var(--input-bg)!important}.form-control::selection,input::selection,textarea::selection{background:var(--accent-soft);color:var(--input-color)}.dark-mode .form-control::selection,.dark-mode input::selection,.dark-mode textarea::selection{background:rgba(167,178,255,.3);color:var(--input-color)}.btn.btn-ink{background:var(--color);color:var(--canvas-bg-color);border:1px solid var(--color);font-weight:500;border-radius:6px;padding:8px 14px}.btn.btn-ink:hover{background:var(--primary-hover-bg);color:var(--canvas-bg-color);border-color:var(--primary-hover-bg)}.btn.btn-accent{background:var(--accent);color:#fff;border:1px solid var(--accent);font-weight:500;border-radius:6px}.btn.btn-accent:hover{background:#2e3bb8;border-color:#2e3bb8;color:#fff}.paper-page .dashboard-filter-row{display:flex;align-items:center;gap:10px;padding:14px 0;border-top:1px solid var(--border-color);border-bottom:1px solid var(--border-color);margin:18px 0 0;flex-wrap:wrap}.paper-page .dashboard-filter-row .form-control{height:38px;background:var(--paper-card)}.paper-page .dashboard-filter-controls{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.paper-page .dashboard-filter-row .btn-group .btn,.paper-page .dashboard-filter-row .dropdown-toggle{background:var(--paper-card);border:1px solid var(--border-color);color:var(--color);height:38px;padding:0 14px;font-size:14px;font-weight:500;border-radius:var(--radius-control,6px);display:inline-flex;align-items:center;gap:6px;line-height:1}.paper-page .dashboard-filter-row .dropdown-toggle .filter-btn-label{color:var(--ink-muted);font-weight:500}.paper-page .dashboard-filter-row .dropdown-toggle .filter-btn-label::after{content:"·";margin-left:6px;color:var(--ink-faint)}.paper-page .dashboard-filter-row .dropdown-toggle .filter-btn-value{font-weight:500}.paper-page .dashboard-filter-row .dropdown-toggle .fas{font-size:11px;color:var(--ink-muted)}.paper-page .dashboard-filter-row .btn-group .btn:hover,.paper-page .dashboard-filter-row .dropdown-toggle:hover{background:var(--hover-bg-color);border-color:var(--border-color);color:var(--color)}.paper-page .dashboard-filter-row .btn-group{gap:0}.paper-page .dashboard-filter-row .btn-group .btn{border-radius:0;border-right-width:0}.paper-page .dashboard-filter-row .btn-group .btn:first-child{border-top-left-radius:6px;border-bottom-left-radius:6px}.paper-page .dashboard-filter-row .btn-group .btn:last-child{border-top-right-radius:6px;border-bottom-right-radius:6px;border-right-width:1px}.paper-page .dashboard-filter-row .btn-group .btn.btn-primary{background:var(--color);color:var(--canvas-bg-color);border-color:var(--color)}.paper-page .dashboard-filter-row .search-wrap{flex:1 1 280px;min-width:220px}.paper-page .quota-row{display:grid;grid-template-columns:repeat(3,1fr);gap:40px;margin:24px 0 0;padding:0;background:0 0;border:none;border-radius:0}.paper-page .quota-label{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);opacity:1}.paper-page .quota-value{font-family:var(--font-mono);font-size:13px;font-variant-numeric:tabular-nums;color:var(--color)}.paper-page .quota-value .quota-unlimited-tag{font-family:var(--font-sans);font-size:12px;color:var(--ink-muted);margin-left:4px}.paper-page .quota-track{height:6px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:999px;overflow:hidden;width:100%;min-width:0}.paper-page .quota-track .quota-fill{height:100%;min-width:2px;border-radius:999px;background:var(--color);transition:width .3s ease}.paper-page .quota-track.quota-warn .quota-fill{background:var(--status-progress)}.paper-page .quota-track.quota-danger .quota-fill{background:var(--status-error)}.paper-page .quota-track.quota-unlimited{background:repeating-linear-gradient(-45deg,var(--paper-bg-alt) 0 4px,var(--border-soft,var(--border-color)) 4px 6px)}.paper-page .repo-list{margin-top:8px}.paper-page .repo-list-item{padding:20px 0;gap:16px;border-bottom:1px solid var(--border-soft,var(--border-color))}.paper-page .repo-list-item:first-child{border-top:none}.paper-page .repo-list-item-header{gap:10px;margin-bottom:6px}.paper-page .repo-name{font-family:var(--font-mono);font-size:15px;color:var(--color)}.paper-page .repo-source{font-size:13px;color:var(--ink-soft);opacity:1;gap:10px}.paper-page .repo-source a{color:var(--ink-soft);border-bottom:1px dotted var(--border-color)}.paper-page .repo-source a:hover{color:var(--color)}.paper-page .repo-meta{font-family:var(--font-mono);font-size:12px;color:var(--ink-muted);opacity:1;gap:16px;margin-top:10px}.paper-page .type-badge{font-family:var(--font-mono);font-size:11px;padding:3px 8px;letter-spacing:.1em}.paper-page .repo-list-item-actions .dropdown-toggle{background:var(--paper-card);border:1px solid var(--border-color);color:var(--color);border-radius:6px;font-size:13px;padding:6px 12px;height:auto}.paper-settings{max-width:1180px;margin:0 auto;padding:48px 32px 80px}.paper-settings .paper-page-title{max-width:14em}.paper-settings-body{display:grid;grid-template-columns:220px 1fr;gap:60px;margin-top:32px;border-top:1px solid var(--border-color);padding-top:28px}.paper-settings-toc{position:sticky;top:32px;align-self:start}.paper-settings-toc-head{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);margin-bottom:12px}.paper-settings-toc nav{display:flex;flex-direction:column;gap:2px}.paper-settings-toc nav a{padding:8px 0 8px 14px;border-left:2px solid transparent;color:var(--ink-soft);font-size:14px;text-decoration:none}.paper-settings-toc nav a.active,.paper-settings-toc nav a:hover{color:var(--color);border-left-color:var(--color)}.paper-settings-main{min-width:0;max-width:720px}.paper-settings-section{padding:28px 0;border-bottom:1px solid var(--border-soft,var(--border-color))}.paper-settings-section:first-child{padding-top:0}.paper-settings-section:last-of-type{border-bottom:none}.paper-settings-section .form-group{margin-bottom:18px}.paper-settings-section .form-check{padding:10px 0 10px 28px;border-bottom:1px solid var(--border-soft,var(--border-color))}.paper-settings-section .form-check:last-child{border-bottom:none}.paper-settings-section .form-check-label{font-family:var(--font-sans);font-size:14px;font-weight:500;color:var(--color);cursor:pointer}.paper-settings-section .form-check-input{cursor:pointer;width:16px;height:16px;margin-top:3px;margin-left:-28px;accent-color:var(--color)}.paper-settings-section .form-text{color:var(--ink-soft);font-size:13px;margin-top:4px;max-width:48em}.paper-settings-section .paper-section-copy{margin:-4px 0 14px}.paper-settings-footer{padding-top:24px;display:flex;flex-direction:column;gap:14px}.paper-settings-footer .btn-ink{align-self:flex-start}.paper-settings-actions{display:flex;align-items:center;flex-wrap:wrap;gap:14px}.paper-settings-hint{font-size:13px;color:var(--ink-muted)}.paper-inline-alert{display:flex;align-items:flex-start;gap:8px;padding:10px 12px;border-radius:var(--radius-control,6px);border:1px solid var(--border-color);background:var(--paper-bg-alt);font-size:13px;color:var(--color)}.paper-inline-alert i{margin-top:2px;color:var(--ink-muted)}.paper-inline-alert-error{border-color:var(--status-error);background:var(--status-error-soft)}.paper-inline-alert-error i{color:var(--status-error)}.paper-account-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border:1px solid var(--border-color);border-radius:var(--radius-surface,10px);background:var(--paper-card);margin-bottom:20px}.paper-account-card img{flex-shrink:0}.paper-account-identity{flex:1 1 auto;min-width:0}.paper-account-name{font-family:var(--font-mono);font-size:14px;font-weight:500;color:var(--color)}.paper-account-meta{font-size:13px;color:var(--ink-muted);margin-top:2px}.paper-danger-zone{padding:16px;border:1px solid var(--status-error);border-radius:var(--radius-surface,10px);background:var(--status-error-soft)}.paper-danger-head{font-weight:600;font-size:14px;color:var(--status-error);margin-bottom:6px}.paper-danger-copy{font-size:13px;color:var(--ink-soft);max-width:52em;margin-bottom:12px}.paper-danger-zone .paper-inline-alert{margin-bottom:12px}.btn.btn-outline-danger{background:0 0;color:var(--status-error);border:1px solid var(--status-error);font-weight:500;border-radius:var(--radius-control,6px);padding:8px 14px}.btn.btn-outline-danger:hover{background:var(--status-error);color:#fff;border-color:var(--status-error)}.navbar .user-menu{min-width:260px}.navbar .user-menu .dropdown-item{display:flex;align-items:flex-start;gap:10px;padding:8px 10px!important}.navbar .user-menu .dropdown-item i{width:16px;margin-top:3px;font-size:13px;color:var(--ink-muted);text-align:center}.navbar .user-menu .dropdown-item span{display:flex;flex-direction:column;line-height:1.3}.navbar .user-menu .dropdown-item small{font-size:12px;color:var(--ink-muted)}.navbar .user-menu .dropdown-header{font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-muted);padding:8px 10px 6px}.paper-field-label{font-family:var(--font-sans);font-size:13px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--color);margin-bottom:6px;display:block}@media (max-width:900px){.paper-settings-body{grid-template-columns:1fr;gap:24px}.paper-settings-toc{position:static}.paper-settings-toc nav{flex-direction:row;flex-wrap:wrap;gap:8px}.paper-settings-toc nav a{border-left:none;border-bottom:2px solid transparent;padding:4px 0}.paper-settings-toc nav a.active,.paper-settings-toc nav a:hover{border-bottom-color:var(--color);border-left:none}}.paper-table{display:block;margin-top:20px;background:0 0;border:none;border-top:1px solid var(--border-color);border-radius:0;overflow:visible}.paper-table .paper-table-head,.paper-table .paper-table-row{display:grid;grid-template-columns:minmax(280px,2.4fr) minmax(140px,1fr) 140px 90px 140px 52px;align-items:center;gap:18px;padding:12px 4px}.paper-table.paper-table-conferences .paper-table-head,.paper-table.paper-table-conferences .paper-table-row{grid-template-columns:minmax(280px,2.4fr) 140px 90px 220px 52px}.paper-table.paper-table-repos .paper-table-head,.paper-table.paper-table-repos .paper-table-row{grid-template-columns:minmax(280px,2.4fr) minmax(140px,1fr) 90px 140px 52px}.paper-table.paper-table-repos.has-bulk .paper-table-head,.paper-table.paper-table-repos.has-bulk .paper-table-row{grid-template-columns:28px minmax(280px,2.4fr) minmax(140px,1fr) 90px 140px 52px;gap:12px}.paper-table .admin-users-row{grid-template-columns:28px minmax(280px,2.4fr) 90px 120px 100px 52px!important;gap:12px!important}.paper-table.paper-table-dashboard .paper-table-head,.paper-table.paper-table-dashboard .paper-table-row{grid-template-columns:minmax(320px,3fr) 190px 90px 170px 52px;gap:20px;padding:8px 4px}.paper-table.paper-table-dashboard .cell-anon .anon-text{gap:2px}.paper-table.paper-table-dashboard .cell-anon .repo-name{padding:0}.paper-table .paper-table-head{background:0 0;border-bottom:1px solid var(--border-color);font-family:var(--font-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-muted);padding-top:8px;padding-bottom:8px}.paper-table .paper-table-head .sortable{cursor:pointer;user-select:none;display:inline-flex;align-items:center;gap:6px;background:0 0;border:none;padding:2px 0;margin:0;font:inherit;letter-spacing:inherit;text-transform:inherit;color:inherit;border-radius:4px}.paper-table .paper-table-head .sortable:hover{color:var(--color)}.paper-table .paper-table-head .sortable.active{color:var(--color)}.paper-table .paper-table-head .sortable i{font-size:10px}.paper-table .paper-table-head .num,.paper-table .paper-table-row .num{text-align:right}.paper-table .paper-table-head .num .sortable{flex-direction:row-reverse}.paper-table .paper-table-row{border-top:1px solid var(--border-soft,var(--border-color));font-size:14px;transition:background-color .12s ease}.paper-table .paper-table-row:hover{background:var(--hover-bg-color)}.paper-table .paper-table-row.row-clickable{cursor:pointer}.paper-table .paper-table-row.repo-inactive>:not(.cell-actions){opacity:.55}.paper-table .paper-table-row.repo-error{background:var(--status-error-soft);border-left:2px solid var(--status-error);padding-left:6px}.paper-table .paper-table-row.repo-error:hover{background:var(--status-error-soft-hover)}.cell-status .status-sub.status-sub-error,.paper-table .cell-status .status-sub-error{color:var(--status-error)}.paper-table .cell-status .status-sub-warn{color:var(--status-progress)}.paper-table .cell-anon{display:flex;align-items:center;gap:12px;min-width:0}.paper-table .cell-anon .type-badge{flex-shrink:0;min-width:52px;justify-content:center}.paper-table .cell-anon .anon-text{min-width:0;display:flex;flex-direction:column;gap:3px}.paper-table .cell-anon .anon-title{display:flex;align-items:center;gap:8px;min-width:0}.paper-table .cell-anon .anon-title .type-badge{margin-left:0}.paper-table .cell-anon .repo-name{font-family:var(--font-mono);font-size:14px;color:var(--color);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;max-width:100%;padding:2px 0}.paper-table .cell-anon .repo-name-static{color:var(--ink-muted);font-style:italic}.paper-table .cell-anon .anon-sub{font-family:var(--font-sans);font-size:13px;color:var(--ink-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:10px;min-width:0}.paper-table .cell-anon .anon-sub .anon-source{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-anon .anon-sub .conf-tag{flex:0 1 auto;min-width:72px;max-width:50%}.paper-table .cell-anon .anon-sub a{color:var(--ink-muted);border-bottom:1px dotted var(--border-color);padding:4px 0;margin:-4px 0}.paper-table .cell-anon .anon-sub a:hover{color:var(--color)}.paper-table .cell-anon .anon-sub .commit-hash{font-family:var(--font-mono);font-size:12px}.paper-table .cell-conf{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-muted);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-conf span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-status{display:flex;flex-wrap:wrap;align-items:center;gap:2px 8px;font-size:14px;color:var(--color);min-width:0}.paper-table .cell-status .status-line{display:inline-flex;align-items:center;gap:8px}.paper-table .cell-status .status-sub{flex-basis:100%;font-family:var(--font-sans);font-size:13px;line-height:1.3;color:var(--ink-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-views{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--color)}.paper-table .cell-expires{font-family:var(--font-sans);font-size:13px;color:var(--ink-soft)}.paper-table .cell-expires .expires-never{color:var(--ink-muted)}.paper-table .cell-expires .expires-past{color:var(--ink-muted)}.paper-table .empty-dash{color:var(--ink-faint)}.paper-table .cell-actions{display:flex;justify-content:flex-end}.status-dot{width:8px;height:8px;border-radius:999px;display:inline-block;flex-shrink:0;background:var(--status-inactive)}.status-dot.status-ready{background:var(--status-ready)}.status-dot.status-error{background:var(--status-error)}.status-dot.status-preparing,.status-dot.status-progress{background:var(--status-progress)}.status-dot.status-expired,.status-dot.status-removed{background:var(--status-inactive)}.dashboard-page{padding-bottom:96px}.dashboard-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;margin-top:12px;font-size:13px;color:var(--ink-muted)}.dashboard-meta .dashboard-count{font-variant-numeric:tabular-nums}.btn-link-inline{background:0 0;border:none;padding:2px 4px;margin:-2px 0;font:inherit;color:var(--link-color);cursor:pointer;border-radius:4px}.btn-link-inline:hover{color:var(--link-hover-color);text-decoration:underline}.btn.btn-outline-ink{background:0 0;color:var(--color);border:1px solid var(--border-color);font-weight:500;border-radius:var(--radius-control,6px);padding:8px 14px}.btn.btn-outline-ink:hover{background:var(--hover-bg-color);color:var(--color);border-color:var(--ink-faint)}.paper-page .dropdown-menu .dropdown-item-danger,.paper-page .dropdown-menu .dropdown-item-danger i{color:var(--status-error)}.paper-page .dropdown-menu .dropdown-item-danger:focus,.paper-page .dropdown-menu .dropdown-item-danger:hover{background:var(--status-error-soft-hover);color:var(--status-error)}.paper-page .dropdown-menu button.dropdown-item{width:100%;text-align:left;background:0 0;border:none}.paper-page .dropdown-menu .dropdown-divider{border-top-color:var(--border-soft,var(--border-color));margin:4px 0}.paper-table .paper-table-skeleton{pointer-events:none}.skeleton{display:block;background:var(--paper-bg-alt);border-radius:4px;position:relative;overflow:hidden}.skeleton::after{content:"";position:absolute;inset:0;transform:translateX(-100%);background:linear-gradient(90deg,transparent,var(--hover-bg-color),transparent);animation:skeleton-shimmer 1.4s infinite}.skeleton-line{height:12px}.skeleton-line+.skeleton-line{margin-top:8px}.skeleton-line-sm{height:10px}.skeleton-badge{width:52px;height:22px;border-radius:999px;flex-shrink:0}@keyframes skeleton-shimmer{to{transform:translateX(100%)}}@media (prefers-reduced-motion:reduce){.skeleton::after{animation:none}}.paper-table .paper-table-empty{display:flex;flex-direction:column;align-items:center;gap:8px;padding:56px 20px;color:var(--ink-muted);text-align:center;border-top:1px solid var(--border-soft,var(--border-color))}.paper-table .paper-table-empty>i{font-size:1.5rem;color:var(--ink-faint)}.paper-table .paper-table-empty-actions{display:flex;gap:8px;margin-top:8px}.bulk-bar{display:flex;align-items:center;gap:8px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:8px;padding:8px 12px;margin:8px 0}.paper-page.admin-page .paper-page-title{font-size:1.5rem;margin:4px 0}.paper-page.admin-page .paper-page-lede{display:none}.paper-page.admin-page .paper-crumbs{margin-bottom:4px}.paper-page.admin-page .admin-nav{margin:6px 0 12px}.admin-filter-toolbar{display:flex;flex-direction:column;gap:6px;margin:8px 0 12px;position:sticky;top:0;z-index:4;background:var(--canvas-bg-color);padding:6px 0;border-bottom:1px solid var(--border-soft,var(--border-color));box-shadow:0 1px 0 var(--canvas-bg-color)}@media (max-width:900px){.admin-filter-toolbar{position:static;box-shadow:none}}.admin-filter-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.admin-filter-row .search-wrap{flex:1;min-width:220px}.admin-filter-row .search-wrap .form-control{height:34px}.admin-filter-inline{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--ink-muted)}.admin-filter-inline>label{font-family:var(--font-mono);font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted);margin:0;white-space:nowrap}.admin-filter-inline .form-control-sm{height:28px;padding:2px 8px;font-size:12px}.admin-filter-inline input[type=search].form-control-sm,.admin-filter-inline input[type=text].form-control-sm{width:130px}.admin-filter-inline input[type=date].form-control-sm{width:130px}.admin-filter-inline select.form-control-sm{width:auto;min-width:88px}.admin-filter-inline .arrow{color:var(--ink-muted);font-size:11px}.admin-filter-spacer{flex:1}.admin-active-chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center;font-size:12px;color:var(--ink-muted)}.admin-active-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 4px 2px 10px;border:1px solid var(--border-color);border-radius:999px;background:var(--hover-bg-color);font-size:12px;color:var(--color)}.admin-active-chip .key{color:var(--ink-muted);font-family:var(--font-mono);font-size:10px;text-transform:uppercase;letter-spacing:.06em}.admin-active-chip button{background:0 0;border:none;cursor:pointer;padding:0 4px;color:var(--ink-muted);font-size:12px;border-radius:50%}.admin-active-chip button:hover{color:#b42318}.admin-search-hint{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);pointer-events:none;border:1px solid var(--border-color);border-radius:4px;padding:1px 5px;background:var(--paper-card)}.admin-filter-row .search-wrap{position:relative}.admin-filter-row .search-wrap .form-control{padding-right:40px}.paper-table-row.row-selected{background:rgba(47,122,68,.06)}.queue-state-pills{display:inline-flex;gap:6px;margin-left:8px;flex-wrap:wrap}.queue-state-pills .pill{font-size:11px;padding:2px 8px;border-radius:999px;border:1px solid var(--border-color);background:var(--paper-card);color:var(--ink-muted)}.queue-state-pills .pill-active{color:#c48a2e;border-color:rgba(196,138,46,.4)}.queue-state-pills .pill-failed{color:#b42318;border-color:rgba(180,35,24,.4)}.queue-state-pills .pill-completed{color:#2f7a44;border-color:rgba(47,122,68,.3)}.queue-state-pills .pill-waiting{color:var(--ink-soft)}.queue-state-pills .pill-delayed{color:var(--ink-muted)}.admin-summary{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:8px 0 12px;font-size:13px}.admin-summary .summary-total{font-family:var(--font-serif);font-size:1rem;color:var(--color);margin-right:8px}.admin-summary .summary-meta{color:var(--ink-muted);font-size:12px;margin-right:8px}.admin-summary .summary-pill{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;border:1px solid var(--border-color);background:var(--paper-card);color:var(--ink-muted);cursor:pointer;font-size:12px;user-select:none;transition:background-color .1s,border-color .1s}.admin-summary .summary-pill:hover{background:var(--hover-bg-color)}.admin-summary .summary-pill .count{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--color)}.admin-summary .summary-pill.active{background:var(--primary-bg);color:var(--primary-color);border-color:var(--primary-bg)}.admin-summary .summary-pill.active .count{color:inherit}.admin-summary .summary-pill.error .count{color:#b42318}.admin-summary .summary-pill.warn .count{color:#c48a2e}.admin-summary .summary-pill.ok .count{color:#2f7a44}.dark-mode .admin-summary .summary-pill.error .count{color:#f08a82}.dark-mode .admin-summary .summary-pill.warn .count{color:#e8b970}.dark-mode .admin-summary .summary-pill.ok .count{color:#7dc894}.dark-mode .queue-state-pills .pill-active{color:#e8b970;border-color:rgba(232,185,112,.4)}.dark-mode .queue-state-pills .pill-failed{color:#f08a82;border-color:rgba(240,138,130,.4)}.dark-mode .queue-state-pills .pill-completed{color:#7dc894;border-color:rgba(125,200,148,.3)}.job-progress{flex:1;height:6px;background:var(--border-soft,var(--border-color));border-radius:999px;overflow:hidden;margin-left:12px;max-width:200px}.job-progress-bar{height:100%;background:#2f7a44;transition:width .3s}.paper-table-empty{padding:48px 4px;text-align:center;color:var(--ink-muted);display:flex;flex-direction:column;align-items:center;gap:8px;border-top:1px solid var(--border-soft,var(--border-color))}.paper-table-empty>i{font-size:1.5rem}.q-header{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:4px}.q-header-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.q-range-btns{display:inline-flex;border:1px solid var(--border-color);border-radius:8px;overflow:hidden}.q-range-btns .btn{border:none;border-radius:0;padding:5px 14px;font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);background:var(--paper-card)}.q-range-btns .btn+.btn{border-left:1px solid var(--border-color)}.q-range-btns .btn.active{background:var(--color);color:var(--paper-card)}.q-cards{display:flex;gap:10px;margin:16px 0;flex-wrap:wrap}.q-card{flex:1;min-width:140px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:14px 16px;cursor:pointer;transition:border-color .15s,box-shadow .15s}.q-card:hover{border-color:var(--ink-muted)}.q-card.selected{border-color:var(--color);box-shadow:0 0 0 1px var(--color)}.q-card-head{display:flex;align-items:center;gap:8px;margin-bottom:8px}.q-dot{width:8px;height:8px;border-radius:50%;background:#2f7a44;flex-shrink:0}.q-dot-red{background:#b42318}.dark-mode .q-dot{background:#7dc894}.dark-mode .q-dot-red{background:#f08a82}.q-card-name{font-family:var(--font-mono);font-size:12px;font-weight:500;color:var(--ink-muted);letter-spacing:.04em}.q-card-count{font-family:var(--font-serif);font-size:2rem;font-weight:400;line-height:1.1;color:var(--color);margin-bottom:6px}.q-card-sub{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.04em}.q-card-bar{height:4px;background:var(--border-color);border-radius:2px;overflow:hidden;margin-top:6px}.q-card-bar-fill{height:100%;background:#3b4ad6;border-radius:2px;transition:width .3s}.dark-mode .q-card-bar-fill{background:#a7b2ff}.q-detail{display:grid;grid-template-columns:1fr 320px;gap:16px;margin-bottom:20px}.q-throughput{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:16px 20px}.q-chart-wrap{position:relative}.q-throughput canvas{width:100%;display:block}.q-chart-tooltip{position:absolute;pointer-events:none;background:var(--paper-card);border:1px solid var(--border-color);border-radius:6px;padding:6px 10px;font-family:var(--font-mono);font-size:11px;line-height:1.6;white-space:nowrap;box-shadow:0 2px 8px rgba(0,0,0,.15);z-index:10}.q-chart-tooltip .q-tip-time{color:var(--ink-muted);margin-bottom:2px}.q-chart-tooltip .q-tip-completed{color:#3b4ad6}.q-chart-tooltip .q-tip-failed{color:#b42318}.dark-mode .q-chart-tooltip .q-tip-completed{color:#a7b2ff}.dark-mode .q-chart-tooltip .q-tip-failed{color:#f08a82}.q-chart-crosshair{position:absolute;top:0;width:1px;height:100%;background:var(--ink-muted);opacity:.3;pointer-events:none;z-index:9}.q-stats-panel{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:16px 20px;display:flex;flex-direction:column}.q-section-label{font-family:var(--font-mono);font-size:11px;font-weight:500;color:var(--ink-muted);text-transform:lowercase;letter-spacing:.04em;margin-bottom:14px}.q-section-right{float:right;text-transform:uppercase;font-size:10px;letter-spacing:.08em}.q-legend-completed{color:#3b4ad6}.q-legend-failed{color:#b42318;margin-left:8px}.q-legend-exec{color:#b8860b;margin-left:8px;letter-spacing:2px}.dark-mode .q-legend-completed{color:#a7b2ff}.dark-mode .q-legend-failed{color:#f08a82}.dark-mode .q-legend-exec{color:#f5c842}.q-chart-tooltip .q-tip-exec{color:#b8860b}.dark-mode .q-chart-tooltip .q-tip-exec{color:#f5c842}.q-stats-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px 20px;flex:1}.q-stat-label{font-family:var(--font-mono);font-size:10px;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:2px}.q-stat-value{font-family:var(--font-serif);font-size:1.25rem;font-weight:400;color:var(--color);line-height:1.2}.q-stats-actions{display:flex;gap:8px;margin-top:16px;padding-top:14px;border-top:1px solid var(--border-color)}.q-stats-actions .btn{font-family:var(--font-mono);font-size:11px;padding:6px 14px;border-radius:8px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color)}.q-jobs{background:var(--paper-card);border:1px solid var(--border-color);border-radius:10px;padding:16px 20px}.q-jobs-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;margin-bottom:12px}.q-state-filters{display:inline-flex;gap:6px;flex-wrap:wrap}.q-state-toggle{cursor:pointer;display:inline-flex;align-items:center}.q-state-toggle input{display:none}.q-state-chip{font-family:var(--font-mono);font-size:11px;padding:3px 10px;border-radius:10px;border:1px solid var(--border-color);background:var(--paper-card);color:var(--ink-muted);transition:opacity .15s,background .15s;text-transform:capitalize}.q-state-toggle input:checked+.q-state-chip{opacity:1}.q-state-toggle input:not(:checked)+.q-state-chip{opacity:.4;text-decoration:line-through}.q-state-badge,.q-state-chip{font-family:var(--font-mono);font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.3px}.q-state-badge{display:inline-block;padding:2px 8px;border-radius:8px}.q-state-active{background:#dbeafe;color:#1d4ed8}.q-state-waiting{background:#fef3c7;color:#92400e}.q-state-delayed{background:#e0e7ff;color:#4338ca}.q-state-failed{background:#fee2e2;color:#b91c1c}.q-state-completed{background:#dcfce7;color:#166534}.dark-mode .q-state-active{background:rgba(59,130,246,.2);color:#93bbfd}.dark-mode .q-state-waiting{background:rgba(251,191,36,.15);color:#fbbf24}.dark-mode .q-state-delayed{background:rgba(99,102,241,.2);color:#a5b4fc}.dark-mode .q-state-failed{background:rgba(239,68,68,.2);color:#fca5a5}.dark-mode .q-state-completed{background:rgba(34,197,94,.15);color:#86efac}.q-cell-state{width:120px}.q-delay-hint{display:block;font-size:10px;color:var(--ink-muted);margin-top:2px;font-family:var(--font-mono)}.q-search-row{display:flex;align-items:center;gap:10px;margin-bottom:12px}.q-search-row .form-control{max-width:320px;height:34px}.q-auto-refresh{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);display:inline-flex;align-items:center;gap:6px;cursor:pointer;white-space:nowrap}.q-table{width:100%;border-collapse:collapse}.q-table thead th{font-family:var(--font-mono);font-size:10px;font-weight:500;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;padding:8px 10px;border-bottom:1px solid var(--border-color);text-align:left;white-space:nowrap}.q-table tbody tr{border-bottom:1px solid var(--border-color);transition:background .1s}.q-table tbody tr:hover{background:var(--paper-bg-alt)}.q-table tbody tr:last-child{border-bottom:none}.q-table tbody td{padding:10px 10px;font-size:.875rem;vertical-align:middle}.q-cell-id{font-family:var(--font-mono);font-size:12px;white-space:nowrap}.q-cell-id{display:flex;align-items:center;gap:8px}.q-chevron{font-size:10px;color:var(--ink-muted);transition:transform .15s;flex-shrink:0}.q-chevron-open{transform:rotate(90deg)}.q-cell-id a{color:var(--color)}.q-cell-payload{font-family:var(--font-mono);font-size:12px;color:var(--color)}.q-payload-detail{color:var(--ink-muted)}.q-cell-num{font-family:var(--font-mono);font-size:12px;text-align:center;white-space:nowrap}.q-cell-progress{min-width:120px}.q-progress-wrap{display:flex;align-items:center;gap:8px}.q-progress-bar{flex:1;height:6px;border-radius:3px;overflow:hidden;background-image:linear-gradient(to right,#3b4ad6 var(--pct,0),var(--border-color) var(--pct,0))}.dark-mode .q-progress-bar{background-image:linear-gradient(to right,#a7b2ff var(--pct,0),var(--border-color) var(--pct,0))}.q-progress-label{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);white-space:nowrap;min-width:32px;text-align:right}.q-cell-actions{text-align:right;white-space:nowrap}.q-cell-actions .btn{padding:3px 8px;font-size:11px;background:0 0;border:1px solid var(--border-color);color:var(--ink-muted)}.q-cell-actions .btn:hover{color:var(--color)}.q-row-failed{background:rgba(180,35,24,.04)}.dark-mode .q-row-failed{background:rgba(240,138,130,.06)}.q-error-detail{padding:4px 10px 12px;font-size:12px}.q-error-reason{color:#b42318;font-size:.8125rem;margin-bottom:4px}.dark-mode .q-error-reason{color:#f08a82}.q-toast-error{background:#fbe7e7;color:#b42318;border:1px solid #f3c7c7;border-radius:8px;padding:10px 16px;margin-bottom:12px;font-family:var(--font-mono);font-size:12px;cursor:pointer;display:flex;align-items:center;gap:8px}.dark-mode .q-toast-error{background:rgba(240,138,130,.1);color:#f08a82;border-color:rgba(240,138,130,.25)}.q-error-stack{font-size:.75rem;max-height:120px;overflow:auto;margin:4px 0 0;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:6px;padding:8px 10px}.q-row-expanded>td{border-bottom-color:transparent}.q-detail-row>td{padding:0 10px 14px!important;border-bottom:1px solid var(--border-color)}.q-job-detail{background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:8px;padding:14px 16px}.q-job-detail-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px 20px;margin-bottom:10px}.q-job-detail-item{display:flex;flex-direction:column;gap:2px}.q-job-detail-label{font-family:var(--font-mono);font-size:10px;font-weight:500;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em}.q-job-detail-value{font-family:var(--font-mono);font-size:12px;color:var(--color);word-break:break-all}.q-job-detail-value a{color:var(--color)}.q-job-detail-error{margin:8px 0}.q-job-detail-actions{display:flex;gap:8px;margin-top:12px;padding-top:10px;border-top:1px solid var(--border-color)}.q-job-detail-actions .btn{font-family:var(--font-mono);font-size:11px;padding:5px 12px;border-radius:6px;background:var(--paper-card);border:1px solid var(--border-color);color:var(--color)}@media (max-width:900px){.q-detail{grid-template-columns:1fr}.q-cards{flex-direction:column}.q-card{min-width:100%}.q-jobs-header{flex-direction:column;align-items:flex-start}.q-tabs{flex-wrap:wrap}.q-search-row{flex-wrap:wrap}.q-search-row .form-control{max-width:100%;flex:1}.q-table{font-size:12px}.q-header{flex-direction:column}.q-job-detail-grid{grid-template-columns:1fr 1fr}}@media (max-width:900px){.paper-table .paper-table-head{display:none}.paper-table .admin-users-row,.paper-table .paper-table-row,.paper-table.paper-table-conferences .paper-table-row,.paper-table.paper-table-repos .paper-table-row{display:flex!important;flex-wrap:wrap;align-items:center;gap:6px 12px;padding:14px 0;grid-template-columns:none!important}.paper-table .cell-anon{flex:1 1 calc(100% - 52px);min-width:0;order:1}.paper-table .cell-actions{flex:0 0 auto;order:2;align-self:center}.paper-table .cell-conf,.paper-table .cell-expires,.paper-table .cell-status,.paper-table .cell-views{order:3;font-size:13px;color:var(--ink-muted);display:inline-flex;align-items:center;gap:6px;text-align:left}.paper-table .cell-status{flex-wrap:nowrap;gap:6px;min-width:0}.paper-table .cell-status .status-sub{flex-basis:auto;font-size:13px;line-height:inherit}.paper-table .cell-status .status-sub::before{content:"·";margin-right:6px;color:var(--ink-faint)}.paper-table .cell-conf{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.paper-table .cell-views.num{text-align:left}.paper-table .paper-table-skeleton .cell-expires,.paper-table .paper-table-skeleton .cell-status,.paper-table .paper-table-skeleton .cell-views{flex:1 1 30%}.paper-table .cell-views::before{content:'\f06e';font-family:'Font Awesome 5 Free';font-weight:900;font-size:10px;color:var(--ink-muted)}.paper-table .cell-expires::before{content:'\f017';font-family:'Font Awesome 5 Free';font-weight:400;font-size:10px;color:var(--ink-muted)}.paper-table .cell-conf::before{content:'\f51c';font-family:'Font Awesome 5 Free';font-weight:900;font-size:10px;color:var(--ink-muted)}.paper-table-dashboard .cell-conf::before{content:none}.paper-table .cell-conf:has(.empty-dash),.paper-table .cell-expires:has(.empty-dash){display:none}.paper-table .cell-expires::before,.paper-table .cell-views::before{color:var(--ink-faint)}}.paper-page .dropdown-menu{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface,10px);box-shadow:0 12px 28px rgba(26,24,21,.08);padding:6px;min-width:220px;font-family:var(--font-sans);font-size:14px;color:var(--color);margin-top:6px}.paper-page .dropdown-menu .dropdown-header{font-family:var(--font-mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);padding:8px 10px 6px;font-weight:500}.paper-page .dropdown-menu .dropdown-item{border-radius:6px;padding:8px 10px;color:var(--color);font-size:14px;display:flex;align-items:center;gap:8px}.paper-page .dropdown-menu .dropdown-item:focus,.paper-page .dropdown-menu .dropdown-item:hover{background:var(--hover-bg-color);color:var(--color)}.paper-page .dropdown-menu .dropdown-item i{width:16px;font-size:13px;color:var(--ink-muted)}.paper-page .dropdown-menu .form-check.dropdown-item{padding:8px 10px 8px 36px!important;position:relative}.paper-page .dropdown-menu .form-check.dropdown-item .form-check-input{position:absolute;left:12px;top:50%;transform:translateY(-50%);margin:0;width:16px;height:16px;accent-color:var(--color);cursor:pointer}.paper-page .dropdown-menu .form-check.dropdown-item .form-check-label{font-family:var(--font-sans);font-size:14px;color:var(--color);font-weight:400;margin:0;cursor:pointer}.btn.btn-icon-dots{width:32px;height:32px;padding:0;border:1px solid transparent;background:0 0;color:var(--ink-muted);border-radius:6px;display:inline-flex;align-items:center;justify-content:center;line-height:1}.btn.btn-icon-dots:focus,.btn.btn-icon-dots:hover,.btn.btn-icon-dots[aria-expanded=true]{background:var(--hover-bg-color);border-color:var(--border-color);color:var(--color)}.btn.btn-icon-dots::after{display:none}.btn.btn-icon-dots i{font-size:15px}.paper-page .repo-list-empty{border-top:none;padding:56px 20px;color:var(--ink-muted)}.paper-page .filter-chip{background:var(--paper-bg-alt);color:var(--color);border:1px solid var(--border-color);font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;padding:4px 10px;border-radius:999px}@media (max-width:768px){.paper-page .paper-page-title{font-size:clamp(1.4rem,6vw,1.9rem);margin:4px 0 2px}.paper-page .paper-page-lede{font-size:13px;line-height:1.4;margin-bottom:0}.paper-page .btn-ink{padding:6px 12px;font-size:13px}.paper-page .quota-row{grid-template-columns:1fr;gap:12px;padding:0;margin:16px 0 0}.paper-page .dashboard-filter-row{padding:10px 0;margin-top:12px;gap:8px}.paper-page .quota-header{flex-direction:row;align-items:baseline;gap:8px}.paper-page .quota-value{white-space:nowrap}.paper-page .dashboard-filter-controls{width:100%}.paper-page .dashboard-filter-controls .btn-group{flex:1 1 100%;display:flex}.paper-page .dashboard-filter-controls .btn-group .btn{flex:1;justify-content:center}.paper-page .dashboard-filter-controls .dropdown{flex:1 1 0;min-width:0}.paper-page .dashboard-filter-controls .dropdown .dropdown-toggle{width:100%;justify-content:space-between}.paper-page .dashboard-filter-controls .dropdown .filter-btn-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media (max-width:480px){.paper-page .paper-page-lede{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}}.empty-state{text-align:center;padding:40px 20px;opacity:.6}.empty-state i{font-size:2rem;margin-bottom:10px;display:block}.paper-page .progress{height:10px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:999px;overflow:hidden;margin-bottom:20px}.paper-page .progress .progress-bar{background:var(--color);color:var(--canvas-bg-color);font-family:var(--font-mono);font-size:10px;line-height:10px}.paper-page .progress .progress-bar.bg-success{background:var(--status-ready)!important}.paper-page .progress .progress-bar.bg-warning{background:var(--status-progress)!important;color:#fff}.paper-page .progress .progress-bar.bg-danger{background:var(--status-error)!important}.paper-page .progress .progress-bar.bg-dark{background:var(--ink-faint)!important}.paper-page .form>h5,.paper-page form>h5,.paper-page>h5{font-family:var(--font-mono);font-size:11px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-muted);margin:24px 0 8px}.paper-page .accordion .card{background:var(--paper-card,var(--sidebar-bg-color));border:1px solid var(--border-color);border-radius:8px!important;margin-bottom:8px;overflow:hidden}.paper-page .accordion .card+.card{border-top:1px solid var(--border-color)}.paper-page .accordion .card-header{background:0 0;border:none;padding:0}.paper-page .accordion .card-header .btn{color:var(--color)!important;font-family:var(--font-sans);font-weight:500;font-size:14px;padding:14px 18px!important;background:0 0!important;border:none!important;position:relative}.paper-page .accordion .card-header .btn::after{content:"+";position:absolute;right:18px;font-family:var(--font-serif);font-size:20px;color:var(--ink-muted)}.paper-page .accordion .card-header .btn:not(.collapsed)::after{content:"–"}.paper-page .accordion .card-body{padding:6px 18px 18px!important;border-top:1px solid var(--border-soft)}.paper-page .accordion .form-check-label{color:var(--color);font-weight:500;font-size:14px}.paper-page .accordion .form-text{color:var(--ink-muted);font-size:12px;margin-top:2px}.faq-section .panel-body code{font-family:var(--font-mono);font-size:13px;padding:1px 6px;background:var(--paper-bg-alt);border:1px solid var(--border-color);border-radius:3px;color:var(--color)}.faq-section .panel-body a{color:var(--accent)}@media (max-width:820px){.paper-faq-body{grid-template-columns:1fr;gap:24px}.paper-faq-toc{position:static}}.paper-footer{margin-top:80px;padding:56px max(20px,calc((100vw - 1200px)/ 2)) 28px;border-top:1px solid var(--border-color);background:var(--canvas-bg-color);font-family:var(--font-sans)}.paper-footer-inner{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:40px}.paper-footer-brand .paper-footer-mark{font-family:var(--font-serif);font-size:22px;letter-spacing:-.01em;color:var(--color)}.paper-footer-brand .paper-footer-mark em{font-style:italic;font-weight:400}.paper-footer-tag{margin-top:10px;color:var(--ink-soft);font-size:14px;line-height:1.55;max-width:340px}.paper-footer-head{font-family:var(--font-mono);font-size:11px;color:var(--ink-muted);letter-spacing:.1em;text-transform:uppercase;margin-bottom:14px}.paper-footer-col a{display:block;color:var(--color);font-size:14px;padding:4px 0;text-decoration:none}.paper-footer-col a:hover{color:var(--accent)}.paper-footer-rule{height:1px;background:var(--border-color);margin:40px 0 16px}.paper-footer-foot{display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px;font-size:12px;color:var(--ink-muted);font-family:var(--font-mono);letter-spacing:.02em}.paper-footer-foot .paper-footer-meta{font-family:var(--font-serif);font-style:italic;font-size:14px;letter-spacing:0;color:var(--ink-soft)}@media (max-width:768px){.paper-footer-inner{grid-template-columns:1fr 1fr}}.file.folder.truncated .truncated-warning{color:#d39e00;margin-left:4px;font-size:.85em;flex-shrink:0}.file.folder.truncated>a{color:#d39e00}body{--bucket-error-bg:#FCEDED;--bucket-error-fg:#8A1F1F;--bucket-error-bd:#F0C4C4;--bucket-error-dot:#B53737;--bucket-warn-bg:#FFF3DF;--bucket-warn-fg:#7A4D00;--bucket-warn-bd:#F0D8A0;--bucket-warn-dot:#B07A2F;--bucket-info-bg:#EAF2EC;--bucket-info-fg:#2C5D3A;--bucket-info-bd:#C5DCCD;--bucket-info-dot:#5B8D6B;--card-shadow:0 1px 2px rgba(26, 24, 21, 0.04),0 4px 14px rgba(26, 24, 21, 0.05);--card-shadow-hover:0 1px 2px rgba(26, 24, 21, 0.06),0 8px 24px rgba(26, 24, 21, 0.08)}.dark-mode{--bucket-error-bg:rgba(255, 139, 123, 0.10);--bucket-error-fg:#FF8B7B;--bucket-error-bd:rgba(255, 139, 123, 0.28);--bucket-error-dot:#FF8B7B;--bucket-warn-bg:rgba(255, 211, 122, 0.10);--bucket-warn-fg:#FFD37A;--bucket-warn-bd:rgba(255, 211, 122, 0.28);--bucket-warn-dot:#FFD37A;--bucket-info-bg:rgba(152, 200, 168, 0.10);--bucket-info-fg:#98C8A8;--bucket-info-bd:rgba(152, 200, 168, 0.28);--bucket-info-dot:#98C8A8;--card-shadow:0 1px 2px rgba(0, 0, 0, 0.35),0 6px 18px rgba(0, 0, 0, 0.30);--card-shadow-hover:0 2px 4px rgba(0, 0, 0, 0.45),0 12px 28px rgba(0, 0, 0, 0.40)}.errors-page .errors-header{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:4px 0 8px}.errors-page .errors-actions{display:flex;gap:6px}.errors-page .kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px;margin:14px 0 18px}.errors-page .kpi-card{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;padding:18px 20px;display:flex;flex-direction:column;gap:4px;box-shadow:var(--card-shadow);transition:box-shadow 160ms ease,transform 160ms ease}.errors-page .kpi-card:hover{box-shadow:var(--card-shadow-hover)}.errors-page .kpi-label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted)}.errors-page .kpi-value{font-family:var(--font-serif);font-size:2.6rem;font-weight:400;line-height:1;margin-top:2px;color:var(--color)}.errors-page .kpi-card.kpi-error .kpi-value{color:var(--bucket-error-fg)}.errors-page .kpi-card.kpi-warn .kpi-value{color:var(--bucket-warn-fg)}.errors-page .kpi-card.kpi-info .kpi-value{color:var(--bucket-info-fg)}.errors-page .kpi-sub{font-size:.75rem;color:var(--ink-muted);font-style:italic}.errors-page .kpi-sub.up{color:var(--bucket-error-fg);font-style:normal}.errors-page .kpi-sub.down{color:var(--bucket-info-fg);font-style:normal}.errors-page .dropped-warn{color:var(--bucket-error-fg);font-weight:600;font-style:normal}.errors-page .volume-chart{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px;margin-bottom:18px;box-shadow:var(--card-shadow)}.errors-page .volume-head{display:flex;justify-content:space-between;align-items:center;font-family:var(--font-mono);font-size:.6875rem;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px}.errors-page .volume-legend{display:flex;gap:14px;align-items:center;text-transform:none;letter-spacing:0;font-family:var(--font-sans)}.errors-page .volume-legend .dot{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:5px;vertical-align:middle}.errors-page .dot.dot-error{background:var(--bucket-error-dot)}.errors-page .dot.dot-warn{background:var(--bucket-warn-dot)}.errors-page .dot.dot-info{background:var(--bucket-info-dot)}.errors-page .volume-bars{display:flex;align-items:flex-end;gap:4px;height:80px}.errors-page .volume-bar{display:flex;flex-direction:column-reverse;flex:1 1 0;min-width:6px;height:100%}.errors-page .volume-bar .seg{display:block;width:100%}.errors-page .seg.seg-error{background:var(--bucket-error-dot)}.errors-page .seg.seg-warn{background:var(--bucket-warn-dot)}.errors-page .seg.seg-info{background:var(--bucket-info-dot);opacity:.7}.errors-page .errors-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:12px}.errors-page .seg-tabs{display:inline-flex;border:1px solid var(--border-color);border-radius:8px;overflow:hidden;background:var(--paper-card)}.errors-page .seg-tabs button{background:0 0;border:none;padding:6px 14px;font-size:.875rem;cursor:pointer;color:var(--color);font-family:var(--font-sans)}.errors-page .seg-tabs button+button{border-left:1px solid var(--border-color)}.errors-page .seg-tabs button.active{background:var(--primary-bg);color:var(--primary-color)}.errors-page .errors-toolbar .search-wrap{position:relative;flex:1 1 320px;min-width:220px}.errors-page .errors-toolbar .search-wrap input{width:100%;padding:6px 10px 6px 32px;border:1px solid var(--border-color);border-radius:8px;font-family:var(--font-mono);font-size:.8125rem;background:var(--input-bg);color:var(--input-color)}.errors-page .errors-toolbar .search-icon{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--ink-muted);font-size:.875rem}.errors-page .errors-toolbar .filter-count{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-size:.75rem;color:var(--ink-muted)}.errors-page .errors-toolbar .select-wrap{display:inline-flex;align-items:center;gap:6px}.errors-page .errors-toolbar .select-wrap label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);margin:0}.errors-page .errors-toolbar .select-wrap select{background:var(--input-bg);color:var(--input-color);border:1px solid var(--border-color);border-radius:8px}.errors-page .errors-toolbar .autoref{display:inline-flex;gap:6px;align-items:center;font-size:.8125rem;color:var(--color);cursor:pointer;margin:0}.errors-page .btn-icon{width:32px;padding:4px 0}.errors-page .errors-list{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;overflow:hidden;box-shadow:var(--card-shadow)}.errors-page .errors-list-head,.errors-page .errors-row-main{display:grid;grid-template-columns:110px 100px 100px 1fr 60px 70px;gap:16px;padding:18px 20px;align-items:start}.errors-page .errors-list-head{padding:12px 20px;align-items:center}.errors-page .errors-list-head{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);border-bottom:1px solid var(--border-color);background:var(--paper-bg-alt)}.errors-page .errors-row{border-bottom:1px solid var(--border-soft)}.errors-page .errors-row:last-child{border-bottom:none}.errors-page .errors-row.open{background:var(--paper-bg-alt)}.errors-page .errors-row-main{cursor:pointer}.errors-page .errors-row-main:hover{background:var(--hover-bg-color)}.errors-page .col-when .when-rel{font-size:.9375rem;color:var(--color);font-variant-numeric:tabular-nums}.errors-page .col-when .when-abs{font-family:var(--font-mono);font-size:.75rem;color:var(--ink-muted);font-variant-numeric:tabular-nums;margin-top:2px}.errors-page .col-sev{display:flex;align-items:center;gap:8px}.errors-page .sev-dot{width:8px;height:8px;border-radius:50%;display:inline-block}.errors-page .sev-dot.sev-error{background:var(--bucket-error-dot)}.errors-page .sev-dot.sev-warn{background:var(--bucket-warn-dot)}.errors-page .sev-dot.sev-info{background:var(--bucket-info-dot)}.errors-page .sev-label{font-family:var(--font-mono);font-size:.75rem;letter-spacing:.08em;color:var(--color)}.errors-page .pill-module{display:inline-block;font-family:var(--font-mono);font-size:.75rem;background:var(--paper-bg-alt);color:var(--ink-soft);border:1px solid var(--border-color);padding:3px 10px;border-radius:6px}.errors-page .col-msg .msg-code{font-family:var(--font-mono);font-size:1rem;color:var(--color);font-weight:600}.errors-page .col-msg .msg-context{color:var(--ink-muted);font-style:italic;font-size:.875rem;margin-left:10px}.errors-page .col-msg .msg-detail{color:var(--ink-soft);font-family:var(--font-mono);font-size:.8125rem;margin-left:10px}.errors-page .col-msg .msg-url{color:var(--ink-muted);font-family:var(--font-mono);font-size:.8125rem;margin-top:6px;word-break:break-all}.errors-page .count-pill{display:inline-block;padding:2px 8px;border-radius:4px;background:var(--primary-bg);color:var(--primary-color);font-family:var(--font-mono);font-size:.75rem;font-variant-numeric:tabular-nums}.errors-page .count-pill.count-pill-muted{background:0 0;color:var(--ink-muted);border:1px solid var(--border-color)}.errors-page .status-pill{display:inline-block;padding:2px 10px;border-radius:4px;font-family:var(--font-mono);font-size:.8125rem;font-variant-numeric:tabular-nums;border:1px solid transparent}.errors-page .status-pill.status-error{background:var(--bucket-error-bg);color:var(--bucket-error-fg);border-color:var(--bucket-error-bd)}.errors-page .status-pill.status-warn{background:var(--bucket-warn-bg);color:var(--bucket-warn-fg);border-color:var(--bucket-warn-bd)}.errors-page .status-pill.status-info{background:var(--bucket-info-bg);color:var(--bucket-info-fg);border-color:var(--bucket-info-bd)}.errors-page .errors-row-detail{padding:0 16px 16px}.errors-page .detail-tabs{display:flex;gap:4px;border-bottom:1px solid var(--border-color);margin-bottom:12px}.errors-page .detail-tabs button{background:0 0;border:0;border-bottom:2px solid transparent;padding:8px 12px;font-size:.875rem;cursor:pointer;color:var(--ink-muted);font-family:var(--font-sans)}.errors-page .detail-tabs button.active{color:var(--color);border-bottom-color:var(--color)}.errors-page .detail-body{display:grid;grid-template-columns:1fr 260px;gap:20px}.errors-page .detail-main pre{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px;font-family:var(--font-mono);font-size:.875rem;line-height:1.7;color:var(--color);max-height:26em;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;margin:0;box-shadow:var(--card-shadow)}.errors-page .related-list{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;max-height:22em;overflow:auto;box-shadow:var(--card-shadow)}.errors-page .stack-pre{line-height:1.45;white-space:pre;overflow-x:auto}.errors-page .related-row{display:flex;gap:10px;padding:6px 12px;align-items:center;border-bottom:1px solid var(--border-soft);font-size:.8125rem}.errors-page .related-row:last-child{border-bottom:none}.errors-page .detail-actions{display:flex;gap:6px;align-items:center;margin-top:10px}.errors-page .copy-hint{font-size:.75rem;color:var(--bucket-info-fg)}.errors-page .detail-aside{background:var(--paper-card);border:1px solid var(--border-color);border-radius:12px;padding:18px;box-shadow:var(--card-shadow)}.errors-page .aside-block+.aside-block{margin-top:16px}.errors-page .aside-label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);margin-bottom:4px}.errors-page .aside-value{font-family:var(--font-serif);font-size:1rem;color:var(--color);word-break:break-word;line-height:1.3}.errors-page .aside-value.mono{font-family:var(--font-mono);font-size:.8125rem}.errors-page .aside-sub{color:var(--ink-muted);font-style:italic;font-size:.8125rem;font-family:var(--font-sans)}.errors-page .errors-pager{display:flex;justify-content:space-between;align-items:center;padding:10px 0;color:var(--ink-muted);font-size:.875rem}@media (max-width:720px){.errors-page .errors-list-head,.errors-page .errors-row-main{grid-template-columns:80px 80px 1fr 60px}.errors-page .errors-list-head .col-mod,.errors-page .errors-list-head .col-sev,.errors-page .errors-row-main .col-mod,.errors-page .errors-row-main .col-sev{display:none}.errors-page .detail-body{grid-template-columns:1fr}}.overview-page .ov-header{display:flex;align-items:baseline;justify-content:space-between;gap:16px;margin-bottom:2px}.overview-page .ov-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-left:6px;vertical-align:middle}.overview-page .ov-dot-ok{background:#2f7a44}.overview-page .ov-dot-warn{background:#c48a2e}.overview-page .ov-dot-idle{background:var(--ink-muted)}.dark-mode .overview-page .ov-dot-ok{background:#7dc894}.dark-mode .overview-page .ov-dot-warn{background:#e8b970}.overview-page .ov-kpi-row{display:grid;grid-template-columns:repeat(5,1fr);gap:16px;margin:16px 0 22px}.overview-page .ov-kpi-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px;display:flex;flex-direction:column;gap:4px;box-shadow:var(--card-shadow);transition:box-shadow 160ms ease}.overview-page .ov-kpi-card:hover{box-shadow:var(--card-shadow-hover)}.overview-page .ov-kpi-label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted)}.overview-page .ov-kpi-value{font-family:var(--font-serif);font-size:2.6rem;font-weight:400;line-height:1;margin-top:2px;color:var(--color)}.overview-page .ov-kpi-value.ov-val-warn{color:#b42318}.dark-mode .overview-page .ov-kpi-value.ov-val-warn{color:#f08a82}.overview-page .ov-kpi-sub{font-size:.75rem;color:var(--ink-muted);margin-top:2px}.overview-page .ov-daily-row{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:-4px 0 22px}.overview-page .ov-daily-card{background:var(--primary-bg);border:1px solid var(--border-color);border-radius:12px;padding:16px 20px;box-shadow:var(--card-shadow)}.overview-page .ov-daily-label{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted)}.overview-page .ov-daily-value{font-family:var(--font-serif);font-size:2.5rem;font-weight:400;line-height:1;color:var(--accent,#3b4ad6);margin-top:6px}.overview-page .ov-daily-sub{font-size:.75rem;color:var(--ink-muted);margin-top:5px}.dark-mode .overview-page .ov-daily-card{background:var(--paper-card)}.dark-mode .overview-page .ov-daily-value{color:#a7b2ff}.overview-page .ov-chart-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-bottom:18px}.overview-page .ov-chart-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px 14px;box-shadow:var(--card-shadow)}.overview-page .ov-chart-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}.overview-page .ov-chart-title{font-family:var(--font-serif);font-size:1rem}.overview-page .ov-chart-legend{font-family:var(--font-mono);font-size:.6875rem;color:var(--ink-muted);display:flex;align-items:center;gap:5px}.overview-page .ov-dot-legend{display:inline-block;width:8px;height:8px;border-radius:50%}.overview-page .ov-dot-accent{background:var(--accent,#3b4ad6)}.overview-page .ov-dot-ok-fill{background:#2f7a44}.overview-page .ov-dot-user-fill{background:#8b5e2e}.overview-page .ov-dot-new-user-fill{background:#c48a2e}.dark-mode .overview-page .ov-dot-ok-fill{background:#7dc894}.dark-mode .overview-page .ov-dot-user-fill{background:#d0a15f}.dark-mode .overview-page .ov-dot-new-user-fill{background:#e8b970}.overview-page .ov-spark-bars{display:flex;align-items:flex-end;gap:3px;height:140px}.overview-page .ov-spark-col{flex:1;display:flex;align-items:flex-end;height:100%;position:relative}.overview-page .ov-spark-fill{width:100%;background:var(--accent,#3b4ad6);border-radius:2px 2px 0 0;transition:height .3s ease;opacity:.55}.overview-page .ov-spark-fill-alt{background:#2f7a44}.overview-page .ov-spark-fill-user{background:#8b5e2e}.overview-page .ov-spark-fill-new-user{background:#c48a2e}.dark-mode .overview-page .ov-spark-fill-alt{background:#7dc894}.dark-mode .overview-page .ov-spark-fill-user{background:#d0a15f}.dark-mode .overview-page .ov-spark-fill-new-user{background:#e8b970}.overview-page .ov-spark-col:hover .ov-spark-fill{opacity:1}.overview-page .ov-spark-col.has-tip::after{content:attr(data-tip);position:absolute;left:50%;bottom:calc(100% + 10px);transform:translateX(-50%) translateY(4px);z-index:10;padding:6px 8px;border-radius:6px;background:var(--color);color:var(--canvas-bg-color);font-family:var(--font-mono);font-size:.6875rem;line-height:1;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity 120ms ease,transform 120ms ease}.overview-page .ov-spark-col.has-tip::before{content:"";position:absolute;left:50%;bottom:calc(100% + 4px);transform:translateX(-50%) translateY(4px);z-index:10;border:5px solid transparent;border-top-color:var(--color);opacity:0;pointer-events:none;transition:opacity 120ms ease,transform 120ms ease}.overview-page .ov-spark-col.has-tip:hover::after,.overview-page .ov-spark-col.has-tip:hover::before{opacity:1;transform:translateX(-50%) translateY(0)}.overview-page .ov-spark-x{display:flex;justify-content:space-between;font-family:var(--font-mono);font-size:.6875rem;color:var(--ink-muted);margin-top:6px}.overview-page .ov-triple-row{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px;margin-bottom:18px}.overview-page .ov-panel-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:12px;padding:18px 20px;box-shadow:var(--card-shadow)}.overview-page .ov-panel-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:14px}.overview-page .ov-panel-title{font-family:var(--font-serif);font-size:1rem}.overview-page .ov-panel-meta{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted)}.overview-page .ov-panel-foot{margin-top:12px;padding-top:10px;border-top:1px solid var(--border-color);font-size:.8125rem}.overview-page .ov-panel-foot a{color:var(--link-color);text-decoration:none}.overview-page .ov-panel-foot a:hover{text-decoration:underline}.overview-page .ov-performance{min-width:0;margin:22px 0}.overview-page .ov-performance-head{align-items:center;flex-wrap:wrap;gap:12px 20px}.overview-page .ov-performance-head h2{margin:0 0 4px}.overview-page .ov-performance-note{margin:0 0 12px;font-size:12px;line-height:1.5;color:var(--ink-muted)}.overview-page .ov-performance-head .ov-performance-note{margin:0}.overview-page .ov-performance-window{display:flex;align-items:center;gap:8px;flex-shrink:0}.overview-page .ov-performance-window label{margin:0;font-size:12px;color:var(--ink-muted)}.overview-page .ov-performance-window select{width:auto}.overview-page .ov-performance-tabs{margin:0 0 16px;gap:4px}.overview-page .ov-performance-tabs .paper-tab{white-space:nowrap}.overview-page .ov-metrics-scroll{max-width:100%;overflow-x:auto;border:1px solid var(--border-color);border-radius:var(--radius-control,8px)}.overview-page .ov-metrics-table{width:100%;border-collapse:collapse;color:var(--color);font-size:13px;line-height:1.5;font-variant-numeric:tabular-nums}.overview-page .ov-metrics-table td,.overview-page .ov-metrics-table th{padding:10px 12px;border-bottom:1px solid var(--border-color);vertical-align:middle;white-space:nowrap}.overview-page .ov-metrics-table thead th{background:var(--paper-bg-alt);color:var(--ink-muted);font-size:12px;font-weight:500}.overview-page .ov-metrics-table .num{text-align:right}.overview-page .ov-metrics-table tr:last-child>*{border-bottom:0}.overview-page .ov-metrics-table thead tr:last-child>*{border-bottom:1px solid var(--border-color)}.overview-page .ov-metrics-table tbody tr:hover{background:var(--hover-bg-color)}.overview-page .ov-metrics-table .ov-metric-name{min-width:190px;max-width:280px;text-align:left;white-space:normal;overflow-wrap:anywhere;font-weight:500}.overview-page .ov-metrics-table small{display:block;margin-top:3px;font-size:11px;font-weight:400;color:var(--ink-muted)}.overview-page .ov-metrics-table small .ui-icon{width:12px;height:12px}.overview-page .ov-metric-warning-row{background:rgba(196,138,46,.07)}.overview-page .ov-metric-warn,.overview-page .ov-metrics-table small.ov-metric-warn{color:#946519}.dark-mode .overview-page .ov-metric-warn,.dark-mode .overview-page .ov-metrics-table small.ov-metric-warn{color:#e8b970}.overview-page .ov-performance-message{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:10px 12px;margin:0 0 16px;border:1px solid var(--border-color);border-radius:var(--radius-control,8px);font-size:13px;line-height:1.5}.overview-page .ov-performance-message span{flex:1;min-width:160px}.overview-page .ov-performance-warning{background:rgba(196,138,46,.07)}.overview-page .ov-performance-empty{margin:0;padding:24px 12px;text-align:center;font-size:13px;color:var(--ink-muted)}.overview-page .ov-performance-help{margin-top:16px;font-size:12px;line-height:1.6;color:var(--ink-muted)}.overview-page .ov-performance-help summary{width:fit-content;cursor:pointer}.overview-page .ov-performance-help p{margin:8px 0 0;max-width:80ch}@media (max-width:575px){.overview-page .ov-performance{padding:16px 12px}.overview-page .ov-performance-window{width:100%}.overview-page .ov-performance-window select{flex:1;min-width:0}.overview-page .ov-performance-tabs .paper-tab{flex:1;padding:10px 8px}}.overview-page .ov-stacked-bar{display:flex;height:18px;border-radius:6px;overflow:hidden;margin-bottom:14px}.overview-page .ov-bar-seg{min-width:2px;transition:width .4s ease}.overview-page .ov-bar-ready{background:#2f7a44}.overview-page .ov-bar-preparing{background:#c48a2e}.overview-page .ov-bar-error{background:#b42318}.overview-page .ov-bar-expired{background:#8a857c}.overview-page .ov-bar-removed{background:#b5afa2}.dark-mode .overview-page .ov-bar-ready{background:#7dc894}.dark-mode .overview-page .ov-bar-preparing{background:#e8b970}.dark-mode .overview-page .ov-bar-error{background:#f08a82}.dark-mode .overview-page .ov-bar-expired{background:#6b665e}.dark-mode .overview-page .ov-bar-removed{background:#4a453e}.overview-page .ov-bar-legend{display:flex;flex-direction:column;gap:6px}.overview-page .ov-legend-item{display:flex;align-items:center;gap:8px;font-size:.8125rem;text-decoration:none;color:inherit}.overview-page .ov-legend-item:hover{text-decoration:none;color:inherit}.overview-page .ov-swatch{display:inline-block;width:12px;height:12px;border-radius:3px;flex-shrink:0}.overview-page .ov-legend-n{margin-left:auto;font-family:var(--font-mono);font-size:.8125rem;font-weight:600}.overview-page .ov-error-bars{display:flex;flex-direction:column;gap:12px}.overview-page .ov-ebar-row{display:flex;align-items:center;gap:10px}.overview-page .ov-ebar-label{width:30px;flex-shrink:0;font-family:var(--font-mono);font-size:.75rem;text-transform:uppercase;color:var(--ink-muted)}.overview-page .ov-ebar-track{flex:1;height:10px;background:var(--hover-bg-color);border-radius:5px;overflow:hidden}.overview-page .ov-ebar-fill{height:100%;border-radius:5px;transition:width .4s ease}.overview-page .ov-ebar-error{background:#b42318}.overview-page .ov-ebar-warn{background:#c48a2e}.overview-page .ov-ebar-info{background:var(--accent,#3b4ad6)}.dark-mode .overview-page .ov-ebar-error{background:#f08a82}.dark-mode .overview-page .ov-ebar-warn{background:#e8b970}.overview-page .ov-ebar-n{width:36px;text-align:right;font-family:var(--font-mono);font-size:.8125rem;font-weight:600;flex-shrink:0}.overview-page .ov-routes-table{display:flex;flex-direction:column}.overview-page .ov-route-row{display:grid;grid-template-columns:1fr 60px 60px 60px;padding:8px 0;border-bottom:1px solid var(--border-soft,var(--border-color));text-decoration:none;color:inherit;font-size:.875rem;align-items:center}.overview-page .ov-route-row:last-child{border-bottom:none}.overview-page .ov-route-row:hover{background:var(--hover-bg-color);text-decoration:none;color:inherit}.overview-page .ov-route-head{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted);border-bottom:1px solid var(--border-color)}.overview-page .ov-route-head:hover{background:0 0}.overview-page .ov-route-name{font-family:var(--font-mono);font-size:.8125rem}.overview-page .ov-route-n{text-align:right;font-family:var(--font-mono);font-size:.8125rem}.overview-page .ov-route-lat{color:var(--ink-muted)}.overview-page .ov-n-bad{color:#b42318;font-weight:600}.dark-mode .overview-page .ov-n-bad{color:#f08a82}.overview-page .ov-services-card{background:var(--paper-card,#fff);border:1px solid var(--border-color);border-radius:12px;padding:18px 22px;box-shadow:var(--card-shadow);margin-bottom:18px}.overview-page .ov-services-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:16px}.overview-page .ov-services-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px}.overview-page .ov-svc{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border:1px solid var(--border-soft,var(--border-color));border-radius:10px}.overview-page .ov-svc-dot{width:10px;height:10px;border-radius:50%;margin-top:3px;flex-shrink:0}.overview-page .ov-svc-info{display:flex;flex-direction:column;gap:1px;flex:1}.overview-page .ov-svc-name{font-family:var(--font-mono);font-size:.875rem;font-weight:600}.overview-page .ov-svc-meta{font-size:.75rem;color:var(--ink-muted)}.overview-page .ov-svc-detail{font-size:.75rem;color:var(--ink-muted);white-space:nowrap}@media (max-width:900px){.overview-page .ov-kpi-row{grid-template-columns:repeat(3,1fr)}.overview-page .ov-daily-row{grid-template-columns:repeat(3,1fr)}.overview-page .ov-triple-row{grid-template-columns:1fr}}@media (max-width:720px){.overview-page .ov-kpi-row{grid-template-columns:repeat(2,1fr)}.overview-page .ov-daily-row{grid-template-columns:1fr}.overview-page .ov-chart-row{grid-template-columns:1fr}.overview-page .ov-header{flex-direction:column;gap:8px}}@media (max-width:480px){.overview-page .ov-kpi-row{grid-template-columns:1fr 1fr}.overview-page .ov-services-grid{grid-template-columns:1fr 1fr}}.dashboard-heading-actions{display:flex;flex-direction:column;align-items:flex-end;gap:8px;padding-bottom:12px}.dashboard-heading-actions .btn{display:inline-flex;align-items:center;justify-content:center;gap:8px}.dashboard-connections-link{display:inline-flex;align-items:center;gap:7px;min-height:32px;color:var(--ink-muted);font-size:12px;line-height:1.5}.dashboard-connections-link:hover{color:var(--accent);text-decoration:none}.dashboard-connections-link:focus-visible{outline:2px solid var(--accent);outline-offset:4px;border-radius:2px}@media (max-width:767px){.dashboard-heading-actions{align-items:flex-start;padding-bottom:0;gap:4px}.dashboard-connections-link{min-height:44px}}.paper-settings-connection-link{display:flex;align-items:center;gap:12px;padding:18px 0;color:var(--color);font-size:14px}.paper-settings-connection-link>i{color:var(--ink-muted);font-size:18px}.paper-settings-connection-link>span:first-of-type{flex:1}.paper-settings-connection-link small{display:block;margin-top:4px;color:var(--ink-muted);font-size:12px}.paper-settings-connection-link:hover{color:var(--accent);text-decoration:none}.paper-settings-connection-link:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.connections-heading{margin-bottom:36px}.connections-heading .paper-page-title{font-size:clamp(38px,4.5vw,56px);margin-bottom:12px}.connections-heading .paper-page-lede{font-size:15px}.connections-grid{display:grid;grid-template-columns:1.15fr 1fr;gap:56px;align-items:start;border-top:1px solid var(--border-color);padding-top:28px}.connections-grid>section{min-width:0}.connection-title,.connection-top{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.connection-top{margin-bottom:24px;min-height:28px}.connection-top>i{color:var(--ink-muted);font-size:24px}.connection-top>.fa-key{font-size:18px}.connection-title{margin-bottom:10px}.connections-page h2{font-family:inherit;font-size:22px;font-weight:600;letter-spacing:-.5px;margin:0}.connections-page p{font-size:14px;line-height:1.65;color:var(--ink-muted)}.connection-badge{background:var(--accent-soft);color:var(--accent);font-size:11px;font-weight:600;border-radius:5px;padding:4px 8px;white-space:nowrap}.connection-badge-muted{background:var(--paper-bg-alt);color:var(--ink-muted)}.connection-status{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--ink-muted)}.connection-status::before{content:'';width:6px;height:6px;border-radius:50%;background:currentColor}.connection-status.is-connected{color:var(--status-ready)}.connection-actions{display:flex;flex-wrap:wrap;align-items:center;gap:16px;margin:22px 0 16px}.connections-page .btn{font-size:13px;padding:9px 13px;white-space:normal}.connection-revoke p,.connections-page .connection-help{font-size:12px}.connection-link{display:inline-flex;align-items:center;gap:8px;border:0;padding:0;background:0 0;color:var(--accent);font-size:13px;line-height:1.6;font-weight:500;text-align:left;cursor:pointer}.connection-link:hover{color:var(--link-hover-color);text-decoration:underline}.connection-link:disabled{color:var(--ink-muted);opacity:.65;cursor:not-allowed;text-decoration:none}.connection-link:focus-visible{outline:2px solid var(--accent);outline-offset:5px}.connection-installations{list-style:none;padding:0;margin:18px 0;border-top:1px solid var(--border-soft)}.connection-installations li{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:14px 0;font-size:12px;border-bottom:1px solid var(--border-soft)}.connection-revoke{border-top:1px solid var(--border-soft);padding-top:18px;margin-top:24px}.connection-danger{color:var(--status-error)}.connection-resources{margin-top:36px;padding-top:28px;border-top:1px solid var(--border-color)}.connection-count{color:var(--ink-muted);font-size:12px}.connection-empty{display:flex;align-items:center;gap:18px;padding:20px 0;margin:22px 0}.connection-empty>i{font-size:22px;color:var(--ink-muted)}.connection-empty h3{font-size:14px;font-weight:600;margin:0 0 5px}.connection-empty p{font-size:12px;margin:0}.connection-empty>a{margin-left:auto;flex-shrink:0}.connection-resource{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:20px 0;border-bottom:1px solid var(--border-color)}.connection-resource-name{flex:1;min-width:180px;overflow-wrap:anywhere;font-size:14px}.connection-resource-name small{display:block;color:var(--ink-muted);font-size:11px;margin-top:5px}.connection-resource-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.connection-resource-actions .connection-help{flex-basis:100%}.connections-page .connection-footnote{display:flex;align-items:baseline;gap:10px;margin-top:22px;font-size:12px}@media (max-width:767px){.connections-grid{grid-template-columns:1fr;gap:28px}.connections-grid>section+section{border-top:1px solid var(--border-color);padding-top:28px}.connection-empty{flex-wrap:wrap}.connection-empty>div{flex:1;min-width:180px}.connection-empty>a{margin-left:40px}.connection-resource-actions{flex-basis:100%}}.paper-table-empty-actions .btn{display:inline-flex;align-items:center;justify-content:center;gap:6px}.paper-table-empty-actions .btn>i{font-size:1em;line-height:1;color:inherit;margin-right:0!important}.auth-back{display:inline-flex;align-items:center;gap:10px;font-size:13px;color:var(--ink-muted);margin-bottom:48px}.auth-layout{display:grid;grid-template-columns:1fr 1fr;gap:64px;align-items:start}.auth-intro,.auth-options{padding-top:28px}.auth-title-mobile{display:none}.auth-intro .paper-page-title{font-size:clamp(48px,5vw,76px);line-height:1.06;margin:18px 0 24px}.auth-intro .paper-page-lede{max-width:330px}.auth-options{display:grid;gap:28px}.auth-options h2{font-family:inherit;font-size:22px;font-weight:600;margin:0 0 10px}.auth-options p{font-size:14px;line-height:1.65;color:var(--ink-muted)}.auth-options .auth-existing{font-size:12px;border-left:2px solid var(--accent);padding-left:14px;margin:0}.auth-permissions{padding:6px 0 12px;list-style:none;font-size:13px;line-height:1.6}.auth-permissions li{display:flex;gap:10px;margin:12px 0}.auth-permissions i{color:var(--status-ready);margin-top:4px}.auth-continue{display:flex!important;align-items:center;justify-content:space-between;min-height:48px;padding:12px 16px!important}.auth-options small{display:block;font-size:12px;text-align:center;color:var(--ink-muted);margin-top:12px}.auth-legacy{border-top:1px solid var(--border-color);padding-top:24px}.auth-legacy h2{font-size:16px;margin:0}.auth-legacy p{font-size:13px}.source-url-label-row{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px 16px;margin-bottom:8px}.source-url-label-row>.paper-field-label{font-family:var(--font-sans);font-size:13px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--color);margin-bottom:6px;display:block}.repo-access{margin:0}.repo-access-details{margin:12px 0 24px}.source-url-label-row .repo-access-switch{padding:2px}.source-url-label-row .repo-access-switch button{padding:6px 10px;font-size:12px;line-height:20px}.repo-access-main{display:flex;align-items:center;gap:10px;padding:0 0 8px;flex-wrap:wrap}.repo-access-controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.repo-access-switch{display:inline-flex;gap:3px;padding:3px;border:1px solid var(--border-color);border-radius:7px;flex-wrap:wrap}.repo-access-switch button{border:0;border-radius:4px;background:0 0;color:var(--ink-muted);padding:7px 10px;font:inherit;font-size:12px;cursor:pointer}.repo-access-switch button[aria-pressed=true]{background:var(--accent-soft);color:var(--accent);opacity:1;cursor:default;font-weight:600}.repo-access-switch button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.repo-access-details .btn{font-size:12px;padding:8px 12px}.repo-access-note{display:flex;gap:6px 16px;flex-wrap:wrap;padding:0;color:var(--ink-muted);font-size:11px;line-height:1.6}@media (max-width:767px){.auth-page{max-width:480px}.auth-back,.auth-intro .paper-eyebrow,.auth-title-desktop{display:none}.auth-title-mobile{display:inline}.auth-layout{grid-template-columns:1fr;gap:24px}.auth-intro,.auth-options{padding-top:0}.auth-intro .paper-page-title{font-size:40px;line-height:1.15;margin:6px 0 12px}.auth-intro .paper-page-lede{max-width:none;font-size:14px;margin:0}.auth-options{gap:24px}.auth-options .connection-top{margin-bottom:16px}.auth-options h2{font-size:18px}.auth-options p{font-size:13px;margin-bottom:12px}.auth-permissions{padding:0;margin:14px 0 20px;font-size:12px}.auth-permissions li{margin:8px 0}.auth-continue{font-size:14px}.auth-legacy{padding-top:20px}.auth-legacy h2{font-size:15px}.auth-legacy .connection-link{min-height:44px}.repo-access-controls{width:100%;gap:12px}}.text-muted{color:var(--ink-muted)!important}.anonymize-review-note,.draft-status{font-size:13px;color:var(--ink-muted)}.anonymize-review-note{padding:12px 0;margin:0}.anonymize-preview-status{padding:20px 32px;color:var(--ink-muted)}.anonymize-preview-status p{margin:0 0 12px}@media (max-width:575px){.dashboard-page .paper-page-lede{margin-bottom:8px}.dashboard-page .dashboard-heading-actions{gap:4px}.dashboard-page .dashboard-connections-link{min-height:32px}.dashboard-page .dashboard-filter-row{margin-top:12px}.anonymize-preview-status{padding:16px}}.paper-page .paper-page-title{font-size:32px}.paper-page.admin-page .paper-page-title{font-size:28px}.paper-page .paper-page-lede{font-size:14px;line-height:1.5}.paper-settings{padding-top:32px}.paper-settings-body{grid-template-columns:180px minmax(0,1fr);gap:40px;margin-top:24px;padding-top:24px;border-top:0}.paper-settings-main .paper-settings-section{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);padding:20px;margin-bottom:16px}.anonymize-page .paper-section-eyebrow,.paper-settings .paper-section-eyebrow{font-family:var(--font-sans);font-size:16px;font-weight:600;color:var(--color);text-transform:none;letter-spacing:-.01em;margin-bottom:12px}.paper-settings .paper-settings-toc-head{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.paper-settings-section .paper-section-copy{margin-top:0}.paper-settings .quota-row{gap:24px}.paper-settings .quota-header{flex-direction:column;align-items:flex-start;gap:4px}.paper-settings .quota-value{white-space:nowrap}.paper-settings .paper-settings-footer{padding:0 0 20px}.paper-settings .form-control{font-size:14px;border-color:var(--border-color);border-radius:var(--radius-control)}.paper-settings .form-check{padding-top:8px;padding-bottom:8px}.anonymize-page .btn-ink,.explorer-page .btn-ink,.paper-page .btn-ink{background:var(--accent);color:#fff;border-color:var(--accent)}.dark-mode .anonymize-page .btn-ink,.dark-mode .explorer-page .btn-ink,.dark-mode .paper-page .btn-ink{color:#1a1815}.anonymize-page .btn-ink:hover,.explorer-page .btn-ink:hover,.paper-page .btn-ink:hover{background:var(--accent);border-color:var(--accent);color:#fff;filter:brightness(.94)}.dark-mode .anonymize-page .btn-ink:hover,.dark-mode .explorer-page .btn-ink:hover,.dark-mode .paper-page .btn-ink:hover{color:#1a1815}.anonymize-page .btn-ink:active,.explorer-page .btn-ink:active,.paper-page .btn-ink:active{filter:brightness(.9)}input[type=date],select{color-scheme:light}.dark-mode input[type=date],.dark-mode select{color-scheme:dark}.draft-status{display:flex;align-items:center;flex-wrap:wrap;gap:6px 12px;padding:10px 0}.draft-discard{padding:0;border:0;color:var(--accent);font:inherit;font-size:13px;text-decoration:underline;background:0 0;cursor:pointer}.conference-feedback{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px;margin-top:16px;background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);width:100%}.paper-table{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);margin-top:12px}.dashboard-page .paper-table-dashboard{width:100%}.paper-account-email{margin:20px 0}.paper-account-email .form-control{max-width:420px}.paper-settings .paper-account-email .btn[type=submit]{min-height:36px;padding:7px 18px;white-space:nowrap}.paper-table .paper-table-head{font-family:var(--font-sans);text-transform:none;letter-spacing:0;font-size:12px;background:var(--paper-bg-alt);border-radius:var(--radius-surface) var(--radius-surface) 0 0}.paper-table .paper-table-head,.paper-table .paper-table-row{padding-left:16px;padding-right:16px}.dashboard-page{--dashboard-space-xs:4px;--dashboard-space-sm:8px;--dashboard-space-md:12px;--dashboard-space-lg:16px;--dashboard-space-xl:24px;padding-top:var(--dashboard-space-xl)}.project-icon-definitions{position:absolute;width:0;height:0;overflow:hidden}.project-type-svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}.project-empty-icon{width:28px;height:28px;color:var(--ink-faint)}.project-type-icon{display:inline-flex;color:var(--ink-muted);flex-shrink:0}.dashboard-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--dashboard-space-lg)}.dashboard-heading .paper-page-title{font-size:28px;margin-bottom:var(--dashboard-space-xs)}.dashboard-heading .paper-page-lede{display:none}.dashboard-heading .btn{min-height:40px;display:inline-flex;gap:var(--dashboard-space-sm);align-items:center}.dashboard-new-mobile{display:none}.dashboard-quota{position:relative;margin:0;padding:0;border:0;background:0 0}.dashboard-quota>summary{display:inline-flex;align-items:center;gap:6px;min-height:32px;padding:5px 10px;border:1px solid var(--border-color);border-radius:6px;background:var(--paper-card);color:var(--color);font-family:var(--font-sans);font-size:12px;cursor:pointer;list-style:none;white-space:nowrap}.dashboard-quota>summary::-webkit-details-marker{display:none}.dashboard-quota>summary:hover,.dashboard-quota[open]>summary{background:var(--paper-bg-alt);border-color:var(--ink-faint)}.quota-summary-label{font-weight:600}.quota-summary-value{color:var(--ink-muted);font-variant-numeric:tabular-nums}.quota-summary-ring{width:18px;height:18px;flex-shrink:0;fill:none;stroke-width:2.5}.quota-ring-track{stroke:var(--border-color)}.quota-ring-fill{stroke:var(--accent);transform:rotate(-90deg);transform-origin:50% 50%}.quota-summary-ring.quota-warn .quota-ring-fill{stroke:var(--status-progress)}.quota-summary-ring.quota-danger .quota-ring-fill{stroke:var(--status-error)}.quota-ring-unlimited{stroke:var(--accent);stroke-width:1.7}.quota-summary-chevron{width:14px;height:14px;margin-left:2px;color:var(--ink-muted);transition:transform .15s ease}.dashboard-quota[open] .quota-summary-chevron{transform:rotate(180deg)}.dashboard-quota .quota-panel{position:absolute;z-index:25;top:calc(100% + 8px);left:0;width:344px;max-width:calc(100vw - 36px);padding:16px;border:1px solid var(--border-color);border-radius:12px;background:var(--paper-card);box-shadow:0 12px 36px rgba(26,24,21,.16)}.quota-panel-heading{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.quota-panel-heading h2{font:600 15px var(--font-sans);margin:0}.quota-panel-heading .project-close{margin:-8px -8px -8px 0}.paper-page .quota-usage{display:grid;grid-template-columns:1fr;gap:16px;margin:0;padding:0}.quota-usage .quota-item+.quota-item{padding-top:16px;border-top:1px solid var(--border-soft,var(--border-color))}.quota-usage .quota-header{display:flex;align-items:center;gap:8px;margin-bottom:6px}.quota-usage .quota-label{display:inline-flex;align-items:center;gap:8px;font:500 12px var(--font-sans);letter-spacing:0;text-transform:none;color:var(--ink-muted)}.quota-usage .quota-label .project-type-svg{width:16px;height:16px}.quota-usage .quota-value{display:flex;align-items:baseline;gap:4px;font:12px var(--font-sans);font-variant-numeric:tabular-nums;color:var(--ink-muted);margin-bottom:8px}.quota-usage .quota-value strong{font-size:20px;line-height:1.2;font-weight:600;color:var(--color)}.quota-percent,.quota-usage .quota-unlimited-tag{margin-left:auto;padding:2px 6px;border-radius:4px;background:var(--paper-bg-alt);font:11px var(--font-sans);color:var(--ink-muted);white-space:nowrap}.quota-warn>.quota-header .quota-percent{color:var(--status-progress)}.quota-danger>.quota-header .quota-percent{color:var(--status-error)}.quota-usage .quota-track{height:5px;border:0;background:var(--paper-bg-alt)}.quota-usage .quota-track .quota-fill{min-width:0;background:var(--accent)}.quota-remaining{margin:6px 0 0;color:var(--ink-muted);font-size:11px}.quota-remaining.quota-limit{color:var(--status-error)}.quota-loading{font-size:12px;color:var(--ink-muted);margin:12px 0 0}.dashboard-page .dashboard-filter-row{display:flex;align-items:center;gap:var(--dashboard-space-md);padding:0;margin:var(--dashboard-space-lg) 0 0;border:0;background:0 0}.dashboard-page .dashboard-filter-row .search-wrap{flex:1 1 240px;min-width:0}.dashboard-page .dashboard-filter-row .form-control{height:40px;padding:8px 12px;font-size:13px;background:var(--paper-card)}.dashboard-page .dashboard-filter-controls{display:flex;flex-wrap:nowrap;align-items:center;gap:var(--dashboard-space-sm)}.dashboard-extra-filters{display:flex;gap:var(--dashboard-space-sm)}.dashboard-filters-toggle{display:none}.dashboard-page .dashboard-filter-row .btn-group .btn{border:0;background:0 0;border-radius:6px;height:36px;padding:6px 10px}.dashboard-page .dashboard-filter-row .btn-group .btn.btn-primary{background:var(--accent-soft);color:var(--accent)}.dashboard-page .dashboard-filter-row .btn-group .btn.btn-primary:active,.dashboard-page .dashboard-filter-row .btn-group .btn.btn-primary:hover{background:var(--accent-soft)!important;color:var(--accent)}.dashboard-page .dashboard-filter-row .dropdown-toggle{height:36px;padding:6px 10px}.dashboard-type-filter .project-type-svg{display:none}.sort-direction{width:14px;height:14px}.sort-direction.ascending{transform:rotate(180deg)}.dashboard-page .dashboard-meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--dashboard-space-sm) var(--dashboard-space-md);margin:var(--dashboard-space-md) 0 0;padding:0}.dashboard-view-tabs{display:flex;align-items:center;gap:var(--dashboard-space-lg)}.dashboard-view-short{display:none}.dashboard-view-tabs button{min-height:36px;border:0;border-bottom:2px solid transparent;border-radius:0;background:0 0;font:inherit;font-size:13px;color:var(--ink-muted);padding:4px 0}.dashboard-view-tabs button[aria-pressed=true]{color:var(--color);border-bottom-color:var(--color);font-weight:600}.attention-count{padding:1px 5px;margin-left:4px;border-radius:4px;background:var(--paper-bg-alt);font-size:11px;font-variant-numeric:tabular-nums}.attention-count.has-attention{color:var(--status-error)}.dashboard-count{margin-left:auto;font-size:12px;color:var(--ink-muted)}.dashboard-active-filters{display:flex;align-items:center;flex-wrap:wrap;gap:var(--dashboard-space-sm);width:100%}.dashboard-page .filter-chip{display:inline-flex;font-family:var(--font-sans);font-size:11px;text-transform:none;letter-spacing:0;border-radius:6px}.dashboard-page .filter-chip .project-type-svg{width:12px;height:12px;margin-left:4px}.dashboard-page .filter-chip-close{min-width:24px;min-height:24px;display:inline-flex;align-items:center;justify-content:center;margin:-2px -4px -2px 2px}.dashboard-page .btn-link-inline{color:var(--ink-muted);font-size:12px}.dashboard-page .paper-table-dashboard{margin-top:var(--dashboard-space-md);border-left:0;border-right:0;border-radius:0}.dashboard-page .paper-table-dashboard .paper-table-head,.dashboard-page .paper-table-dashboard .paper-table-row{grid-template-columns:minmax(280px,3fr) 180px 72px 148px 64px;gap:var(--dashboard-space-lg);padding:8px 12px}.dashboard-page .paper-table-dashboard .paper-table-head{border-radius:0}.dashboard-page .paper-table .cell-anon{gap:var(--dashboard-space-sm)}.dashboard-page .paper-table .anon-text{flex:1}.dashboard-page .paper-table .repo-name{font-family:var(--font-sans);font-size:14px;font-weight:600}.dashboard-page .paper-table .anon-sub{display:flex;align-items:center;gap:var(--dashboard-space-sm);min-width:0}.anonymous-id{font-size:12px;font-family:var(--font-mono);color:var(--ink-muted);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dashboard-page .paper-table .type-badge{font-family:var(--font-sans);letter-spacing:0;font-size:11px;text-transform:none;border-radius:6px}.dashboard-page .paper-table .status-sub{font-size:12px}.dashboard-page .paper-table .cell-conf{font-family:var(--font-sans);letter-spacing:0;text-transform:none}.dashboard-page .conf-tag .project-type-svg{width:14px;height:14px}.dashboard-row-meta{display:contents}.dashboard-page .cell-actions{gap:0;align-items:center}.copy-link-inline,.dashboard-page .btn-icon-dots,.project-close{display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:6px;background:0 0;color:var(--ink-muted);padding:0;width:32px;height:32px;min-width:32px;cursor:pointer}.copy-link-inline:focus-visible,.copy-link-inline:hover,.dashboard-page .btn-icon-dots:hover,.project-close:hover{background:var(--accent-soft);color:var(--accent)}.copy-link-inline:disabled{opacity:.5;cursor:wait}.mobile-meta-icon{display:none}.project-attention-action{display:inline-block;color:var(--accent);border:0;background:0 0;padding:0;font:inherit;font-size:12px;cursor:pointer;text-decoration:underline;text-underline-offset:3px}.project-attention-action{text-align:left}.dashboard-page .cell-status .project-attention-action{flex-basis:100%}.project-details-row{width:100%;border-bottom:1px solid var(--border-color)}.project-details{padding:var(--dashboard-space-xl);background:var(--paper-bg-alt)}.project-details-heading{display:flex;align-items:center;justify-content:space-between;gap:var(--dashboard-space-sm)}.project-details-heading h2{font:600 16px var(--font-sans);margin:0}.project-details-list{display:grid;grid-template-columns:1fr 1fr;gap:var(--dashboard-space-md) var(--dashboard-space-xl);margin:12px 0}.project-details-list dt{font-size:12px;color:var(--ink-muted);font-weight:500;margin-bottom:4px}.project-details-list dd{margin:0;font-size:13px;overflow-wrap:anywhere}.project-details-list code{color:var(--color);font-size:12px}.project-name-form{margin-top:var(--dashboard-space-lg);padding-top:var(--dashboard-space-lg);border-top:1px solid var(--border-color)}.project-name-form label{display:block;font-size:13px;font-weight:500;margin-bottom:4px}.project-name-form p,.project-progress-help{font-size:12px;color:var(--ink-muted);margin-bottom:8px}.project-name-controls{display:flex;gap:var(--dashboard-space-sm);max-width:560px}.project-name-controls .form-control{min-width:0;font-size:14px}.project-name-controls .btn{flex-shrink:0;min-height:40px}.project-name-form .project-name-error{color:var(--status-error)}.project-details-button{min-height:44px;padding:0 8px;border:0;border-radius:6px;background:0 0;font:inherit;font-size:12px;color:var(--ink-muted);cursor:pointer}.anonymize-page .anonymize-topbar-title{font-family:var(--font-sans);font-size:28px;font-weight:600}.anonymize-topbar{padding:16px 24px}.anonymize-form-col{background:var(--paper-bg-alt)}.anonymize-form-col .paper-settings-main{padding:20px 24px}.anonymize-form-col .paper-settings-section{padding:18px}.anonymize-form-col .paper-settings-section:first-child{padding-top:18px}.anonymize-form-col .anonymize-submit-bar{background:var(--paper-bg-alt);padding:12px 0}.anonymize-preview-head .paper-eyebrow{font-family:var(--font-sans);font-size:14px;font-weight:600;color:var(--color);text-transform:none;letter-spacing:0}.anonymize-preview-col{background:var(--canvas-bg-color);padding:24px}.anonymize-preview-head{flex-wrap:wrap;gap:6px 12px;margin-bottom:16px}.anonymize-preview-body{padding:24px}.anonymize-mobile-tabs,.anonymize-preview-empty,.mobile-preview-jump{display:none}.anonymize-page .repo-access-note{font-size:12px}@media (max-width:900px){.paper-settings-body{grid-template-columns:1fr;gap:18px}.paper-settings-toc{padding:0}.paper-settings-toc-head{display:none}.paper-table .paper-table-row{padding-left:14px;padding-right:14px}}@media (max-width:767px){.anonymize-page .paper-page-title,.paper-page .paper-page-title{font-size:24px}.paper-settings{padding:20px 16px 40px}.paper-settings-main .paper-settings-section{padding:16px}.anonymize-topbar{padding:12px 16px}.anonymize-topbar .paper-crumbs{display:none}.anonymize-mobile-tabs{display:flex;gap:4px;padding:8px 16px;border-bottom:1px solid var(--border-color);background:var(--paper-card)}.anonymize-mobile-tabs button{flex:1;font:inherit;font-size:13px;padding:10px;border:0;border-radius:6px;background:0 0;color:var(--ink-muted)}.anonymize-mobile-tabs button[aria-selected=true]{background:var(--accent-soft);color:var(--accent);font-weight:600}.anonymize-page:not(.mobile-preview-active) .anonymize-preview-col{display:none}.mobile-preview-active .anonymize-form-col{display:none}.mobile-preview-active .anonymize-preview-empty{display:block;padding:24px 16px;color:var(--ink-muted)}.anonymize-form-col .paper-settings-main{padding:16px}.anonymize-form-col .anonymize-submit-bar{background:var(--paper-bg-alt)}.mobile-preview-jump{display:block;width:100%;min-height:44px}.anonymize-preview-col{padding:16px}.anonymize-preview-body{padding:16px}}@media (max-width:575px){.paper-settings .quota-header{flex-direction:row;flex-wrap:wrap;align-items:baseline;gap:4px 8px}}@media (max-width:1100px) and (min-width:901px){.dashboard-page .dashboard-filter-row{flex-wrap:wrap}.dashboard-page .dashboard-filter-row .search-wrap{flex-basis:100%}.dashboard-page .dashboard-filter-controls{width:100%;justify-content:space-between}}@media (max-width:900px){.dashboard-page .paper-table.paper-table-dashboard .paper-table-row{gap:4px 8px;padding:8px 12px}.dashboard-page .paper-table .cell-anon{flex:1 1 calc(100% - 96px);min-width:0}.dashboard-page .paper-table .cell-actions{flex:0 0 88px}.dashboard-row-meta{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px;order:3;width:100%}.dashboard-page .dashboard-row-meta .cell-status{flex:1 1 80px;flex-wrap:wrap;gap:2px 8px}.dashboard-page .dashboard-row-meta .cell-expires,.dashboard-page .dashboard-row-meta .cell-views{flex-shrink:0;font-size:12px}.dashboard-page .cell-expires::before,.dashboard-page .cell-views::before{content:none}.dashboard-page .mobile-meta-icon{display:inline-block;width:14px;height:14px}.dashboard-page .dashboard-row-meta .status-sub-date{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.dashboard-page .dashboard-row-meta .status-sub-error,.dashboard-page .dashboard-row-meta .status-sub-warn{flex-basis:100%;white-space:normal;overflow-wrap:anywhere}.dashboard-page .dashboard-row-meta .status-sub::before{content:none}.dashboard-page .project-attention-action{min-height:44px;display:inline-flex;align-items:center}.dashboard-page .paper-table .anon-sub .commit-hash,.dashboard-page .paper-table .anon-sub .conf-tag{display:none}}@media (max-width:767px){.container.dashboard-page{padding-top:12px}.dashboard-heading .paper-page-title{font-size:24px}.dashboard-heading-actions .btn-ink{min-height:44px}.dashboard-new-label{display:none}.dashboard-new-mobile{display:inline}.dashboard-quota>summary{min-height:44px;gap:6px;padding:10px;font-size:12px;line-height:20px}.dashboard-quota .quota-panel{max-height:calc(100dvh - 184px);overflow-y:auto;overscroll-behavior:contain}.dashboard-page .dashboard-filter-row{flex-wrap:wrap;gap:8px;margin-top:12px}.dashboard-page .dashboard-filter-row .search-wrap{flex:1 1 0}.dashboard-page .dashboard-filter-row .form-control{height:44px}.dashboard-page .dashboard-filters-toggle{display:inline-flex;align-items:center;gap:6px;font-size:12px;padding:8px;min-height:44px;background:0 0;border:0}.dashboard-page .dashboard-filter-controls{display:none;width:100%}.dashboard-page .dashboard-filter-controls.expanded{display:flex;flex-wrap:wrap;gap:8px}.dashboard-page .dashboard-filter-controls .btn-group{width:100%;display:flex}.dashboard-page .dashboard-filter-controls .btn-group .btn{flex:1;min-height:44px}.dashboard-extra-filters{display:flex;width:100%}.dashboard-page .dashboard-extra-filters .dropdown{flex:1;min-width:0}.dashboard-page .dashboard-extra-filters .dropdown-toggle{width:100%;height:44px}.dashboard-type-filter .type-filter-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.dashboard-type-filter .project-type-svg{display:inline-block}.dashboard-page .dashboard-meta{margin-top:8px;gap:4px 8px}.dashboard-view-tabs{gap:16px}.dashboard-view-tabs button{min-width:44px;min-height:44px;font-size:12px}.dashboard-count{font-size:11px}.dashboard-count{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.dashboard-view-long{display:none}.dashboard-view-short{display:inline}.dashboard-active-filters{display:contents}.dashboard-page .filter-chip{font-size:11px;padding:0 8px;min-height:44px;gap:4px}.dashboard-page .filter-chip-close{min-width:44px;min-height:44px;margin:0}.dashboard-page .btn-link-inline{min-height:44px;font-size:12px}.dashboard-page .paper-table-dashboard{width:calc(100% + 36px);margin:8px -18px 0;border-left:0;border-right:0;border-radius:0}.dashboard-page .paper-table .repo-name{font-size:13px}.project-details{padding:16px 12px}.project-details-list{grid-template-columns:1fr;gap:12px}.project-name-controls{flex-wrap:wrap}.project-name-controls .form-control{flex-basis:100%}.project-name-controls .btn{min-height:44px}}@media (max-width:360px){.dashboard-attention-prefix{display:none}.dashboard-attention-prefix+span{text-transform:capitalize}}.ui-icon-definitions{position:absolute;width:0;height:0;overflow:hidden;pointer-events:none}.ui-icon{display:inline-block;width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0;vertical-align:-3px}.ui-icon.sort-direction{width:14px;height:14px}.pr-title-row{display:flex;align-items:flex-start;gap:16px}.pr-title-row .pr-title{flex:1;min-width:0}.pr-title-row>.btn{flex-shrink:0}.ui-icon.record-type-icon{color:var(--ink-muted)}.btn .ui-icon,.dropdown-item .ui-icon{width:16px;height:16px}.btn-icon-dots .ui-icon{width:18px;height:18px}.anonymize-page .paper-page-title,.paper-page .paper-page-title{font-size:28px}.paper-faq,.paper-page{padding-top:24px}.paper-page .paper-page-lede{margin-bottom:16px;overflow-wrap:anywhere}.paper-page-title{overflow-wrap:anywhere}.anonymize-page .form-control,.paper-page .form-control{min-height:40px;font-family:var(--font-sans);font-size:14px;border-radius:var(--radius-control)}.anonymize-page textarea.form-control,.paper-page textarea.form-control{height:auto}.anonymize-page .btn,.paper-page .btn,.status-bar-actions .btn{min-height:var(--button-height);padding:7px var(--button-padding-x);font:500 var(--button-font-size)/var(--button-line-height) var(--font-sans);border-radius:var(--radius-button);gap:6px}.anonymize-page .btn.btn-sm,.paper-page .btn.btn-sm,.status-bar-actions .btn{min-height:var(--button-compact-height);padding:5px 10px;font-size:13px;border-radius:6px}.anonymize-page .btn-ink,.paper-page .btn-ink{min-height:40px;padding:9px 15px}.btn-hero>i,.btn>.project-type-svg,.btn>.ui-icon,.btn>i{width:16px;height:16px;margin:0!important;flex-shrink:0}.btn.dropdown-toggle::after{margin-left:0}.btn.disabled,.btn:disabled{cursor:not-allowed}.btn.disabled:hover,.btn:disabled:hover{filter:none}.paper-page .btn.btn-link{background:0 0;border-color:transparent}.auth-continue.btn{min-height:44px;padding:11px 16px!important}.anonymize-page .btn.btn-icon,.paper-page .btn.btn-icon{width:32px;height:32px;min-width:32px;min-height:32px;padding:0}.paper-page .btn.btn-icon-dots{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;min-width:32px;min-height:32px;padding:0;border:0;background:0 0;color:var(--ink-muted)}.paper-page .btn-icon-dots:hover{background:var(--accent-soft);color:var(--accent)}.paper-page .btn-group .btn-primary:active,.paper-page .btn-group .btn-primary:hover{background:var(--accent-soft)!important;color:var(--accent)}.paper-page .paper-section-eyebrow{font-family:var(--font-sans);font-size:16px;font-weight:600;color:var(--color);text-transform:none;letter-spacing:0;margin-bottom:12px}.paper-page .paper-field-label{font-family:var(--font-sans);font-size:13px;letter-spacing:0}.paper-tabs .paper-tab{min-height:44px}.paper-pill,.status-pill{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none;border-radius:6px}.paper-meta-rule{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none;gap:12px 24px}.paper-meta-rule b:not(.commit-hash){font-family:var(--font-sans);font-weight:500}.connections-grid{gap:16px}.connections-grid>section{background:var(--paper-card);border:1px solid var(--border-color);border-radius:var(--radius-surface);padding:20px}.connections-heading{margin-bottom:24px}.claim-page .claim-form,.status-page>.paper-settings-section{padding:20px;margin-top:24px;border:1px solid var(--border-color);border-radius:var(--radius-surface);background:var(--paper-card)}.claim-page .claim-form{max-width:640px}.status-page .anonymize-submit-bar{background:0 0;gap:8px;flex-wrap:wrap}.anonymize-landing{padding-top:32px}.paper-settings .quota-usage{grid-template-columns:repeat(3,minmax(0,1fr));gap:24px}.paper-settings .quota-usage .quota-item+.quota-item{padding-top:0;border-top:0;padding-left:16px;border-left:1px solid var(--border-color)}.paper-settings .quota-usage .quota-header{flex-direction:row;align-items:center;flex-wrap:wrap}.paper-settings .quota-usage .quota-value{white-space:normal;flex-wrap:wrap}.paper-faq-hero{padding-bottom:24px;margin-bottom:24px}.paper-faq-eyebrow,.paper-faq-toc-head{font-family:var(--font-sans);font-size:12px;text-transform:none;letter-spacing:0;margin-bottom:8px}.paper-faq-title{font:600 28px/1.2 var(--font-sans);letter-spacing:-.025em;max-width:720px;margin-bottom:12px}.paper-faq-title em{font-style:normal}.paper-faq-lede{font-size:14px}.paper-faq-body{grid-template-columns:180px minmax(0,1fr);gap:40px}.faq-section h4.faq-cat{font:600 18px/1.4 var(--font-sans);padding-bottom:12px}.faq-section h4.faq-cat .ui-icon{display:none}.faq-section .panel-group{margin-bottom:32px}.faq-section .panel-default .panel-title a{font:500 15px/1.5 var(--font-sans);padding:16px 0 16px 28px;min-height:44px}.faq-section .panel-default .panel-title a:after{top:16px}.paper-empty-title{font:600 32px/1.2 var(--font-sans);letter-spacing:-.025em}.paper-empty-title em{font-style:normal}.btn-hero{justify-content:center;gap:8px;min-height:48px;padding:13px 20px;font-size:15px;line-height:20px;background:var(--accent);border-color:var(--accent);color:#fff;border-radius:var(--radius-button)}.dark-mode .btn-hero{color:#1a1815}.btn-hero:hover{background:var(--accent);color:#fff;filter:brightness(.94)}.dark-mode .btn-hero:hover{color:#1a1815}.paper-table:not(.paper-table-dashboard){border-left:0;border-right:0;border-radius:0}.paper-table:not(.paper-table-dashboard) .paper-table-head{border-radius:0}.paper-table .cell-anon{gap:8px}.paper-table .cell-anon .anon-text{flex:1}.paper-table-conferences .cell-anon .repo-name{font-family:var(--font-sans);font-weight:600}.paper-table .anon-sub>a,.paper-table .anon-sub>span{min-width:0;overflow:hidden;text-overflow:ellipsis}.paper-table .anon-sub .ui-icon{width:14px;height:14px}.paper-page .filter-chip{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none;border-radius:6px}.paper-page .filter-chip-close .ui-icon{width:12px;height:12px}.admin-nav{gap:4px;border:0;border-bottom:1px solid var(--border-color);border-radius:0;padding:0 0 8px;background:0 0}.admin-nav a{font-family:var(--font-sans);font-size:13px;letter-spacing:0;text-transform:none;border-radius:6px;min-height:40px;padding:8px 12px}.admin-nav a.active{background:var(--accent-soft);color:var(--accent)}.admin-nav .ui-icon{width:16px;height:16px}.admin-filter-toolbar{background:0 0;border:0;padding:0}.admin-filter-inline>label,.admin-filter-inline>span{font-family:var(--font-sans);text-transform:none;letter-spacing:0}.admin-summary .summary-total{font-family:var(--font-sans);font-size:18px;font-weight:600}.admin-summary .summary-pill{font:500 13px/20px var(--font-sans);min-height:32px;padding:5px 10px;border-radius:6px}.admin-summary .summary-pill.active{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.admin-summary .summary-pill .count{font-family:var(--font-sans)}.admin-active-chip{font-family:var(--font-sans);font-size:12px}.admin-active-chip button .ui-icon{width:12px;height:12px}.user-detail-card .user-header h2{font:600 20px/1.4 var(--font-sans)}.errors-page .errors-toolbar .select-wrap label,.errors-page .volume-head,.overview-page .ov-panel-meta,.paper-detail-grid .detail-label,.paper-progress .paper-progress-label,.status-page .paper-error-eyebrow,.user-detail-grid .detail-label{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.overview-page .ov-chart-title,.overview-page .ov-panel-title,.paper-error-title{font:600 16px/1.4 var(--font-sans)}.paper-error-head>.ui-icon,.paper-ratelimit-head>.ui-icon{margin-top:3px;color:var(--status-error)}.paper-ratelimit-head>.ui-icon{color:var(--status-progress)}.errors-page .seg-tabs{border-radius:var(--radius-control)}.errors-page .seg-tabs button{min-height:36px;padding:7px 12px;font:500 14px/20px var(--font-sans)}.errors-page .seg-tabs button.active{background:var(--accent-soft);color:var(--accent)}.errors-page .errors-list,.errors-page .kpi-card:hover,.errors-page .volume-chart,.overview-page .ov-chart-card,.overview-page .ov-panel-card{box-shadow:none}.errors-page .kpi-value,.overview-page .ov-daily-value,.overview-page .ov-kpi-value,.q-card-count,.user-hero-name{font-family:var(--font-sans);font-size:28px;font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:-.02em}.errors-page .kpi-label,.overview-page .ov-daily-label,.overview-page .ov-kpi-label,.q-card-name,.q-section-label,.user-hero-details .detail-label{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.overview-page .ov-daily-card{background:var(--paper-card);box-shadow:none;border-radius:var(--radius-surface)}.dark-mode .overview-page .ov-daily-value,.overview-page .ov-daily-value{color:var(--accent)}.errors-page .kpi-card,.overview-page .ov-kpi-card{box-shadow:none;border-radius:var(--radius-surface)}.q-card{border-radius:var(--radius-surface)}.q-card.selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.q-range-btns{border-radius:var(--radius-control)}.q-job-detail-actions .btn,.q-range-btns .btn{font-family:var(--font-sans);font-size:13px}.q-range-btns .btn.active{background:var(--accent-soft);color:var(--accent)}@media (max-width:900px){.paper-settings .quota-usage{grid-template-columns:1fr;gap:16px}.paper-settings .quota-usage .quota-item+.quota-item{padding-left:0;border-left:0;border-top:1px solid var(--border-color);padding-top:16px}.paper-table:not(.paper-table-dashboard) .paper-table-row{gap:4px 8px!important;padding:8px 12px}.paper-table:not(.paper-table-dashboard) .cell-anon{flex:1 1 calc(100% - 52px);order:1}.paper-table:not(.paper-table-dashboard) .cell-actions{order:2;flex:0 0 44px}.paper-table .admin-users-row>[role=cell]:first-child,.paper-table.paper-table-repos.has-bulk .paper-table-row>[role=cell]:first-child{flex:0 0 24px;order:0}.paper-table .admin-users-row .cell-anon,.paper-table.paper-table-repos.has-bulk .cell-anon{flex-basis:calc(100% - 84px)}.paper-table:not(.paper-table-dashboard) .cell-anon .anon-sub{font-size:12px;gap:6px}.paper-table:not(.paper-table-dashboard) .cell-status .status-sub{font-size:12px}.paper-table .cell-expires::before,.paper-table .cell-views::before{content:none}.paper-table .cell-expires .mobile-meta-icon,.paper-table .cell-views .mobile-meta-icon{display:inline-block;width:14px;height:14px}.paper-faq-body{grid-template-columns:1fr;gap:24px}}@media (max-width:767px){.paper-faq,.paper-page{padding-top:20px}.paper-settings .paper-account-email .btn[type=submit]{min-height:40px;padding:9px 18px}.anonymize-page .paper-page-title,.paper-faq-title,.paper-page .paper-page-title,.paper-page.admin-page .paper-page-title{font-size:24px}.anonymize-page .form-control,.paper-page .form-control{min-height:44px}.anonymize-page .btn,.connection-link,.draft-discard,.paper-faq-toc a,.paper-page .btn,.paper-settings-toc nav a{min-height:44px}.anonymize-page .btn,.paper-page .btn,.status-bar-actions .btn{min-height:44px;padding:11px 14px;font-size:14px;line-height:20px;white-space:normal}.anonymize-page .btn.btn-sm,.paper-page .btn.btn-sm{min-height:44px;padding:11px 12px;font-size:14px}.anonymize-page .btn.btn-icon,.copy-link-inline,.paper-page .btn.btn-icon,.paper-page .btn.btn-icon-dots,.project-close{width:44px;height:44px;min-width:44px;min-height:44px;padding:0}.dashboard-page .dashboard-filter-row .btn-group .btn,.dashboard-page .dashboard-filter-row .dropdown-toggle{height:auto;min-height:44px;font-size:14px;padding:11px 10px}.dashboard-heading-actions .btn-ink{padding:11px 16px}.dashboard-page .dashboard-filters-toggle{padding:11px 10px}.errors-page .btn-icon,.pr-title-row .btn,.status-bar-actions .btn{min-width:44px;min-height:44px;padding:0}.status-bar-actions .btn{width:44px;height:44px}.errors-page .seg-tabs button,.paper-tab{min-height:44px}.errors-page .seg-tabs button{padding:11px 12px}.status-bar-actions{flex-wrap:wrap;max-width:100%}.leftCol-close,.tree-search-clear{min-width:44px;min-height:44px}.anonymize-landing{padding:20px 18px}.anonymize-landing .repo-access-switch button,.source-url-label-row .repo-access-switch button{min-height:44px;padding:11px 10px;font-size:13px}.paper-settings-body{margin-top:16px;padding-top:0;gap:16px}.paper-settings-toc nav{gap:0 12px}.paper-settings-toc nav a{display:inline-flex;align-items:center}.paper-faq{padding-left:18px;padding-right:18px}.paper-faq-toc nav{display:flex;flex-direction:row;flex-wrap:wrap;gap:0 16px}.paper-faq-toc a{display:inline-flex;align-items:center;padding:8px 0;border-left:0;border-bottom:2px solid transparent;margin-left:0}.paper-faq-toc nav a.active,.paper-faq-toc nav a:hover{border-bottom-color:var(--accent);color:var(--accent)}.claim-page .claim-form,.status-page>.paper-settings-section{padding:16px;margin-top:16px}.admin-nav{flex-direction:row;flex-wrap:nowrap;overflow-x:auto;gap:4px;max-width:100%;margin:8px 0 16px}.admin-nav a{flex-shrink:0;min-height:44px}.admin-summary .summary-pill{min-height:44px;padding:11px 12px;font-size:14px}.admin-active-chip button{min-width:44px;min-height:44px}.admin-filter-row{gap:8px}.admin-filter-row .admin-filter-inline{gap:8px;flex-wrap:wrap}.errors-page .kpi-grid{grid-template-columns:1fr 1fr;gap:12px}.q-cards{flex-direction:row}.q-card{min-width:130px}.q-header-actions{flex-wrap:wrap;gap:8px}}.paper-page.container:not(.auth-page){max-width:1180px}.paper-page>.row{margin-left:0;margin-right:0}.paper-page>.row>.w-100,.paper-page>.row>[class*=col]{padding-left:0;padding-right:0}.anonymize-landing{align-items:flex-start}.status-page .paper-support-grid{margin-bottom:0}.explorer-content .ace_editor{font-family:var(--font-mono);line-height:1.6}.dark-mode .explorer-content .ace-nord-dark,.dark-mode .explorer-content .ace-nord-dark .ace_gutter{background:var(--main-bg-color)}.explorer-content .file-content.markdown-body{max-width:960px;padding:32px 40px 96px}.leftCol-project-header .project-name{white-space:normal;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.file-error{font-size:inherit;font-weight:inherit;text-align:left}.file-error-card{width:100%;max-width:520px;margin-top:0}.file-error-msg{margin:12px 0 0;font-size:14px;line-height:1.55;color:var(--ink-soft)}.file-error-actions{display:flex;gap:8px;margin-top:16px}.file-error .paper-empty-title{font-size:20px;text-align:center}@media (min-width:992px){.leftCol-foot{padding-bottom:72px}}.explorer-content .ace-chrome,.explorer-content .ace-chrome .ace_gutter{background:var(--main-bg-color)}@media (max-width:991px){.explorer-content .file-content.markdown-body{padding:20px 16px 96px}.anonymize-landing{padding:20px 18px}.anonymize-landing-inner{padding:0}.paper-faq-toc nav,.paper-settings-toc nav{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}.paper-faq-toc nav a,.paper-settings-toc nav a{flex-shrink:0;white-space:nowrap}.paper-faq-body,.paper-settings-body{grid-template-columns:minmax(0,1fr)}.paper-faq-toc,.paper-settings-toc{position:static}.paper-faq-toc nav,.paper-settings-toc nav{display:flex;flex-direction:row;gap:0 16px}.paper-faq-toc nav a,.paper-settings-toc nav a{display:inline-flex;align-items:center;padding:8px 0;margin-left:0;border-left:0;border-bottom:2px solid transparent}.paper-faq-toc nav a.active,.paper-faq-toc nav a:hover,.paper-settings-toc nav a.active,.paper-settings-toc nav a:hover{border-bottom-color:var(--accent)}.paper-page .dashboard-filter-controls .dropdown .dropdown-toggle{justify-content:flex-start;gap:6px}.paper-page .dashboard-filter-controls .dropdown .dropdown-toggle::after{margin-left:auto}}@media (max-width:480px){.paper-page .paper-page-lede{display:block;-webkit-line-clamp:unset;overflow:visible}}.navbar .btn-signin,.navbar .btn-signin:hover{background:var(--accent);border-color:var(--accent);color:#fff!important}.dark-mode .navbar .btn-signin,.dark-mode .navbar .btn-signin:hover{color:#1a1815!important}.navbar .btn-signin:hover{filter:brightness(.94)}.paper-progress .paper-progress-bar,.paper-progress.paper-progress-ready .paper-progress-bar{background:var(--accent)}.paper-progress .paper-progress-label{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.paper-error-eyebrow,.paper-support-card .paper-support-eyebrow{font-family:var(--font-sans);font-size:12px;font-weight:500;letter-spacing:0;text-transform:none}.leftCol-foot .last-update{font-family:var(--font-sans);font-size:11px;letter-spacing:0}.paper-proof-venues span{font-family:var(--font-sans);font-size:18px;font-weight:600;letter-spacing:.02em;color:var(--ink-soft)}.markdown-body mark.redaction{background:var(--accent-soft);color:var(--accent);border-radius:3px;padding:0 2px}.ace_marker-layer .ace_redaction{position:absolute;background:var(--accent-soft);border-radius:3px}.leftCol-project-header{flex-wrap:wrap;row-gap:2px}.project-expiry{flex:1 0 100%;display:flex;align-items:center;gap:4px;font-size:12px;color:var(--ink-muted)}.project-expiry .ui-icon{width:12px;height:12px}.status-bar-actions .btn-icon-only{width:32px;padding:0;justify-content:center}.share-link-row{display:flex;gap:8px;margin-top:4px}.share-link-input{flex:1;min-width:0;font-family:var(--font-mono);font-size:14px;background:var(--paper-bg-alt)}.share-link-row .btn{flex-shrink:0;display:inline-flex;align-items:center;gap:6px;min-width:112px;justify-content:center}.share-link-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.share-link-actions .btn{display:inline-flex;align-items:center;gap:6px}.status-page .paper-support-grid{gap:0 32px}.status-page .paper-support-card{padding:16px 0 0;border:0;border-top:1px solid var(--border-color);border-radius:0;background:0 0}.status-page .paper-support-card:hover{border-color:var(--color)}@media (min-width:992px){.paper-table .cell-expires{white-space:nowrap}}.paper-settings .paper-settings-main .paper-settings-section{background:0 0;border:0;border-bottom:1px solid var(--border-color);border-radius:0;padding:0 0 28px;margin-bottom:28px}.paper-settings .paper-settings-main .paper-settings-section:last-of-type{border-bottom:0}@media (max-width:991px){.paper-settings .paper-settings-main .paper-settings-section{padding:0 0 20px;margin-bottom:20px}.share-link-row{flex-direction:column}.share-link-actions{flex-direction:column}.share-link-actions .btn{justify-content:center}.status-page .paper-support-grid{row-gap:20px}}.paper-page .q-range-btns{display:inline-flex;gap:2px;padding:2px;border:1px solid var(--border-color);border-radius:var(--radius-control);background:var(--paper-card);overflow:visible}.paper-page .q-range-btns .btn,.paper-page .q-range-btns .btn+.btn{min-height:0;height:28px;padding:0 10px;border:0;border-radius:4px;background:0 0;color:var(--ink-muted);font:500 13px/1 var(--font-sans)}.paper-page .q-range-btns .btn:hover{background:var(--hover-bg-color);color:var(--color)}.paper-page .q-range-btns .btn.active{background:var(--accent-soft);color:var(--accent)}.q-header-actions>.btn{height:34px;min-height:34px}.paper-page .btn.btn-danger-soft{background:0 0;border-color:var(--status-error);color:var(--status-error)}.paper-page .btn.btn-danger-soft:hover{background:var(--status-error-soft-hover);border-color:var(--status-error);color:var(--status-error)}.q-auto-refresh,.q-section-label,.q-state-chip{font-family:var(--font-sans);letter-spacing:0;text-transform:none}.q-state-chip{font-size:12px;text-transform:capitalize}.overview-page .ov-ebar-fill{display:block}.paper-table .paper-table-row.repo-error{border-left:0;box-shadow:inset 2px 0 0 var(--status-error);padding-left:16px}.admin-page .q-table th,.admin-page .type-badge,.admin-page .user-detail-section h2,.admin-page section>h2,.admin-page th,.admin-page>h2,.errors-page .col-count,.errors-page .col-mod,.errors-page .col-msg,.errors-page .col-sev,.errors-page .col-status,.errors-page .col-when,.overview-page .ov-chart-legend,.overview-page .ov-ebar-label,.overview-page .ov-route-n,.overview-page .ov-route-name,.q-card-sub,.q-delay-hint,.q-legend-completed,.q-legend-exec,.q-legend-failed,.q-section-right,.q-stat-label,.user-detail-grid .detail-label{font-family:var(--font-sans);letter-spacing:0;text-transform:none}.admin-page th,.errors-page [class^=col-]{font-size:12px;font-weight:500;color:var(--ink-muted)}.q-card-sub,.q-stat-label,.user-detail-grid .detail-label{font-size:12px}.q-stat-value{font-family:var(--font-sans);font-size:20px;font-weight:600;font-variant-numeric:tabular-nums}.q-state-badge{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:capitalize}.admin-page .type-badge{font-size:12px;text-transform:none}.errors-page .col-sev span,.errors-page .sev-label{text-transform:capitalize}.dark-mode .overview-page .ov-daily-value,.overview-page .ov-daily-value{color:var(--color)}.dark-mode .overview-page .ov-spark-fill-alt,.dark-mode .overview-page .ov-spark-fill-new-user,.dark-mode .overview-page .ov-spark-fill-user,.overview-page .ov-spark-fill-alt,.overview-page .ov-spark-fill-new-user,.overview-page .ov-spark-fill-user{background:var(--accent)}.dark-mode .overview-page .ov-dot-new-user-fill,.dark-mode .overview-page .ov-dot-ok-fill,.dark-mode .overview-page .ov-dot-user-fill,.overview-page .ov-dot-new-user-fill,.overview-page .ov-dot-ok-fill,.overview-page .ov-dot-user-fill{background:var(--accent)}.errors-page .seg-tabs{display:inline-flex;gap:2px;padding:2px;border:1px solid var(--border-color);border-radius:var(--radius-control);background:var(--paper-card)}.errors-page .seg-tabs button,.errors-page .seg-tabs button+button{min-height:0;height:30px;padding:0 10px;border:0;border-radius:4px;background:0 0;color:var(--ink-muted);font:500 13px/1 var(--font-sans)}.errors-page .seg-tabs button:hover{background:var(--hover-bg-color);color:var(--color)}.errors-page .seg-tabs button.active{background:var(--accent-soft);color:var(--accent)}.user-detail-card .user-header .status-dot-wrap{display:inline-flex;align-items:center;gap:6px;font-size:14px;font-weight:400;color:var(--ink-soft)}.user-detail-card .user-actions{display:flex;flex-wrap:wrap;gap:8px}.admin-page .paper-table .cell-anon .anon-sub{flex-wrap:wrap;row-gap:2px}.admin-page .paper-table .anon-sub>a,.admin-page .paper-table .anon-sub>span{flex:0 1 auto;max-width:100%;white-space:nowrap}.admin-page .paper-table .cell-views .mobile-meta-icon{margin-right:4px}.q-jobs{overflow-x:auto}.q-job-detail-label{font-family:var(--font-sans);font-size:12px;letter-spacing:0;text-transform:none}.admin-section-header h2{font-family:var(--font-sans);font-size:16px;font-weight:600;letter-spacing:0;text-transform:none;color:var(--color)}.errors-page .sev-label{font-family:var(--font-sans);font-size:13px;letter-spacing:0}.email-prompt{width:min(560px,calc(100vw - 32px));padding:28px;border:1px solid var(--paper-border,#e5e1d9);border-radius:12px;background:var(--paper-bg,#faf9f6);color:inherit;box-shadow:0 16px 64px #0003}.email-prompt::backdrop{background:#0006}.email-prompt h2{margin:0 0 12px;font-size:24px}.email-prompt p{margin-bottom:20px}.email-prompt-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end;margin-top:24px}body.dark-mode .email-prompt{background:#242320;color:#faf9f6}.file-error .viewer-error{width:100%;max-width:65ch;padding:2rem 1rem;overflow-wrap:anywhere;font-size:1rem;font-weight:400;text-align:left}.viewer-error .paper-empty-title{margin-bottom:1rem}.viewer-error p{line-height:1.6}.viewer-error .paper-error-actions{display:flex;flex-wrap:wrap;gap:.75rem}.markdown-body .markdown-alert{margin:1rem 0;padding:.5rem 1rem;border-left:4px solid var(--alert-color,#0969da)}.markdown-body .markdown-alert-note{--alert-color:#0969da}.markdown-body .markdown-alert-tip{--alert-color:#1a7f37}.markdown-body .markdown-alert-important{--alert-color:#8250df}.markdown-body .markdown-alert-warning{--alert-color:#9a6700}.markdown-body .markdown-alert-caution{--alert-color:#cf222e}.markdown-body .markdown-alert-title{color:var(--alert-color);font-weight:600;display:flex;align-items:center;gap:.5rem}.markdown-body .markdown-alert-title svg{fill:currentColor;flex-shrink:0}.markdown-body .markdown-alert>:last-child{margin-bottom:0}body.dark-mode .markdown-alert-note{--alert-color:#79c0ff}body.dark-mode .markdown-alert-tip{--alert-color:#7ee787}body.dark-mode .markdown-alert-important{--alert-color:#d2a8ff}body.dark-mode .markdown-alert-warning{--alert-color:#e3b341}body.dark-mode .markdown-alert-caution{--alert-color:#ff7b72}.markdown-body .emoji{display:inline;vertical-align:text-bottom}.markdown-body .footnotes{margin-top:2rem;border-top:1px solid var(--border-color,#d0d7de);padding-top:1rem;font-size:.875em}.markdown-body .katex-display{overflow-x:auto;overflow-y:hidden;padding:.25rem 0}.markdown-body .markdown-diagram{margin:1rem 0;border:1px solid var(--border-color,#d0d7de);padding:.75rem}.markdown-body .markdown-diagram svg{display:block;width:100%;max-height:360px}.markdown-body .markdown-diagram path{fill:#a7b2ff;fill-opacity:.5;stroke:var(--link-color,#3b4ad6);stroke-width:1;vector-effect:non-scaling-stroke}.markdown-body .diagram-controls{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.5rem}.markdown-body .diagram-controls button{min-width:44px;min-height:44px;padding:.25rem .75rem;border:1px solid var(--border-color,#d0d7de);background:var(--main-bg-color,#fff);color:inherit;border-radius:4px}.markdown-body .diagram-controls button:hover{background:var(--hover-bg-color,#f6f8fa)}.markdown-body .diagram-controls button:focus-visible{outline:2px solid var(--link-color,#0969da);outline-offset:2px}.markdown-body .hljs-keyword,.markdown-body .hljs-selector-tag{color:#cf222e}.markdown-body .hljs-attr,.markdown-body .hljs-string{color:#0a3069}.markdown-body .hljs-literal,.markdown-body .hljs-number,.markdown-body .hljs-title{color:#8250df}.markdown-body .hljs-comment{color:#57606a}body.dark-mode .markdown-body .hljs-keyword{color:#ff7b72}body.dark-mode .markdown-body .hljs-attr,body.dark-mode .markdown-body .hljs-string{color:#a5d6ff}body.dark-mode .markdown-body .hljs-literal,body.dark-mode .markdown-body .hljs-number,body.dark-mode .markdown-body .hljs-title{color:#d2a8ff}body.dark-mode .markdown-body .hljs-comment{color:#b1bac4}body.dark-mode .markdown-body .gh-light-mode-only,body:not(.dark-mode) .markdown-body .gh-dark-mode-only{display:none}@media (max-width:600px){.ov-cache .ov-performance-window{display:grid;grid-template-columns:auto minmax(0,1fr);width:100%}.ov-cache .ov-performance-window select{width:100%;min-width:0}} \ No newline at end of file diff --git a/public/css/style.css b/public/css/style.css index fd0f401..fcef212 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -7953,3 +7953,12 @@ body.dark-mode .markdown-body .hljs-comment { color: #b1bac4; } body:not(.dark-mode) .markdown-body .gh-dark-mode-only, body.dark-mode .markdown-body .gh-light-mode-only { display: none; } + +@media (max-width: 600px) { + .ov-cache .ov-performance-window { + display: grid; + grid-template-columns: auto minmax(0, 1fr); + width: 100%; + } + .ov-cache .ov-performance-window select { width: 100%; min-width: 0; } +} diff --git a/public/partials/admin/overview.htm b/public/partials/admin/overview.htm index aa44c7b..5d38c04 100644 --- a/public/partials/admin/overview.htm +++ b/public/partials/admin/overview.htm @@ -276,6 +276,57 @@ +
+
+

Cache

+

Shared storage, repeated reads and anonymization work · refreshes every 30 seconds

+
+ + + + +
+
+ +

Loading cache monitoring…

+ +
+
diff --git a/public/script/admin.js b/public/script/admin.js index bfc0566..67a84cd 100644 --- a/public/script/admin.js +++ b/public/script/admin.js @@ -1737,6 +1737,48 @@ export const overviewAdminController = function (state, http, location, interval state.performance = null; state.performanceMinutes = 15; state.performanceTab = "routes"; + state.cacheReport = null; + state.cacheError = null; + state.cacheMinutes = 60; + state.cacheTraffic = "all"; + var cacheLoading = false; + state.loadCache = function () { + if (cacheLoading) return; + cacheLoading = true; + var minutes = state.cacheMinutes; + http.get("/api/admin/cache", { params: { minutes: minutes } }).then(function (r) { + if (minutes !== state.cacheMinutes) return; + state.cacheReport = r.data; + state.cacheError = r.data.available ? null : (r.data.reason || "Cache monitoring is unavailable."); + }, function () { + state.cacheError = "Could not refresh cache monitoring. Displayed values may be stale."; + }).finally(function () { + cacheLoading = false; + if (minutes !== state.cacheMinutes) state.loadCache(); + }); + }; + state.cacheRows = function () { + return (state.cacheReport?.rows || []).filter(function (row) { + return state.cacheTraffic === "all" || row.traffic === state.cacheTraffic; + }); + }; + state.cacheRate = function (prefix, field) { + var rows = state.cacheRows(); + var sum = function (name) { return rows.filter(function (r) { return r.name === name; }).reduce(function (n, r) { return n + r[field]; }, 0); }; + var hits = sum(prefix + "_hit"), misses = sum(prefix + "_miss"); + return hits + misses ? (100 * hits / (hits + misses)).toFixed(1) + "%" : "No samples"; + }; + state.cacheEventName = function (name) { return name.replaceAll("_", " "); }; + state.cacheP95 = function (row) { + var count = 0, bounds = state.cacheReport?.latencyBucketsMs || []; + if (!row.count) return "No samples"; + if (!row.ms) return "Not timed"; + for (var i = 0; i <= bounds.length; i++) { + count += row["b" + i] || 0; + if (count >= Math.ceil(row.count * 0.95)) return i < bounds.length ? "≤ " + bounds[i] + " ms" : "> 10 s"; + } + return "No samples"; + }; state.performanceError = null; // 18400 ms reads better as 18.4 s once a value passes one second. state.formatMs = function (ms) { @@ -1891,6 +1933,7 @@ export const overviewAdminController = function (state, http, location, interval function load() { state.loadPerformance(); + state.loadCache(); http.get("/api/admin/overview").then(function (r) { r.data.history = computeDailyHistory(r.data.history); r.data.daily = { diff --git a/public/script/vendor.min.js b/public/script/vendor.min.js index da24b0b..664ace1 100644 --- a/public/script/vendor.min.js +++ b/public/script/vendor.min.js @@ -1,30 +1,30 @@ -"use strict";(()=>{var kd=Object.defineProperty;var Ed=(e,t)=>{for(var n in t)kd(e,n,{get:t[n],enumerable:!0})};var pe=["abap","abc","actionscript","ada","alda","apache_conf","apex","applescript","aql","asciidoc","asl","assembly_x86","autohotkey","batchfile","c9search","c_cpp","cirru","clojure","cobol","coffee","coldfusion","crystal","csharp","csound_document","csound_orchestra","csound_score","csp","css","curly","d","dart","diff","django","dockerfile","dot","drools","edifact","eiffel","ejs","elixir","elm","erlang","forth","fortran","fsharp","fsl","ftl","gcode","gherkin","gitignore","glsl","gobstones","golang","graphqlschema","groovy","haml","handlebars","haskell","haskell_cabal","haxe","hjson","html","html_elixir","html_ruby","ini","io","jack","jade","java","javascript","json","json5","jsoniq","jsp","jssm","jsx","julia","kotlin","latex","less","liquid","lisp","livescript","logiql","logtalk","lsl","lua","luapage","lucene","makefile","markdown","mask","matlab","maze","mediawiki","mel","mixal","mushcode","mysql","nginx","nim","nix","nsis","nunjucks","objectivec","ocaml","pascal","perl","perl6","pgsql","php","php_laravel_blade","pig","plain_text","powershell","praat","prisma","prolog","properties","protobuf","puppet","python","qml","r","razor","rdoc","red","redshift","rhtml","rst","ruby","rust","sass","scad","scala","scheme","scss","sh","sjs","slim","smarty","snippets","soy_template","space","sparql","sql","sqlserver","stylus","svg","swift","tcl","terraform","tex","text","textile","toml","tsx","turtle","twig","typescript","vala","vbscript","velocity","verilog","vhdl","visualforce","wollok","xml","xquery","yaml","zeek"];var fe={markdown:"/script/markdown.6c8dfb7b1d.min.js",notebook:"/script/notebook.c3144c18ae.min.js",org:"/script/org.f61f262915.min.js",editor:"/script/editor.4f142d3adc.min.js",pdf:"/script/pdf.4d9cc6ff49.min.js"};function br(e){let t=e.location.hash.slice(1);if(e.history.replaceState(null,"","/review-link"),t.length>2048)return null;let n=new URLSearchParams(t);if([...n.keys()].length!==3||[...n.keys()].some(a=>!["clientId","intentId","token"].includes(a)))return null;let r=n.get("clientId"),s=n.get("intentId"),i=n.get("token");return!/^[a-f0-9]{32}$/.test(r||"")||!/^[a-f0-9]{32}$/.test(s||"")||!/^[a-f0-9]{64}$/.test(i||"")?null:{contract:"4open.artifacts/1",clientId:r,intentId:s,token:i}}function wr(e,t){let{http:n,promises:r,window:s}=t,i=t.takeReviewHandoff(),a=i?{clientId:i.clientId,intentId:i.intentId}:null,u,m,k,y,E,h=!0,C,g=r.defer(),b=()=>[...s.crypto.getRandomValues(new Uint8Array(16))].map(M=>M.toString(16).padStart(2,"0")).join("");Object.assign(e,{repositoryId:"",handoffEnabled:!1,busy:!1,preview:null,acceptAccess:!1,acceptRetention:!1,uncertain:!1,saved:!1,expired:!1,error:i?"":"Open a new artifact link from your submission. This link is missing or invalid."});let S=()=>h&&e.user?.username===E;function R(){h=!1,i=u=m=void 0,g.resolve(),s.clearTimeout(C)}e.on("dispose",R),e.on("routeLeave",R),e.watch(()=>e.user?.username,M=>{!E&&M?E=M:E&&M!==E&&(R(),e.preview=null,e.repositoryId="",e.busy=!1,e.saved=!1,e.handoffEnabled=!1,e.error="Your account changed. Open a new artifact link from your submission.")});let T=()=>({timeout:g.promise,headers:{"Content-Type":"application/json","X-Review-CSRF":m}}),q=M=>M?.status===404?"Artifact linking is not available on this server.":M?.status===401?"Sign in, then open a new artifact link from your submission.":M?.status===403?"This account cannot approve this repository or this link.":"The request could not be completed. You can retry from this page.";e.loadPreview=async()=>{if(!h||!i||e.busy||e.uncertain||e.saved||!e.user?.username)return;E=e.user.username;let M=e.repositoryId.trim();if(!/^[A-Za-z0-9_-]{3,128}$/.test(M)){e.error="Enter the anonymous repository ID from its URL.";return}e.busy=!0,e.error="",e.preview=null,u=void 0,e.acceptAccess=e.acceptRetention=!1,e.expired=!1,s.clearTimeout(C),y||(y=b());try{let V=(await n.get("/api/review-consent/csrf",{timeout:g.promise})).data;if(!S())return;if(m=V.csrf,e.handoffEnabled=V.handoffEnabled===!0,!/^[a-f0-9]{64}$/.test(m||""))throw new Error("invalid_csrf");let z=(await n.post("/api/review-consent/preview",{repositoryId:M,intent:{...i,requestId:y}},T())).data;if(!S())return;if(!z||typeof z.ticket!="string"||!z.ticket||z.ticket.length>8192||typeof z.repositoryName!="string"||!["restricted-review","anonymous-link"].includes(z.policy?.access)||!Number.isSafeInteger(z.policy.version)||!Number.isFinite(Date.parse(z.policy.retainUntil))||!Number.isFinite(Date.parse(z.expiresAt))||Date.parse(z.expiresAt)<=Date.now()||Date.parse(z.expiresAt)>Date.now()+6e5)throw new Error("invalid_preview");u=z.ticket,k=b(),e.preview={repositoryName:z.repositoryName,policy:{...z.policy},expiresAt:z.expiresAt},C=s.setTimeout(()=>{h&&(e.expired=!0)},Math.max(0,Date.parse(z.expiresAt)-Date.now()))}catch(V){S()&&(e.error=q(V))}finally{S()&&(e.busy=!1)}},e.confirmConsent=async()=>{if(!(!S()||e.busy||e.saved||!u||!e.acceptAccess||!e.acceptRetention)){if(Date.parse(e.preview.expiresAt)<=Date.now()){e.expired=!0;return}e.busy=!0,e.error="";try{let M=(await n.post("/api/review-consent/confirm",{ticket:u,requestId:k,acceptAccess:!0,acceptRetention:!0},T())).data;if(!S())return;if(M?.requestId!==k||!Number.isFinite(Date.parse(M.confirmedAt)))throw new Error("invalid_receipt");e.saved=!0,e.uncertain=!1,i=void 0,e.handoffEnabled||(u=void 0)}catch{S()&&(e.uncertain=!0,e.error="The confirmation was not verified. Retry with the same approval, or return to your submission to check its status.")}finally{S()&&(e.busy=!1)}}},e.continueReview=async()=>{if(!S()||e.busy||!e.saved||!e.handoffEnabled||!u||!a)return;e.busy=!0,e.error="";let M,V=()=>{M?.remove(),s.removeEventListener("securitypolicyviolation",z)},z=ne=>{ne.violatedDirective?.startsWith("form-action")&&(V(),S()&&(e.busy=!1,e.error="The return address was blocked. Return to your submission to check the artifact status."))};try{let ne=(await n.post("/api/review-consent/handoff",{ticket:u},T())).data;if(!S())return;let ee=ne?.completion,_=new URL(ne?.callbackUrl);if(!ee||Object.keys(ee).sort().join(",")!=="clientId,code,contract,expiresAt,intentId"||ee.contract!=="4open.artifacts/1"||ee.clientId!==a.clientId||ee.intentId!==a.intentId||!/^[a-f0-9]{64}$/.test(ee.code||"")||!Number.isFinite(Date.parse(ee.expiresAt))||Date.parse(ee.expiresAt)<=Date.now()||Date.parse(ee.expiresAt)>Date.now()+3e5||_.protocol!=="https:"||_.href!==ne.callbackUrl||_.username||_.password||ne.callbackUrl.includes("?")||ne.callbackUrl.includes("#"))throw new Error("invalid_handoff");M=s.document.createElement("form"),M.method="POST",M.action=_.href;let P=s.document.createElement("input");P.type="hidden",P.name="completion",P.value=JSON.stringify(ee),M.appendChild(P),s.document.body.appendChild(M),s.addEventListener("securitypolicyviolation",z),e.on("dispose",V),M.submit()}catch{V(),S()&&(e.busy=!1,e.error="The return to review could not be prepared. Retry from this page, or return to your submission to check its status.")}}}var yn=new Map,Sd=fe;function oo(e){if(!yn.has(e)){let t=document.createElement("script");t.src=Sd[e];let n=new Promise((r,s)=>{t.onload=r,t.onerror=()=>{yn.delete(e),t.remove(),s(new Error(`Unable to load ${e}. Please retry.`))}});yn.set(e,n),document.head.appendChild(t)}return yn.get(e)}async function kr(){await oo("editor"),ace.config.set("basePath","/script/external/ace/")}function vo(e){let t=Object.create(null);for(let n of e.split(","))t[n]=1;return n=>n in t}var Ae={},xt=[],it=()=>{},us=()=>!1,yo=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),go=e=>e.startsWith("onUpdate:"),je=Object.assign,Vo=(e,t)=>{let n=e.indexOf(t);n>-1&&e.splice(n,1)},Nd=Object.prototype.hasOwnProperty,Ne=(e,t)=>Nd.call(e,t),me=Array.isArray,Bt=e=>qo(e)==="[object Map]",Et=e=>qo(e)==="[object Set]",Er=e=>qo(e)==="[object Date]";var ge=e=>typeof e=="function",Le=e=>typeof e=="string",ft=e=>typeof e=="symbol",Re=e=>e!==null&&typeof e=="object",cs=e=>(Re(e)||ge(e))&&ge(e.then)&&ge(e.catch),Nr=Object.prototype.toString,qo=e=>Nr.call(e),ps=e=>qo(e).slice(8,-1),gn=e=>qo(e)==="[object Object]",bn=e=>Le(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,bo=vo(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted");var wn=e=>{let t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},Dd=/-\w/g,Ye=wn(e=>e.replace(Dd,t=>t.slice(1).toUpperCase())),Rd=/\B([A-Z])/g,At=wn(e=>e.replace(Rd,"-$1").toLowerCase()),no=wn(e=>e.charAt(0).toUpperCase()+e.slice(1)),Mo=wn(e=>e?`on${no(e)}`:""),yt=(e,t)=>!Object.is(e,t),wo=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},ko=e=>{let t=parseFloat(e);return isNaN(t)?e:t};var Cr,Uo=()=>Cr||(Cr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Ie(e){if(me(e)){let t={};for(let n=0;nn.startsWith("/*")?"":n).split(Td).forEach(n=>{if(n){let r=n.split(Ad);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function A(e){let t="";if(Le(e))t=e;else if(me(e))for(let n=0;nCt(n,t))}var Tr=e=>!!(e&&e.__v_isRef===!0),c=e=>Le(e)?e:e==null?"":me(e)||Re(e)&&(e.toString===Nr||!ge(e.toString))?Tr(e)?c(e.value):JSON.stringify(e,Ar,2):String(e),Ar=(e,t)=>Tr(t)?Ar(e,t.value):Bt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,s],i)=>(n[ds(r,i)+" =>"]=s,n),{})}:Et(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>ds(n))}:ft(t)?ds(t):Re(t)&&!me(t)&&!gn(t)?String(t):t,ds=(e,t="")=>{var n;return ft(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};function Md(e,...t){console.warn(`[Vue warn] ${e}`,...t)}var Je,zo=class{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&Je&&(Je.active?(this.parent=Je,this.index=(Je.scopes||(Je.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes){let r=this.scopes.slice();for(t=0,n=r.length;t0&&--this._on===0){if(Je===this)Je=this.prevScope;else{let t=Je;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let n,r;for(n=0,r=this.effects.length;n0)return;if(Fo){let t=Fo;for(Fo=void 0;t;){let n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Lo;){let t=Lo;for(Lo=void 0;t;){let n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(r){e||(e=r)}t=n}}if(e)throw e}function Ur(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function $r(e){let t,n=e.depsTail,r=n;for(;r;){let s=r.prevDep;r.version===-1?(r===n&&(n=s),Ns(r),Ud(r)):t=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=s}e.deps=t,e.depsTail=n}function vs(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Lr(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Lr(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Ho)||(e.globalVersion=Ho,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!vs(e))))return;e.flags|=2;let t=e.dep,n=$e,r=_t;$e=e,_t=!0;try{Ur(e);let s=e.fn(e._value);(t.version===0||yt(s,e._value))&&(e.flags|=128,e._value=s,t.version++)}catch(s){throw t.version++,s}finally{$e=n,_t=r,$r(e),e.flags&=-3}}function Ns(e,t=!1){let{dep:n,prevSub:r,nextSub:s}=e;if(r&&(r.nextSub=s,e.prevSub=void 0),s&&(s.prevSub=r,e.nextSub=void 0),n.subs===e&&(n.subs=r,!r&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)Ns(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Ud(e){let{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}var _t=!0,Fr=[];function St(){Fr.push(_t),_t=!1}function Nt(){let e=Fr.pop();_t=e===void 0?!0:e}function Or(e){let{cleanup:t}=e;if(e.cleanup=void 0,t){let n=$e;$e=void 0;try{t()}finally{$e=n}}}var Ho=0,ys=class{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}},Bo=class{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!$e||!_t||$e===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==$e)n=this.activeLink=new ys($e,this),$e.deps?(n.prevDep=$e.depsTail,$e.depsTail.nextDep=n,$e.depsTail=n):$e.deps=$e.depsTail=n,zr(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){let r=n.nextDep;r.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=r),n.prevDep=$e.depsTail,n.nextDep=void 0,$e.depsTail.nextDep=n,$e.depsTail=n,$e.deps===n&&($e.deps=r)}return n}trigger(t){this.version++,Ho++,this.notify(t)}notify(t){_s();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Ss()}}};function zr(e){if(e.dep.sc++,e.sub.flags&4){let t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let r=t.deps;r;r=r.nextDep)zr(r)}let n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}var gs=new WeakMap,ro=Symbol(""),bs=Symbol(""),jo=Symbol("");function Ze(e,t,n){if(_t&&$e){let r=gs.get(e);r||gs.set(e,r=new Map);let s=r.get(n);s||(r.set(n,s=new Bo),s.map=r,s.key=n),s.track()}}function It(e,t,n,r,s,i){let a=gs.get(e);if(!a){Ho++;return}let u=m=>{m&&m.trigger()};if(_s(),t==="clear")a.forEach(u);else{let m=me(e),k=m&&bn(n);if(m&&n==="length"){let y=Number(r);a.forEach((E,h)=>{(h==="length"||h===jo||!ft(h)&&h>=y)&&u(E)})}else switch((n!==void 0||a.has(void 0))&&u(a.get(n)),k&&u(a.get(jo)),t){case"add":m?k&&u(a.get("length")):(u(a.get(ro)),Bt(e)&&u(a.get(bs)));break;case"delete":m||(u(a.get(ro)),Bt(e)&&u(a.get(bs)));break;case"set":Bt(e)&&u(a.get(ro));break}}Ss()}function Eo(e){let t=De(e);return t===e||(Ze(t,"iterate",jo),at(e))?t:gt(e)?Vt(e)?t.map(n=>Gt(mt(n))):t.map(Gt):t.map(mt)}function Wo(e){return Ze(e=De(e),"iterate",jo),e}function Ot(e,t){return gt(e)?Gt(Vt(e)?mt(t):t):mt(t)}var $d={__proto__:null,[Symbol.iterator](){return ms(this,Symbol.iterator,e=>Ot(this,e))},concat(...e){return Eo(this).concat(...e.map(t=>me(t)?Eo(t):t))},entries(){return ms(this,"entries",e=>(e[1]=Ot(this,e[1]),e))},every(e,t){return jt(this,"every",e,t,void 0,arguments)},filter(e,t){return jt(this,"filter",e,t,n=>n.map(r=>Ot(this,r)),arguments)},find(e,t){return jt(this,"find",e,t,n=>Ot(this,n),arguments)},findIndex(e,t){return jt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return jt(this,"findLast",e,t,n=>Ot(this,n),arguments)},findLastIndex(e,t){return jt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return jt(this,"forEach",e,t,void 0,arguments)},includes(...e){return hs(this,"includes",e)},indexOf(...e){return hs(this,"indexOf",e)},join(e){return Eo(this).join(e)},lastIndexOf(...e){return hs(this,"lastIndexOf",e)},map(e,t){return jt(this,"map",e,t,void 0,arguments)},pop(){return $o(this,"pop")},push(...e){return $o(this,"push",e)},reduce(e,...t){return Pr(this,"reduce",e,t)},reduceRight(e,...t){return Pr(this,"reduceRight",e,t)},shift(){return $o(this,"shift")},some(e,t){return jt(this,"some",e,t,void 0,arguments)},splice(...e){return $o(this,"splice",e)},toReversed(){return Eo(this).toReversed()},toSorted(e){return Eo(this).toSorted(e)},toSpliced(...e){return Eo(this).toSpliced(...e)},unshift(...e){return $o(this,"unshift",e)},values(){return ms(this,"values",e=>Ot(this,e))}};function ms(e,t,n){let r=Wo(e),s=r[t],i=s.call(r);if(r!==e&&!at(e)){if(i[Symbol.toStringTag]==="Array Iterator"){let a=Object.create(Object.getPrototypeOf(i));return a.next=()=>Ir(i.next(),n),s!==Hr[t]&&Object.defineProperties(a,{return:{get(){let u=i.return;return typeof u=="function"?u.bind(i):u}},throw:{get(){let u=i.throw;return typeof u=="function"?u.bind(i):u}}}),a}i._next=i.next,i.next=()=>Ir(i._next(),n)}return i}function Ir(e,t){return e.done||(e.value=t(e.value)),e}var Hr=Array.prototype;function jt(e,t,n,r,s,i){let a=Wo(e),u=a!==e&&!at(e),m=a[t];if(m!==Hr[t]){let E=m.apply(e,i);return u?mt(E):E}let k=n;a!==e&&(u?k=function(E,h){return n.call(this,Ot(e,E),h,e)}:n.length>2&&(k=function(E,h){return n.call(this,E,h,e)}));let y=m.call(a,k,r);return u&&s?s(y):y}function Pr(e,t,n,r){let s=Wo(e),i=s!==e&&!at(e),a=n,u=!1;s!==e&&(i?(u=r.length===0,a=function(k,y,E){return u&&(u=!1,k=Ot(e,k)),n.call(this,k,Ot(e,y),E,e)}):n.length>3&&(a=function(k,y,E){return n.call(this,k,y,E,e)}));let m=s[t](a,...r);return u?Ot(e,m):m}function hs(e,t,n){let r=De(e);Ze(r,"iterate",jo);let s=r[t](...n);return(s===-1||s===!1)&&Yo(n[0])?(n[0]=De(n[0]),r[t](...n)):s}function $o(e,t,n=[]){St(),_s();let r=De(e)[t].apply(e,n);return Ss(),Nt(),r}var Ld=vo("__proto__,__v_isRef,__isVue"),Br=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(ft));function Fd(e){ft(e)||(e=String(e));let t=De(this);return Ze(t,"has",e),t.hasOwnProperty(e)}var Dn=class{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){if(n==="__v_skip")return t.__v_skip;let s=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!s;if(n==="__v_isReadonly")return s;if(n==="__v_isShallow")return i;if(n==="__v_raw")return r===(s?i?Jd:Wr:i?Gr:jr).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;let a=me(t);if(!s){let m;if(a&&(m=$d[n]))return m;if(n==="hasOwnProperty")return Fd}let u=Reflect.get(t,n,Xe(t)?t:r);if((ft(n)?Br.has(n):Ld(n))||(s||Ze(t,"get",n),i))return u;if(Xe(u)){let m=a&&bn(n)?u:u.value;return s&&Re(m)?Tn(m):m}return Re(u)?s?Tn(u):Fe(u):u}},Rn=class extends Dn{constructor(t=!1){super(!1,t)}set(t,n,r,s){let i=t[n],a=me(t)&&bn(n);if(!this._isShallow){let k=gt(i);if(!at(r)&&!gt(r)&&(i=De(i),r=De(r)),!a&&Xe(i)&&!Xe(r))return k||(i.value=r),!0}let u=a?Number(n)e,_n=e=>Reflect.getPrototypeOf(e);function jd(e,t,n){return function(...r){let s=this.__v_raw,i=De(s),a=Bt(i),u=e==="entries"||e===Symbol.iterator&&a,m=e==="keys"&&a,k=s[e](...r),y=n?ks:t?Gt:mt;return!t&&Ze(i,"iterate",m?bs:ro),je(Object.create(k),{next(){let{value:E,done:h}=k.next();return h?{value:E,done:h}:{value:u?[y(E[0]),y(E[1])]:y(E),done:h}}})}}function Sn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Gd(e,t){let n={get(s){let i=this.__v_raw,a=De(i),u=De(s);e||(yt(s,u)&&Ze(a,"get",s),Ze(a,"get",u));let{has:m}=_n(a),k=t?ks:e?Gt:mt;if(m.call(a,s))return k(i.get(s));if(m.call(a,u))return k(i.get(u));i!==a&&i.get(s)},get size(){let s=this.__v_raw;return!e&&Ze(De(s),"iterate",ro),s.size},has(s){let i=this.__v_raw,a=De(i),u=De(s);return e||(yt(s,u)&&Ze(a,"has",s),Ze(a,"has",u)),s===u?i.has(s):i.has(s)||i.has(u)},forEach(s,i){let a=this,u=a.__v_raw,m=De(u),k=t?ks:e?Gt:mt;return!e&&Ze(m,"iterate",ro),u.forEach((y,E)=>s.call(i,k(y),k(E),a))}};return je(n,e?{add:Sn("add"),set:Sn("set"),delete:Sn("delete"),clear:Sn("clear")}:{add(s){let i=De(this),a=_n(i),u=De(s),m=!t&&!at(s)&&!gt(s)?u:s;return a.has.call(i,m)||yt(s,m)&&a.has.call(i,s)||yt(u,m)&&a.has.call(i,u)||(i.add(m),It(i,"add",m,m)),this},set(s,i){!t&&!at(i)&&!gt(i)&&(i=De(i));let a=De(this),{has:u,get:m}=_n(a),k=u.call(a,s);k||(s=De(s),k=u.call(a,s));let y=m.call(a,s);return a.set(s,i),k?yt(i,y)&&It(a,"set",s,i,y):It(a,"add",s,i),this},delete(s){let i=De(this),{has:a,get:u}=_n(i),m=a.call(i,s);m||(s=De(s),m=a.call(i,s));let k=u?u.call(i,s):void 0,y=i.delete(s);return m&&It(i,"delete",s,void 0,k),y},clear(){let s=De(this),i=s.size!==0,a=void 0,u=s.clear();return i&&It(s,"clear",void 0,void 0,a),u}}),["keys","values","entries",Symbol.iterator].forEach(s=>{n[s]=jd(s,e,t)}),n}function Ds(e,t){let n=Gd(e,t);return(r,s,i)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_isShallow"?t:s==="__v_raw"?r:Reflect.get(Ne(n,s)&&s in r?n:r,s,i)}var Wd={get:Ds(!1,!1)},Kd={get:Ds(!1,!0)},Yd={get:Ds(!0,!1)};var jr=new WeakMap,Gr=new WeakMap,Wr=new WeakMap,Jd=new WeakMap;function Qd(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Fe(e){return gt(e)?e:Rs(e,!1,zd,Wd,jr)}function Ko(e){return Rs(e,!1,Bd,Kd,Gr)}function Tn(e){return Rs(e,!0,Hd,Yd,Wr)}function Rs(e,t,n,r,s){if(!Re(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;let i=s.get(e);if(i)return i;let a=Qd(ps(e));if(a===0)return e;let u=new Proxy(e,a===2?r:n);return s.set(e,u),u}function Vt(e){return gt(e)?Vt(e.__v_raw):!!(e&&e.__v_isReactive)}function gt(e){return!!(e&&e.__v_isReadonly)}function at(e){return!!(e&&e.__v_isShallow)}function Yo(e){return e?!!e.__v_raw:!1}function De(e){let t=e&&e.__v_raw;return t?De(t):e}function Ts(e){return!Ne(e,"__v_skip")&&Object.isExtensible(e)&&kn(e,"__v_skip",!0),e}var mt=e=>Re(e)?Fe(e):e,Gt=e=>Re(e)?Tn(e):e;function Xe(e){return e?e.__v_isRef===!0:!1}function xe(e){return Kr(e,!1)}function On(e){return Kr(e,!0)}function Kr(e,t){return Xe(e)?e:new Es(e,t)}var Es=class{constructor(t,n){this.dep=new Bo,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:De(t),this._value=n?t:mt(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){let n=this._rawValue,r=this.__v_isShallow||at(t)||gt(t);t=r?t:De(t),yt(t,n)&&(this._rawValue=t,this._value=r?t:mt(t),this.dep.trigger())}};function Wt(e){return Xe(e)?e.value:e}var Xd={get:(e,t,n)=>t==="__v_raw"?e:Wt(Reflect.get(e,t,n)),set:(e,t,n,r)=>{let s=e[t];return Xe(s)&&!Xe(n)?(s.value=n,!0):Reflect.set(e,t,n,r)}};function In(e){return Vt(e)?e:new Proxy(e,Xd)}var Cs=class{constructor(t,n,r){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Bo(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Ho-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=r}notify(){if(this.flags|=16,!(this.flags&8)&&$e!==this)return Mr(this,!0),!0}get value(){let t=this.dep.track();return Lr(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}};function Yr(e,t,n=!1){let r,s;return ge(e)?r=e:(r=e.get,s=e.set),new Cs(r,s,n)}var Nn={},An=new WeakMap,so;function Jr(e,t=!1,n=so){if(n){let r=An.get(n);r||An.set(n,r=[]),r.push(e)}}function Qr(e,t,n=Ae){let{immediate:r,deep:s,once:i,scheduler:a,augmentJob:u,call:m}=n,k=V=>{(n.onWarn||Md)("Invalid watch source: ",V,"A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.")},y=V=>s?V:at(V)||s===!1||s===0?Pt(V,1):Pt(V),E,h,C,g,b=!1,S=!1;if(Xe(e)?(h=()=>e.value,b=at(e)):Vt(e)?(h=()=>y(e),b=!0):me(e)?(S=!0,b=e.some(V=>Vt(V)||at(V)),h=()=>e.map(V=>{if(Xe(V))return V.value;if(Vt(V))return y(V);if(ge(V))return m?m(V,2):V()})):ge(e)?t?h=m?()=>m(e,2):e:h=()=>{if(C){St();try{C()}finally{Nt()}}let V=so;so=E;try{return m?m(e,3,[g]):e(g)}finally{so=V}}:h=it,t&&s){let V=h,z=s===!0?1/0:s;h=()=>Pt(V(),z)}let R=Vr(),T=()=>{E.stop(),R&&R.active&&Vo(R.effects,E)};if(i&&t){let V=t;t=(...z)=>{try{return V(...z)}finally{T()}}}let q=S?new Array(e.length).fill(Nn):Nn,M=V=>{if(!(!(E.flags&1)||!E.dirty&&!V))if(t){let z=E.run();if(V||s||b||(S?z.some((ne,ee)=>yt(ne,q[ee])):yt(z,q))){let ne=so;St();try{C&&C(),so=E;let ee=[z,q===Nn?void 0:S&&q[0]===Nn?[]:q,g];q=z,m?m(t,3,ee):t(...ee)}finally{so=ne,Nt()}}}else E.run()};return u&&u(M),E=new Co(h),E.scheduler=a?()=>a(M,!1):M,g=V=>Jr(V,!1,E),C=E.onStop=()=>{let V=An.get(E);if(V){if(m)m(V,4);else for(let z of V)z();An.delete(E)}},t?r?M(!0):q=E.run():a?a(M.bind(null,!0),!0):E.run(),T.pause=E.pause.bind(E),T.resume=E.resume.bind(E),T.stop=T,T}function Pt(e,t=1/0,n){if(t<=0||!Re(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Xe(e))Pt(e.value,t,n);else if(me(e))for(let r=0;r{Pt(r,t,n)});else if(gn(e)){for(let r in e)Pt(e[r],t,n);for(let r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&Pt(e[r],t,n)}return e}function an(e,t,n,r){try{return r?e(...r):e()}catch(s){ln(s,t,n)}}function bt(e,t,n,r){if(ge(e)){let s=an(e,t,n,r);return s&&cs(s)&&s.catch(i=>{ln(i,t,n)}),s}if(me(e)){let s=[];for(let i=0;i>>1,s=st[r],i=tn(s);i=tn(n)?st.push(e):st.splice(ou(t),0,e),e.flags|=1,fi()}}function fi(){qn||(qn=pi.then(yi))}function mi(e){if(!me(e))eo&&e.id===-1?eo.splice(_o+1,0,e):e.flags&1||(Mt.push(e),e.flags|=1);else for(let t=0;t=t))continue;st.splice(r,1),r=e?r-1:Dt,s.flags&4&&(s.flags&=-2),s(),s.flags&4||(s.flags&=-2)}}}function vi(e,t,n=0){if(Mt.length){let r=Mt,s=0;if(t){r=[];for(let a=0;atn(a)-tn(u));if(Mt.length=s,eo){for(let a=0;ae.id==null?e.flags&2?-1:1/0:e.id;function yi(e){let t=it;try{for(Dt=0;Dt{r._d&&Ln(-1);let i=Mn(t),a=lo.length,u;try{u=e(...s)}finally{for(let m=lo.length;m>a;m--)Ki();Mn(i),r._d&&Ln(1)}return u};return r._n=!0,r._c=!0,r._d=!0,r}function N(e,t){if(ht===null)return e;let n=Kn(ht),r=e.dirs||(e.dirs=[]);for(let s=0;s1)return n&&ge(t)?t.call(r&&r.proxy):t}}var ru=Symbol.for("v-scx"),iu=()=>{{let e=dt(ru);return e}};function He(e,t,n){return bi(e,t,n)}function bi(e,t,n=Ae){let{immediate:r,deep:s,flush:i,once:a}=n,u=je({},n),m=t&&r||!t&&i!=="post",k;if(Do){if(i==="sync"){let C=iu();k=C.__watcherHandles||(C.__watcherHandles=[])}else if(!m){let C=()=>{};return C.stop=it,C.resume=it,C.pause=it,C}}let y=et;u.call=(C,g,b)=>bt(C,y,g,b);let E=!1;i==="post"?u.scheduler=C=>{C.i=y,lt(C,y&&y.suspense)}:i!=="sync"&&(E=!0,u.scheduler=(C,g)=>{g?C():zs(C)}),u.augmentJob=C=>{t&&(C.flags|=4),E&&(C.flags|=2,y&&(C.id=y.uid,C.i=y))};let h=Qr(e,t,u);return Do&&(k?k.push(h):m&&h()),h}function au(e,t,n){let r=this.proxy,s=Le(e)?e.includes(".")?wi(r,e):()=>r[e]:e.bind(r,r),i;ge(t)?i=t:(i=t.handler,n=t);let a=cn(this),u=bi(s,i.bind(r),n);return a(),u}function wi(e,t){let n=t.split(".");return()=>{let r=e;for(let s=0;se.__isTeleport;var Os=Symbol("_leaveCb");function du(e){let t=e[0];if(e.length>1){let n=!1;for(let r of e)if(r.type!==Rt){t=r,n=!0;break}}return t}function ki(e){if(!Bn(e))return Hn(e.type)&&e.children?du(e.children):e;if(e.component)return e.component.subTree;let{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&ge(n.default))return n.default()}}function on(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;let n=e.component.subTree;on(Hn(n.type)&&ki(n)||n,t)}else if(e.shapeFlag&128)e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback);else if(e.transition=t,e.type===K&&me(e.children)){let n=Pi(e.children,!1);n&&on(n,t)}}function qs(e){if(e.component)return qs(e.component.subTree);if(e.type===K){let t=me(e.children)&&Pi(e.children,!1);return t?qs(t):void 0}if(e.type!==Rt)return e}function dn(e,t){return ge(e)?je({name:e.name},t,{setup:e}):e}function Hs(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function Xr(e,t){let n;return!!((n=Object.getOwnPropertyDescriptor(e,t))&&!n.configurable)}var Un=new WeakMap;function Xo(e,t,n,r,s=!1){if(me(e)){e.forEach((b,S)=>Xo(b,t&&(me(t)?t[S]:t),n,r,s));return}if(Zo(r)&&!s){r.shapeFlag&512&&r.type.__asyncResolved&&r.component.subTree.component&&Xo(e,t,n,r.component.subTree);return}let i=r.shapeFlag&4?Kn(r.component):r.el,a=s?null:i,{i:u,r:m}=e,k=t&&t.r,y=u.refs===Ae?u.refs={}:u.refs,E=u.setupState,h=De(E),C=E===Ae?us:b=>Xr(y,b)?!1:Ne(h,b),g=(b,S)=>!(S&&Xr(y,S));if(k!=null&&k!==m){if(Zr(t),Le(k))y[k]=null,C(k)&&(E[k]=null);else if(Xe(k)){let b=t;g(k,b.k)&&(k.value=null),b.k&&(y[b.k]=null)}}if(ge(m))an(m,u,12,[a,y]);else{let b=Le(m),S=Xe(m);if(b||S){let R=()=>{if(e.f){let T=b?C(m)?E[m]:y[m]:g(m)||!e.k?m.value:y[e.k];if(s)me(T)&&Vo(T,i);else if(me(T))T.includes(i)||T.push(i);else if(b)y[m]=[i],C(m)&&(E[m]=y[m]);else{let q=[i];g(m,e.k)&&(m.value=q),e.k&&(y[e.k]=q)}}else b?(y[m]=a,C(m)&&(E[m]=a)):S&&(g(m,e.k)&&(m.value=a),e.k&&(y[e.k]=a))};if(a){let T=()=>{R(),Un.delete(e)};T.id=-1,Un.set(e,T),lt(T,n)}else Zr(e),R()}}}function Zr(e){let t=Un.get(e);t&&(t.flags|=8,Un.delete(e))}var xr=e=>e.nodeType===8;var dU=Uo().requestIdleCallback||(e=>setTimeout(e,1)),uU=Uo().cancelIdleCallback||(e=>clearTimeout(e));function uu(e,t){if(xr(e)&&e.data==="["){let n=1,r=e.nextSibling;for(;r;){if(r.nodeType===1){if(t(r)===!1)break}else if(xr(r))if(r.data==="]"){if(--n===0)break}else r.data==="["&&n++;r=r.nextSibling}}else t(e)}var Zo=e=>!!e.type.__asyncLoader;function Ei(e){ge(e)&&(e={loader:e});let{loader:t,loadingComponent:n,errorComponent:r,delay:s=200,hydrate:i,timeout:a,suspensible:u=!0,onError:m}=e,k=null,y,E=0,h=()=>(E++,k=null,C()),C=()=>{let g;return k||(g=k=t().catch(b=>{if(b=b instanceof Error?b:new Error(String(b)),m)return new Promise((S,R)=>{m(b,()=>S(h()),()=>R(b),E+1)});throw b}).then(b=>g!==k&&k?k:(b&&(b.__esModule||b[Symbol.toStringTag]==="Module")&&(b=b.default),y=b,b)))};return dn({name:"AsyncComponentWrapper",__asyncLoader:C,__asyncHydrate(g,b,S){let R=g.isConnected,T=!1;(b.bu||(b.bu=[])).push(()=>T=!0);let q=()=>{T||!g.parentNode||R&&!g.isConnected||S()},M=i?()=>{let V=i(q,z=>uu(g,z));V&&(b.bum||(b.bum=[])).push(V)}:q;y?M():C().then(()=>!b.isUnmounted&&M())},get __asyncResolved(){return y},setup(){let g=et;if(Hs(g),y)return()=>Pn(y,g);let b=V=>{k=null,ln(V,g,13,!r)};if(u&&g.suspense||Do)return C().then(V=>()=>Pn(V,g)).catch(V=>(b(V),()=>r?Ce(r,{error:V}):null));let S=xe(!1),R=xe(),T=xe(!!s),q,M;return un(()=>{q!=null&&clearTimeout(q),M!=null&&clearTimeout(M)}),s&&(M=setTimeout(()=>{g.isUnmounted||(T.value=!1)},s)),a!=null&&(q=setTimeout(()=>{if(!g.isUnmounted&&!S.value&&!R.value){let V=new Error(`Async component timed out after ${a}ms.`);b(V),R.value=V}},a)),C().then(()=>{g.isUnmounted||(S.value=!0,g.parent&&Bn(g.parent.vnode)&&g.parent.update())}).catch(V=>{if(g.isUnmounted){k=null;return}b(V),R.value=V}),()=>{if(S.value&&y)return Pn(y,g);if(R.value&&r)return Ce(r,{error:R.value});if(n&&!T.value)return Pn(n,g)}}})}function Pn(e,t){let{ref:n,props:r,children:s,ce:i}=t.vnode,a=Ce(e,r,s);return a.ref=n,a.ce=i,delete t.vnode.ce,a}var Bn=e=>e.type.__isKeepAlive;function Ci(e,t){Si(e,"a",t)}function _i(e,t){Si(e,"da",t)}function Si(e,t,n=et){let r=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if(jn(t,r,n),n){let s=n.parent;for(;s&&s.parent;)Bn(s.parent.vnode)&&cu(r,t,n,s),s=s.parent}}function cu(e,t,n,r){let s=jn(t,e,r,!0);un(()=>{Vo(r[t],s)},n)}function jn(e,t,n=et,r=!1){if(n){let s=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...a)=>{St();let u=cn(n),m=bt(t,n,e,a);return u(),Nt(),m});return r?s.unshift(i):s.push(i),i}}var Yt=e=>(t,n=et)=>{(!Do||e==="sp")&&jn(e,(...r)=>t(...r),n)},pu=Yt("bm"),$t=Yt("m"),Ni=Yt("bu"),Di=Yt("u"),co=Yt("bum"),un=Yt("um"),fu=Yt("sp"),mu=Yt("rtg"),hu=Yt("rtc");function vu(e,t=et){jn("ec",e,t)}var Ri="components",yu="directives";function Ge(e,t){return Ti(Ri,e,!0,t)||e}var gu=Symbol.for("v-ndc");function ve(e){return Ti(yu,e)}function Ti(e,t,n=!0,r=!1){let s=ht||et;if(s){let i=s.type;if(e===Ri){let u=tc(i,!1);if(u&&(u===t||u===Ye(t)||u===no(Ye(t))))return i}let a=ei(s[e]||i[e],t)||ei(s.appContext[e],t);return!a&&r?i:a}}function ei(e,t){return e&&(e[t]||e[Ye(t)]||e[no(Ye(t))])}function oe(e,t,n,r){let s,i=n&&n[r],a=me(e);if(a||Le(e)){let u=a&&Vt(e),m=!1,k=!1;u&&(m=!at(e),k=gt(e),e=Wo(e)),s=new Array(e.length);for(let y=0,E=e.length;yt(u,m,void 0,i&&i[m]));else{let u=Object.keys(e);s=new Array(u.length);for(let m=0,k=u.length;me?Xi(e)?Kn(e):Ms(e.parent):null;var xo=je(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Ms(e.parent),$root:e=>Ms(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Bs(e),$forceUpdate:e=>e.f||(e.f=()=>{zs(e.update)}),$nextTick:e=>e.n||(e.n=ot.bind(e.proxy)),$watch:e=>au.bind(e)});var Is=(e,t)=>e!==Ae&&!e.__isScriptSetup&&Ne(e,t),bu={get({_:e},t){if(t==="__v_skip")return!0;let{ctx:n,setupState:r,data:s,props:i,accessCache:a,type:u,appContext:m}=e;if(t[0]!=="$"){let h=a[t];if(h!==void 0)switch(h){case 1:return r[t];case 2:return s[t];case 4:return n[t];case 3:return i[t]}else{if(Is(r,t))return a[t]=1,r[t];if(s!==Ae&&Ne(s,t))return a[t]=2,s[t];if(Ne(i,t))return a[t]=3,i[t];if(n!==Ae&&Ne(n,t))return a[t]=4,n[t];Us&&(a[t]=0)}}let k=xo[t],y,E;if(k)return t==="$attrs"&&Ze(e.attrs,"get",""),k(e);if((y=u.__cssModules)&&(y=y[t]))return y;if(n!==Ae&&Ne(n,t))return a[t]=4,n[t];if(E=m.config.globalProperties,Ne(E,t))return E[t]},set({_:e},t,n){let{data:r,setupState:s,ctx:i}=e;return Is(s,t)?(s[t]=n,!0):r!==Ae&&Ne(r,t)?(r[t]=n,!0):Ne(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:s,props:i,type:a}},u){let m;return!!(n[u]||e!==Ae&&u[0]!=="$"&&Ne(e,u)||Is(t,u)||Ne(i,u)||Ne(r,u)||Ne(xo,u)||Ne(s.config.globalProperties,u)||(m=a.__cssModules)&&m[u])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Ne(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function ti(e){return me(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}var Us=!0;function wu(e){let t=Bs(e),n=e.proxy,r=e.ctx;Us=!1,t.beforeCreate&&oi(t.beforeCreate,e,"bc");let{data:s,computed:i,methods:a,watch:u,provide:m,inject:k,created:y,beforeMount:E,mounted:h,beforeUpdate:C,updated:g,activated:b,deactivated:S,beforeDestroy:R,beforeUnmount:T,destroyed:q,unmounted:M,render:V,renderTracked:z,renderTriggered:ne,errorCaptured:ee,serverPrefetch:_,expose:P,inheritAttrs:G,components:J,directives:X,filters:W}=t;if(k&&ku(k,r,null),a)for(let de in a){let re=a[de];ge(re)&&(r[de]=re.bind(n))}if(s){let de=s.call(n,n);Re(de)&&(e.data=Fe(de))}if(Us=!0,i)for(let de in i){let re=i[de],_e=ge(re)?re.bind(n,n):ge(re.get)?re.get.bind(n,n):it,qe=!ge(re)&&ge(re.set)?re.set.bind(n):it,Me=tt({get:_e,set:qe});Object.defineProperty(r,de,{enumerable:!0,configurable:!0,get:()=>Me.value,set:Pe=>Me.value=Pe})}if(u)for(let de in u)Ai(u[de],r,n,de);if(m){let de=ge(m)?m.call(n):m;Reflect.ownKeys(de).forEach(re=>{uo(re,de[re])})}y&&oi(y,e,"c");function ce(de,re){me(re)?re.forEach(_e=>de(_e.bind(n))):re&&de(re.bind(n))}if(ce(pu,E),ce($t,h),ce(Ni,C),ce(Di,g),ce(Ci,b),ce(_i,S),ce(vu,ee),ce(hu,z),ce(mu,ne),ce(co,T),ce(un,M),ce(fu,_),me(P))if(P.length){let de=e.exposed||(e.exposed={});P.forEach(re=>{Object.defineProperty(de,re,{get:()=>n[re],set:_e=>n[re]=_e,enumerable:!0})})}else e.exposed||(e.exposed={});V&&e.render===it&&(e.render=V),G!=null&&(e.inheritAttrs=G),J&&(e.components=J),X&&(e.directives=X),_&&Hs(e)}function ku(e,t,n=it){me(e)&&(e=$s(e));for(let r in e){let s=e[r],i;Re(s)?"default"in s?i=dt(s.from||r,s.default,!0):i=dt(s.from||r):i=dt(s),Xe(i)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>i.value,set:a=>i.value=a}):t[r]=i}}function oi(e,t,n){bt(me(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function Ai(e,t,n,r){let s=r.includes(".")?wi(n,r):()=>n[r];if(Le(e)){let i=t[e];ge(i)&&He(s,i)}else if(ge(e))He(s,e.bind(n));else if(Re(e))if(me(e))e.forEach(i=>Ai(i,t,n,r));else{let i=ge(e.handler)?e.handler.bind(n):t[e.handler];ge(i)&&He(s,i,e)}}function Bs(e){let t=e.type,{mixins:n,extends:r}=t,{mixins:s,optionsCache:i,config:{optionMergeStrategies:a}}=e.appContext,u=i.get(t),m;return u?m=u:!s.length&&!n&&!r?m=t:(m={},s.length&&s.forEach(k=>$n(m,k,a,!0)),$n(m,t,a)),Re(t)&&i.set(t,m),m}function $n(e,t,n,r=!1){let{mixins:s,extends:i}=t;i&&$n(e,i,n,!0),s&&s.forEach(a=>$n(e,a,n,!0));for(let a in t)if(!(r&&a==="expose")){let u=Eu[a]||n&&n[a];e[a]=u?u(e[a],t[a]):t[a]}return e}var Eu={data:ni,props:si,emits:si,methods:Qo,computed:Qo,beforeCreate:nt,created:nt,beforeMount:nt,mounted:nt,beforeUpdate:nt,updated:nt,beforeDestroy:nt,beforeUnmount:nt,destroyed:nt,unmounted:nt,activated:nt,deactivated:nt,errorCaptured:nt,serverPrefetch:nt,components:Qo,directives:Qo,watch:_u,provide:ni,inject:Cu};function ni(e,t){return t?e?function(){return je(ge(e)?e.call(this,this):e,ge(t)?t.call(this,this):t)}:t:e}function Cu(e,t){return Qo($s(e),$s(t))}function $s(e){if(me(e)){let t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ye(t)}Modifiers`]||e[`${At(t)}Modifiers`];function Ru(e,t,...n){if(e.isUnmounted)return;let r=e.vnode.props||Ae,s=n,i=t.startsWith("update:"),a=i&&Du(r,t.slice(7));a&&(a.trim&&(s=n.map(y=>Le(y)?y.trim():y)),a.number&&(s=s.map(ko)));let u,m=r[u=Mo(t)]||r[u=Mo(Ye(t))];!m&&i&&(m=r[u=Mo(At(t))]),m&&bt(m,e,6,s);let k=r[u+"Once"];if(k){if(!e.emitted)e.emitted={};else if(e.emitted[u])return;e.emitted[u]=!0,bt(k,e,6,s)}}var Tu=new WeakMap;function Ii(e,t,n=!1){let r=n?Tu:t.emitsCache,s=r.get(e);if(s!==void 0)return s;let i=e.emits,a={},u=!1;if(!ge(e)){let m=k=>{let y=Ii(k,t,!0);y&&(u=!0,je(a,y))};!n&&t.mixins.length&&t.mixins.forEach(m),e.extends&&m(e.extends),e.mixins&&e.mixins.forEach(m)}return!i&&!u?(Re(e)&&r.set(e,null),null):(me(i)?i.forEach(m=>a[m]=null):je(a,i),Re(e)&&r.set(e,a),a)}function Gn(e,t){return!e||!yo(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),Ne(e,t[0].toLowerCase()+t.slice(1))||Ne(e,At(t))||Ne(e,t))}function Ps(e){let{type:t,vnode:n,proxy:r,withProxy:s,propsOptions:[i],slots:a,attrs:u,emit:m,render:k,renderCache:y,props:E,data:h,setupState:C,ctx:g,inheritAttrs:b}=e,S=Mn(e),R,T;try{if(n.shapeFlag&4){let V=s||r,z=V;R=Ut(k.call(z,V,y,E,C,h,g)),T=u}else{let V=t;R=Ut(V.length>1?V(E,{attrs:u,slots:a,emit:m}):V(E,null)),T=t.props?u:Au(u)}}catch(V){lo.length=0,ln(V,e,1),R=Ce(Rt)}let q=R,M;if(T&&b!==!1){let V=Object.keys(T),{shapeFlag:z}=q;V.length&&z&7&&(i&&V.some(go)&&(T=Ou(T,i)),q=No(q,T,!1,!0))}if(n.dirs&&(q=No(q,null,!1,!0),q.dirs=q.dirs?q.dirs.concat(n.dirs):n.dirs),n.transition){let V=Hn(q.type)&&ki(q)||q;on(V,n.transition)}return R=q,Mn(S),R}function Pi(e,t=!0){let n;for(let r=0;r{let t;for(let n in e)(n==="class"||n==="style"||yo(n))&&((t||(t={}))[n]=e[n]);return t},Ou=(e,t)=>{let n={};for(let r in e)(!go(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function Iu(e,t,n){let{props:r,children:s,component:i}=e,{props:a,children:u,patchFlag:m}=t,k=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&m>=0){if(m&1024)return!0;if(m&16)return r?ri(r,a,k):!!a;if(m&8){let y=t.dynamicProps;for(let E=0;EObject.create(qi),Ui=e=>Object.getPrototypeOf(e)===qi;function Vu(e,t,n,r=!1){let s={},i=Mi();e.propsDefaults=Object.create(null),$i(e,t,s,i);for(let a in e.propsOptions[0])a in s||(s[a]=void 0);n?e.props=r?s:Ko(s):e.type.props?e.props=s:e.props=i,e.attrs=i}function qu(e,t,n,r){let{props:s,attrs:i,vnode:{patchFlag:a}}=e,u=De(s),[m]=e.propsOptions,k=!1;if((r||a>0)&&!(a&16)){if(a&8){let y=e.vnode.dynamicProps;for(let E=0;E{m=!0;let[h,C]=Li(E,t,!0);je(a,h),C&&u.push(...C)};!n&&t.mixins.length&&t.mixins.forEach(y),e.extends&&y(e.extends),e.mixins&&e.mixins.forEach(y)}if(!i&&!m)return Re(e)&&r.set(e,xt),xt;if(me(i))for(let y=0;ye==="_"||e==="_ctx"||e==="$stable",Gs=e=>me(e)?e.map(Ut):[Ut(e)],Uu=(e,t,n)=>{if(t._n)return t;let r=su((...s)=>Gs(t(...s)),n);return r._c=!1,r},Fi=(e,t,n)=>{let r=e._ctx;for(let s in e){if(js(s))continue;let i=e[s];if(ge(i))t[s]=Uu(s,i,r);else if(i!=null){let a=Gs(i);t[s]=()=>a}}},zi=(e,t)=>{let n=Gs(t);e.slots.default=()=>n},Hi=(e,t,n)=>{for(let r in t)(n||!js(r))&&(e[r]=t[r])},$u=(e,t,n)=>{let r=e.slots=Mi();if(e.vnode.shapeFlag&32){let s=t._;s?(Hi(r,t,n),n&&kn(r,"_",s,!0)):Fi(t,r)}else t&&zi(e,t)},Lu=(e,t,n)=>{let{vnode:r,slots:s}=e,i=!0,a=Ae;if(r.shapeFlag&32){let u=t._;u?n&&u===1?i=!1:Hi(s,t,n):(i=!t.$stable,Fi(t,s)),a=t}else t&&(zi(e,t),a={default:1});if(i)for(let u in s)!js(u)&&a[u]==null&&delete s[u]};function Fu(){let e=[]}var lt=ju;function Bi(e){return zu(e)}function zu(e,t){Fu();let n=Uo();n.__VUE__=!0;let{insert:r,remove:s,patchProp:i,createElement:a,createText:u,createComment:m,setText:k,setElementText:y,parentNode:E,nextSibling:h,setScopeId:C=it,insertStaticContent:g}=e,b=(p,v,D,O=null,I=null,U=null,L=void 0,H=null,Y=!!v.dynamicChildren)=>{if(p===v)return;p&&!Jo(p,v)&&(O=Z(p),Se(p,I,U,!0),p=null),v.patchFlag===-2&&(Y=!1,v.dynamicChildren=null),v.dynamicChildren&&p&&p.dynamicChildren&&p.dynamicChildren.hasOnce&&(v.dynamicChildren===xt&&(v.dynamicChildren=[]),v.dynamicChildren.hasOnce=!0);let{type:B,ref:le,shapeFlag:x}=v;switch(B){case Wn:S(p,v,D,O);break;case Rt:R(p,v,D,O);break;case en:p==null&&T(v,D,O,L);break;case K:X(p,v,D,O,I,U,L,H,Y);break;default:x&1?z(p,v,D,O,I,U,L,H,Y):x&6?W(p,v,D,O,I,U,L,H,Y):(x&64||x&128)&&B.process(p,v,D,O,I,U,L,H,Y,te)}le!=null&&I?Xo(le,p&&p.ref,U,v||p,!v):le==null&&p&&p.ref!=null&&Xo(p.ref,null,U,p,!0)},S=(p,v,D,O)=>{if(p==null)r(v.el=u(v.children),D,O);else{let I=v.el=p.el;v.children!==p.children&&k(I,v.children)}},R=(p,v,D,O)=>{p==null?r(v.el=m(v.children||""),D,O):v.el=p.el},T=(p,v,D,O)=>{[p.el,p.anchor]=g(p.children,v,D,O,p.el,p.anchor)},q=(p,v,D,O)=>{if(v.children!==p.children){let I=h(p.anchor);V(p),[v.el,v.anchor]=g(v.children,D,I,O)}else v.el=p.el,v.anchor=p.anchor},M=({el:p,anchor:v},D,O)=>{let I;for(;p&&p!==v;)I=h(p),r(p,D,O),p=I;r(v,D,O)},V=({el:p,anchor:v})=>{let D;for(;p&&p!==v;)D=h(p),s(p),p=D;s(v)},z=(p,v,D,O,I,U,L,H,Y)=>{if(v.type==="svg"?L="svg":v.type==="math"&&(L="mathml"),p==null)ne(v,D,O,I,U,L,H,Y);else{let B=p.el&&p.el._isVueCE?p.el:null;try{B&&B._beginPatch(),P(p,v,I,U,L,H,Y)}finally{B&&B._endPatch()}}},ne=(p,v,D,O,I,U,L,H)=>{let Y,B,{props:le,shapeFlag:x,transition:ae,dirs:he}=p;if(Y=p.el=a(p.type,U,le&&le.is,le),x&8?y(Y,p.children):x&16&&_(p.children,Y,null,O,I,Vs(p,U),L,H),he&&io(p,null,O,"created"),ee(Y,p,p.scopeId,L,O),le){for(let Ve in le)Ve!=="value"&&!bo(Ve)&&i(Y,Ve,null,le[Ve],U,O);"value"in le&&i(Y,"value",null,le.value,U),(B=le.onVnodeBeforeMount)&&qt(B,O,p)}he&&io(p,null,O,"beforeMount");let we=Hu(I,ae);we&&ae.beforeEnter(Y),r(Y,v,D),((B=le&&le.onVnodeMounted)||we||he)&<(()=>{let Oe;B&&qt(B,O,p),we&&ae.enter(Y),he&&io(p,null,O,"mounted")},I)},ee=(p,v,D,O,I)=>{if(D&&C(p,D),O)for(let U=0;U{for(let B=Y;B{let H=v.el=p.el,{patchFlag:Y,dynamicChildren:B,dirs:le}=v;Y|=p.patchFlag&16;let x=p.props||Ae,ae=v.props||Ae,he;if(D&&ao(D,!1),(he=ae.onVnodeBeforeUpdate)&&qt(he,D,v,p),le&&io(v,p,D,"beforeUpdate"),D&&ao(D,!0),B&&(!p.dynamicChildren||p.dynamicChildren.length!==B.length)&&(Y=0,L=!1,B=null),(x.innerHTML&&ae.innerHTML==null||x.textContent&&ae.textContent==null)&&y(H,""),B?G(p.dynamicChildren,B,H,D,O,Vs(v,I),U):L||_e(p,v,H,null,D,O,Vs(v,I),U,!1),Y>0){if(Y&16)J(H,x,ae,D,I);else if(Y&2&&x.class!==ae.class&&i(H,"class",null,ae.class,I),Y&4&&i(H,"style",x.style,ae.style,I),Y&8){let we=v.dynamicProps;for(let Ve=0;Ve{he&&qt(he,D,v,p),le&&io(v,p,D,"updated")},O)},G=(p,v,D,O,I,U,L)=>{for(let H=0;H{if(v!==D){if(v!==Ae)for(let U in v)!bo(U)&&!(U in D)&&i(p,U,v[U],null,I,O);for(let U in D){if(bo(U))continue;let L=D[U],H=v[U];L!==H&&U!=="value"&&i(p,U,H,L,I,O)}"value"in D&&i(p,"value",v.value,D.value,I)}},X=(p,v,D,O,I,U,L,H,Y)=>{let B=v.el=p?p.el:u(""),le=v.anchor=p?p.anchor:u(""),{patchFlag:x,dynamicChildren:ae,slotScopeIds:he}=v;he&&(H=H?H.concat(he):he),p==null?(r(B,D,O),r(le,D,O),_(v.children||[],D,le,I,U,L,H,Y)):x>0&&x&64&&ae&&p.dynamicChildren&&p.dynamicChildren.length===ae.length?(G(p.dynamicChildren,ae,D,I,U,L,H),(v.key!=null||I&&v===I.subTree)&&ji(p,v,!0)):_e(p,v,D,le,I,U,L,H,Y)},W=(p,v,D,O,I,U,L,H,Y)=>{v.slotScopeIds=H,p==null?v.shapeFlag&512?I.ctx.activate(v,D,O,L,Y):se(v,D,O,I,U,L,Y):ce(p,v,Y)},se=(p,v,D,O,I,U,L)=>{let H=p.component=Qu(p,O,I);if(Bn(p)&&(H.ctx.renderer=te),Xu(H,!1,L),H.asyncDep){if(I&&I.registerDep(H,de,L,U),!p.el){let Y=H.subTree=Ce(Rt);R(null,Y,v,D),p.placeholder=Y.el}}else de(H,p,v,D,I,U,L)},ce=(p,v,D)=>{let O=v.component=p.component;if(Iu(p,v,D))if(O.asyncDep&&!O.asyncResolved){v.el=p.el,v.placeholder=p.placeholder,re(O,v,D);return}else O.next=v,O.update();else v.el=p.el,v.placeholder=p.placeholder,O.vnode=v},de=(p,v,D,O,I,U,L)=>{let H=()=>{if(p.isMounted){let{next:x,bu:ae,u:he,parent:we,vnode:Ve}=p;{let ct=Gi(p);if(ct){x&&(x.el=Ve.el,re(p,x,L)),ct.asyncDep.then(()=>{lt(()=>{p.isUnmounted||B()},I)});return}}let Oe=x,We;ao(p,!1),x?(x.el=Ve.el,re(p,x,L)):x=Ve,ae&&wo(ae),(We=x.props&&x.props.onVnodeBeforeUpdate)&&qt(We,we,x,Ve),ao(p,!0);let Ke=Ps(p),kt=p.subTree;p.subTree=Ke,b(kt,Ke,E(kt.el),Z(kt),p,I,U),x.el=Ke.el,Oe===null&&Pu(p,Ke.el),he&<(he,I),(We=x.props&&x.props.onVnodeUpdated)&<(()=>qt(We,we,x,Ve),I)}else{let x,{el:ae,props:he}=v,{bm:we,m:Ve,parent:Oe,root:We,type:Ke}=p,kt=Zo(v);if(ao(p,!1),we&&wo(we),!kt&&(x=he&&he.onVnodeBeforeMount)&&qt(x,Oe,v),ao(p,!0),ae&&Ee){let ct=()=>{p.subTree=Ps(p),Ee(ae,p.subTree,p,I,null)};kt&&Ke.__asyncHydrate?Ke.__asyncHydrate(ae,p,ct):ct()}else{We.ce&&We.ce._hasShadowRoot()&&We.ce._injectChildStyle(Ke,p.parent?p.parent.type:void 0);let ct=p.subTree=Ps(p);b(null,ct,D,O,p,I,U),v.el=ct.el}if(Ve&<(Ve,I),!kt&&(x=he&&he.onVnodeMounted)){let ct=v;lt(()=>qt(x,Oe,ct),I)}(v.shapeFlag&256||Oe&&Zo(Oe.vnode)&&Oe.vnode.shapeFlag&256)&&p.a&<(p.a,I),p.isMounted=!0,v=D=O=null}};p.scope.on();let Y=p.effect=new Co(H);p.scope.off();let B=p.update=Y.run.bind(Y),le=p.job=Y.runIfDirty.bind(Y);le.i=p,le.id=p.uid,Y.scheduler=()=>zs(le),ao(p,!0),B()},re=(p,v,D)=>{v.component=p;let O=p.vnode.props;p.vnode=v,p.next=null,qu(p,v.props,O,D),Lu(p,v.children,D),St(),hi(p),Nt()},_e=(p,v,D,O,I,U,L,H,Y=!1)=>{let B=p&&p.children,le=p?p.shapeFlag:0,x=v.children,{patchFlag:ae,shapeFlag:he}=v;if(ae>0){if(ae&128){Me(B,x,D,O,I,U,L,H,Y);return}else if(ae&256){qe(B,x,D,O,I,U,L,H,Y);return}}he&8?(le&16&&F(B,I,U),x!==B&&y(D,x)):le&16?he&16?Me(B,x,D,O,I,U,L,H,Y):F(B,I,U,!0):(le&8&&y(D,""),he&16&&_(x,D,O,I,U,L,H,Y))},qe=(p,v,D,O,I,U,L,H,Y)=>{p=p||xt,v=v||xt;let B=p.length,le=v.length,x=Math.min(B,le),ae;for(ae=0;aele?F(p,I,U,!0,!1,x):_(v,D,O,I,U,L,H,Y,x)},Me=(p,v,D,O,I,U,L,H,Y)=>{let B=0,le=v.length,x=p.length-1,ae=le-1;for(;B<=x&&B<=ae;){let he=p[B],we=v[B]=Y?Kt(v[B]):Ut(v[B]);if(Jo(he,we))b(he,we,D,null,I,U,L,H,Y);else break;B++}for(;B<=x&&B<=ae;){let he=p[x],we=v[ae]=Y?Kt(v[ae]):Ut(v[ae]);if(Jo(he,we))b(he,we,D,null,I,U,L,H,Y);else break;x--,ae--}if(B>x){if(B<=ae){let he=ae+1,we=heae)for(;B<=x;)Se(p[B],I,U,!0),B++;else{let he=B,we=B,Ve=new Map;for(B=we;B<=ae;B++){let pt=v[B]=Y?Kt(v[B]):Ut(v[B]);pt.key!=null&&Ve.set(pt.key,B)}let Oe,We=0,Ke=ae-we+1,kt=!1,ct=0,Po=new Array(Ke);for(B=0;B=Ke){Se(pt,I,U,!0);continue}let Tt;if(pt.key!=null)Tt=Ve.get(pt.key);else for(Oe=we;Oe<=ae;Oe++)if(Po[Oe-we]===0&&Jo(pt,v[Oe])){Tt=Oe;break}Tt===void 0?Se(pt,I,U,!0):(Po[Tt-we]=B+1,Tt>=ct?ct=Tt:kt=!0,b(pt,v[Tt],D,null,I,U,L,H,Y),We++)}let vr=kt?Bu(Po):xt;for(Oe=vr.length-1,B=Ke-1;B>=0;B--){let pt=we+B,Tt=v[pt],yr=v[pt+1],gr=pt+1{let{el:U,type:L,transition:H,children:Y,shapeFlag:B}=p;if(B&6){Pe(p.component.subTree,v,D,O);return}if(B&128){p.suspense.move(v,D,O);return}if(B&64){L.move(p,v,D,te);return}if(L===K){r(U,v,D);for(let x=0;xH.enter(U),I));else{let{leave:x,delayLeave:ae,afterLeave:he}=H,we=()=>{p.ctx.isUnmounted?s(U):r(U,v,D)},Ve=()=>{let Oe=U._isLeaving||!!U[Os];U._isLeaving&&U[Os](!0),H.persisted&&!Oe?we():x(U,()=>{we(),he&&he()})};ae?ae(U,we,Ve):Ve()}else r(U,v,D)},Se=(p,v,D,O=!1,I=!1)=>{let{type:U,props:L,ref:H,children:Y,dynamicChildren:B,shapeFlag:le,patchFlag:x,dirs:ae,cacheIndex:he,memo:we}=p;if((x===-2||B&&B.hasOnce)&&(I=!1),H!=null&&(St(),Xo(H,null,D,p,!0),Nt()),he!=null&&(!p.ctx||p.ctx===v)&&(v.renderCache[he]=void 0),le&256){v.ctx.deactivate(p);return}let Ve=le&1&&ae,Oe=!Zo(p),We;if(Oe&&(We=L&&L.onVnodeBeforeUnmount)&&qt(We,v,p),le&6)ke(p.component,D,O);else{if(le&128){p.suspense.unmount(D,O);return}Ve&&io(p,null,v,"beforeUnmount"),le&64?p.type.remove(p,v,D,te,O):B&&!B.hasOnce&&(U!==K||x>0&&x&64)?F(B,v,D,!1,!0):(U===K&&x&384||!I&&le&16)&&F(Y,v,D),O&&ze(p)}let Ke=we!=null&&he==null;(Oe&&(We=L&&L.onVnodeUnmounted)||Ve||Ke)&<(()=>{We&&qt(We,v,p),Ve&&io(p,null,v,"unmounted"),Ke&&(p.el=null)},D)},ze=p=>{let{type:v,el:D,anchor:O,transition:I}=p,U=v===K;if(U&&!I){Ue(D,O);return}if(v===en){V(p),I&&!I.persisted&&I.afterLeave&&I.afterLeave();return}let L=U?qs(p):p,H=()=>{U?E(D)&&Ue(D,O):s(D),I&&!I.persisted&&I.afterLeave&&I.afterLeave()};if(L&&L.shapeFlag&1&&I&&!I.persisted){let{leave:Y,delayLeave:B}=I,le=L.el,x=()=>Y(le,H);B?B(le,H,x):x()}else H()},Ue=(p,v)=>{let D;for(;p!==v;)D=h(p),s(p),p=D;s(v)},ke=(p,v,D)=>{let{bum:O,scope:I,job:U,subTree:L,um:H,m:Y,a:B}=p;ai(Y),ai(B),O&&wo(O),I.stop(),U?(U.flags|=8,Se(L,p,v,D)):p.vnode.el&&L&&(L.transition=p.vnode.transition,Se(L,p,v,D)),H&<(H,v),lt(()=>{p.isUnmounted=!0},v)},F=(p,v,D,O=!1,I=!1,U=0)=>{for(let L=U;L{if(p.shapeFlag&6)return Z(p.component.subTree);if(p.shapeFlag&128)return p.suspense.next();let v=h(p.anchor||p.el),D=v&&v[lu];return D?h(D):v},Q=(p,v,D)=>{let O=p&&v._vnode?void 0:p&&p.component?p.component.uid:Ju();nu(()=>{p==null?v._vnode&&Se(v._vnode,null,null,!0):b(v._vnode||null,p,v,null,null,null,D),v._vnode=p},O)},te={p:b,um:Se,m:Pe,r:ze,mt:se,mc:_,pc:_e,pbc:G,n:Z,o:e},ye,Ee;return t&&([ye,Ee]=t(te)),{render:Q,hydrate:ye,createApp:Nu(Q,ye)}}function Vs({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function ao({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Hu(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function ji(e,t,n=!1){let r=e.children,s=t.children;if(me(r)&&me(s))for(let i=0;i>1,e[n[u]]0&&(t[r]=n[i-1]),n[i]=r)}}for(i=n.length,a=n[i-1];i-- >0;)n[i]=a,a=t[a];return n}function Gi(e){let t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Gi(t)}function ai(e){if(e)for(let t=0;te.__isSuspense;function ju(e,t){t&&t.pendingBranch?me(e)?t.effects.push(...e):t.effects.push(e):mi(e)}var K=Symbol.for("v-fgt"),Wn=Symbol.for("v-txt"),Rt=Symbol.for("v-cmt"),en=Symbol.for("v-stc"),lo=[],vt=null;function l(e=!1){lo.push(vt=e?null:[])}function Ki(){lo.pop(),vt=lo[lo.length-1]||null}var nn=1;function Ln(e,t=!1){nn+=e,e<0&&vt&&t&&(vt.hasOnce=!0)}function Yi(e){return e.dynamicChildren=nn>0?vt||xt:null,Ki(),nn>0&&vt&&vt.push(e),e}function d(e,t,n,r,s,i){return Yi(o(e,t,n,r,s,i,!0))}function Lt(e,t,n,r,s){return Yi(Ce(e,t,n,r,s,!0))}function sn(e){return e?e.__v_isVNode===!0:!1}function Jo(e,t){return e.type===t.type&&e.key===t.key}var Ji=({key:e})=>e??null,Vn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?Le(e)||Xe(e)||ge(e)?{i:ht,r:e,k:t,f:!!n}:e:null);function o(e,t=null,n=null,r=0,s=null,i=e===K?0:1,a=!1,u=!1){let m={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Ji(t),ref:t&&Vn(t),scopeId:gi,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:r,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:ht};return u?(Fn(m,n),i&128&&e.normalize(m)):n&&(m.shapeFlag|=Le(n)?8:16),nn>0&&!a&&vt&&(m.patchFlag>0||i&6)&&m.patchFlag!==32&&vt.push(m),m}var Ce=Gu;function Gu(e,t=null,n=null,r=0,s=null,i=!1){if((!e||e===gu)&&(e=Rt),sn(e)){let u=No(e,t,!0);return n&&Fn(u,n),nn>0&&!i&&vt&&(u.shapeFlag&6?vt[vt.indexOf(e)]=u:vt.push(u)),u.patchFlag=-2,u}if(oc(e)&&(e=e.__vccOpts),t){t=Wu(t);let{class:u,style:m}=t;u&&!Le(u)&&(t.class=A(u)),Re(m)&&(Yo(m)&&!me(m)&&(m=je({},m)),t.style=Ie(m))}let a=Le(e)?1:Wi(e)?128:Hn(e)?64:Re(e)?4:ge(e)?2:0;return o(e,t,n,r,s,a,i,!0)}function Wu(e){return e?Yo(e)||Ui(e)?je({},e):e:null}function No(e,t,n=!1,r=!1){let{props:s,ref:i,patchFlag:a,children:u,transition:m}=e,k=t?Ku(s||{},t):s,y={__v_isVNode:!0,__v_skip:!0,type:e.type,props:k,key:k&&Ji(k),ref:t&&t.ref?n&&i?me(i)?i.concat(Vn(t)):[i,Vn(t)]:Vn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:u,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==K?a===-1?16:a|16:a,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:m,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&No(e.ssContent),ssFallback:e.ssFallback&&No(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce,cacheIndex:e.cacheIndex};return m&&r&&on(y,m.clone(y)),y}function w(e=" ",t=0){return Ce(Wn,null,e,t)}function ue(e,t){let n=Ce(en,null,e);return n.staticCount=t,n}function f(e="",t=!1){return t?(l(),Lt(Rt,null,e)):Ce(Rt,null,e)}function Ut(e){return e==null||typeof e=="boolean"?Ce(Rt):me(e)?Ce(K,null,e.slice()):sn(e)?Kt(e):Ce(Wn,null,String(e))}function Kt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:No(e)}function Fn(e,t){let n=0,{shapeFlag:r}=e;if(t==null)t=null;else if(me(t))n=16;else if(typeof t=="object")if(r&65){let s=t.default;s&&(s._c&&(s._d=!1),Fn(e,s()),s._c&&(s._d=!0));return}else{n=32;let s=t._;!s&&!Ui(t)?t._ctx=ht:s===3&&ht&&(ht.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(ge(t)){if(r&65){Fn(e,{default:t});return}t={default:t,_ctx:ht},n=32}else t=String(t),r&64?(n=16,t=[w(t)]):n=8;e.children=t,e.shapeFlag|=n}function Ku(...e){let t={};for(let n=0;net||ht,zn,rn;{let e=Uo(),t=(n,r)=>{let s;return(s=e[n])||(s=e[n]=[]),s.push(r),i=>{s.length>1?s.forEach(a=>a(i)):s[0](i)}};zn=t("__VUE_INSTANCE_SETTERS__",n=>et=n),rn=t("__VUE_SSR_SETTERS__",n=>Do=n)}var cn=e=>{let t=et;return zn(e),e.scope.on(),()=>{e.scope.off(),zn(t)}},li=()=>{et&&et.scope.off(),zn(null)};function Xi(e){return e.vnode.shapeFlag&4}var Do=!1;function Xu(e,t=!1,n=!1){t&&rn(t);let{props:r,children:s}=e.vnode,i=Xi(e);Vu(e,r,i,t),$u(e,s,n||t);let a=i?Zu(e,t):void 0;return t&&rn(!1),a}function Zu(e,t){let n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,bu);let{setup:r}=n;if(r){St();let s=e.setupContext=r.length>1?ec(e):null,i=cn(e),a=an(r,e,0,[e.props,s]),u=cs(a);if(Nt(),i(),(u||e.sp)&&!Zo(e)&&Hs(e),u){if(a.then(li,li),t)return a.then(m=>{rn(!0);try{di(e,m,t)}finally{rn(!1)}}).catch(m=>{ln(m,e,0)});e.asyncDep=a}else di(e,a,t)}else Zi(e,t)}function di(e,t,n){ge(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Re(t)&&(e.setupState=In(t)),Zi(e,n)}var ui,ci;function Zi(e,t,n){let r=e.type;if(!e.render){if(!t&&ui&&!r.render){let s=r.template||Bs(e).template;if(s){let{isCustomElement:i,compilerOptions:a}=e.appContext.config,{delimiters:u,compilerOptions:m}=r,k=je(je({isCustomElement:i,delimiters:u},a),m);r.render=ui(s,k)}}e.render=r.render||it,ci&&ci(e)}{let s=cn(e);St();try{wu(e)}finally{Nt(),s()}}}var xu={get(e,t){return Ze(e,"get",""),e[t]}};function ec(e){let t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,xu),slots:e.slots,emit:e.emit,expose:t}}function Kn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(In(Ts(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in xo)return xo[n](e)},has(t,n){return n in t||n in xo}})):e.proxy}function tc(e,t=!0){return ge(e)?e.displayName||e.name:e.name||t&&e.__name}function oc(e){return ge(e)&&"__vccOpts"in e}var tt=(e,t)=>Yr(e,t,Do);function be(e,t,n){try{Ln(-1);let r=arguments.length;return r===2?Re(t)&&!me(t)?sn(t)?Ce(e,null,[t]):Ce(e,t):Ce(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&sn(n)&&(n=[n]),Ce(e,t,n))}finally{Ln(1)}}var nc="3.5.44";var Qs,xi=typeof window<"u"&&window.trustedTypes;if(xi)try{Qs=xi.createPolicy("vue",{createHTML:e=>e})}catch{}var ca=Qs?e=>Qs.createHTML(e):e=>e,sc="http://www.w3.org/2000/svg",rc="http://www.w3.org/1998/Math/MathML",Jt=typeof document<"u"?document:null,ea=Jt&&Jt.createElement("template"),ic={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{let t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{let s=t==="svg"?Jt.createElementNS(sc,e):t==="mathml"?Jt.createElementNS(rc,e):n?Jt.createElement(e,{is:n}):Jt.createElement(e);return e==="select"&&r&&r.multiple!=null&&s.setAttribute("multiple",r.multiple),s},createText:e=>Jt.createTextNode(e),createComment:e=>Jt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Jt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,s,i){let a=n?n.previousSibling:t.lastChild;if(s&&(s===i||s.nextSibling))for(;t.insertBefore(s.cloneNode(!0),n),!(s===i||!(s=s.nextSibling)););else{ea.innerHTML=ca(r==="svg"?`${e}`:r==="mathml"?`${e}`:e);let u=ea.content;if(r==="svg"||r==="mathml"){let m=u.firstChild;for(;m.firstChild;)u.appendChild(m.firstChild);u.removeChild(m)}t.insertBefore(u,n)}return[a?a.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};var ac=Symbol("_vtc");function lc(e,t,n){let r=e[ac];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}var Qn=Symbol("_vod"),pa=Symbol("_vsh"),j={name:"show",beforeMount(e,{value:t},{transition:n}){e[Qn]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):pn(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),pn(e,!0),r.enter(e)):r.leave(e,()=>{pn(e,!1)}):pn(e,t))},beforeUnmount(e,{value:t}){pn(e,t)}};function pn(e,t){e.style.display=t?e[Qn]:"none",e[pa]=!t}var dc=Symbol("");var uc=/(?:^|;)\s*display\s*:/;function cc(e,t,n){let r=e.style,s=Le(n),i=!1;if(n&&!s){if(t)if(Le(t))for(let a of t.split(";")){let u=a.slice(0,a.indexOf(":")).trim();n[u]==null&&fn(r,u,"")}else for(let a in t)n[a]==null&&fn(r,a,"");for(let a in n){a==="display"&&(i=!0);let u=n[a];u!=null?fc(e,a,!Le(t)&&t?t[a]:void 0,u)||fn(r,a,u):fn(r,a,"")}}else if(s){if(t!==n){let a=r[dc];a&&(n+=";"+a),r.cssText=n,i=uc.test(n)}}else t&&e.removeAttribute("style");Qn in e&&((!s||t!==n)&&(e[Qn]=i?r.display:""),e[pa]&&(r.display="none"))}var Yn=/\s*!important$/;function fn(e,t,n){if(me(n))n.forEach(r=>fn(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))Yn.test(n)?e.setProperty(t,n.replace(Yn,""),"important"):e.setProperty(t,n);else{let r=pc(e,t);Yn.test(n)?e.setProperty(At(r),n.replace(Yn,""),"important"):e[r]=n}}var ta=["Webkit","Moz","ms"],Ks={};function pc(e,t){let n=Ks[t];if(n)return n;let r=Ye(t);if(r!=="filter"&&r in e)return Ks[t]=r;r=no(r);for(let s=0;sYs||(bc.then(()=>Ys=0),Ys=Date.now());function kc(e,t){let n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;let s=n.value;if(me(s)){let i=r.stopImmediatePropagation;r.stopImmediatePropagation=()=>{i.call(r),r._stopped=!0};let a=s.slice(),u=[r];for(let m=0;me.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Ec=(e,t,n,r,s,i)=>{let a=s==="svg";t==="class"?lc(e,r,a):t==="style"?cc(e,n,r):yo(t)?go(t)||hc(e,t,n,r,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Cc(e,t,r,a))?(sa(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&na(e,t,r,a,i,t!=="value")):e._isVueCE&&(_c(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!Le(r)))?sa(e,Ye(t),r,i,t):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),na(e,t,r,a))};function Cc(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&ia(t)&&ge(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){let s=e.tagName;if(s==="IMG"||s==="VIDEO"||s==="CANVAS"||s==="SOURCE")return!1}return ia(t)&&Le(n)?!1:t in e}function _c(e,t){let n=e._def.props;if(!n)return!1;let r=Ye(t);return Array.isArray(n)?n.some(s=>Ye(s)===r):Object.keys(n).some(s=>Ye(s)===r)}var Ro=e=>{let t=e.props["onUpdate:modelValue"]||!1;return me(t)?n=>wo(t,n):t};function Sc(e){e.target.composing=!0}function aa(e){let t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}var Ft=Symbol("_assign"),Jn=Symbol("_initialValue");function Js(e,t,n){return t&&(e=e.trim()),n&&(e=ko(e)),e}var zt={created(e,{modifiers:{lazy:t,trim:n,number:r}},s){e.parentNode&&(e.type==="text"?e[Jn]=e.defaultValue.replace(/[\r\n]/g,""):e.type==="textarea"&&(e[Jn]=e.defaultValue.replace(/\r\n?/g,` -`))),e[Ft]=Ro(s);let i=r||s.props&&s.props.type==="number";to(e,t?"change":"input",a=>{a.target.composing||e[Ft](Js(e.value,n,i))}),(n||i)&&to(e,"change",()=>{e.value=Js(e.value,n,i)}),t||(to(e,"compositionstart",Sc),to(e,"compositionend",aa),to(e,"change",aa))},mounted(e,{value:t,modifiers:{trim:n,number:r}}){let s=t??"",i=e[Jn];delete e[Jn],i!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==i?e[Ft](Js(e.value,n,r)):e.value=s},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:s,number:i}},a){if(e[Ft]=Ro(a),e.composing)return;let u=(i||e.type==="number")&&!/^0\d/.test(e.value)?ko(e.value):e.value,m=t??"";if(u===m)return;let k=e.getRootNode();(k instanceof Document||k instanceof ShadowRoot)&&k.activeElement===e&&e.type!=="range"&&(r&&t===n||s&&e.value.trim()===m)||(e.value=m)}},Xs={deep:!0,created(e,t,n){e[Ft]=Ro(n),to(e,"change",()=>{let r=e._modelValue,s=mn(e),i=e.checked,a=e[Ft];if(me(r)){let u=Cn(r,s),m=u!==-1;if(i&&!m)a(r.concat(s));else if(!i&&m){let k=[...r];k.splice(u,1),a(k)}}else if(Et(r)){let u=new Set(r);i?u.add(s):u.delete(s),a(u)}else a(fa(e,i))})},mounted:la,beforeUpdate(e,t,n){e[Ft]=Ro(n),la(e,t,n)}};function la(e,{value:t,oldValue:n},r){e._modelValue=t;let s;if(me(t))s=Cn(t,r.props.value)>-1;else if(Et(t))s=t.has(r.props.value);else{if(t===n)return;s=Ct(t,fa(e,!0))}e.checked!==s&&(e.checked=s)}var Xn={deep:!0,created(e,{value:t,modifiers:{number:n}},r){e._modelValue=t,to(e,"change",()=>{let s=Array.prototype.filter.call(e.options,m=>m.selected).map(m=>n?ko(mn(m)):mn(m)),i=e.multiple,a=i?Et(e._modelValue)?new Set(s):s:s[0],u=e._pendingValue=[i,i?me(a)?s.slice():s:a];try{e[Ft](a)}finally{ot(()=>{e._pendingValue===u&&(e._pendingValue=void 0)})}}),e[Ft]=Ro(r)},mounted(e,{value:t}){da(e,t)},beforeUpdate(e,{value:t},n){e._modelValue=t,e[Ft]=Ro(n)},updated(e,{value:t}){let n=e._pendingValue;e._pendingValue=void 0,(!n||n[0]!==e.multiple||!Nc(t,n[1],n[0]))&&da(e,t)}};function Nc(e,t,n){if(!n)return Ct(e,t);if(me(e))return Ct(e,t);if(Et(e)){if(e.size!==t.length)return!1;for(let r of t)if(!e.has(r))return!1;return!0}return!1}function da(e,t){let n=e.multiple,r=me(t);if(!(n&&!r&&!Et(t))){for(let s=0,i=e.options.length;sString(k)===String(u)):a.selected=Cn(t,u)>-1}else a.selected=t.has(u);else if(Ct(mn(a),t)){e.selectedIndex!==s&&(e.selectedIndex=s);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function mn(e){return"_value"in e?e._value:e.value}function fa(e,t){let n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}var Dc=["ctrl","shift","alt","meta"],Rc={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Dc.some(n=>e[`${n}Key`]&&!t.includes(n))},ie=(e,t)=>{if(!e)return e;let n=e._withMods||(e._withMods={}),r=t.join(".");return n[r]||(n[r]=((s,...i)=>{for(let a=0;a{let n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=(s=>{if(!("key"in s))return;let i=At(s.key);if(t.some(a=>a===i||Tc[a]===i))return e(s)}))},Ac=je({patchProp:Ec},ic),ua;function Oc(){return ua||(ua=Bi(Ac))}var ma=((...e)=>{let t=Oc().createApp(...e),{mount:n}=t;return t.mount=r=>{let s=Pc(r);if(!s)return;let i=t._component;!ge(i)&&!i.render&&!i.template&&(i.template=s.innerHTML),s.nodeType===1&&(s.textContent="");let a=n(s,!1,Ic(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),a},t});function Ic(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Pc(e){return Le(e)?document.querySelector(e):e}var mo=typeof document<"u";function va(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Vc(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&va(e.default)}var Te=Object.assign;function Zn(e,t){let n={};for(let r in t){let s=t[r];n[r]=wt(s)?s.map(e):e(s)}return n}var Oo=()=>{},wt=Array.isArray;function er(e,t){let n={};for(let r in e)n[r]=r in t?t[r]:e[r];return n}var ya=/#/g,qc=/&/g,Mc=/\//g,Uc=/=/g,$c=/\?/g,ga=/\+/g,Lc=/%5B/g,Fc=/%5D/g,ba=/%5E/g,zc=/%60/g,wa=/%7B/g,Hc=/%7C/g,ka=/%7D/g,Bc=/%20/g;function tr(e){return e==null?"":encodeURI(""+e).replace(Hc,"|").replace(Lc,"[").replace(Fc,"]")}function Ea(e){return tr(e).replace(wa,"{").replace(ka,"}").replace(ba,"^")}function Zs(e){return tr(e).replace(ga,"%2B").replace(Bc,"+").replace(ya,"%23").replace(qc,"%26").replace(zc,"`").replace(wa,"{").replace(ka,"}").replace(ba,"^")}function jc(e){return Zs(e).replace(Uc,"%3D")}function Gc(e){return tr(e).replace(ya,"%23").replace($c,"%3F")}function Ca(e){return Gc(e).replace(Mc,"%2F")}function Ao(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}var Wc=/\/$/,Kc=e=>e.replace(Wc,"");function xn(e,t,n="/"){let r,s={},i="",a="",u=t.indexOf("#"),m=t.indexOf("?");return m=u>=0&&m>u?-1:m,m>=0&&(r=t.slice(0,m),i=t.slice(m,u>0?u:t.length),s=e(i.slice(1))),u>=0&&(r=r||t.slice(0,u),a=t.slice(u,t.length)),r=Jc(r??t,n),{fullPath:r+i+a,path:r,query:s,hash:Ao(a)}}function _a(e,t){let n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function or(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Sa(e,t,n){let r=t.matched.length-1,s=n.matched.length-1;return r>-1&&r===s&&po(t.matched[r],n.matched[s])&&nr(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function po(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function nr(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!Yc(e[n],t[n]))return!1;return!0}function Yc(e,t){return wt(e)?ha(e,t):wt(t)?ha(t,e):e?.valueOf()===t?.valueOf()}function ha(e,t){return wt(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function Jc(e,t){if(e.startsWith("/"))return e;if(!e)return t;let n=t.split("/"),r=e.split("/"),s=r[r.length-1];(s===".."||s===".")&&r.push("");let i=n.length-1,a,u;for(a=0;a1&&i--;else break;return n.slice(0,i).join("/")+"/"+r.slice(a).join("/")}var Xt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},es=(function(e){return e.pop="pop",e.push="push",e})({}),ts=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function Na(e){if(!e)if(mo){let t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Kc(e)}var Qc=/^[^#]+#/;function Da(e,t){return e.replace(Qc,"#")+t}function Xc(e,t){let n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}var hn=()=>({left:window.scrollX,top:window.scrollY});function Ra(e){let t;if("el"in e){let n=e.el,r=typeof n=="string"&&n.startsWith("#"),s=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!s)return;t=Xc(s,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function sr(e,t){return(history.state?history.state.position-t:-1)+e}var xs=new Map;function Ta(e,t){xs.set(e,t)}function Aa(e){let t=xs.get(e);return xs.delete(e),t}function Zc(e){return typeof e=="string"||e&&typeof e=="object"}function rr(e){return typeof e=="string"||typeof e=="symbol"}var Be=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({}),Oa=Symbol("");var zU={[Be.MATCHER_NOT_FOUND]({location:e,currentLocation:t}){return`No match for +"use strict";(()=>{var kd=Object.defineProperty;var Ed=(e,t)=>{for(var n in t)kd(e,n,{get:t[n],enumerable:!0})};var pe=["abap","abc","actionscript","ada","alda","apache_conf","apex","applescript","aql","asciidoc","asl","assembly_x86","autohotkey","batchfile","c9search","c_cpp","cirru","clojure","cobol","coffee","coldfusion","crystal","csharp","csound_document","csound_orchestra","csound_score","csp","css","curly","d","dart","diff","django","dockerfile","dot","drools","edifact","eiffel","ejs","elixir","elm","erlang","forth","fortran","fsharp","fsl","ftl","gcode","gherkin","gitignore","glsl","gobstones","golang","graphqlschema","groovy","haml","handlebars","haskell","haskell_cabal","haxe","hjson","html","html_elixir","html_ruby","ini","io","jack","jade","java","javascript","json","json5","jsoniq","jsp","jssm","jsx","julia","kotlin","latex","less","liquid","lisp","livescript","logiql","logtalk","lsl","lua","luapage","lucene","makefile","markdown","mask","matlab","maze","mediawiki","mel","mixal","mushcode","mysql","nginx","nim","nix","nsis","nunjucks","objectivec","ocaml","pascal","perl","perl6","pgsql","php","php_laravel_blade","pig","plain_text","powershell","praat","prisma","prolog","properties","protobuf","puppet","python","qml","r","razor","rdoc","red","redshift","rhtml","rst","ruby","rust","sass","scad","scala","scheme","scss","sh","sjs","slim","smarty","snippets","soy_template","space","sparql","sql","sqlserver","stylus","svg","swift","tcl","terraform","tex","text","textile","toml","tsx","turtle","twig","typescript","vala","vbscript","velocity","verilog","vhdl","visualforce","wollok","xml","xquery","yaml","zeek"];var fe={markdown:"/script/markdown.6c8dfb7b1d.min.js",org:"/script/org.f61f262915.min.js",notebook:"/script/notebook.c3144c18ae.min.js",editor:"/script/editor.4f142d3adc.min.js",pdf:"/script/pdf.4d9cc6ff49.min.js"};function br(e){let t=e.location.hash.slice(1);if(e.history.replaceState(null,"","/review-link"),t.length>2048)return null;let n=new URLSearchParams(t);if([...n.keys()].length!==3||[...n.keys()].some(a=>!["clientId","intentId","token"].includes(a)))return null;let r=n.get("clientId"),s=n.get("intentId"),i=n.get("token");return!/^[a-f0-9]{32}$/.test(r||"")||!/^[a-f0-9]{32}$/.test(s||"")||!/^[a-f0-9]{64}$/.test(i||"")?null:{contract:"4open.artifacts/1",clientId:r,intentId:s,token:i}}function wr(e,t){let{http:n,promises:r,window:s}=t,i=t.takeReviewHandoff(),a=i?{clientId:i.clientId,intentId:i.intentId}:null,u,m,w,g,k,h=!0,E,S=r.defer(),v=()=>[...s.crypto.getRandomValues(new Uint8Array(16))].map(M=>M.toString(16).padStart(2,"0")).join("");Object.assign(e,{repositoryId:"",handoffEnabled:!1,busy:!1,preview:null,acceptAccess:!1,acceptRetention:!1,uncertain:!1,saved:!1,expired:!1,error:i?"":"Open a new artifact link from your submission. This link is missing or invalid."});let _=()=>h&&e.user?.username===k;function N(){h=!1,i=u=m=void 0,S.resolve(),s.clearTimeout(E)}e.on("dispose",N),e.on("routeLeave",N),e.watch(()=>e.user?.username,M=>{!k&&M?k=M:k&&M!==k&&(N(),e.preview=null,e.repositoryId="",e.busy=!1,e.saved=!1,e.handoffEnabled=!1,e.error="Your account changed. Open a new artifact link from your submission.")});let T=()=>({timeout:S.promise,headers:{"Content-Type":"application/json","X-Review-CSRF":m}}),V=M=>M?.status===404?"Artifact linking is not available on this server.":M?.status===401?"Sign in, then open a new artifact link from your submission.":M?.status===403?"This account cannot approve this repository or this link.":"The request could not be completed. You can retry from this page.";e.loadPreview=async()=>{if(!h||!i||e.busy||e.uncertain||e.saved||!e.user?.username)return;k=e.user.username;let M=e.repositoryId.trim();if(!/^[A-Za-z0-9_-]{3,128}$/.test(M)){e.error="Enter the anonymous repository ID from its URL.";return}e.busy=!0,e.error="",e.preview=null,u=void 0,e.acceptAccess=e.acceptRetention=!1,e.expired=!1,s.clearTimeout(E),g||(g=v());try{let q=(await n.get("/api/review-consent/csrf",{timeout:S.promise})).data;if(!_())return;if(m=q.csrf,e.handoffEnabled=q.handoffEnabled===!0,!/^[a-f0-9]{64}$/.test(m||""))throw new Error("invalid_csrf");let z=(await n.post("/api/review-consent/preview",{repositoryId:M,intent:{...i,requestId:g}},T())).data;if(!_())return;if(!z||typeof z.ticket!="string"||!z.ticket||z.ticket.length>8192||typeof z.repositoryName!="string"||!["restricted-review","anonymous-link"].includes(z.policy?.access)||!Number.isSafeInteger(z.policy.version)||!Number.isFinite(Date.parse(z.policy.retainUntil))||!Number.isFinite(Date.parse(z.expiresAt))||Date.parse(z.expiresAt)<=Date.now()||Date.parse(z.expiresAt)>Date.now()+6e5)throw new Error("invalid_preview");u=z.ticket,w=v(),e.preview={repositoryName:z.repositoryName,policy:{...z.policy},expiresAt:z.expiresAt},E=s.setTimeout(()=>{h&&(e.expired=!0)},Math.max(0,Date.parse(z.expiresAt)-Date.now()))}catch(q){_()&&(e.error=V(q))}finally{_()&&(e.busy=!1)}},e.confirmConsent=async()=>{if(!(!_()||e.busy||e.saved||!u||!e.acceptAccess||!e.acceptRetention)){if(Date.parse(e.preview.expiresAt)<=Date.now()){e.expired=!0;return}e.busy=!0,e.error="";try{let M=(await n.post("/api/review-consent/confirm",{ticket:u,requestId:w,acceptAccess:!0,acceptRetention:!0},T())).data;if(!_())return;if(M?.requestId!==w||!Number.isFinite(Date.parse(M.confirmedAt)))throw new Error("invalid_receipt");e.saved=!0,e.uncertain=!1,i=void 0,e.handoffEnabled||(u=void 0)}catch{_()&&(e.uncertain=!0,e.error="The confirmation was not verified. Retry with the same approval, or return to your submission to check its status.")}finally{_()&&(e.busy=!1)}}},e.continueReview=async()=>{if(!_()||e.busy||!e.saved||!e.handoffEnabled||!u||!a)return;e.busy=!0,e.error="";let M,q=()=>{M?.remove(),s.removeEventListener("securitypolicyviolation",z)},z=ne=>{ne.violatedDirective?.startsWith("form-action")&&(q(),_()&&(e.busy=!1,e.error="The return address was blocked. Return to your submission to check the artifact status."))};try{let ne=(await n.post("/api/review-consent/handoff",{ticket:u},T())).data;if(!_())return;let ee=ne?.completion,C=new URL(ne?.callbackUrl);if(!ee||Object.keys(ee).sort().join(",")!=="clientId,code,contract,expiresAt,intentId"||ee.contract!=="4open.artifacts/1"||ee.clientId!==a.clientId||ee.intentId!==a.intentId||!/^[a-f0-9]{64}$/.test(ee.code||"")||!Number.isFinite(Date.parse(ee.expiresAt))||Date.parse(ee.expiresAt)<=Date.now()||Date.parse(ee.expiresAt)>Date.now()+3e5||C.protocol!=="https:"||C.href!==ne.callbackUrl||C.username||C.password||ne.callbackUrl.includes("?")||ne.callbackUrl.includes("#"))throw new Error("invalid_handoff");M=s.document.createElement("form"),M.method="POST",M.action=C.href;let P=s.document.createElement("input");P.type="hidden",P.name="completion",P.value=JSON.stringify(ee),M.appendChild(P),s.document.body.appendChild(M),s.addEventListener("securitypolicyviolation",z),e.on("dispose",q),M.submit()}catch{q(),_()&&(e.busy=!1,e.error="The return to review could not be prepared. Retry from this page, or return to your submission to check its status.")}}}var gn=new Map,Sd=fe;function oo(e){if(!gn.has(e)){let t=document.createElement("script");t.src=Sd[e];let n=new Promise((r,s)=>{t.onload=r,t.onerror=()=>{gn.delete(e),t.remove(),s(new Error(`Unable to load ${e}. Please retry.`))}});gn.set(e,n),document.head.appendChild(t)}return gn.get(e)}async function kr(){await oo("editor"),ace.config.set("basePath","/script/external/ace/")}function vo(e){let t=Object.create(null);for(let n of e.split(","))t[n]=1;return n=>n in t}var Ae={},xt=[],it=()=>{},us=()=>!1,yo=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),go=e=>e.startsWith("onUpdate:"),je=Object.assign,qo=(e,t)=>{let n=e.indexOf(t);n>-1&&e.splice(n,1)},Nd=Object.prototype.hasOwnProperty,Ne=(e,t)=>Nd.call(e,t),me=Array.isArray,Bt=e=>Mo(e)==="[object Map]",Et=e=>Mo(e)==="[object Set]",Er=e=>Mo(e)==="[object Date]";var ge=e=>typeof e=="function",Le=e=>typeof e=="string",ft=e=>typeof e=="symbol",De=e=>e!==null&&typeof e=="object",cs=e=>(De(e)||ge(e))&&ge(e.then)&&ge(e.catch),Nr=Object.prototype.toString,Mo=e=>Nr.call(e),ps=e=>Mo(e).slice(8,-1),bn=e=>Mo(e)==="[object Object]",wn=e=>Le(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,bo=vo(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted");var kn=e=>{let t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},Rd=/-\w/g,Ye=kn(e=>e.replace(Rd,t=>t.slice(1).toUpperCase())),Dd=/\B([A-Z])/g,At=kn(e=>e.replace(Dd,"-$1").toLowerCase()),no=kn(e=>e.charAt(0).toUpperCase()+e.slice(1)),Uo=kn(e=>e?`on${no(e)}`:""),yt=(e,t)=>!Object.is(e,t),wo=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},ko=e=>{let t=parseFloat(e);return isNaN(t)?e:t};var Cr,$o=()=>Cr||(Cr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Ie(e){if(me(e)){let t={};for(let n=0;nn.startsWith("/*")?"":n).split(Td).forEach(n=>{if(n){let r=n.split(Ad);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function A(e){let t="";if(Le(e))t=e;else if(me(e))for(let n=0;nCt(n,t))}var Tr=e=>!!(e&&e.__v_isRef===!0),c=e=>Le(e)?e:e==null?"":me(e)||De(e)&&(e.toString===Nr||!ge(e.toString))?Tr(e)?c(e.value):JSON.stringify(e,Ar,2):String(e),Ar=(e,t)=>Tr(t)?Ar(e,t.value):Bt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,s],i)=>(n[ds(r,i)+" =>"]=s,n),{})}:Et(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>ds(n))}:ft(t)?ds(t):De(t)&&!me(t)&&!bn(t)?String(t):t,ds=(e,t="")=>{var n;return ft(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};function Md(e,...t){console.warn(`[Vue warn] ${e}`,...t)}var Je,Ho=class{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&Je&&(Je.active?(this.parent=Je,this.index=(Je.scopes||(Je.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes){let r=this.scopes.slice();for(t=0,n=r.length;t0&&--this._on===0){if(Je===this)Je=this.prevScope;else{let t=Je;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let n,r;for(n=0,r=this.effects.length;n0)return;if(zo){let t=zo;for(zo=void 0;t;){let n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Fo;){let t=Fo;for(Fo=void 0;t;){let n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(r){e||(e=r)}t=n}}if(e)throw e}function Ur(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function $r(e){let t,n=e.depsTail,r=n;for(;r;){let s=r.prevDep;r.version===-1?(r===n&&(n=s),Ns(r),Ud(r)):t=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=s}e.deps=t,e.depsTail=n}function vs(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Lr(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Lr(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Bo)||(e.globalVersion=Bo,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!vs(e))))return;e.flags|=2;let t=e.dep,n=$e,r=_t;$e=e,_t=!0;try{Ur(e);let s=e.fn(e._value);(t.version===0||yt(s,e._value))&&(e.flags|=128,e._value=s,t.version++)}catch(s){throw t.version++,s}finally{$e=n,_t=r,$r(e),e.flags&=-3}}function Ns(e,t=!1){let{dep:n,prevSub:r,nextSub:s}=e;if(r&&(r.nextSub=s,e.prevSub=void 0),s&&(s.prevSub=r,e.nextSub=void 0),n.subs===e&&(n.subs=r,!r&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)Ns(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Ud(e){let{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}var _t=!0,Fr=[];function St(){Fr.push(_t),_t=!1}function Nt(){let e=Fr.pop();_t=e===void 0?!0:e}function Or(e){let{cleanup:t}=e;if(e.cleanup=void 0,t){let n=$e;$e=void 0;try{t()}finally{$e=n}}}var Bo=0,ys=class{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}},jo=class{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!$e||!_t||$e===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==$e)n=this.activeLink=new ys($e,this),$e.deps?(n.prevDep=$e.depsTail,$e.depsTail.nextDep=n,$e.depsTail=n):$e.deps=$e.depsTail=n,zr(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){let r=n.nextDep;r.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=r),n.prevDep=$e.depsTail,n.nextDep=void 0,$e.depsTail.nextDep=n,$e.depsTail=n,$e.deps===n&&($e.deps=r)}return n}trigger(t){this.version++,Bo++,this.notify(t)}notify(t){_s();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Ss()}}};function zr(e){if(e.dep.sc++,e.sub.flags&4){let t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let r=t.deps;r;r=r.nextDep)zr(r)}let n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}var gs=new WeakMap,ro=Symbol(""),bs=Symbol(""),Go=Symbol("");function Ze(e,t,n){if(_t&&$e){let r=gs.get(e);r||gs.set(e,r=new Map);let s=r.get(n);s||(r.set(n,s=new jo),s.map=r,s.key=n),s.track()}}function It(e,t,n,r,s,i){let a=gs.get(e);if(!a){Bo++;return}let u=m=>{m&&m.trigger()};if(_s(),t==="clear")a.forEach(u);else{let m=me(e),w=m&&wn(n);if(m&&n==="length"){let g=Number(r);a.forEach((k,h)=>{(h==="length"||h===Go||!ft(h)&&h>=g)&&u(k)})}else switch((n!==void 0||a.has(void 0))&&u(a.get(n)),w&&u(a.get(Go)),t){case"add":m?w&&u(a.get("length")):(u(a.get(ro)),Bt(e)&&u(a.get(bs)));break;case"delete":m||(u(a.get(ro)),Bt(e)&&u(a.get(bs)));break;case"set":Bt(e)&&u(a.get(ro));break}}Ss()}function Eo(e){let t=Re(e);return t===e||(Ze(t,"iterate",Go),at(e))?t:gt(e)?Vt(e)?t.map(n=>Gt(mt(n))):t.map(Gt):t.map(mt)}function Ko(e){return Ze(e=Re(e),"iterate",Go),e}function Ot(e,t){return gt(e)?Gt(Vt(e)?mt(t):t):mt(t)}var $d={__proto__:null,[Symbol.iterator](){return ms(this,Symbol.iterator,e=>Ot(this,e))},concat(...e){return Eo(this).concat(...e.map(t=>me(t)?Eo(t):t))},entries(){return ms(this,"entries",e=>(e[1]=Ot(this,e[1]),e))},every(e,t){return jt(this,"every",e,t,void 0,arguments)},filter(e,t){return jt(this,"filter",e,t,n=>n.map(r=>Ot(this,r)),arguments)},find(e,t){return jt(this,"find",e,t,n=>Ot(this,n),arguments)},findIndex(e,t){return jt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return jt(this,"findLast",e,t,n=>Ot(this,n),arguments)},findLastIndex(e,t){return jt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return jt(this,"forEach",e,t,void 0,arguments)},includes(...e){return hs(this,"includes",e)},indexOf(...e){return hs(this,"indexOf",e)},join(e){return Eo(this).join(e)},lastIndexOf(...e){return hs(this,"lastIndexOf",e)},map(e,t){return jt(this,"map",e,t,void 0,arguments)},pop(){return Lo(this,"pop")},push(...e){return Lo(this,"push",e)},reduce(e,...t){return Pr(this,"reduce",e,t)},reduceRight(e,...t){return Pr(this,"reduceRight",e,t)},shift(){return Lo(this,"shift")},some(e,t){return jt(this,"some",e,t,void 0,arguments)},splice(...e){return Lo(this,"splice",e)},toReversed(){return Eo(this).toReversed()},toSorted(e){return Eo(this).toSorted(e)},toSpliced(...e){return Eo(this).toSpliced(...e)},unshift(...e){return Lo(this,"unshift",e)},values(){return ms(this,"values",e=>Ot(this,e))}};function ms(e,t,n){let r=Ko(e),s=r[t],i=s.call(r);if(r!==e&&!at(e)){if(i[Symbol.toStringTag]==="Array Iterator"){let a=Object.create(Object.getPrototypeOf(i));return a.next=()=>Ir(i.next(),n),s!==Hr[t]&&Object.defineProperties(a,{return:{get(){let u=i.return;return typeof u=="function"?u.bind(i):u}},throw:{get(){let u=i.throw;return typeof u=="function"?u.bind(i):u}}}),a}i._next=i.next,i.next=()=>Ir(i._next(),n)}return i}function Ir(e,t){return e.done||(e.value=t(e.value)),e}var Hr=Array.prototype;function jt(e,t,n,r,s,i){let a=Ko(e),u=a!==e&&!at(e),m=a[t];if(m!==Hr[t]){let k=m.apply(e,i);return u?mt(k):k}let w=n;a!==e&&(u?w=function(k,h){return n.call(this,Ot(e,k),h,e)}:n.length>2&&(w=function(k,h){return n.call(this,k,h,e)}));let g=m.call(a,w,r);return u&&s?s(g):g}function Pr(e,t,n,r){let s=Ko(e),i=s!==e&&!at(e),a=n,u=!1;s!==e&&(i?(u=r.length===0,a=function(w,g,k){return u&&(u=!1,w=Ot(e,w)),n.call(this,w,Ot(e,g),k,e)}):n.length>3&&(a=function(w,g,k){return n.call(this,w,g,k,e)}));let m=s[t](a,...r);return u?Ot(e,m):m}function hs(e,t,n){let r=Re(e);Ze(r,"iterate",Go);let s=r[t](...n);return(s===-1||s===!1)&&Jo(n[0])?(n[0]=Re(n[0]),r[t](...n)):s}function Lo(e,t,n=[]){St(),_s();let r=Re(e)[t].apply(e,n);return Ss(),Nt(),r}var Ld=vo("__proto__,__v_isRef,__isVue"),Br=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(ft));function Fd(e){ft(e)||(e=String(e));let t=Re(this);return Ze(t,"has",e),t.hasOwnProperty(e)}var Dn=class{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){if(n==="__v_skip")return t.__v_skip;let s=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!s;if(n==="__v_isReadonly")return s;if(n==="__v_isShallow")return i;if(n==="__v_raw")return r===(s?i?Jd:Wr:i?Gr:jr).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;let a=me(t);if(!s){let m;if(a&&(m=$d[n]))return m;if(n==="hasOwnProperty")return Fd}let u=Reflect.get(t,n,Xe(t)?t:r);if((ft(n)?Br.has(n):Ld(n))||(s||Ze(t,"get",n),i))return u;if(Xe(u)){let m=a&&wn(n)?u:u.value;return s&&De(m)?An(m):m}return De(u)?s?An(u):Fe(u):u}},Tn=class extends Dn{constructor(t=!1){super(!1,t)}set(t,n,r,s){let i=t[n],a=me(t)&&wn(n);if(!this._isShallow){let w=gt(i);if(!at(r)&&!gt(r)&&(i=Re(i),r=Re(r)),!a&&Xe(i)&&!Xe(r))return w||(i.value=r),!0}let u=a?Number(n)e,Sn=e=>Reflect.getPrototypeOf(e);function jd(e,t,n){return function(...r){let s=this.__v_raw,i=Re(s),a=Bt(i),u=e==="entries"||e===Symbol.iterator&&a,m=e==="keys"&&a,w=s[e](...r),g=n?ks:t?Gt:mt;return!t&&Ze(i,"iterate",m?bs:ro),je(Object.create(w),{next(){let{value:k,done:h}=w.next();return h?{value:k,done:h}:{value:u?[g(k[0]),g(k[1])]:g(k),done:h}}})}}function Nn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Gd(e,t){let n={get(s){let i=this.__v_raw,a=Re(i),u=Re(s);e||(yt(s,u)&&Ze(a,"get",s),Ze(a,"get",u));let{has:m}=Sn(a),w=t?ks:e?Gt:mt;if(m.call(a,s))return w(i.get(s));if(m.call(a,u))return w(i.get(u));i!==a&&i.get(s)},get size(){let s=this.__v_raw;return!e&&Ze(Re(s),"iterate",ro),s.size},has(s){let i=this.__v_raw,a=Re(i),u=Re(s);return e||(yt(s,u)&&Ze(a,"has",s),Ze(a,"has",u)),s===u?i.has(s):i.has(s)||i.has(u)},forEach(s,i){let a=this,u=a.__v_raw,m=Re(u),w=t?ks:e?Gt:mt;return!e&&Ze(m,"iterate",ro),u.forEach((g,k)=>s.call(i,w(g),w(k),a))}};return je(n,e?{add:Nn("add"),set:Nn("set"),delete:Nn("delete"),clear:Nn("clear")}:{add(s){let i=Re(this),a=Sn(i),u=Re(s),m=!t&&!at(s)&&!gt(s)?u:s;return a.has.call(i,m)||yt(s,m)&&a.has.call(i,s)||yt(u,m)&&a.has.call(i,u)||(i.add(m),It(i,"add",m,m)),this},set(s,i){!t&&!at(i)&&!gt(i)&&(i=Re(i));let a=Re(this),{has:u,get:m}=Sn(a),w=u.call(a,s);w||(s=Re(s),w=u.call(a,s));let g=m.call(a,s);return a.set(s,i),w?yt(i,g)&&It(a,"set",s,i,g):It(a,"add",s,i),this},delete(s){let i=Re(this),{has:a,get:u}=Sn(i),m=a.call(i,s);m||(s=Re(s),m=a.call(i,s));let w=u?u.call(i,s):void 0,g=i.delete(s);return m&&It(i,"delete",s,void 0,w),g},clear(){let s=Re(this),i=s.size!==0,a=void 0,u=s.clear();return i&&It(s,"clear",void 0,void 0,a),u}}),["keys","values","entries",Symbol.iterator].forEach(s=>{n[s]=jd(s,e,t)}),n}function Rs(e,t){let n=Gd(e,t);return(r,s,i)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_isShallow"?t:s==="__v_raw"?r:Reflect.get(Ne(n,s)&&s in r?n:r,s,i)}var Wd={get:Rs(!1,!1)},Kd={get:Rs(!1,!0)},Yd={get:Rs(!0,!1)};var jr=new WeakMap,Gr=new WeakMap,Wr=new WeakMap,Jd=new WeakMap;function Qd(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Fe(e){return gt(e)?e:Ds(e,!1,zd,Wd,jr)}function Yo(e){return Ds(e,!1,Bd,Kd,Gr)}function An(e){return Ds(e,!0,Hd,Yd,Wr)}function Ds(e,t,n,r,s){if(!De(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;let i=s.get(e);if(i)return i;let a=Qd(ps(e));if(a===0)return e;let u=new Proxy(e,a===2?r:n);return s.set(e,u),u}function Vt(e){return gt(e)?Vt(e.__v_raw):!!(e&&e.__v_isReactive)}function gt(e){return!!(e&&e.__v_isReadonly)}function at(e){return!!(e&&e.__v_isShallow)}function Jo(e){return e?!!e.__v_raw:!1}function Re(e){let t=e&&e.__v_raw;return t?Re(t):e}function Ts(e){return!Ne(e,"__v_skip")&&Object.isExtensible(e)&&En(e,"__v_skip",!0),e}var mt=e=>De(e)?Fe(e):e,Gt=e=>De(e)?An(e):e;function Xe(e){return e?e.__v_isRef===!0:!1}function xe(e){return Kr(e,!1)}function In(e){return Kr(e,!0)}function Kr(e,t){return Xe(e)?e:new Es(e,t)}var Es=class{constructor(t,n){this.dep=new jo,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:Re(t),this._value=n?t:mt(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){let n=this._rawValue,r=this.__v_isShallow||at(t)||gt(t);t=r?t:Re(t),yt(t,n)&&(this._rawValue=t,this._value=r?t:mt(t),this.dep.trigger())}};function Wt(e){return Xe(e)?e.value:e}var Xd={get:(e,t,n)=>t==="__v_raw"?e:Wt(Reflect.get(e,t,n)),set:(e,t,n,r)=>{let s=e[t];return Xe(s)&&!Xe(n)?(s.value=n,!0):Reflect.set(e,t,n,r)}};function Pn(e){return Vt(e)?e:new Proxy(e,Xd)}var Cs=class{constructor(t,n,r){this.fn=t,this.setter=n,this._value=void 0,this.dep=new jo(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Bo-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=r}notify(){if(this.flags|=16,!(this.flags&8)&&$e!==this)return Mr(this,!0),!0}get value(){let t=this.dep.track();return Lr(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}};function Yr(e,t,n=!1){let r,s;return ge(e)?r=e:(r=e.get,s=e.set),new Cs(r,s,n)}var Rn={},On=new WeakMap,so;function Jr(e,t=!1,n=so){if(n){let r=On.get(n);r||On.set(n,r=[]),r.push(e)}}function Qr(e,t,n=Ae){let{immediate:r,deep:s,once:i,scheduler:a,augmentJob:u,call:m}=n,w=q=>{(n.onWarn||Md)("Invalid watch source: ",q,"A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.")},g=q=>s?q:at(q)||s===!1||s===0?Pt(q,1):Pt(q),k,h,E,S,v=!1,_=!1;if(Xe(e)?(h=()=>e.value,v=at(e)):Vt(e)?(h=()=>g(e),v=!0):me(e)?(_=!0,v=e.some(q=>Vt(q)||at(q)),h=()=>e.map(q=>{if(Xe(q))return q.value;if(Vt(q))return g(q);if(ge(q))return m?m(q,2):q()})):ge(e)?t?h=m?()=>m(e,2):e:h=()=>{if(E){St();try{E()}finally{Nt()}}let q=so;so=k;try{return m?m(e,3,[S]):e(S)}finally{so=q}}:h=it,t&&s){let q=h,z=s===!0?1/0:s;h=()=>Pt(q(),z)}let N=Vr(),T=()=>{k.stop(),N&&N.active&&qo(N.effects,k)};if(i&&t){let q=t;t=(...z)=>{try{return q(...z)}finally{T()}}}let V=_?new Array(e.length).fill(Rn):Rn,M=q=>{if(!(!(k.flags&1)||!k.dirty&&!q))if(t){let z=k.run();if(q||s||v||(_?z.some((ne,ee)=>yt(ne,V[ee])):yt(z,V))){let ne=so;St();try{E&&E(),so=k;let ee=[z,V===Rn?void 0:_&&V[0]===Rn?[]:V,S];V=z,m?m(t,3,ee):t(...ee)}finally{so=ne,Nt()}}}else k.run()};return u&&u(M),k=new Co(h),k.scheduler=a?()=>a(M,!1):M,S=q=>Jr(q,!1,k),E=k.onStop=()=>{let q=On.get(k);if(q){if(m)m(q,4);else for(let z of q)z();On.delete(k)}},t?r?M(!0):V=k.run():a?a(M.bind(null,!0),!0):k.run(),T.pause=k.pause.bind(k),T.resume=k.resume.bind(k),T.stop=T,T}function Pt(e,t=1/0,n){if(t<=0||!De(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Xe(e))Pt(e.value,t,n);else if(me(e))for(let r=0;r{Pt(r,t,n)});else if(bn(e)){for(let r in e)Pt(e[r],t,n);for(let r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&Pt(e[r],t,n)}return e}function ln(e,t,n,r){try{return r?e(...r):e()}catch(s){dn(s,t,n)}}function bt(e,t,n,r){if(ge(e)){let s=ln(e,t,n,r);return s&&cs(s)&&s.catch(i=>{dn(i,t,n)}),s}if(me(e)){let s=[];for(let i=0;i>>1,s=st[r],i=on(s);i=on(n)?st.push(e):st.splice(ou(t),0,e),e.flags|=1,fi()}}function fi(){Mn||(Mn=pi.then(yi))}function mi(e){if(!me(e))eo&&e.id===-1?eo.splice(_o+1,0,e):e.flags&1||(Mt.push(e),e.flags|=1);else for(let t=0;t=t))continue;st.splice(r,1),r=e?r-1:Rt,s.flags&4&&(s.flags&=-2),s(),s.flags&4||(s.flags&=-2)}}}function vi(e,t,n=0){if(Mt.length){let r=Mt,s=0;if(t){r=[];for(let a=0;aon(a)-on(u));if(Mt.length=s,eo){for(let a=0;ae.id==null?e.flags&2?-1:1/0:e.id;function yi(e){let t=it;try{for(Rt=0;Rt{r._d&&Fn(-1);let i=Un(t),a=lo.length,u;try{u=e(...s)}finally{for(let m=lo.length;m>a;m--)Ki();Un(i),r._d&&Fn(1)}return u};return r._n=!0,r._c=!0,r._d=!0,r}function R(e,t){if(ht===null)return e;let n=Yn(ht),r=e.dirs||(e.dirs=[]);for(let s=0;s1)return n&&ge(t)?t.call(r&&r.proxy):t}}var ru=Symbol.for("v-scx"),iu=()=>{{let e=dt(ru);return e}};function He(e,t,n){return bi(e,t,n)}function bi(e,t,n=Ae){let{immediate:r,deep:s,flush:i,once:a}=n,u=je({},n),m=t&&r||!t&&i!=="post",w;if(Ro){if(i==="sync"){let E=iu();w=E.__watcherHandles||(E.__watcherHandles=[])}else if(!m){let E=()=>{};return E.stop=it,E.resume=it,E.pause=it,E}}let g=et;u.call=(E,S,v)=>bt(E,g,S,v);let k=!1;i==="post"?u.scheduler=E=>{E.i=g,lt(E,g&&g.suspense)}:i!=="sync"&&(k=!0,u.scheduler=(E,S)=>{S?E():zs(E)}),u.augmentJob=E=>{t&&(E.flags|=4),k&&(E.flags|=2,g&&(E.id=g.uid,E.i=g))};let h=Qr(e,t,u);return Ro&&(w?w.push(h):m&&h()),h}function au(e,t,n){let r=this.proxy,s=Le(e)?e.includes(".")?wi(r,e):()=>r[e]:e.bind(r,r),i;ge(t)?i=t:(i=t.handler,n=t);let a=pn(this),u=bi(s,i.bind(r),n);return a(),u}function wi(e,t){let n=t.split(".");return()=>{let r=e;for(let s=0;se.__isTeleport;var Os=Symbol("_leaveCb");function du(e){let t=e[0];if(e.length>1){let n=!1;for(let r of e)if(r.type!==Dt){t=r,n=!0;break}}return t}function ki(e){if(!jn(e))return Bn(e.type)&&e.children?du(e.children):e;if(e.component)return e.component.subTree;let{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&ge(n.default))return n.default()}}function nn(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;let n=e.component.subTree;nn(Bn(n.type)&&ki(n)||n,t)}else if(e.shapeFlag&128)e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback);else if(e.transition=t,e.type===W&&me(e.children)){let n=Pi(e.children,!1);n&&nn(n,t)}}function qs(e){if(e.component)return qs(e.component.subTree);if(e.type===W){let t=me(e.children)&&Pi(e.children,!1);return t?qs(t):void 0}if(e.type!==Dt)return e}function un(e,t){return ge(e)?je({name:e.name},t,{setup:e}):e}function Hs(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function Xr(e,t){let n;return!!((n=Object.getOwnPropertyDescriptor(e,t))&&!n.configurable)}var $n=new WeakMap;function Zo(e,t,n,r,s=!1){if(me(e)){e.forEach((v,_)=>Zo(v,t&&(me(t)?t[_]:t),n,r,s));return}if(xo(r)&&!s){r.shapeFlag&512&&r.type.__asyncResolved&&r.component.subTree.component&&Zo(e,t,n,r.component.subTree);return}let i=r.shapeFlag&4?Yn(r.component):r.el,a=s?null:i,{i:u,r:m}=e,w=t&&t.r,g=u.refs===Ae?u.refs={}:u.refs,k=u.setupState,h=Re(k),E=k===Ae?us:v=>Xr(g,v)?!1:Ne(h,v),S=(v,_)=>!(_&&Xr(g,_));if(w!=null&&w!==m){if(Zr(t),Le(w))g[w]=null,E(w)&&(k[w]=null);else if(Xe(w)){let v=t;S(w,v.k)&&(w.value=null),v.k&&(g[v.k]=null)}}if(ge(m))ln(m,u,12,[a,g]);else{let v=Le(m),_=Xe(m);if(v||_){let N=()=>{if(e.f){let T=v?E(m)?k[m]:g[m]:S(m)||!e.k?m.value:g[e.k];if(s)me(T)&&qo(T,i);else if(me(T))T.includes(i)||T.push(i);else if(v)g[m]=[i],E(m)&&(k[m]=g[m]);else{let V=[i];S(m,e.k)&&(m.value=V),e.k&&(g[e.k]=V)}}else v?(g[m]=a,E(m)&&(k[m]=a)):_&&(S(m,e.k)&&(m.value=a),e.k&&(g[e.k]=a))};if(a){let T=()=>{N(),$n.delete(e)};T.id=-1,$n.set(e,T),lt(T,n)}else Zr(e),N()}}}function Zr(e){let t=$n.get(e);t&&(t.flags|=8,$n.delete(e))}var xr=e=>e.nodeType===8;var NU=$o().requestIdleCallback||(e=>setTimeout(e,1)),RU=$o().cancelIdleCallback||(e=>clearTimeout(e));function uu(e,t){if(xr(e)&&e.data==="["){let n=1,r=e.nextSibling;for(;r;){if(r.nodeType===1){if(t(r)===!1)break}else if(xr(r))if(r.data==="]"){if(--n===0)break}else r.data==="["&&n++;r=r.nextSibling}}else t(e)}var xo=e=>!!e.type.__asyncLoader;function Ei(e){ge(e)&&(e={loader:e});let{loader:t,loadingComponent:n,errorComponent:r,delay:s=200,hydrate:i,timeout:a,suspensible:u=!0,onError:m}=e,w=null,g,k=0,h=()=>(k++,w=null,E()),E=()=>{let S;return w||(S=w=t().catch(v=>{if(v=v instanceof Error?v:new Error(String(v)),m)return new Promise((_,N)=>{m(v,()=>_(h()),()=>N(v),k+1)});throw v}).then(v=>S!==w&&w?w:(v&&(v.__esModule||v[Symbol.toStringTag]==="Module")&&(v=v.default),g=v,v)))};return un({name:"AsyncComponentWrapper",__asyncLoader:E,__asyncHydrate(S,v,_){let N=S.isConnected,T=!1;(v.bu||(v.bu=[])).push(()=>T=!0);let V=()=>{T||!S.parentNode||N&&!S.isConnected||_()},M=i?()=>{let q=i(V,z=>uu(S,z));q&&(v.bum||(v.bum=[])).push(q)}:V;g?M():E().then(()=>!v.isUnmounted&&M())},get __asyncResolved(){return g},setup(){let S=et;if(Hs(S),g)return()=>Vn(g,S);let v=q=>{w=null,dn(q,S,13,!r)};if(u&&S.suspense||Ro)return E().then(q=>()=>Vn(q,S)).catch(q=>(v(q),()=>r?Ce(r,{error:q}):null));let _=xe(!1),N=xe(),T=xe(!!s),V,M;return cn(()=>{V!=null&&clearTimeout(V),M!=null&&clearTimeout(M)}),s&&(M=setTimeout(()=>{S.isUnmounted||(T.value=!1)},s)),a!=null&&(V=setTimeout(()=>{if(!S.isUnmounted&&!_.value&&!N.value){let q=new Error(`Async component timed out after ${a}ms.`);v(q),N.value=q}},a)),E().then(()=>{S.isUnmounted||(_.value=!0,S.parent&&jn(S.parent.vnode)&&S.parent.update())}).catch(q=>{if(S.isUnmounted){w=null;return}v(q),N.value=q}),()=>{if(_.value&&g)return Vn(g,S);if(N.value&&r)return Ce(r,{error:N.value});if(n&&!T.value)return Vn(n,S)}}})}function Vn(e,t){let{ref:n,props:r,children:s,ce:i}=t.vnode,a=Ce(e,r,s);return a.ref=n,a.ce=i,delete t.vnode.ce,a}var jn=e=>e.type.__isKeepAlive;function Ci(e,t){Si(e,"a",t)}function _i(e,t){Si(e,"da",t)}function Si(e,t,n=et){let r=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if(Gn(t,r,n),n){let s=n.parent;for(;s&&s.parent;)jn(s.parent.vnode)&&cu(r,t,n,s),s=s.parent}}function cu(e,t,n,r){let s=Gn(t,e,r,!0);cn(()=>{qo(r[t],s)},n)}function Gn(e,t,n=et,r=!1){if(n){let s=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...a)=>{St();let u=pn(n),m=bt(t,n,e,a);return u(),Nt(),m});return r?s.unshift(i):s.push(i),i}}var Yt=e=>(t,n=et)=>{(!Ro||e==="sp")&&Gn(e,(...r)=>t(...r),n)},pu=Yt("bm"),$t=Yt("m"),Ni=Yt("bu"),Ri=Yt("u"),co=Yt("bum"),cn=Yt("um"),fu=Yt("sp"),mu=Yt("rtg"),hu=Yt("rtc");function vu(e,t=et){Gn("ec",e,t)}var Di="components",yu="directives";function Ge(e,t){return Ti(Di,e,!0,t)||e}var gu=Symbol.for("v-ndc");function ve(e){return Ti(yu,e)}function Ti(e,t,n=!0,r=!1){let s=ht||et;if(s){let i=s.type;if(e===Di){let u=tc(i,!1);if(u&&(u===t||u===Ye(t)||u===no(Ye(t))))return i}let a=ei(s[e]||i[e],t)||ei(s.appContext[e],t);return!a&&r?i:a}}function ei(e,t){return e&&(e[t]||e[Ye(t)]||e[no(Ye(t))])}function oe(e,t,n,r){let s,i=n&&n[r],a=me(e);if(a||Le(e)){let u=a&&Vt(e),m=!1,w=!1;u&&(m=!at(e),w=gt(e),e=Ko(e)),s=new Array(e.length);for(let g=0,k=e.length;gt(u,m,void 0,i&&i[m]));else{let u=Object.keys(e);s=new Array(u.length);for(let m=0,w=u.length;me?Xi(e)?Yn(e):Ms(e.parent):null;var en=je(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Ms(e.parent),$root:e=>Ms(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Bs(e),$forceUpdate:e=>e.f||(e.f=()=>{zs(e.update)}),$nextTick:e=>e.n||(e.n=ot.bind(e.proxy)),$watch:e=>au.bind(e)});var Is=(e,t)=>e!==Ae&&!e.__isScriptSetup&&Ne(e,t),bu={get({_:e},t){if(t==="__v_skip")return!0;let{ctx:n,setupState:r,data:s,props:i,accessCache:a,type:u,appContext:m}=e;if(t[0]!=="$"){let h=a[t];if(h!==void 0)switch(h){case 1:return r[t];case 2:return s[t];case 4:return n[t];case 3:return i[t]}else{if(Is(r,t))return a[t]=1,r[t];if(s!==Ae&&Ne(s,t))return a[t]=2,s[t];if(Ne(i,t))return a[t]=3,i[t];if(n!==Ae&&Ne(n,t))return a[t]=4,n[t];Us&&(a[t]=0)}}let w=en[t],g,k;if(w)return t==="$attrs"&&Ze(e.attrs,"get",""),w(e);if((g=u.__cssModules)&&(g=g[t]))return g;if(n!==Ae&&Ne(n,t))return a[t]=4,n[t];if(k=m.config.globalProperties,Ne(k,t))return k[t]},set({_:e},t,n){let{data:r,setupState:s,ctx:i}=e;return Is(s,t)?(s[t]=n,!0):r!==Ae&&Ne(r,t)?(r[t]=n,!0):Ne(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:s,props:i,type:a}},u){let m;return!!(n[u]||e!==Ae&&u[0]!=="$"&&Ne(e,u)||Is(t,u)||Ne(i,u)||Ne(r,u)||Ne(en,u)||Ne(s.config.globalProperties,u)||(m=a.__cssModules)&&m[u])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Ne(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function ti(e){return me(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}var Us=!0;function wu(e){let t=Bs(e),n=e.proxy,r=e.ctx;Us=!1,t.beforeCreate&&oi(t.beforeCreate,e,"bc");let{data:s,computed:i,methods:a,watch:u,provide:m,inject:w,created:g,beforeMount:k,mounted:h,beforeUpdate:E,updated:S,activated:v,deactivated:_,beforeDestroy:N,beforeUnmount:T,destroyed:V,unmounted:M,render:q,renderTracked:z,renderTriggered:ne,errorCaptured:ee,serverPrefetch:C,expose:P,inheritAttrs:G,components:J,directives:X,filters:K}=t;if(w&&ku(w,r,null),a)for(let ue in a){let re=a[ue];ge(re)&&(r[ue]=re.bind(n))}if(s){let ue=s.call(n,n);De(ue)&&(e.data=Fe(ue))}if(Us=!0,i)for(let ue in i){let re=i[ue],_e=ge(re)?re.bind(n,n):ge(re.get)?re.get.bind(n,n):it,qe=!ge(re)&&ge(re.set)?re.set.bind(n):it,Me=tt({get:_e,set:qe});Object.defineProperty(r,ue,{enumerable:!0,configurable:!0,get:()=>Me.value,set:Pe=>Me.value=Pe})}if(u)for(let ue in u)Ai(u[ue],r,n,ue);if(m){let ue=ge(m)?m.call(n):m;Reflect.ownKeys(ue).forEach(re=>{uo(re,ue[re])})}g&&oi(g,e,"c");function ce(ue,re){me(re)?re.forEach(_e=>ue(_e.bind(n))):re&&ue(re.bind(n))}if(ce(pu,k),ce($t,h),ce(Ni,E),ce(Ri,S),ce(Ci,v),ce(_i,_),ce(vu,ee),ce(hu,z),ce(mu,ne),ce(co,T),ce(cn,M),ce(fu,C),me(P))if(P.length){let ue=e.exposed||(e.exposed={});P.forEach(re=>{Object.defineProperty(ue,re,{get:()=>n[re],set:_e=>n[re]=_e,enumerable:!0})})}else e.exposed||(e.exposed={});q&&e.render===it&&(e.render=q),G!=null&&(e.inheritAttrs=G),J&&(e.components=J),X&&(e.directives=X),C&&Hs(e)}function ku(e,t,n=it){me(e)&&(e=$s(e));for(let r in e){let s=e[r],i;De(s)?"default"in s?i=dt(s.from||r,s.default,!0):i=dt(s.from||r):i=dt(s),Xe(i)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>i.value,set:a=>i.value=a}):t[r]=i}}function oi(e,t,n){bt(me(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function Ai(e,t,n,r){let s=r.includes(".")?wi(n,r):()=>n[r];if(Le(e)){let i=t[e];ge(i)&&He(s,i)}else if(ge(e))He(s,e.bind(n));else if(De(e))if(me(e))e.forEach(i=>Ai(i,t,n,r));else{let i=ge(e.handler)?e.handler.bind(n):t[e.handler];ge(i)&&He(s,i,e)}}function Bs(e){let t=e.type,{mixins:n,extends:r}=t,{mixins:s,optionsCache:i,config:{optionMergeStrategies:a}}=e.appContext,u=i.get(t),m;return u?m=u:!s.length&&!n&&!r?m=t:(m={},s.length&&s.forEach(w=>Ln(m,w,a,!0)),Ln(m,t,a)),De(t)&&i.set(t,m),m}function Ln(e,t,n,r=!1){let{mixins:s,extends:i}=t;i&&Ln(e,i,n,!0),s&&s.forEach(a=>Ln(e,a,n,!0));for(let a in t)if(!(r&&a==="expose")){let u=Eu[a]||n&&n[a];e[a]=u?u(e[a],t[a]):t[a]}return e}var Eu={data:ni,props:si,emits:si,methods:Xo,computed:Xo,beforeCreate:nt,created:nt,beforeMount:nt,mounted:nt,beforeUpdate:nt,updated:nt,beforeDestroy:nt,beforeUnmount:nt,destroyed:nt,unmounted:nt,activated:nt,deactivated:nt,errorCaptured:nt,serverPrefetch:nt,components:Xo,directives:Xo,watch:_u,provide:ni,inject:Cu};function ni(e,t){return t?e?function(){return je(ge(e)?e.call(this,this):e,ge(t)?t.call(this,this):t)}:t:e}function Cu(e,t){return Xo($s(e),$s(t))}function $s(e){if(me(e)){let t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ye(t)}Modifiers`]||e[`${At(t)}Modifiers`];function Du(e,t,...n){if(e.isUnmounted)return;let r=e.vnode.props||Ae,s=n,i=t.startsWith("update:"),a=i&&Ru(r,t.slice(7));a&&(a.trim&&(s=n.map(g=>Le(g)?g.trim():g)),a.number&&(s=s.map(ko)));let u,m=r[u=Uo(t)]||r[u=Uo(Ye(t))];!m&&i&&(m=r[u=Uo(At(t))]),m&&bt(m,e,6,s);let w=r[u+"Once"];if(w){if(!e.emitted)e.emitted={};else if(e.emitted[u])return;e.emitted[u]=!0,bt(w,e,6,s)}}var Tu=new WeakMap;function Ii(e,t,n=!1){let r=n?Tu:t.emitsCache,s=r.get(e);if(s!==void 0)return s;let i=e.emits,a={},u=!1;if(!ge(e)){let m=w=>{let g=Ii(w,t,!0);g&&(u=!0,je(a,g))};!n&&t.mixins.length&&t.mixins.forEach(m),e.extends&&m(e.extends),e.mixins&&e.mixins.forEach(m)}return!i&&!u?(De(e)&&r.set(e,null),null):(me(i)?i.forEach(m=>a[m]=null):je(a,i),De(e)&&r.set(e,a),a)}function Wn(e,t){return!e||!yo(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),Ne(e,t[0].toLowerCase()+t.slice(1))||Ne(e,At(t))||Ne(e,t))}function Ps(e){let{type:t,vnode:n,proxy:r,withProxy:s,propsOptions:[i],slots:a,attrs:u,emit:m,render:w,renderCache:g,props:k,data:h,setupState:E,ctx:S,inheritAttrs:v}=e,_=Un(e),N,T;try{if(n.shapeFlag&4){let q=s||r,z=q;N=Ut(w.call(z,q,g,k,E,h,S)),T=u}else{let q=t;N=Ut(q.length>1?q(k,{attrs:u,slots:a,emit:m}):q(k,null)),T=t.props?u:Au(u)}}catch(q){lo.length=0,dn(q,e,1),N=Ce(Dt)}let V=N,M;if(T&&v!==!1){let q=Object.keys(T),{shapeFlag:z}=V;q.length&&z&7&&(i&&q.some(go)&&(T=Ou(T,i)),V=No(V,T,!1,!0))}if(n.dirs&&(V=No(V,null,!1,!0),V.dirs=V.dirs?V.dirs.concat(n.dirs):n.dirs),n.transition){let q=Bn(V.type)&&ki(V)||V;nn(q,n.transition)}return N=V,Un(_),N}function Pi(e,t=!0){let n;for(let r=0;r{let t;for(let n in e)(n==="class"||n==="style"||yo(n))&&((t||(t={}))[n]=e[n]);return t},Ou=(e,t)=>{let n={};for(let r in e)(!go(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function Iu(e,t,n){let{props:r,children:s,component:i}=e,{props:a,children:u,patchFlag:m}=t,w=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&m>=0){if(m&1024)return!0;if(m&16)return r?ri(r,a,w):!!a;if(m&8){let g=t.dynamicProps;for(let k=0;kObject.create(qi),Ui=e=>Object.getPrototypeOf(e)===qi;function Vu(e,t,n,r=!1){let s={},i=Mi();e.propsDefaults=Object.create(null),$i(e,t,s,i);for(let a in e.propsOptions[0])a in s||(s[a]=void 0);n?e.props=r?s:Yo(s):e.type.props?e.props=s:e.props=i,e.attrs=i}function qu(e,t,n,r){let{props:s,attrs:i,vnode:{patchFlag:a}}=e,u=Re(s),[m]=e.propsOptions,w=!1;if((r||a>0)&&!(a&16)){if(a&8){let g=e.vnode.dynamicProps;for(let k=0;k{m=!0;let[h,E]=Li(k,t,!0);je(a,h),E&&u.push(...E)};!n&&t.mixins.length&&t.mixins.forEach(g),e.extends&&g(e.extends),e.mixins&&e.mixins.forEach(g)}if(!i&&!m)return De(e)&&r.set(e,xt),xt;if(me(i))for(let g=0;ge==="_"||e==="_ctx"||e==="$stable",Gs=e=>me(e)?e.map(Ut):[Ut(e)],Uu=(e,t,n)=>{if(t._n)return t;let r=su((...s)=>Gs(t(...s)),n);return r._c=!1,r},Fi=(e,t,n)=>{let r=e._ctx;for(let s in e){if(js(s))continue;let i=e[s];if(ge(i))t[s]=Uu(s,i,r);else if(i!=null){let a=Gs(i);t[s]=()=>a}}},zi=(e,t)=>{let n=Gs(t);e.slots.default=()=>n},Hi=(e,t,n)=>{for(let r in t)(n||!js(r))&&(e[r]=t[r])},$u=(e,t,n)=>{let r=e.slots=Mi();if(e.vnode.shapeFlag&32){let s=t._;s?(Hi(r,t,n),n&&En(r,"_",s,!0)):Fi(t,r)}else t&&zi(e,t)},Lu=(e,t,n)=>{let{vnode:r,slots:s}=e,i=!0,a=Ae;if(r.shapeFlag&32){let u=t._;u?n&&u===1?i=!1:Hi(s,t,n):(i=!t.$stable,Fi(t,s)),a=t}else t&&(zi(e,t),a={default:1});if(i)for(let u in s)!js(u)&&a[u]==null&&delete s[u]};function Fu(){let e=[]}var lt=ju;function Bi(e){return zu(e)}function zu(e,t){Fu();let n=$o();n.__VUE__=!0;let{insert:r,remove:s,patchProp:i,createElement:a,createText:u,createComment:m,setText:w,setElementText:g,parentNode:k,nextSibling:h,setScopeId:E=it,insertStaticContent:S}=e,v=(p,y,D,O=null,I=null,U=null,L=void 0,H=null,Y=!!y.dynamicChildren)=>{if(p===y)return;p&&!Qo(p,y)&&(O=Z(p),Se(p,I,U,!0),p=null),y.patchFlag===-2&&(Y=!1,y.dynamicChildren=null),y.dynamicChildren&&p&&p.dynamicChildren&&p.dynamicChildren.hasOnce&&(y.dynamicChildren===xt&&(y.dynamicChildren=[]),y.dynamicChildren.hasOnce=!0);let{type:B,ref:le,shapeFlag:x}=y;switch(B){case Kn:_(p,y,D,O);break;case Dt:N(p,y,D,O);break;case tn:p==null&&T(y,D,O,L);break;case W:X(p,y,D,O,I,U,L,H,Y);break;default:x&1?z(p,y,D,O,I,U,L,H,Y):x&6?K(p,y,D,O,I,U,L,H,Y):(x&64||x&128)&&B.process(p,y,D,O,I,U,L,H,Y,te)}le!=null&&I?Zo(le,p&&p.ref,U,y||p,!y):le==null&&p&&p.ref!=null&&Zo(p.ref,null,U,p,!0)},_=(p,y,D,O)=>{if(p==null)r(y.el=u(y.children),D,O);else{let I=y.el=p.el;y.children!==p.children&&w(I,y.children)}},N=(p,y,D,O)=>{p==null?r(y.el=m(y.children||""),D,O):y.el=p.el},T=(p,y,D,O)=>{[p.el,p.anchor]=S(p.children,y,D,O,p.el,p.anchor)},V=(p,y,D,O)=>{if(y.children!==p.children){let I=h(p.anchor);q(p),[y.el,y.anchor]=S(y.children,D,I,O)}else y.el=p.el,y.anchor=p.anchor},M=({el:p,anchor:y},D,O)=>{let I;for(;p&&p!==y;)I=h(p),r(p,D,O),p=I;r(y,D,O)},q=({el:p,anchor:y})=>{let D;for(;p&&p!==y;)D=h(p),s(p),p=D;s(y)},z=(p,y,D,O,I,U,L,H,Y)=>{if(y.type==="svg"?L="svg":y.type==="math"&&(L="mathml"),p==null)ne(y,D,O,I,U,L,H,Y);else{let B=p.el&&p.el._isVueCE?p.el:null;try{B&&B._beginPatch(),P(p,y,I,U,L,H,Y)}finally{B&&B._endPatch()}}},ne=(p,y,D,O,I,U,L,H)=>{let Y,B,{props:le,shapeFlag:x,transition:ae,dirs:he}=p;if(Y=p.el=a(p.type,U,le&&le.is,le),x&8?g(Y,p.children):x&16&&C(p.children,Y,null,O,I,Vs(p,U),L,H),he&&io(p,null,O,"created"),ee(Y,p,p.scopeId,L,O),le){for(let Ve in le)Ve!=="value"&&!bo(Ve)&&i(Y,Ve,null,le[Ve],U,O);"value"in le&&i(Y,"value",null,le.value,U),(B=le.onVnodeBeforeMount)&&qt(B,O,p)}he&&io(p,null,O,"beforeMount");let we=Hu(I,ae);we&&ae.beforeEnter(Y),r(Y,y,D),((B=le&&le.onVnodeMounted)||we||he)&<(()=>{let Oe;B&&qt(B,O,p),we&&ae.enter(Y),he&&io(p,null,O,"mounted")},I)},ee=(p,y,D,O,I)=>{if(D&&E(p,D),O)for(let U=0;U{for(let B=Y;B{let H=y.el=p.el,{patchFlag:Y,dynamicChildren:B,dirs:le}=y;Y|=p.patchFlag&16;let x=p.props||Ae,ae=y.props||Ae,he;if(D&&ao(D,!1),(he=ae.onVnodeBeforeUpdate)&&qt(he,D,y,p),le&&io(y,p,D,"beforeUpdate"),D&&ao(D,!0),B&&(!p.dynamicChildren||p.dynamicChildren.length!==B.length)&&(Y=0,L=!1,B=null),(x.innerHTML&&ae.innerHTML==null||x.textContent&&ae.textContent==null)&&g(H,""),B?G(p.dynamicChildren,B,H,D,O,Vs(y,I),U):L||_e(p,y,H,null,D,O,Vs(y,I),U,!1),Y>0){if(Y&16)J(H,x,ae,D,I);else if(Y&2&&x.class!==ae.class&&i(H,"class",null,ae.class,I),Y&4&&i(H,"style",x.style,ae.style,I),Y&8){let we=y.dynamicProps;for(let Ve=0;Ve{he&&qt(he,D,y,p),le&&io(y,p,D,"updated")},O)},G=(p,y,D,O,I,U,L)=>{for(let H=0;H{if(y!==D){if(y!==Ae)for(let U in y)!bo(U)&&!(U in D)&&i(p,U,y[U],null,I,O);for(let U in D){if(bo(U))continue;let L=D[U],H=y[U];L!==H&&U!=="value"&&i(p,U,H,L,I,O)}"value"in D&&i(p,"value",y.value,D.value,I)}},X=(p,y,D,O,I,U,L,H,Y)=>{let B=y.el=p?p.el:u(""),le=y.anchor=p?p.anchor:u(""),{patchFlag:x,dynamicChildren:ae,slotScopeIds:he}=y;he&&(H=H?H.concat(he):he),p==null?(r(B,D,O),r(le,D,O),C(y.children||[],D,le,I,U,L,H,Y)):x>0&&x&64&&ae&&p.dynamicChildren&&p.dynamicChildren.length===ae.length?(G(p.dynamicChildren,ae,D,I,U,L,H),(y.key!=null||I&&y===I.subTree)&&ji(p,y,!0)):_e(p,y,D,le,I,U,L,H,Y)},K=(p,y,D,O,I,U,L,H,Y)=>{y.slotScopeIds=H,p==null?y.shapeFlag&512?I.ctx.activate(y,D,O,L,Y):se(y,D,O,I,U,L,Y):ce(p,y,Y)},se=(p,y,D,O,I,U,L)=>{let H=p.component=Qu(p,O,I);if(jn(p)&&(H.ctx.renderer=te),Xu(H,!1,L),H.asyncDep){if(I&&I.registerDep(H,ue,L,U),!p.el){let Y=H.subTree=Ce(Dt);N(null,Y,y,D),p.placeholder=Y.el}}else ue(H,p,y,D,I,U,L)},ce=(p,y,D)=>{let O=y.component=p.component;if(Iu(p,y,D))if(O.asyncDep&&!O.asyncResolved){y.el=p.el,y.placeholder=p.placeholder,re(O,y,D);return}else O.next=y,O.update();else y.el=p.el,y.placeholder=p.placeholder,O.vnode=y},ue=(p,y,D,O,I,U,L)=>{let H=()=>{if(p.isMounted){let{next:x,bu:ae,u:he,parent:we,vnode:Ve}=p;{let ct=Gi(p);if(ct){x&&(x.el=Ve.el,re(p,x,L)),ct.asyncDep.then(()=>{lt(()=>{p.isUnmounted||B()},I)});return}}let Oe=x,We;ao(p,!1),x?(x.el=Ve.el,re(p,x,L)):x=Ve,ae&&wo(ae),(We=x.props&&x.props.onVnodeBeforeUpdate)&&qt(We,we,x,Ve),ao(p,!0);let Ke=Ps(p),kt=p.subTree;p.subTree=Ke,v(kt,Ke,k(kt.el),Z(kt),p,I,U),x.el=Ke.el,Oe===null&&Pu(p,Ke.el),he&<(he,I),(We=x.props&&x.props.onVnodeUpdated)&<(()=>qt(We,we,x,Ve),I)}else{let x,{el:ae,props:he}=y,{bm:we,m:Ve,parent:Oe,root:We,type:Ke}=p,kt=xo(y);if(ao(p,!1),we&&wo(we),!kt&&(x=he&&he.onVnodeBeforeMount)&&qt(x,Oe,y),ao(p,!0),ae&&Ee){let ct=()=>{p.subTree=Ps(p),Ee(ae,p.subTree,p,I,null)};kt&&Ke.__asyncHydrate?Ke.__asyncHydrate(ae,p,ct):ct()}else{We.ce&&We.ce._hasShadowRoot()&&We.ce._injectChildStyle(Ke,p.parent?p.parent.type:void 0);let ct=p.subTree=Ps(p);v(null,ct,D,O,p,I,U),y.el=ct.el}if(Ve&<(Ve,I),!kt&&(x=he&&he.onVnodeMounted)){let ct=y;lt(()=>qt(x,Oe,ct),I)}(y.shapeFlag&256||Oe&&xo(Oe.vnode)&&Oe.vnode.shapeFlag&256)&&p.a&<(p.a,I),p.isMounted=!0,y=D=O=null}};p.scope.on();let Y=p.effect=new Co(H);p.scope.off();let B=p.update=Y.run.bind(Y),le=p.job=Y.runIfDirty.bind(Y);le.i=p,le.id=p.uid,Y.scheduler=()=>zs(le),ao(p,!0),B()},re=(p,y,D)=>{y.component=p;let O=p.vnode.props;p.vnode=y,p.next=null,qu(p,y.props,O,D),Lu(p,y.children,D),St(),hi(p),Nt()},_e=(p,y,D,O,I,U,L,H,Y=!1)=>{let B=p&&p.children,le=p?p.shapeFlag:0,x=y.children,{patchFlag:ae,shapeFlag:he}=y;if(ae>0){if(ae&128){Me(B,x,D,O,I,U,L,H,Y);return}else if(ae&256){qe(B,x,D,O,I,U,L,H,Y);return}}he&8?(le&16&&F(B,I,U),x!==B&&g(D,x)):le&16?he&16?Me(B,x,D,O,I,U,L,H,Y):F(B,I,U,!0):(le&8&&g(D,""),he&16&&C(x,D,O,I,U,L,H,Y))},qe=(p,y,D,O,I,U,L,H,Y)=>{p=p||xt,y=y||xt;let B=p.length,le=y.length,x=Math.min(B,le),ae;for(ae=0;aele?F(p,I,U,!0,!1,x):C(y,D,O,I,U,L,H,Y,x)},Me=(p,y,D,O,I,U,L,H,Y)=>{let B=0,le=y.length,x=p.length-1,ae=le-1;for(;B<=x&&B<=ae;){let he=p[B],we=y[B]=Y?Kt(y[B]):Ut(y[B]);if(Qo(he,we))v(he,we,D,null,I,U,L,H,Y);else break;B++}for(;B<=x&&B<=ae;){let he=p[x],we=y[ae]=Y?Kt(y[ae]):Ut(y[ae]);if(Qo(he,we))v(he,we,D,null,I,U,L,H,Y);else break;x--,ae--}if(B>x){if(B<=ae){let he=ae+1,we=heae)for(;B<=x;)Se(p[B],I,U,!0),B++;else{let he=B,we=B,Ve=new Map;for(B=we;B<=ae;B++){let pt=y[B]=Y?Kt(y[B]):Ut(y[B]);pt.key!=null&&Ve.set(pt.key,B)}let Oe,We=0,Ke=ae-we+1,kt=!1,ct=0,Vo=new Array(Ke);for(B=0;B=Ke){Se(pt,I,U,!0);continue}let Tt;if(pt.key!=null)Tt=Ve.get(pt.key);else for(Oe=we;Oe<=ae;Oe++)if(Vo[Oe-we]===0&&Qo(pt,y[Oe])){Tt=Oe;break}Tt===void 0?Se(pt,I,U,!0):(Vo[Tt-we]=B+1,Tt>=ct?ct=Tt:kt=!0,v(pt,y[Tt],D,null,I,U,L,H,Y),We++)}let vr=kt?Bu(Vo):xt;for(Oe=vr.length-1,B=Ke-1;B>=0;B--){let pt=we+B,Tt=y[pt],yr=y[pt+1],gr=pt+1{let{el:U,type:L,transition:H,children:Y,shapeFlag:B}=p;if(B&6){Pe(p.component.subTree,y,D,O);return}if(B&128){p.suspense.move(y,D,O);return}if(B&64){L.move(p,y,D,te);return}if(L===W){r(U,y,D);for(let x=0;xH.enter(U),I));else{let{leave:x,delayLeave:ae,afterLeave:he}=H,we=()=>{p.ctx.isUnmounted?s(U):r(U,y,D)},Ve=()=>{let Oe=U._isLeaving||!!U[Os];U._isLeaving&&U[Os](!0),H.persisted&&!Oe?we():x(U,()=>{we(),he&&he()})};ae?ae(U,we,Ve):Ve()}else r(U,y,D)},Se=(p,y,D,O=!1,I=!1)=>{let{type:U,props:L,ref:H,children:Y,dynamicChildren:B,shapeFlag:le,patchFlag:x,dirs:ae,cacheIndex:he,memo:we}=p;if((x===-2||B&&B.hasOnce)&&(I=!1),H!=null&&(St(),Zo(H,null,D,p,!0),Nt()),he!=null&&(!p.ctx||p.ctx===y)&&(y.renderCache[he]=void 0),le&256){y.ctx.deactivate(p);return}let Ve=le&1&&ae,Oe=!xo(p),We;if(Oe&&(We=L&&L.onVnodeBeforeUnmount)&&qt(We,y,p),le&6)ke(p.component,D,O);else{if(le&128){p.suspense.unmount(D,O);return}Ve&&io(p,null,y,"beforeUnmount"),le&64?p.type.remove(p,y,D,te,O):B&&!B.hasOnce&&(U!==W||x>0&&x&64)?F(B,y,D,!1,!0):(U===W&&x&384||!I&&le&16)&&F(Y,y,D),O&&ze(p)}let Ke=we!=null&&he==null;(Oe&&(We=L&&L.onVnodeUnmounted)||Ve||Ke)&<(()=>{We&&qt(We,y,p),Ve&&io(p,null,y,"unmounted"),Ke&&(p.el=null)},D)},ze=p=>{let{type:y,el:D,anchor:O,transition:I}=p,U=y===W;if(U&&!I){Ue(D,O);return}if(y===tn){q(p),I&&!I.persisted&&I.afterLeave&&I.afterLeave();return}let L=U?qs(p):p,H=()=>{U?k(D)&&Ue(D,O):s(D),I&&!I.persisted&&I.afterLeave&&I.afterLeave()};if(L&&L.shapeFlag&1&&I&&!I.persisted){let{leave:Y,delayLeave:B}=I,le=L.el,x=()=>Y(le,H);B?B(le,H,x):x()}else H()},Ue=(p,y)=>{let D;for(;p!==y;)D=h(p),s(p),p=D;s(y)},ke=(p,y,D)=>{let{bum:O,scope:I,job:U,subTree:L,um:H,m:Y,a:B}=p;ai(Y),ai(B),O&&wo(O),I.stop(),U?(U.flags|=8,Se(L,p,y,D)):p.vnode.el&&L&&(L.transition=p.vnode.transition,Se(L,p,y,D)),H&<(H,y),lt(()=>{p.isUnmounted=!0},y)},F=(p,y,D,O=!1,I=!1,U=0)=>{for(let L=U;L{if(p.shapeFlag&6)return Z(p.component.subTree);if(p.shapeFlag&128)return p.suspense.next();let y=h(p.anchor||p.el),D=y&&y[lu];return D?h(D):y},Q=(p,y,D)=>{let O=p&&y._vnode?void 0:p&&p.component?p.component.uid:Ju();nu(()=>{p==null?y._vnode&&Se(y._vnode,null,null,!0):v(y._vnode||null,p,y,null,null,null,D),y._vnode=p},O)},te={p:v,um:Se,m:Pe,r:ze,mt:se,mc:C,pc:_e,pbc:G,n:Z,o:e},ye,Ee;return t&&([ye,Ee]=t(te)),{render:Q,hydrate:ye,createApp:Nu(Q,ye)}}function Vs({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function ao({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Hu(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function ji(e,t,n=!1){let r=e.children,s=t.children;if(me(r)&&me(s))for(let i=0;i>1,e[n[u]]0&&(t[r]=n[i-1]),n[i]=r)}}for(i=n.length,a=n[i-1];i-- >0;)n[i]=a,a=t[a];return n}function Gi(e){let t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Gi(t)}function ai(e){if(e)for(let t=0;te.__isSuspense;function ju(e,t){t&&t.pendingBranch?me(e)?t.effects.push(...e):t.effects.push(e):mi(e)}var W=Symbol.for("v-fgt"),Kn=Symbol.for("v-txt"),Dt=Symbol.for("v-cmt"),tn=Symbol.for("v-stc"),lo=[],vt=null;function l(e=!1){lo.push(vt=e?null:[])}function Ki(){lo.pop(),vt=lo[lo.length-1]||null}var sn=1;function Fn(e,t=!1){sn+=e,e<0&&vt&&t&&(vt.hasOnce=!0)}function Yi(e){return e.dynamicChildren=sn>0?vt||xt:null,Ki(),sn>0&&vt&&vt.push(e),e}function d(e,t,n,r,s,i){return Yi(o(e,t,n,r,s,i,!0))}function Lt(e,t,n,r,s){return Yi(Ce(e,t,n,r,s,!0))}function rn(e){return e?e.__v_isVNode===!0:!1}function Qo(e,t){return e.type===t.type&&e.key===t.key}var Ji=({key:e})=>e??null,qn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?Le(e)||Xe(e)||ge(e)?{i:ht,r:e,k:t,f:!!n}:e:null);function o(e,t=null,n=null,r=0,s=null,i=e===W?0:1,a=!1,u=!1){let m={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Ji(t),ref:t&&qn(t),scopeId:gi,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:r,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:ht};return u?(zn(m,n),i&128&&e.normalize(m)):n&&(m.shapeFlag|=Le(n)?8:16),sn>0&&!a&&vt&&(m.patchFlag>0||i&6)&&m.patchFlag!==32&&vt.push(m),m}var Ce=Gu;function Gu(e,t=null,n=null,r=0,s=null,i=!1){if((!e||e===gu)&&(e=Dt),rn(e)){let u=No(e,t,!0);return n&&zn(u,n),sn>0&&!i&&vt&&(u.shapeFlag&6?vt[vt.indexOf(e)]=u:vt.push(u)),u.patchFlag=-2,u}if(oc(e)&&(e=e.__vccOpts),t){t=Wu(t);let{class:u,style:m}=t;u&&!Le(u)&&(t.class=A(u)),De(m)&&(Jo(m)&&!me(m)&&(m=je({},m)),t.style=Ie(m))}let a=Le(e)?1:Wi(e)?128:Bn(e)?64:De(e)?4:ge(e)?2:0;return o(e,t,n,r,s,a,i,!0)}function Wu(e){return e?Jo(e)||Ui(e)?je({},e):e:null}function No(e,t,n=!1,r=!1){let{props:s,ref:i,patchFlag:a,children:u,transition:m}=e,w=t?Ku(s||{},t):s,g={__v_isVNode:!0,__v_skip:!0,type:e.type,props:w,key:w&&Ji(w),ref:t&&t.ref?n&&i?me(i)?i.concat(qn(t)):[i,qn(t)]:qn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:u,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==W?a===-1?16:a|16:a,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:m,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&No(e.ssContent),ssFallback:e.ssFallback&&No(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce,cacheIndex:e.cacheIndex};return m&&r&&nn(g,m.clone(g)),g}function b(e=" ",t=0){return Ce(Kn,null,e,t)}function de(e,t){let n=Ce(tn,null,e);return n.staticCount=t,n}function f(e="",t=!1){return t?(l(),Lt(Dt,null,e)):Ce(Dt,null,e)}function Ut(e){return e==null||typeof e=="boolean"?Ce(Dt):me(e)?Ce(W,null,e.slice()):rn(e)?Kt(e):Ce(Kn,null,String(e))}function Kt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:No(e)}function zn(e,t){let n=0,{shapeFlag:r}=e;if(t==null)t=null;else if(me(t))n=16;else if(typeof t=="object")if(r&65){let s=t.default;s&&(s._c&&(s._d=!1),zn(e,s()),s._c&&(s._d=!0));return}else{n=32;let s=t._;!s&&!Ui(t)?t._ctx=ht:s===3&&ht&&(ht.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(ge(t)){if(r&65){zn(e,{default:t});return}t={default:t,_ctx:ht},n=32}else t=String(t),r&64?(n=16,t=[b(t)]):n=8;e.children=t,e.shapeFlag|=n}function Ku(...e){let t={};for(let n=0;net||ht,Hn,an;{let e=$o(),t=(n,r)=>{let s;return(s=e[n])||(s=e[n]=[]),s.push(r),i=>{s.length>1?s.forEach(a=>a(i)):s[0](i)}};Hn=t("__VUE_INSTANCE_SETTERS__",n=>et=n),an=t("__VUE_SSR_SETTERS__",n=>Ro=n)}var pn=e=>{let t=et;return Hn(e),e.scope.on(),()=>{e.scope.off(),Hn(t)}},li=()=>{et&&et.scope.off(),Hn(null)};function Xi(e){return e.vnode.shapeFlag&4}var Ro=!1;function Xu(e,t=!1,n=!1){t&&an(t);let{props:r,children:s}=e.vnode,i=Xi(e);Vu(e,r,i,t),$u(e,s,n||t);let a=i?Zu(e,t):void 0;return t&&an(!1),a}function Zu(e,t){let n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,bu);let{setup:r}=n;if(r){St();let s=e.setupContext=r.length>1?ec(e):null,i=pn(e),a=ln(r,e,0,[e.props,s]),u=cs(a);if(Nt(),i(),(u||e.sp)&&!xo(e)&&Hs(e),u){if(a.then(li,li),t)return a.then(m=>{an(!0);try{di(e,m,t)}finally{an(!1)}}).catch(m=>{dn(m,e,0)});e.asyncDep=a}else di(e,a,t)}else Zi(e,t)}function di(e,t,n){ge(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:De(t)&&(e.setupState=Pn(t)),Zi(e,n)}var ui,ci;function Zi(e,t,n){let r=e.type;if(!e.render){if(!t&&ui&&!r.render){let s=r.template||Bs(e).template;if(s){let{isCustomElement:i,compilerOptions:a}=e.appContext.config,{delimiters:u,compilerOptions:m}=r,w=je(je({isCustomElement:i,delimiters:u},a),m);r.render=ui(s,w)}}e.render=r.render||it,ci&&ci(e)}{let s=pn(e);St();try{wu(e)}finally{Nt(),s()}}}var xu={get(e,t){return Ze(e,"get",""),e[t]}};function ec(e){let t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,xu),slots:e.slots,emit:e.emit,expose:t}}function Yn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Pn(Ts(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in en)return en[n](e)},has(t,n){return n in t||n in en}})):e.proxy}function tc(e,t=!0){return ge(e)?e.displayName||e.name:e.name||t&&e.__name}function oc(e){return ge(e)&&"__vccOpts"in e}var tt=(e,t)=>Yr(e,t,Ro);function be(e,t,n){try{Fn(-1);let r=arguments.length;return r===2?De(t)&&!me(t)?rn(t)?Ce(e,null,[t]):Ce(e,t):Ce(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&rn(n)&&(n=[n]),Ce(e,t,n))}finally{Fn(1)}}var nc="3.5.44";var Qs,xi=typeof window<"u"&&window.trustedTypes;if(xi)try{Qs=xi.createPolicy("vue",{createHTML:e=>e})}catch{}var ca=Qs?e=>Qs.createHTML(e):e=>e,sc="http://www.w3.org/2000/svg",rc="http://www.w3.org/1998/Math/MathML",Jt=typeof document<"u"?document:null,ea=Jt&&Jt.createElement("template"),ic={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{let t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{let s=t==="svg"?Jt.createElementNS(sc,e):t==="mathml"?Jt.createElementNS(rc,e):n?Jt.createElement(e,{is:n}):Jt.createElement(e);return e==="select"&&r&&r.multiple!=null&&s.setAttribute("multiple",r.multiple),s},createText:e=>Jt.createTextNode(e),createComment:e=>Jt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Jt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,s,i){let a=n?n.previousSibling:t.lastChild;if(s&&(s===i||s.nextSibling))for(;t.insertBefore(s.cloneNode(!0),n),!(s===i||!(s=s.nextSibling)););else{ea.innerHTML=ca(r==="svg"?`${e}`:r==="mathml"?`${e}`:e);let u=ea.content;if(r==="svg"||r==="mathml"){let m=u.firstChild;for(;m.firstChild;)u.appendChild(m.firstChild);u.removeChild(m)}t.insertBefore(u,n)}return[a?a.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};var ac=Symbol("_vtc");function lc(e,t,n){let r=e[ac];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}var Xn=Symbol("_vod"),pa=Symbol("_vsh"),j={name:"show",beforeMount(e,{value:t},{transition:n}){e[Xn]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):fn(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),fn(e,!0),r.enter(e)):r.leave(e,()=>{fn(e,!1)}):fn(e,t))},beforeUnmount(e,{value:t}){fn(e,t)}};function fn(e,t){e.style.display=t?e[Xn]:"none",e[pa]=!t}var dc=Symbol("");var uc=/(?:^|;)\s*display\s*:/;function cc(e,t,n){let r=e.style,s=Le(n),i=!1;if(n&&!s){if(t)if(Le(t))for(let a of t.split(";")){let u=a.slice(0,a.indexOf(":")).trim();n[u]==null&&mn(r,u,"")}else for(let a in t)n[a]==null&&mn(r,a,"");for(let a in n){a==="display"&&(i=!0);let u=n[a];u!=null?fc(e,a,!Le(t)&&t?t[a]:void 0,u)||mn(r,a,u):mn(r,a,"")}}else if(s){if(t!==n){let a=r[dc];a&&(n+=";"+a),r.cssText=n,i=uc.test(n)}}else t&&e.removeAttribute("style");Xn in e&&((!s||t!==n)&&(e[Xn]=i?r.display:""),e[pa]&&(r.display="none"))}var Jn=/\s*!important$/;function mn(e,t,n){if(me(n))n.forEach(r=>mn(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))Jn.test(n)?e.setProperty(t,n.replace(Jn,""),"important"):e.setProperty(t,n);else{let r=pc(e,t);Jn.test(n)?e.setProperty(At(r),n.replace(Jn,""),"important"):e[r]=n}}var ta=["Webkit","Moz","ms"],Ks={};function pc(e,t){let n=Ks[t];if(n)return n;let r=Ye(t);if(r!=="filter"&&r in e)return Ks[t]=r;r=no(r);for(let s=0;sYs||(bc.then(()=>Ys=0),Ys=Date.now());function kc(e,t){let n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;let s=n.value;if(me(s)){let i=r.stopImmediatePropagation;r.stopImmediatePropagation=()=>{i.call(r),r._stopped=!0};let a=s.slice(),u=[r];for(let m=0;me.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Ec=(e,t,n,r,s,i)=>{let a=s==="svg";t==="class"?lc(e,r,a):t==="style"?cc(e,n,r):yo(t)?go(t)||hc(e,t,n,r,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Cc(e,t,r,a))?(sa(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&na(e,t,r,a,i,t!=="value")):e._isVueCE&&(_c(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!Le(r)))?sa(e,Ye(t),r,i,t):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),na(e,t,r,a))};function Cc(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&ia(t)&&ge(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){let s=e.tagName;if(s==="IMG"||s==="VIDEO"||s==="CANVAS"||s==="SOURCE")return!1}return ia(t)&&Le(n)?!1:t in e}function _c(e,t){let n=e._def.props;if(!n)return!1;let r=Ye(t);return Array.isArray(n)?n.some(s=>Ye(s)===r):Object.keys(n).some(s=>Ye(s)===r)}var Do=e=>{let t=e.props["onUpdate:modelValue"]||!1;return me(t)?n=>wo(t,n):t};function Sc(e){e.target.composing=!0}function aa(e){let t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}var Ft=Symbol("_assign"),Qn=Symbol("_initialValue");function Js(e,t,n){return t&&(e=e.trim()),n&&(e=ko(e)),e}var zt={created(e,{modifiers:{lazy:t,trim:n,number:r}},s){e.parentNode&&(e.type==="text"?e[Qn]=e.defaultValue.replace(/[\r\n]/g,""):e.type==="textarea"&&(e[Qn]=e.defaultValue.replace(/\r\n?/g,` +`))),e[Ft]=Do(s);let i=r||s.props&&s.props.type==="number";to(e,t?"change":"input",a=>{a.target.composing||e[Ft](Js(e.value,n,i))}),(n||i)&&to(e,"change",()=>{e.value=Js(e.value,n,i)}),t||(to(e,"compositionstart",Sc),to(e,"compositionend",aa),to(e,"change",aa))},mounted(e,{value:t,modifiers:{trim:n,number:r}}){let s=t??"",i=e[Qn];delete e[Qn],i!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==i?e[Ft](Js(e.value,n,r)):e.value=s},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:s,number:i}},a){if(e[Ft]=Do(a),e.composing)return;let u=(i||e.type==="number")&&!/^0\d/.test(e.value)?ko(e.value):e.value,m=t??"";if(u===m)return;let w=e.getRootNode();(w instanceof Document||w instanceof ShadowRoot)&&w.activeElement===e&&e.type!=="range"&&(r&&t===n||s&&e.value.trim()===m)||(e.value=m)}},Xs={deep:!0,created(e,t,n){e[Ft]=Do(n),to(e,"change",()=>{let r=e._modelValue,s=hn(e),i=e.checked,a=e[Ft];if(me(r)){let u=_n(r,s),m=u!==-1;if(i&&!m)a(r.concat(s));else if(!i&&m){let w=[...r];w.splice(u,1),a(w)}}else if(Et(r)){let u=new Set(r);i?u.add(s):u.delete(s),a(u)}else a(fa(e,i))})},mounted:la,beforeUpdate(e,t,n){e[Ft]=Do(n),la(e,t,n)}};function la(e,{value:t,oldValue:n},r){e._modelValue=t;let s;if(me(t))s=_n(t,r.props.value)>-1;else if(Et(t))s=t.has(r.props.value);else{if(t===n)return;s=Ct(t,fa(e,!0))}e.checked!==s&&(e.checked=s)}var To={deep:!0,created(e,{value:t,modifiers:{number:n}},r){e._modelValue=t,to(e,"change",()=>{let s=Array.prototype.filter.call(e.options,m=>m.selected).map(m=>n?ko(hn(m)):hn(m)),i=e.multiple,a=i?Et(e._modelValue)?new Set(s):s:s[0],u=e._pendingValue=[i,i?me(a)?s.slice():s:a];try{e[Ft](a)}finally{ot(()=>{e._pendingValue===u&&(e._pendingValue=void 0)})}}),e[Ft]=Do(r)},mounted(e,{value:t}){da(e,t)},beforeUpdate(e,{value:t},n){e._modelValue=t,e[Ft]=Do(n)},updated(e,{value:t}){let n=e._pendingValue;e._pendingValue=void 0,(!n||n[0]!==e.multiple||!Nc(t,n[1],n[0]))&&da(e,t)}};function Nc(e,t,n){if(!n)return Ct(e,t);if(me(e))return Ct(e,t);if(Et(e)){if(e.size!==t.length)return!1;for(let r of t)if(!e.has(r))return!1;return!0}return!1}function da(e,t){let n=e.multiple,r=me(t);if(!(n&&!r&&!Et(t))){for(let s=0,i=e.options.length;sString(w)===String(u)):a.selected=_n(t,u)>-1}else a.selected=t.has(u);else if(Ct(hn(a),t)){e.selectedIndex!==s&&(e.selectedIndex=s);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function hn(e){return"_value"in e?e._value:e.value}function fa(e,t){let n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}var Rc=["ctrl","shift","alt","meta"],Dc={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Rc.some(n=>e[`${n}Key`]&&!t.includes(n))},ie=(e,t)=>{if(!e)return e;let n=e._withMods||(e._withMods={}),r=t.join(".");return n[r]||(n[r]=((s,...i)=>{for(let a=0;a{let n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=(s=>{if(!("key"in s))return;let i=At(s.key);if(t.some(a=>a===i||Tc[a]===i))return e(s)}))},Ac=je({patchProp:Ec},ic),ua;function Oc(){return ua||(ua=Bi(Ac))}var ma=((...e)=>{let t=Oc().createApp(...e),{mount:n}=t;return t.mount=r=>{let s=Pc(r);if(!s)return;let i=t._component;!ge(i)&&!i.render&&!i.template&&(i.template=s.innerHTML),s.nodeType===1&&(s.textContent="");let a=n(s,!1,Ic(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),a},t});function Ic(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Pc(e){return Le(e)?document.querySelector(e):e}var mo=typeof document<"u";function va(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Vc(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&va(e.default)}var Te=Object.assign;function Zn(e,t){let n={};for(let r in t){let s=t[r];n[r]=wt(s)?s.map(e):e(s)}return n}var Io=()=>{},wt=Array.isArray;function er(e,t){let n={};for(let r in e)n[r]=r in t?t[r]:e[r];return n}var ya=/#/g,qc=/&/g,Mc=/\//g,Uc=/=/g,$c=/\?/g,ga=/\+/g,Lc=/%5B/g,Fc=/%5D/g,ba=/%5E/g,zc=/%60/g,wa=/%7B/g,Hc=/%7C/g,ka=/%7D/g,Bc=/%20/g;function tr(e){return e==null?"":encodeURI(""+e).replace(Hc,"|").replace(Lc,"[").replace(Fc,"]")}function Ea(e){return tr(e).replace(wa,"{").replace(ka,"}").replace(ba,"^")}function Zs(e){return tr(e).replace(ga,"%2B").replace(Bc,"+").replace(ya,"%23").replace(qc,"%26").replace(zc,"`").replace(wa,"{").replace(ka,"}").replace(ba,"^")}function jc(e){return Zs(e).replace(Uc,"%3D")}function Gc(e){return tr(e).replace(ya,"%23").replace($c,"%3F")}function Ca(e){return Gc(e).replace(Mc,"%2F")}function Oo(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}var Wc=/\/$/,Kc=e=>e.replace(Wc,"");function xn(e,t,n="/"){let r,s={},i="",a="",u=t.indexOf("#"),m=t.indexOf("?");return m=u>=0&&m>u?-1:m,m>=0&&(r=t.slice(0,m),i=t.slice(m,u>0?u:t.length),s=e(i.slice(1))),u>=0&&(r=r||t.slice(0,u),a=t.slice(u,t.length)),r=Jc(r??t,n),{fullPath:r+i+a,path:r,query:s,hash:Oo(a)}}function _a(e,t){let n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function or(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Sa(e,t,n){let r=t.matched.length-1,s=n.matched.length-1;return r>-1&&r===s&&po(t.matched[r],n.matched[s])&&nr(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function po(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function nr(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!Yc(e[n],t[n]))return!1;return!0}function Yc(e,t){return wt(e)?ha(e,t):wt(t)?ha(t,e):e?.valueOf()===t?.valueOf()}function ha(e,t){return wt(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function Jc(e,t){if(e.startsWith("/"))return e;if(!e)return t;let n=t.split("/"),r=e.split("/"),s=r[r.length-1];(s===".."||s===".")&&r.push("");let i=n.length-1,a,u;for(a=0;a1&&i--;else break;return n.slice(0,i).join("/")+"/"+r.slice(a).join("/")}var Xt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},es=(function(e){return e.pop="pop",e.push="push",e})({}),ts=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function Na(e){if(!e)if(mo){let t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Kc(e)}var Qc=/^[^#]+#/;function Ra(e,t){return e.replace(Qc,"#")+t}function Xc(e,t){let n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}var vn=()=>({left:window.scrollX,top:window.scrollY});function Da(e){let t;if("el"in e){let n=e.el,r=typeof n=="string"&&n.startsWith("#"),s=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!s)return;t=Xc(s,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function sr(e,t){return(history.state?history.state.position-t:-1)+e}var xs=new Map;function Ta(e,t){xs.set(e,t)}function Aa(e){let t=xs.get(e);return xs.delete(e),t}function Zc(e){return typeof e=="string"||e&&typeof e=="object"}function rr(e){return typeof e=="string"||typeof e=="symbol"}var Be=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({}),Oa=Symbol("");var s$={[Be.MATCHER_NOT_FOUND]({location:e,currentLocation:t}){return`No match for ${JSON.stringify(e)}${t?` while being at -`+JSON.stringify(t):""}`},[Be.NAVIGATION_GUARD_REDIRECT]({from:e,to:t}){return`Redirected from "${e.fullPath}" to "${ep(t)}" via a navigation guard.`},[Be.NAVIGATION_ABORTED]({from:e,to:t}){return`Navigation aborted from "${e.fullPath}" to "${t.fullPath}" via a navigation guard.`},[Be.NAVIGATION_CANCELLED]({from:e,to:t}){return`Navigation cancelled from "${e.fullPath}" to "${t.fullPath}" with a new navigation.`},[Be.NAVIGATION_DUPLICATED]({from:e,to:t}){return`Avoided redundant navigation to current location: "${e.fullPath}".`}};function fo(e,t){return Te(new Error,{type:e,[Oa]:!0},t)}function Ht(e,t){return e instanceof Error&&Oa in e&&(t==null||!!(e.type&t))}var xc=["params","query","hash"];function ep(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;let t={};for(let n of xc)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function Ia(e){let t={};if(e===""||e==="?")return t;let n=(e[0]==="?"?e.slice(1):e).split("&");for(let r=0;rs&&Zs(s)):[r&&Zs(r)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+n,s!=null&&(t+="="+s))})}return t}function Pa(e){let t={};for(let n in e){let r=e[n];r!==void 0&&(t[n]=wt(r)?r.map(s=>s==null?null:""+s):r==null?r:""+r)}return t}var Va=Symbol(""),ar=Symbol(""),os=Symbol(""),ns=Symbol(""),ss=Symbol("");function Io(){let e=[];function t(r){return e.push(r),()=>{let s=e.indexOf(r);s>-1&&e.splice(s,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Qt(e,t,n,r,s,i=a=>a()){let a=r&&(r.enterCallbacks[s]=r.enterCallbacks[s]||[]);return()=>new Promise((u,m)=>{let k=h=>{h===!1?m(fo(Be.NAVIGATION_ABORTED,{from:n,to:t})):h instanceof Error?m(h):Zc(h)?m(fo(Be.NAVIGATION_GUARD_REDIRECT,{from:t,to:h})):(a&&r.enterCallbacks[s]===a&&typeof h=="function"&&a.push(h),u())},y=i(()=>e.call(r&&r.instances[s],t,n,k)),E=Promise.resolve(y);e.length<3&&(E=E.then(k)),E.catch(h=>m(h))})}function rs(e,t,n,r,s=i=>i()){let i=[];for(let a of e)for(let u in a.components){let m=a.components[u];if(!(t!=="beforeRouteEnter"&&!a.instances[u]))if(va(m)){let k=(m.__vccOpts||m)[t];k&&i.push(Qt(k,n,r,a,u,s))}else{let k=m();i.push(()=>k.then(y=>{if(!y)throw new Error(`Couldn't resolve component "${u}" at "${a.path}"`);let E=Vc(y)?y.default:y;a.mods[u]=y,a.components[u]=E;let h=(E.__vccOpts||E)[t];return h&&Qt(h,n,r,a,u,s)()}))}}return i}function qa(e,t){let n=[],r=[],s=[],i=Math.max(t.matched.length,e.matched.length);for(let a=0;apo(k,u))?r.push(u):n.push(u));let m=e.matched[a];m&&(t.matched.find(k=>po(k,m))||s.push(m))}return[n,r,s]}var tp=()=>location.protocol+"//"+location.host;function Wa(e,t){let{pathname:n,search:r,hash:s}=t,i=e.indexOf("#");if(i>-1){let a=s.includes(e.slice(i))?e.slice(i).length:1,u=s.slice(a);return u[0]!=="/"&&(u="/"+u),or(u,"")}return or(n,e)+r+s}function op(e,t,n,r){let s=[],i=[],a=null,u=({state:h})=>{let C=Wa(e,location),g=n.value,b=t.value,S=0;if(h){if(n.value=C,t.value=h,a&&a===g){a=null;return}S=b?h.position-b.position:0}else r(C);s.forEach(R=>{R(n.value,g,{delta:S,type:es.pop,direction:S?S>0?ts.forward:ts.back:ts.unknown})})};function m(){a=n.value}function k(h){s.push(h);let C=()=>{let g=s.indexOf(h);g>-1&&s.splice(g,1)};return i.push(C),C}function y(){if(document.visibilityState==="hidden"){let{history:h}=window;if(!h.state)return;h.replaceState(Te({},h.state,{scroll:hn()}),"")}}function E(){for(let h of i)h();i=[],window.removeEventListener("popstate",u),window.removeEventListener("pagehide",y),document.removeEventListener("visibilitychange",y)}return window.addEventListener("popstate",u),window.addEventListener("pagehide",y),document.addEventListener("visibilitychange",y),{pauseListeners:m,listen:k,destroy:E}}function Ma(e,t,n,r=!1,s=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:s?hn():null}}function np(e){let{history:t,location:n}=window,r={value:Wa(e,n)},s={value:t.state};s.value||i(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(m,k,y){let E=e.indexOf("#"),h=E>-1?(n.host&&document.querySelector("base")?e:e.slice(E))+m:tp()+e+m;try{t[y?"replaceState":"pushState"](k,"",h),s.value=k}catch(C){console.error(C),n[y?"replace":"assign"](h)}}function a(m,k){i(m,Te({},t.state,Ma(s.value.back,m,s.value.forward,!0),k,{position:s.value.position}),!0),r.value=m}function u(m,k){let y=Te({},s.value,t.state,{forward:m,scroll:hn()});i(y.current,y,!0),i(m,Te({},Ma(r.value,m,null),{position:y.position+1},k),!1),r.value=m}return{location:r,state:s,push:u,replace:a}}function Ka(e){e=Na(e);let t=np(e),n=op(e,t.state,t.location,t.replace);function r(i,a=!0){a||n.pauseListeners(),history.go(i)}let s=Te({location:"",base:e,go:r,createHref:Da.bind(null,e)},t,n);return Object.defineProperty(s,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(s,"state",{enumerable:!0,get:()=>t.state.value}),s}var ho=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({}),Qe=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(Qe||{}),sp={type:ho.Static,value:""},rp=/[a-zA-Z0-9_]/;function ip(e){if(!e)return[[]];if(e==="/")return[[sp]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(C){throw new Error(`ERR (${n})/"${k}": ${C}`)}let n=Qe.Static,r=n,s=[],i;function a(){i&&s.push(i),i=[]}let u=0,m,k="",y="";function E(){k&&(n===Qe.Static?i.push({type:ho.Static,value:k}):n===Qe.Param||n===Qe.ParamRegExp||n===Qe.ParamRegExpEnd?(i.length>1&&(m==="*"||m==="+")&&t(`A repeatable param (${k}) must be alone in its segment. eg: '/:ids+.`),i.push({type:ho.Param,value:k,regexp:y,repeatable:m==="*"||m==="+",optional:m==="*"||m==="?"})):t("Invalid state to consume buffer"),k="")}function h(){k+=m}for(;ut.length?t.length===1&&t[0]===rt.Static+rt.Segment?1:-1:0}function Ya(e,t){let n=0,r=e.score,s=t.score;for(;n0&&t[t.length-1]<0}var cp={strict:!1,end:!0,sensitive:!1};function pp(e,t,n){let r=dp(ip(e.path),n),s=Te(r,{record:e,parent:t,children:[],alias:[]});return t&&!s.record.aliasOf==!t.record.aliasOf&&t.children.push(s),s}function fp(e,t){let n=[],r=new Map;t=er(cp,t);function s(E){return r.get(E)}function i(E,h,C){let g=!C,b=Fa(E);b.aliasOf=C&&C.record;let S=er(t,E),R=[b];if("alias"in E){let M=typeof E.alias=="string"?[E.alias]:E.alias;for(let V of M)R.push(Fa(Te({},b,{components:C?C.record.components:b.components,path:V,aliasOf:C?C.record:b})))}let T,q;for(let M of R){let{path:V}=M;if(h&&V[0]!=="/"){let z=h.record.path,ne=z[z.length-1]==="/"?"":"/";M.path=h.record.path+(V&&ne+V)}if(T=pp(M,h,S),C?C.alias.push(T):(q=q||T,q!==T&&q.alias.push(T),g&&E.name&&!za(T)&&a(E.name)),Ja(T)&&m(T),b.children){let z=b.children;for(let ne=0;ne{a(q)}:Oo}function a(E){if(rr(E)){let h=r.get(E);h&&(r.delete(E),n.splice(n.indexOf(h),1),h.children.forEach(a),h.alias.forEach(a))}else{let h=n.indexOf(E);h>-1&&(n.splice(h,1),E.record.name&&r.delete(E.record.name),E.children.forEach(a),E.alias.forEach(a))}}function u(){return n}function m(E){let h=vp(E,n);n.splice(h,0,E),E.record.name&&!za(E)&&r.set(E.record.name,E)}function k(E,h){let C,g={},b,S;if("name"in E&&E.name){if(C=r.get(E.name),!C)throw fo(Be.MATCHER_NOT_FOUND,{location:E});S=C.record.name,g=Te(La(h.params,C.keys.filter(q=>!q.optional).concat(C.parent?C.parent.keys.filter(q=>q.optional):[]).map(q=>q.name)),E.params&&La(E.params,C.keys.map(q=>q.name))),b=C.stringify(g)}else if(E.path!=null)b=E.path,C=n.find(q=>q.re.test(b)),C&&(g=C.parse(b),S=C.record.name);else{if(C=h.name?r.get(h.name):n.find(q=>q.re.test(h.path)),!C)throw fo(Be.MATCHER_NOT_FOUND,{location:E,currentLocation:h});S=C.record.name,g=Te({},h.params,E.params),b=C.stringify(g)}let R=[],T=C;for(;T;)R.unshift(T.record),T=T.parent;return{name:S,path:b,params:g,matched:R,meta:hp(R)}}e.forEach(E=>i(E));function y(){n.length=0,r.clear()}return{addRoute:i,resolve:k,removeRoute:a,clearRoutes:y,getRoutes:u,getRecordMatcher:s}}function La(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}function Fa(e){let t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:mp(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function mp(e){let t={},n=e.props||!1;if("component"in e)t.default=n;else for(let r in e.components)t[r]=typeof n=="object"?n[r]:n;return t}function za(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function hp(e){return e.reduce((t,n)=>Te(t,n.meta),{})}function vp(e,t){let n=0,r=t.length;for(;n!==r;){let i=n+r>>1;Ya(e,t[i])<0?r=i:n=i+1}let s=yp(e);return s&&(r=t.lastIndexOf(s,r-1)),r}function yp(e){let t=e;for(;t=t.parent;)if(Ja(t)&&Ya(e,t)===0)return t}function Ja({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Ha(e){let t=dt(os),n=dt(ns),r=!1,s=null,i=tt(()=>{let y=Wt(e.to);return t.resolve(y)}),a=tt(()=>{let{matched:y}=i.value,{length:E}=y,h=y[E-1],C=n.matched;if(!h||!C.length)return-1;let g=C.findIndex(po.bind(null,h));if(g>-1)return g;let b=Ba(y[E-2]);return E>1&&Ba(h)===b&&C[C.length-1].path!==b?C.findIndex(po.bind(null,y[E-2])):g}),u=tt(()=>a.value>-1&&Ep(n.params,i.value.params)),m=tt(()=>a.value>-1&&a.value===n.matched.length-1&&nr(n.params,i.value.params));function k(y={}){if(kp(y)){let E=t[Wt(e.replace)?"replace":"push"](Wt(e.to)).catch(Oo);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>E),E}return Promise.resolve()}return{route:i,href:tt(()=>i.value.href),isActive:u,isExactActive:m,navigate:k}}function gp(e){return e.length===1?e[0]:e}var bp=dn({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:Ha,setup(e,{slots:t}){let n=Fe(Ha(e)),{options:r}=dt(os),s=tt(()=>({[ja(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[ja(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{let i=t.default&&gp(t.default(n));return e.custom?i:be("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:s.value},i)}}}),wp=bp;function kp(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){let t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Ep(e,t){for(let n in t){let r=t[n],s=e[n];if(typeof r=="string"){if(r!==s)return!1}else if(!wt(s)||s.length!==r.length||r.some((i,a)=>i.valueOf()!==s[a].valueOf()))return!1}return!0}function Ba(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}var ja=(e,t,n)=>e??t??n,Cp=dn({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){let r=dt(ss),s=tt(()=>e.route||r.value),i=dt(ar,0),a=tt(()=>{let k=Wt(i),{matched:y}=s.value,E;for(;(E=y[k])&&!E.components;)k++;return k}),u=tt(()=>s.value.matched[a.value]);uo(ar,tt(()=>a.value+1)),uo(Va,u),uo(ss,s);let m=xe();return He(()=>[m.value,u.value,e.name],([k,y,E],[h,C,g])=>{y&&(y.instances[E]=k,C&&C!==y&&k&&k===h&&(y.leaveGuards.size||(y.leaveGuards=C.leaveGuards),y.updateGuards.size||(y.updateGuards=C.updateGuards))),k&&y&&(!C||!po(y,C)||!h)&&(y.enterCallbacks[E]||[]).forEach(b=>b(k))},{flush:"post"}),()=>{let k=s.value,y=e.name,E=u.value,h=E&&E.components[y];if(!h)return Ga(n.default,{Component:h,route:k});let C=E.props[y],g=C?C===!0?k.params:typeof C=="function"?C(k):C:null,S=be(h,Te({},g,t,{onVnodeUnmounted:R=>{R.component.isUnmounted&&(E.instances[y]=null)},ref:m}));return Ga(n.default,{Component:S,route:k})||S}}});function Ga(e,t){if(!e)return null;let n=e(t);return n.length===1?n[0]:n}var lr=Cp;function Qa(e){let t=fp(e.routes,e),n=e.parseQuery||Ia,r=e.stringifyQuery||ir,s=e.history,i=Io(),a=Io(),u=Io(),m=On(Xt),k=Xt;mo&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");let y=Zn.bind(null,F=>""+F),E=Zn.bind(null,Ca),h=Zn.bind(null,Ao);function C(F,Z){let Q,te;return rr(F)?(Q=t.getRecordMatcher(F),te=Z):te=F,t.addRoute(te,Q)}function g(F){let Z=t.getRecordMatcher(F);Z&&t.removeRoute(Z)}function b(){return t.getRoutes().map(F=>F.record)}function S(F){return!!t.getRecordMatcher(F)}function R(F,Z){if(Z=Te({},Z||m.value),typeof F=="string"){let v=xn(n,F,Z.path),D=t.resolve({path:v.path},Z),O=s.createHref(v.fullPath);return Te(v,D,{params:h(D.params),hash:Ao(v.hash),redirectedFrom:void 0,href:O})}let Q;if(F.path!=null)Q=Te({},F,{path:xn(n,F.path,Z.path).path});else{let v=Te({},F.params);for(let D in v)v[D]==null&&delete v[D];Q=Te({},F,{params:E(v)}),Z.params=E(Z.params)}let te=t.resolve(Q,Z),ye=F.hash||"";te.params=y(h(te.params));let Ee=_a(r,Te({},F,{hash:Ea(ye),path:te.path})),p=s.createHref(Ee);return Te({fullPath:Ee,hash:ye,query:r===ir?Pa(F.query):F.query||{}},te,{redirectedFrom:void 0,href:p})}function T(F){return typeof F=="string"?xn(n,F,m.value.path):Te({},F)}function q(F,Z){if(k!==F)return fo(Be.NAVIGATION_CANCELLED,{from:Z,to:F})}function M(F){return ne(F)}function V(F){return M(Te(T(F),{replace:!0}))}function z(F,Z){let Q=F.matched[F.matched.length-1];if(Q&&Q.redirect){let{redirect:te}=Q,ye=typeof te=="function"?te(F,Z):te;return typeof ye=="string"&&(ye=ye.includes("?")||ye.includes("#")?ye=T(ye):{path:ye},ye.params={}),Te({query:F.query,hash:F.hash,params:ye.path!=null?{}:F.params},ye)}}function ne(F,Z){let Q=k=R(F),te=m.value,ye=F.state,Ee=F.force,p=F.replace===!0,v=z(Q,te);if(v)return ne(Te(T(v),{state:typeof v=="object"?Te({},ye,v.state):ye,force:Ee,replace:p}),Z||Q);let D=Q;D.redirectedFrom=Z;let O;return!Ee&&Sa(r,te,Q)&&(O=fo(Be.NAVIGATION_DUPLICATED,{to:D,from:te}),Me(te,te,!0,!1)),(O?Promise.resolve(O):P(D,te)).catch(I=>Ht(I)?Ht(I,Be.NAVIGATION_GUARD_REDIRECT)?I:qe(I):re(I,D,te)).then(I=>{if(I){if(Ht(I,Be.NAVIGATION_GUARD_REDIRECT))return ne(Te({replace:p},T(I.to),{state:typeof I.to=="object"?Te({},ye,I.to.state):ye,force:Ee}),Z||D)}else I=J(D,te,!0,p,ye);return G(D,te,I),I})}function ee(F,Z){let Q=q(F,Z);return Q?Promise.reject(Q):Promise.resolve()}function _(F){let Z=ze.values().next().value;return Z&&typeof Z.runWithContext=="function"?Z.runWithContext(F):F()}function P(F,Z){let Q,[te,ye,Ee]=qa(F,Z);Q=rs(te.reverse(),"beforeRouteLeave",F,Z);for(let v of te)v.leaveGuards.forEach(D=>{Q.push(Qt(D,F,Z))});let p=ee.bind(null,F,Z);return Q.push(p),ke(Q).then(()=>{Q=[];for(let v of i.list())Q.push(Qt(v,F,Z));return Q.push(p),ke(Q)}).then(()=>{Q=rs(ye,"beforeRouteUpdate",F,Z);for(let v of ye)v.updateGuards.forEach(D=>{Q.push(Qt(D,F,Z))});return Q.push(p),ke(Q)}).then(()=>{Q=[];for(let v of Ee)if(v.beforeEnter)if(wt(v.beforeEnter))for(let D of v.beforeEnter)Q.push(Qt(D,F,Z));else Q.push(Qt(v.beforeEnter,F,Z));return Q.push(p),ke(Q)}).then(()=>(F.matched.forEach(v=>v.enterCallbacks={}),Q=rs(Ee,"beforeRouteEnter",F,Z,_),Q.push(p),ke(Q))).then(()=>{Q=[];for(let v of a.list())Q.push(Qt(v,F,Z));return Q.push(p),ke(Q)}).catch(v=>Ht(v,Be.NAVIGATION_CANCELLED)?v:Promise.reject(v))}function G(F,Z,Q){u.list().forEach(te=>_(()=>te(F,Z,Q)))}function J(F,Z,Q,te,ye){let Ee=q(F,Z);if(Ee)return Ee;let p=Z===Xt,v=mo?history.state:{};Q&&(te||p?s.replace(F.fullPath,Te({scroll:p&&v&&v.scroll},ye)):s.push(F.fullPath,ye)),m.value=F,Me(F,Z,Q,p),qe()}let X;function W(){X||(X=s.listen((F,Z,Q)=>{if(!Ue.listening)return;let te=R(F),ye=z(te,Ue.currentRoute.value);if(ye){ne(Te(ye,{replace:!0,force:!0}),te).catch(Oo);return}k=te;let Ee=m.value;mo&&Ta(sr(Ee.fullPath,Q.delta),hn()),P(te,Ee).catch(p=>Ht(p,Be.NAVIGATION_ABORTED|Be.NAVIGATION_CANCELLED)?p:Ht(p,Be.NAVIGATION_GUARD_REDIRECT)?(ne(Te(T(p.to),{force:!0}),te).then(v=>{Ht(v,Be.NAVIGATION_ABORTED|Be.NAVIGATION_DUPLICATED)&&!Q.delta&&Q.type===es.pop&&s.go(-1,!1)}).catch(Oo),Promise.reject()):(Q.delta&&s.go(-Q.delta,!1),re(p,te,Ee))).then(p=>{p=p||J(te,Ee,!1),p&&(Q.delta&&!Ht(p,Be.NAVIGATION_CANCELLED)?s.go(-Q.delta,!1):Q.type===es.pop&&Ht(p,Be.NAVIGATION_ABORTED|Be.NAVIGATION_DUPLICATED)&&s.go(-1,!1)),G(te,Ee,p)}).catch(Oo)}))}let se=Io(),ce=Io(),de;function re(F,Z,Q){qe(F);let te=ce.list();return te.length?te.forEach(ye=>ye(F,Z,Q)):console.error(F),Promise.reject(F)}function _e(){return de&&m.value!==Xt?Promise.resolve():new Promise((F,Z)=>{se.add([F,Z])})}function qe(F){return de||(de=!F,W(),se.list().forEach(([Z,Q])=>F?Q(F):Z()),se.reset()),F}function Me(F,Z,Q,te){let{scrollBehavior:ye}=e;if(!mo||!ye)return Promise.resolve();let Ee=!Q&&Aa(sr(F.fullPath,0))||(te||!Q)&&history.state&&history.state.scroll||null;return ot().then(()=>ye(F,Z,Ee)).then(p=>p&&Ra(p)).catch(p=>re(p,F,Z))}let Pe=F=>s.go(F),Se,ze=new Set,Ue={currentRoute:m,listening:!0,addRoute:C,removeRoute:g,clearRoutes:t.clearRoutes,hasRoute:S,getRoutes:b,resolve:R,options:e,push:M,replace:V,go:Pe,back:()=>Pe(-1),forward:()=>Pe(1),beforeEach:i.add,beforeResolve:a.add,afterEach:u.add,onError:ce.add,isReady:_e,install(F){F.component("RouterLink",wp),F.component("RouterView",lr),F.config.globalProperties.$router=Ue,Object.defineProperty(F.config.globalProperties,"$route",{enumerable:!0,get:()=>Wt(m)}),mo&&!Se&&m.value===Xt&&(Se=!0,M(s.location).catch(te=>{}));let Z={};for(let te in Xt)Object.defineProperty(Z,te,{get:()=>m.value[te],enumerable:!0});F.provide(os,Ue),F.provide(ns,Ko(Z)),F.provide(ss,m);let Q=F.unmount;ze.add(F),F.unmount=function(){ze.delete(F),ze.size<1&&(k=Xt,X&&X(),X=null,m.value=Xt,Se=!1,de=!1),Q()}}};function ke(F){return F.reduce((Z,Q)=>Z.then(()=>_(Q)),Promise.resolve())}return Ue}function Xa(e){return dt(ns)}function Za(e,t){return t?.split(".").reduce((n,r)=>n?.[r],e)}function dr(e=null,t=new Map){let n=Fe({}),r=[],s=!1,i=new Proxy(n,{get(a,u){return typeof u=="string"&&u.startsWith("__v_")||Reflect.has(a,u)?Reflect.get(a,u):e?.[u]}});return Object.defineProperty(n,"parent",{value:e,configurable:!0}),Object.defineProperty(n,"viewState",{get:()=>i}),i.watch=(a,u,m=!1,k=!0)=>{let y=typeof a=="function"?()=>a(i):()=>Za(i,a),E=He(y,u,{deep:m,flush:"post"});return r.push(E),k&&ot(()=>{s||u(y(),y())}),E},i.watchGroup=(a,u,m=!0)=>i.watch(()=>a.map(k=>Za(i,k)),u,!0,m),i.on=(a,u)=>{if(a==="dispose")return r.push(u),()=>{};t.has(a)||t.set(a,new Set),t.get(a).add(u);let m=()=>t.get(a)?.delete(u);return r.push(m),m},i.emit=(a,...u)=>{for(let m of[...t.get(a)||[]])m({},...u)},i.dispose=()=>{s=!0,r.splice(0).reverse().forEach(a=>a())},Go(i.dispose),i}function ut(){let e=new Set,t=new Set,n=!1,r=(i,a=0)=>{if(n)return;let u=setTimeout(()=>{e.delete(u),i()},a);return e.add(u),u};r.cancel=i=>{clearTimeout(i),e.delete(i)};let s=(i,a)=>{if(n)return;let u=setInterval(i,a);return t.add(u),u};return s.cancel=i=>{clearInterval(i),t.delete(i)},Go(()=>{n=!0,e.forEach(clearTimeout),t.forEach(clearInterval)}),{timeout:r,interval:s}}function Zt(){let e=new Set;return Go(()=>{e.forEach(t=>t()),e.clear()}),(t,n,r,s)=>{t.addEventListener(n,r,s);let i=()=>{t.removeEventListener(n,r,s),e.delete(i)};return e.add(i),i}}function ur(e,t,n){let r,s=!1,i="form-draft:"+n,a=()=>Object.fromEntries(t.map(h=>[h,e[h]])),u=()=>JSON.stringify(a()),m=h=>{for(let C of t)Object.prototype.hasOwnProperty.call(h,C)&&(e[C]=h[C]);e.options?.expirationDate&&(e.options.expirationDate=new Date(e.options.expirationDate))},k=()=>{try{window.sessionStorage.removeItem(i)}catch{}},y=(h=!1)=>{if(r!==void 0){if(h&&document.querySelectorAll("input, select, textarea").forEach(C=>{C._field?.binding.state===e&&C._field.timer&&C._field.commit()}),e.unsavedChanges=u()!==r,e.draftSaved=!1,!e.unsavedChanges){k();return}try{window.sessionStorage.setItem(i,JSON.stringify({account:e.user?.username||null,savedAt:Date.now(),values:a()})),e.draftSaved=!0}catch{}}},E=()=>y(!0);return e.on("routeLeave",E),window.addEventListener("beforeunload",E),e.on("dispose",()=>window.removeEventListener("beforeunload",E)),{restore(){r=u();let h;try{h=JSON.parse(window.sessionStorage.getItem(i)||"null")}catch{}let C=h&&h.account===(e.user?.username||null)&&Date.now()-h.savedAt<30*6e4&&h.values;return C&&(m(h.values),e.draftRestored=!0),s||(s=!0,e.watch(()=>a(),()=>y(),!0)),e.unsavedChanges=u()!==r,!!C},checkpoint(){return JSON.parse(u())},accept(h){r=JSON.stringify(h),e.draftRestored=!1,y()},discard(){document.querySelectorAll("input, select, textarea").forEach(h=>{h._field?.binding.state!==e||!h._field.timer||(clearTimeout(h._field.timer),h._field.timer=null,h.value=h._field.binding.value??"")}),r!==void 0&&m(JSON.parse(r)),e.draftRestored=!1,y()},clear(){r=u(),e.unsavedChanges=!1,e.draftRestored=!1,e.draftSaved=!1,k()}}}var vn={VIEWER_ERRORS:{title:"Content could not be loaded",access_title:"GitHub access needs attention",reader_help:"Reading this repository? You do not need to sign in. Try again after the owner restores access, or let them know this anonymous link is unavailable.",owner_help:"Own this repository? If your GitHub account was suspended or recently recovered, sign in to Anonymous GitHub again and check the GitHub connection and repository permissions in your dashboard. Then retry this page. Keep the existing anonymous URL; do not delete the repository to restore access.",retry:"Try again",dashboard:"Open owner dashboard"},ERRORS:{cache_busy:"Downloads are busy. Please try again shortly.",invalid_sort:"The selected sort order is invalid.",invalid_cursor:"This project page is no longer valid. Reload the list.",repository_changed:"The repository changed while processing. Please retry.",repository_job_cancelled:"The repository changed or was removed while processing.",storage_delete_failed:"Unable to remove cached files. Please try again later.",unknown_error:"We could not load this content. Try again. If it still fails, contact support with the anonymous URL and the time of the error.",unreachable:"The service could not complete this request. Wait a moment and try again.",request_error:"The connection was interrupted. Check your internet connection and try again.",not_found:"The requested resource could not be found.",not_connected:"You must be logged in to perform this action.",not_authorized:"You do not have permission to perform this action.",unable_to_connect_user:"Unable to connect your account. Please try again later.",user_not_found:"The requested user could not be found.",user_banned:"Your account has been banned. Contact the admin for more information.",repo_access_limited:"GitHub blocked access because the repository's organization restricts third-party OAuth apps. Ask an org owner to approve Anonymous GitHub under Settings \u2192 Third-party Access \u2192 OAuth app policy, or anonymize a personal fork instead.",repo_saml_enforcement:"The repository's organization enforces SAML single sign-on. Authorize your token for that organization (GitHub \u2192 Settings \u2192 Applications, or re-run the org's SSO sign-in), then retry. Alternatively, anonymize a personal fork.",repo_not_found:"Anonymous GitHub cannot access the source repository on GitHub. It may be private, unavailable, or require the owner to reconnect GitHub.",repo_empty:"The selected branch has no commits on GitHub. Push at least one commit, or pick a different branch, then retry.",repo_not_accessible:"Anonymous GitHub cannot access this repository. Verify the repository exists and that Anonymous GitHub has been authorized for the owning organization.",repository_archived:"This repository has been archived and its files are no longer available.",repository_expired:"The repository is expired.",invalid_status:"This action cannot be performed while the resource is in its current state.",repository_not_ready:"Anonymous GitHub is still processing the repository, it can take several minutes.",repository_not_accessible:"This repository is currently not accessible.",repo_is_updating:"Anonymous GitHub is still processing the repository, it can take several minutes.",invalid_repo:"The provided repository is not valid.",invalid_source_repository:"The repository source name is invalid; expected the form 'owner/name'.",repoId_not_defined:"A repository ID must be provided.",repoUrl_not_defined:"The repository URL needs to be defined.",source_not_provided:"A repository source must be provided.",github_rate_limit_exceeded:"GitHub temporarily blocked the request because we hit its API rate limit. Wait a few minutes and try again. If the problem persists and you contact GitHub Support, include the request ID and timestamp shown in GitHub's response (the 'X-GitHub-Request-Id' header).",rate_limited:"GitHub API rate limit reached. The repository will be available shortly \u2014 please wait a moment and refresh.",repoId_already_used:"The repository ID is already used.",invalid_repoId:"The format of the repository ID is invalid.",unsupported_source:"The repository source type is not supported.",branch_not_specified:"The branch is not specified.",branch_not_found:"The branch of the repository cannot be found.",commit_not_specified:"A commit must be specified.",commit_not_found:"The configured commit no longer exists in the source repository. It may have been force-pushed, rebased, or removed.",repo_renamed:"The source repository appears to have been renamed or moved on GitHub. Please refresh and try again \u2014 the cached name has been updated.",invalid_commit_format:"The commit hash format is invalid. It must be a hexadecimal string.",pull_request_not_found:"The requested pull request could not be found.",pull_request_expired:"This pull request has expired and is no longer available.",pull_request_not_ready:"This pull request is still being prepared. Please try again shortly.",pull_request_not_available:"This pull request is currently not available.",invalid_pullRequestId:"The pull request ID is invalid.",pullRequestId_already_used:"This pull request ID is already in use. Please choose a different one.",repository_not_specified:"A repository must be specified for this pull request.",pullRequestId_not_specified:"A pull request ID must be specified.",pullRequestId_is_not_a_number:"The source pull request ID must be a number.",options_not_provided:"Anonymization options are mandatory.",terms_not_specified:"Anonymization terms must be specified.",invalid_terms_format:"Terms are in an invalid format.",missing_content:"No content was provided to the anonymization preview.",unable_to_anonymize:"An error happened during the anonymization process. Please try later or report the issue.",non_supported_mode:"The selected anonymization mode is invalid, only download and stream are supported.",invalid_path:"The provided path is invalid or missing.",path_not_specified:"A file path must be specified.",path_not_defined:"The file path has not been resolved yet.",invalid_file_path:"The requested file path is not valid.",invalid_request:"The request is missing required fields or is malformed.",invalid_project_name:"Use a project name of up to 100 characters without line breaks or control characters.",no_file_selected:"Please select a file.",file_not_found:"The requested file is not found.",file_not_accessible:"The requested file is not accessible.",file_not_supported:"The file type is not supported. Anonymous GitHub cannot handle it.",file_too_big:"The file size exceeds the limit of Anonymous GitHub.",is_folder:"The path points to a folder.",folder_not_supported:"The path points to a folder. Please select a file.",unable_to_write_file:"Unable to write file on disk.",download_not_enabled:"Repository downloads are not enabled on this server.",unable_to_download:"The repository could not be downloaded. Please try again later.",s3_config_not_provided:"Object storage has not been configured on this server.",stats_unsupported:"Statistics are only supported in download mode.",branches_not_found:"The requested branch is not found.",readme_not_available:"No README for the repository is found.",page_not_supported_on_different_branch:"GitHub Pages is served from a different branch than the one selected. Pick the branch that GitHub Pages is configured to use.",page_not_activated:"GitHub Pages is not enabled on this repository. Enable it in the repository settings on GitHub before anonymizing.",is_removed:"This resource has been removed and is no longer available.",conf_name_missing:"A conference name is required.",conf_id_missing:"A conference ID is required.",conf_id_used:"This conference ID is already in use. Please choose a different one.",conf_start_date_missing:"A start date is required for the conference.",conf_end_date_missing:"An end date is required for the conference.",conf_start_date_invalid:"The start date must be before the end date.",conf_end_date_invalid:"The end date must be in the future.",invalid_plan:"The selected plan is not valid.",conference_not_found:"The requested conference could not be found.",conf_not_found:"The requested conference could not be found.",conf_not_activated:"The conference is not activated.",billing_missing:"Billing information is required for this plan.",billing_name_missing:"A billing name is required.",billing_email_missing:"A billing email is required.",billing_address_missing:"A billing address is required.",billing_city_missing:"A billing city is required.",billing_zip_missing:"A billing ZIP/postal code is required.",billing_country_missing:"A billing country is required.",queue_not_found:"The specified queue could not be found.",job_not_found:"The specified job could not be found in the queue.",error_retrying_job:"An error occurred while retrying the job.",gist_expired:"The gist is expired.",gist_not_ready:"Anonymous GitHub is still processing the gist, it can take several minutes.",gist_not_found:"The requested gist could not be found.",gist_not_available:"This gist is currently not available.",invalid_gistId:"The format of the gist ID is invalid.",gistId_not_specified:"A gist ID must be provided.",gistId_already_used:"The gist ID is already used.",missing_token:"An authentication token is required.",invalid_token:"The provided authentication token is invalid.",login_failed:"Login failed. Please try again.",server_error:"An unexpected server error occurred. Please try again later.",username_not_defined:"A username must be provided.",github_user_not_found:"The specified GitHub user could not be found.",cannot_coauthor_self:"You cannot add yourself as a co-author.",storage_write_size_mismatch:"The downloaded file was smaller than expected. The upstream source may have returned an incomplete response \u2014 please try again.",storage_read_error:"An error occurred while reading the file from storage \u2014 please try again.",upstream_error:"A temporary error occurred while fetching from GitHub \u2014 please try again.",token_expired:"The repository owner needs to renew their GitHub connection before this content can be loaded.",job_is_active:"This job is currently running \u2014 wait for it to finish or remove it first.",github_app_access_required:"Allow this repository on GitHub using the read-only access button, then retry. Organization access may require administrator approval.",github_app_reconnect_required:"Reconnect your GitHub App account to restore read-only access.",github_app_disabled:"New GitHub App connections are currently unavailable.",github_oauth_required:"Connect legacy GitHub OAuth to use this feature.",github_identity_mismatch:"Use the same GitHub account that you are signed in with here.",github_app_permissions_invalid:"The GitHub App must be configured with read-only permissions.",github_unavailable:"GitHub is temporarily unavailable. Please retry.",connection_changed:"The repository connection changed. Reload and try again.",repository_busy:"Wait for the repository operation to finish before changing its connection.",invalid_connection:"Select a supported GitHub connection.",github_oauth_disabled:"Legacy OAuth sign-in is currently disabled.",invalid_auth_state:"The authorization session expired. Please start again from Anonymous GitHub.",invalid_webhook_signature:"The webhook signature is invalid.",webhook_processing_failed:"Webhook processing failed. Retry the delivery.",github_app_authorization_cancelled:"GitHub authorization was cancelled.",github_account_link_required:"Verify your existing account with your previous GitHub connection. Future sign-ins will use the GitHub App.",github_app_refresh_busy:"GitHub credentials are being renewed. Please retry shortly.",github_grant_revocation_failed:"Unable to revoke the GitHub grant. Please retry.",another_login_required:"Connect and verify another sign-in method before disconnecting OAuth.",oauth_resources_remaining:"Some resources still require OAuth. Migrate or remove them before disconnecting.",invalid_github_path:"The GitHub repository path is invalid."},WARNINGS:{page_not_enabled_on_repo:"GitHub Pages is not enabled on this repository. Enable it in the repository's Settings \u2192 Pages on GitHub, then refresh.",page_branch_mismatch:"GitHub Pages on this repository is served from the '{{pageBranch}}' branch, but you selected '{{selectedBranch}}'. Switch the branch above to '{{pageBranch}}' to anonymize the Pages site.",folder_truncated:"This folder has more than 10,000 entries; only a partial listing is shown.",repo_truncated:"Some folders in this repository have too many files to be fully listed. Affected folders are marked with a warning icon.",submodules_not_included:"This repository uses git submodules. Submodule contents are not included in the anonymized repository and appear as empty folders."}};function cr(e){let t=e?.data;if(typeof t=="string")try{t=JSON.parse(t)}catch{t=null}return typeof t?.error=="string"&&Object.prototype.hasOwnProperty.call(vn.ERRORS,t.error)?t.error:e?.status===-1||e?.status===0?"request_error":[502,503,504].includes(e?.status)?"unreachable":"unknown_error"}var is="XXXX",Sp=e=>{is=e||"XXXX"},xa=(e=is)=>{if(!e)return null;let t=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(t+"(?:-\\d+)?","g")},el=(e,t=is)=>{let n=xa(t);if(!n||!e||!e.textContent.includes(t))return;let r=e.ownerDocument,s=r.createTreeWalker(e,NodeFilter.SHOW_TEXT),i=[];for(;s.nextNode();)i.push(s.currentNode);for(let a of i){let u=a.nodeValue,m=a.parentElement;if(!u.includes(t)||!m||m.closest("script, style, mark.redaction, .mermaid"))continue;let k=m.closest('code[class*="language-"]');if(k&&!k.contains(e))continue;let y=r.createDocumentFragment(),E=0;for(let h of u.matchAll(n)){y.append(u.slice(E,h.index));let C=r.createElement("mark");C.className="redaction",C.title="Redacted by Anonymous GitHub",C.textContent=h[0],y.append(C),E=h.index+h[0].length}y.append(u.slice(E)),a.replaceWith(y)}},tl=(e,t=is)=>{if(!e||!t||!e.includes(t))return e;let n=new DOMParser().parseFromString(""+e+"","text/html");return el(n.body,t),n.body.innerHTML};async function ol(e){if(window.navigator.clipboard?.writeText){await window.navigator.clipboard.writeText(e);return}let t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.style.position="fixed",t.style.opacity="0";let n=document.activeElement;document.body.appendChild(t);try{if(t.select(),!document.execCommand?.("copy"))throw Error("Copy unavailable")}finally{t.remove(),n?.focus()}}function Np(e){if(!["ArrowLeft","ArrowRight","Home","End"].includes(e.key))return;let t=[...e.currentTarget.closest('[role="tablist"]').querySelectorAll('[role="tab"]')],n=t.indexOf(e.currentTarget),r=e.key==="Home"?0:e.key==="End"?t.length-1:(n+(e.key==="ArrowRight"?1:-1)+t.length)%t.length;e.preventDefault(),t[r]?.focus(),t[r]?.click()}var nl=function(e,t,n,r){e.previewTabKeydown=Np,e.title="Main",e.user={status:"connection"},e.site_options,e.toasts=[],e.removeToast=function(y){let E=e.toasts.indexOf(y);E!==-1&&e.toasts.splice(E,1)},e.addToast=function(y){return e.toasts.push(y),r(function(){e.removeToast(y)},8e3),y};let s=/^\/(r|repository|pr|gist)\//;e.path=n.url(),e.paths=n.path().substring(1).split("/"),e.isReviewerRoute=s.test(n.path()),e.darkMode=function(y){localStorage.setItem("darkMode",y),e.isDarkMode=y;let E="/css/prism-okaidia.css",h="/css/prism.css";if(y){$("body").addClass("dark-mode");let g=document.createElement("link");g.href=E,g.rel="stylesheet",document.head.append(g),$(`link[href='${h}']`).remove()}else{$("body").removeClass("dark-mode");let g=document.createElement("link");g.href=h,g.rel="stylesheet",document.head.append(g),$(`link[href='${E}']`).remove()}let C=document.querySelector("[class*='floatingchat-container-wrap'] [class*='floating-chat-kofi-text-container-wrap']");C&&(C.style.backgroundColor=y?"#34312C":"#1A1815",C.style.color="#FAF9F6"),e.emit("dark-mode",y)},e.darkMode(localStorage.getItem("darkMode")=="true"),e.emailPromptOpen=!1,e.emailPromptAddress="",e.emailPromptBusy=!1,e.emailPromptError="";let i;e.respondToEmailPrompt=async y=>{if(!e.emailPromptBusy){e.emailPromptBusy=!0,e.emailPromptError="";try{let E=await t.post("/github/connections/email",{action:y,email:e.emailPromptAddress},{headers:{"X-CSRF-Token":e.user.emailPromptCSRF}});y==="save"&&(e.user.notificationEmail=E.data.notificationEmail),e.emailPromptOpen=!1,e.user.showEmailPrompt=!1,i?.focus()}catch(E){e.emailPromptError=E.data?.error||"Unable to save your preference. Please try again."}finally{e.emailPromptBusy=!1}}};function a(){t.get("/api/user").then(y=>{y&&(e.user=y.data),e.user?.emailNotificationsEnabled&&e.user.showEmailPrompt&&!e.user.notificationEmail&&(i=document.activeElement,e.emailPromptOpen=!0,r(()=>{let E=document.getElementById("email-prompt");E?.showModal?E.showModal():E?.setAttribute("open",""),document.getElementById("email-prompt-address")?.focus()},0))},()=>{e.user=null})}a();function u(){t.get("/api/options").then(y=>{y&&(e.site_options=y.data),Sp(y?.data?.ANONYMIZATION_MASK),e.emit("site-options")},()=>{e.site_options=null})}u();function m(){t.get("/api/message").then(y=>{y&&(e.generalMessage=y.data)},()=>{e.generalMessage=null})}m();function k(y,E){E&&(e.title=E.title),e.path=n.url(),e.paths=n.path().substring(1).split("/"),e.isReviewerRoute=s.test(n.path())}e.on("routeChange",k),e.on("routeUpdate",k)},sl=function(e,t){let n=Zt(),r=ut(),s=()=>{let i=window.location.hash.slice(1),a=document.getElementById(i);if(!a?.classList.contains("panel-collapse"))return;$(a).collapse("show");let u=document.getElementById(a.getAttribute("aria-labelledby"));u?.setAttribute("tabindex","-1"),u?.focus({preventScroll:!0}),u?.scrollIntoView?.({block:"start"})};e.on("routeUpdate",()=>r.timeout(s,0)),n(window,"hashchange",s),r.timeout(s,0)},rl=function(e,t,n,r,s){e.terms="",e.options={expirationMode:"remove",update:!1,image:!0,pdf:!0,notebook:!0,loc:!0,link:!0},e.saving=!1,e.message=null,e.error=null,e.accountEmail="",e.emailLoading=!0,e.emailCSRFReady=!1,e.emailSaving=!1,e.emailSaved=!1,e.emailError="";let i="";e.loadAccountEmail=async()=>{e.emailLoading=!0,e.emailError="";try{let k=await t.get("/github/connections/email");e.accountEmail=k.data.notificationEmail||"",i=k.data.csrf,e.emailCSRFReady=!!i}catch{e.emailError="Unable to load your email address. Please try again."}finally{e.emailLoading=!1}},e.saveAccountEmail=async()=>{if(!(e.emailSaving||e.emailLoading||!i)){e.emailSaving=!0,e.emailSaved=!1,e.emailError="";try{let k=await t.post("/github/connections/email",{email:e.accountEmail},{headers:{"X-CSRF-Token":i}});e.accountEmail=k.data.notificationEmail,e.user&&(e.user.notificationEmail=k.data.notificationEmail),e.emailSaved=!0}catch{e.emailError="Unable to save your email address. Check the address and try again."}finally{e.emailSaving=!1}}},e.loadAccountEmail(),s.load().then(k=>{e.quota=k},console.error);let a=ur(e,["terms","options"],"profile");e.discardDraft=()=>a.discard();function u(){t.get("/api/user/default").then(k=>{let y=k.data||{};y.terms&&(e.terms=y.terms.join(` -`)),e.options=Object.assign({},e.options,y.options),a.restore()})}u();let m=null;e.saveDefault=k=>{if(k&&k.preventDefault&&k.preventDefault(),e.saving)return;let y=a.checkpoint(),E={terms:e.terms.split(` -`).map(h=>h.trim()).filter(h=>h.length>0),options:e.options};e.saving=!0,e.error=null,t.post("/api/user/default",E).then(()=>{a.accept(y),e.saving=!1,e.message=e.unsavedChanges?null:"Saved",m&&r.cancel(m),m=r(()=>{e.message=null},2500)},h=>{e.saving=!1;let C=h&&h.data&&h.data.error,g="Unable to save your defaults. Please try again.";Promise.all([n("ERRORS."+C),n("ERRORS.unknown_error")]).then(([b,S])=>{e.error=C&&b!==S?b:g},()=>{e.error=g})})},e.deleteAccount=()=>{confirm("Delete your account? All your anonymized repositories, gists, and pull requests will be removed, and your personal data will be erased. This cannot be undone.")&&(e.deletingAccount=!0,t.delete("/api/user").then(()=>{window.location.href="/"},()=>{e.deletingAccount=!1,e.deleteError="Unable to delete the account. Please try again."}))}},il=function(e,t,n){e.repoId=null,e.repoUrl=null,e.claim=()=>{t.post("/api/repo/claim",{repoId:e.repoId,repoUrl:e.repoUrl}).then(r=>{n.url("/dashboard")},r=>{e.error=r.data,e.claimForm.repoUrl.setValidity("not_found",!1),e.claimForm.repoId.setValidity("not_found",!1)})}},al=function(e,t,n,r,s){e.user&&!e.user.status&&n.url("/dashboard"),e.watch("user.status",()=>{e.user&&!e.user.status&&n.url("/dashboard")}),e.features=[{key:"anonymize",num:"01",eyebrow:"Anonymize",title:"Double-anonymous,",accent:"your rules.",text:"Choose what reviewers may see: links, images, PDFs, notebooks, GitHub Pages. Add your own terms, with regex if you need it, and pick the expiration date.",cta:"Start an anonymization",href:"/anonymize",url:"anonymous.4open.science/anonymize",img:"/imgs/anonymize.png",alt:"The anonymize form: source repository, terms to redact, options and a live README preview"},{key:"review",num:"02",eyebrow:"Review",title:"Reviewers browse",accent:"the real thing.",text:"Highlighted source code, rendered PDFs, images, and notebooks, in a familiar file explorer. GitHub Pages is also supported.",cta:"Open the example",href:"https://anonymous.4open.science/r/840c8c57-3c32-451e-bf12-0e20be300389/",target:"_self",url:"anonymous.4open.science/r/840c8c57-\u2026",img:"/imgs/explorer.png",alt:"The repository explorer with a file tree and a rendered README"},{key:"manage",num:"03",eyebrow:"Manage",title:"One dashboard,",accent:"until the decision.",text:"Monitor views, edit configuration, remove or update your repository. Program chairs can group submissions under a conference with one shared expiry.",cta:"Open the dashboard",href:"/dashboard",needsUser:!0,url:"anonymous.4open.science/dashboard",img:"/imgs/dashboard.png",alt:"The dashboard listing anonymized repositories with status, views and expiry"}],e.feature=e.features[0].key,e.selectFeature=function(u){e.feature=u},e.featureHref=function(u){return u.needsUser&&!e.user?"/signin":u.href},e.featureTarget=function(u){return u.needsUser&&!e.user?"_self":u.target||void 0},e.featureKeydown=function(u,m){let k={ArrowDown:1,ArrowRight:1,ArrowUp:-1,ArrowLeft:-1,Home:"first",End:"last"}[u.key];if(k===void 0)return;u.preventDefault();let y=e.features.length,E=k==="first"?0:k==="last"?y-1:(m+k+y)%y;e.feature=e.features[E].key,s(()=>{let h=r.document.getElementById("feature-tab-"+e.feature);h&&h.focus()})},e.cards=[{key:"repositories",total:0,label:"repositories anonymized"},{key:"users",total:0,label:"researchers"},{key:"pageViews",total:0,label:"page views"},{key:"pullRequests",total:0,label:"pull requests"}];function i(){t.get("/api/stat/").then(u=>{e.stat=u.data,e.cards[0].total=u.data.nbRepositories,e.cards[1].total=u.data.nbUsers,e.cards[2].total=u.data.nbPageViews,e.cards[3].total=u.data.nbPullRequests})}i();function a(u){let m={series:u,bars:[],viewW:100,deltaToday:0,pctChange:0,pctAbs:0,isUp:!0};if(!u||u.length<2)return m;let k=new Array(u.length-1);for(let b=1;b=2){let b=k[y-2];b&&(m.pctChange=(m.deltaToday-b)/b*100)}return m.pctAbs=Math.round(Math.abs(m.pctChange)),m.isUp=m.pctChange>=0,m}e.history={repositories:a([]),users:a([]),pageViews:a([]),pullRequests:a([])},t.get("/api/stat/history?days=60").then(u=>{let m=u.data||[];e.history={repositories:a(m.map(k=>k.nbRepositories||0)),users:a(m.map(k=>k.nbUsers||0)),pageViews:a(m.map(k=>k.nbPageViews||0)),pullRequests:a(m.map(k=>k.nbPullRequests||0))}})},ll=function(e,t,n,r,s,i){let a=ut();e.on("routeLeave",function(){$('[data-toggle="tooltip"]').tooltip("dispose")}),e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),a.timeout(()=>{$('[data-toggle="tooltip"]').tooltip()},250),e.quotaExpanded=!1,e.closeQuota=()=>{e.quotaExpanded=!1,ot(()=>document.querySelector(".dashboard-quota > summary")?.focus())},Zt()(document,"click",_=>{e.quotaExpanded&&!_.target.closest?.(".dashboard-quota")&&(e.quotaExpanded=!1)}),e.filtersExpanded=!1,e.projectView="all",e.selectedProject=null,e.projectName="",e.nameSaving=!1,e.nameError="",e.nameMessage="",e.needsAttention=_=>_.status==="error"||_._broken||m(_.status)==="progress"&&_._stale,e.attentionCount=()=>e.dashboardTotals?.attention??e.items.filter(e.needsAttention).length,e.hasProjects=()=>(e.dashboardTotals?.total??e.items.length)>0,e.setProjectView=_=>{e.projectView=_,_==="attention"&&(e.filters.status.error=!0,e.filters.status.progress=!0)},e.projectDetailsId=_=>"project-details-"+encodeURIComponent(_._type+":"+(_._id||_._source||"unknown")),e.showProjectDetails=async _=>{e.selectedProject=_,e.projectName=_.projectName||"",e.nameError="",e.nameMessage="",await ot();let P=document.getElementById(e.projectDetailsId(_));P?.focus(),P?.scrollIntoView?.({block:"nearest"})},e.closeProjectDetails=_=>{e.selectedProject=null,ot(()=>document.querySelector(`[data-project-actions="${encodeURIComponent(_._type+":"+_._id)}"]`)?.focus())},e.saveProjectName=async _=>{if(e.nameSaving||!_._id)return;let P=e.projectName.trim();if(P.length>100){e.nameError="Use 100 characters or fewer.";return}e.nameSaving=!0,e.nameError="",e.nameMessage="";try{let G=await t.post("/api/user/project-name",{type:_._type,id:_._id,name:P});_.projectName=G.data.name,_._label=_.projectName||_._fallbackLabel,e.selectedProject===_&&(e.nameMessage=P?"Project name saved.":"Default project name restored."),T||(e.dashboardCursor=null,await M(),e.selectedProject===_&&(e.selectedProject=e.items.find(J=>J._type===_._type&&J._id===_._id)||null))}catch{e.selectedProject===_&&(e.nameError="The project name could not be saved. Try again.")}finally{e.nameSaving=!1}},e.copyingId=null,e.copyLink=async _=>{if(!_._viewUrl||e.copyingId)return;let P=new URL(_._viewUrl,s.location.origin).href;e.copyingId=_._type+":"+_._id;try{await ol(P),e.addToast({title:"Link copied",body:"The anonymous link is ready to share."})}catch{e.addToast({title:"Copy this anonymous link",body:P})}finally{e.copyingId=null}},e.items=[],e.search="",e.loading=!0,e.statusKeyLabels={ready:"Ready",progress:"In progress",error:"Error",expired:"Expired",removed:"Removed"};let u=["queue","download","downloaded","preparing","anonymizing"];function m(_){return _==="ready"||_==="error"?_:_==="expired"||_==="expiring"?"expired":_==="removed"||_==="removing"?"removed":(u.indexOf(_)>-1,"progress")}let k=7200*1e3,y="dashboard.filterPrefs",E={typeFilter:"all",filters:{status:{ready:!0,progress:!0,error:!0,expired:!0,removed:!1}},orderBy:"-anonymizeDate"},h=loadFilterPrefs(y)||{};e.typeFilter=h.typeFilter||E.typeFilter,e.filters={status:Object.assign({},E.filters.status,h.filters&&h.filters.status||{})},e.orderBy=h.orderBy||E.orderBy;let C={_name:{label:"Anonymous ID",defaultDesc:!1},_label:{label:"Project",defaultDesc:!1},anonymizeDate:{label:"Anonymize date",defaultDesc:!0},status:{label:"Status",defaultDesc:!1},lastView:{label:"Last view",defaultDesc:!0},pageView:{label:"Views",defaultDesc:!0},"options.expirationDate":{label:"Expiration",defaultDesc:!1}};e.sortFields=C,e.sortField=()=>e.orderBy.replace(/^-/,""),e.sortDesc=()=>e.orderBy.charAt(0)==="-",e.sortLabel=()=>{let _=C[e.sortField()];return _?_.label:"Custom"},e.isSortedBy=_=>e.sortField()===_,e.setSort=(_,P)=>{typeof P!="boolean"&&(P=e.isSortedBy(_)?!e.sortDesc():!!(C[_]&&C[_].defaultDesc)),e.orderBy=(P?"-":"")+_},e.toggleSortDirection=()=>{e.setSort(e.sortField(),!e.sortDesc())},e.watchGroup(["typeFilter","orderBy"],()=>{saveFilterPrefs(y,{typeFilter:e.typeFilter,filters:e.filters,orderBy:e.orderBy})}),e.watch("filters",()=>{saveFilterPrefs(y,{typeFilter:e.typeFilter,filters:e.filters,orderBy:e.orderBy})},!0),i.load().then(_=>{e.quota=_},console.error);function g(_,P,G,J,X,W){_.pageView||(_.pageView=0),_.lastView||(_.lastView=""),_.options=_.options||{},_.options.terms=(_.options.terms||[]).filter(ce=>ce),_._id=P||"",_._source=J,_._broken=!P,_._name=P||J||"(unnamed)",_._fallbackLabel=_._type==="gist"?"Gist "+(P||J||"without an ID"):J||G||_._name,_._label=_.projectName||_._fallbackLabel,_._editUrl=P?X:null,_._viewUrl=P?W:null,_._broken&&(_.status="error",_.statusMessage="incomplete_record"),_._statusKey=m(_.status);let se=_.anonymizeDate||_.lastView;return _._stale=_._statusKey==="progress"&&!!se&&Date.now()-new Date(se).getTime()>k,_.status==="expired"||_.status==="expiring"?_._expiry={kind:"expired",date:_.options.expirationDate}:_.status!=="ready"?_._expiry={kind:"none"}:_.options.expirationMode==="never"||!_.options.expirationDate?_._expiry={kind:"never"}:_._expiry={kind:"date",date:_.options.expirationDate},_}function b(_){return t.get(_).then(P=>P.data||[],P=>(console.error(P),[]))}function S(){return e.loading=!0,r.all([b("/api/user/anonymized_repositories"),b("/api/user/anonymized_pull_requests"),b("/api/user/anonymized_gists")]).then(_=>{let P=_[0],G=_[1],J=_[2],X=[];P.forEach(W=>{W._type="repo";let se=W.source||{};X.push(g(W,W.repoId,W.repoId,se.fullName,"/anonymize/"+W.repoId,"/r/"+W.repoId+"/"))}),G.forEach(W=>{W._type="pr";let se=W.source||{};X.push(g(W,W.pullRequestId,W.pullRequestId,se.repositoryFullName?se.repositoryFullName+"#"+se.pullRequestId:void 0,"/pull-request-anonymize/"+W.pullRequestId,"/pr/"+W.pullRequestId+"/"))}),J.forEach(W=>{W._type="gist";let se=W.source||{};X.push(g(W,W.gistId,W.gistId,se.gistId,"/gist-anonymize/"+W.gistId,"/gist/"+W.gistId+"/"))}),e.items=X,e.loading=!1})}let R=0,T=!1;e.dashboardCursor=null,e.dashboardError="";function q(_){let P=_.source||{};return _._type==="repo"?g(_,_.repoId,_.repoId,P.fullName,"/anonymize/"+_.repoId,"/r/"+_.repoId+"/"):_._type==="pr"?g(_,_.pullRequestId,_.pullRequestId,P.repositoryFullName?P.repositoryFullName+"#"+P.pullRequestId:void 0,"/pull-request-anonymize/"+_.pullRequestId,"/pr/"+_.pullRequestId+"/"):g(_,_.gistId,_.gistId,P.gistId,"/gist-anonymize/"+_.gistId,"/gist/"+_.gistId+"/")}function M(_=!1){if(T)return S();let P=++R;return e.loading=!_,e.loadingMore=_,e.dashboardError="",t.get("/api/user/dashboard",{params:{q:e.search,type:e.typeFilter,sort:e.orderBy,statuses:Object.keys(e.filters.status).filter(G=>e.filters.status[G]!==!1).join(",")||"none",attention:String(e.projectView==="attention"),cursor:_?e.dashboardCursor:void 0}}).then(G=>{if(P===R){if(!Array.isArray(G.data?.items))return T=!0,S();e.items=(_?e.items:[]).concat(G.data.items.map(q)),e.dashboardCursor=G.data.cursor,e.dashboardTotals=G.data}},G=>{if(P===R){if(G.status===404)return T=!0,S();e.dashboardError="Projects could not be loaded. Please try again."}}).finally(()=>{P===R&&(e.loading=!1,e.loadingMore=!1)})}e.loadMoreProjects=()=>M(!0);let V;e.watchGroup(["search","typeFilter","orderBy","projectView"],()=>{T||(V&&a.timeout.cancel(V),V=a.timeout(()=>M(),150))},!1),e.watch("filters",()=>{T||M()},!0,!1),e.on("dispose",()=>{R++}),M(),e.openItem=(_,P)=>{if(!_._viewUrl)return;let G=P&&P.target;G&&G.closest&&G.closest("a, button, .dropdown, input")||(s.location.href=_._viewUrl)},e.hiddenStatusCount=()=>Object.keys(e.filters.status).filter(_=>e.filters.status[_]===!1).length,e.hasHiddenStatus=()=>e.hiddenStatusCount()>0,e.hasActiveFilters=()=>e.projectView!=="all"||e.typeFilter!=="all"||e.search.trim().length>0||Object.keys(e.filters.status).some(_=>e.filters.status[_]===!1),e.showClearFilters=()=>e.search.trim().length>0||e.typeFilter!=="all"||e.hiddenStatusCount()>1,e.clearFilters=()=>{e.projectView="all",e.typeFilter="all",e.search="",Object.keys(e.filters.status).forEach(_=>{e.filters.status[_]=!0})};function z(_,P,G,J){t.get("/api/repo/"+_).then(async X=>{let W=J!==void 0&&J!==X.data.status;for(let se of e.items)if(se._type==="repo"&&se.repoId==_){W=W||se.status!==X.data.status;let ce=e.needsAttention(se);se.status=X.data.status,se.statusMessage=X.data.statusMessage,se._statusKey=m(se.status),se._statusKey!=="progress"&&(se._stale=!1);let de=e.needsAttention(se);e.dashboardTotals&&ce!==de&&(e.dashboardTotals.attention=Math.max(0,e.dashboardTotals.attention+(de?1:-1)));break}if(W&&!T){e.dashboardCursor=null;let se=e.selectedProject;await M(),se&&e.selectedProject===se&&(e.selectedProject=e.items.find(ce=>ce._type===se._type&&ce._id===se._id)||null)}if(X.data.status=="ready"||X.data.status=="error"||X.data.status=="removed"||X.data.status=="expired"){P(X.data);return}a.timeout(()=>z(_,P,G,X.data.status),2500)},G)}let ne=_=>_==="repo"?"repository":_==="gist"?"gist":"pull request",ee=_=>_==="repo"?"/api/repo":_==="gist"?"/api/gist":"/api/pr";e.removeItem=_=>{let P=ne(_._type);if(confirm(`Are you sure that you want to remove the ${P} ${_._id}?`)){let G=Fe({title:`Removing ${_._id}...`,date:new Date,body:`The ${P} ${_._id} is going to be removed.`});e.addToast(G);let J=`${ee(_._type)}/${_._id}`;t.delete(J).then(()=>{_._type==="repo"?z(_._id,()=>{G.title=`${_._id} is removed.`,G.body=`The ${P} ${_._id} is removed.`},void 0,_.status):(G.title=`${_._id} is removed.`,G.body=`The ${P} ${_._id} is removed.`,M())},X=>{G.title=`Error during the removal of ${_._id}.`,G.body=X.body,M()})}},e.refreshItem=_=>{let P=ne(_._type),G=Fe({title:`Refreshing ${_._id}...`,date:new Date,body:`The ${P} ${_._id} is going to be refreshed.`});e.addToast(G);let J=W=>{G.title=`Error during the refresh of ${_._id}.`,G.body=W.data?.error||W.body||"The refresh could not be completed. Please try again.",M()},X=`${ee(_._type)}/${_._id}/refresh`;t.post(X).then(()=>{_._type==="repo"?z(_._id,W=>{if(W.status!=="ready"){J({body:W.statusMessage||`The repository is ${W.status}.`});return}G.title=`${_._id} is refreshed.`,G.body=`The ${P} ${_._id} is refreshed.`},J,_.status):(G.title=`${_._id} is refreshed.`,G.body=`The ${P} ${_._id} is refreshed.`,M())},J)},e.extendItem=_=>{let P=ne(_._type),G=Fe({title:`Extending ${_._id}...`,date:new Date,body:`The expiration of ${P} ${_._id} is going to be extended by 6 months.`});e.addToast(G);let J=`${ee(_._type)}/${_._id}/extend`;t.post(J).then(()=>{_._type==="repo"?z(_._id,()=>{G.title=`${_._id} is extended.`,G.body=`The expiration of ${P} ${_._id} is extended by 6 months.`},void 0,_.status):(G.title=`${_._id} is extended.`,G.body=`The expiration of ${P} ${_._id} is extended by 6 months.`,M())},X=>{G.title=`Error during the extension of ${_._id}.`,G.body=X.data&&X.data.error||X.body,M()})},e.itemFilter=_=>{if(e.projectView==="attention"&&!e.needsAttention(_)||e.typeFilter!=="all"&&_._type!==e.typeFilter||e.filters.status[_._statusKey]===!1)return!1;let P=e.search.trim().toLowerCase();return!!(P.length==0||_._label&&String(_._label).toLowerCase().indexOf(P)>-1||_._source&&String(_._source).toLowerCase().indexOf(P)>-1||_._id&&String(_._id).toLowerCase().indexOf(P)>-1||_.conference&&String(_.conference).toLowerCase().indexOf(P)>-1)}};var dl=function(e,t,n){let r=ut();e.repoId=n.repoId,e.repo=null,e.progress=0,e.rateLimitResetAt=0,e.rateLimitCountdown="",e.shareUrl=(window.location?.origin||"")+"/r/"+encodeURIComponent(e.repoId)+"/",e.copied=!1;let s=null;e.copyShareUrl=async()=>{try{await ol(e.shareUrl),e.copied=!0,s&&r.timeout.cancel(s),s=r.timeout(()=>{e.copied=!1},2e3)}catch{e.addToast?.({title:"Copy this anonymous link",body:e.shareUrl})}};var i=null;let a=null,u=!1;function m(y){e.rateLimitResetAt=y,i&&r.interval.cancel(i);function E(){var h=Math.max(0,Math.ceil((y-Date.now())/1e3));if(h<=0)e.rateLimitCountdown="",e.rateLimitResetAt=0,r.interval.cancel(i),i=null;else{var C=Math.floor(h/60),g=h%60;e.rateLimitCountdown=C>0?C+"m "+g+"s":g+"s"}}E(),i=r.interval(E,1e3)}e.on("dispose",function(){u=!0,i&&r.interval.cancel(i),a&&r.timeout.cancel(a)});function k(y){if(!y)return y;var E=y.match(/^rate_limited:(\d+)$/);return E?(m(parseInt(E[1],10)),null):(e.rateLimitResetAt=0,y)}e.getStatus=()=>{u||t.get("/api/repo/"+e.repoId,{repoId:e.repoId,repoUrl:e.repoUrl}).then(y=>{if(!u){e.repo=y.data,y.data.rateLimitResetAt?m(y.data.rateLimitResetAt):e.repo.statusMessage=k(e.repo.statusMessage),e.repo.status=="ready"?e.progress=100:e.repo.status=="queue"?e.progress=10:e.repo.status=="downloaded"?e.progress=50:e.repo.status=="download"||e.repo.status=="preparing"?e.progress=25:e.repo.status=="anonymizing"&&(e.progress=75);var E=!["ready","removed","expired"].includes(e.repo.status);e.repo.status=="error"&&!e.rateLimitResetAt&&(E=!1),E&&(a=r.timeout(e.getStatus,2e3))}},y=>{e.error=y.data.error})},e.getStatus()},as=function(e,t,n,r,s,i,a){e.sourceUrl="",e.workspaceOpen=!1,e.sourceUrlError="",e.previewStatus="idle",e.sourceLoading=!1,e.mobilePane="settings";let u=window.matchMedia?.("(max-width: 767px)");e.mobileWorkspace=!!u?.matches,u?.addEventListener&&Zt()(u,"change",p=>{e.mobileWorkspace=p.matches}),e.selectMobilePane=p=>{e.mobilePane=p};let m=0,k=!1,y=new Set,E=(p,v=!1)=>!k&&p.generation===m&&p.url===e.sourceUrl.trim()&&p.connection===e.githubConnection&&(!v||p.branch===e.source.branch),h=()=>{let p={generation:m,url:e.sourceUrl.trim(),connection:e.githubConnection,branch:e.source.branch};return y.add(p),e.sourceLoading=!0,p},C=p=>{y.delete(p),k||(e.sourceLoading=[...y].some(v=>E(v)))};e.on("dispose",()=>{k=!0,m++});let g=null,b=p=>p.gistId&&!p.repo?"gist:"+p.gistId.toLowerCase():(p.owner+"/"+p.repo).toLowerCase()+(p.pullRequestId?"/pull/"+p.pullRequestId:""),S=ur(e,["sourceUrl","terms","repoId","pullRequestId","gistId","source","options","conference","githubConnection"],"anonymize:"+(s.path?.()||""));e.discardDraft=async()=>{S.discard(),e.workspaceOpen=!!e.sourceUrl,e.error=null,e.sourceUrl?await e.urlSelected(!0):(m++,e.sourceLoading=!1,e.detectedType=null,e.details=null,e.sourceUrlError="",re.cancel(),Se.cancel(),F.cancel(),e.previewStatus="idle")},e.githubConnection=void 0,e.githubConnections=null,e.gistOAuthRequired=!1,e.gistAppRequired=!1;let R=()=>{let p={};for(let v of["sourceUrl","terms","repoId","pullRequestId","gistId","source","options","conference","githubConnection"])p[v]=e[v];sessionStorage.setItem("github-access-draft",JSON.stringify({path:s.path(),savedAt:Date.now(),draft:p}))};e.connectGistApp=()=>{R(),window.location.href="/github/app/login?returnTo="+encodeURIComponent(s.path())},e.connectGistOAuth=()=>{R(),window.location.href="/github/login?returnTo="+encodeURIComponent(s.path())},e.grantGitHubAccess=()=>{R();let p=s.path(),v=P(e.sourceUrl)||"",D=e.githubConnections?.appConnected?"/github/app/install":"/github/app/login";window.location.href=D+"?returnTo="+encodeURIComponent(p)+"&repository="+encodeURIComponent(v)+"&install=1"},e.chooseGitHubConnection=async p=>{e.githubConnection=p,e.readme="",e.sourceUrl&&await J()},e.detectedType=null,e.repoId="",e.pullRequestId="",e.gistId="",e.terms="",e.defaultTerms="",e.branches=[],e.source={branch:"",commit:""},e.options={expirationMode:"remove",expirationDate:new Date,update:!1,image:!0,pdf:!0,notebook:!0,link:!0,body:!0,title:!0,origin:!1,diff:!0,content:!0,comments:!0,username:!0,date:!0};function T(){let p=new Date;return p.setMonth(p.getMonth()+6),p}e.options.expirationDate=T();function q(p){let v=p.getFullYear(),D=String(p.getMonth()+1).padStart(2,"0"),O=String(p.getDate()).padStart(2,"0");return`${v}-${D}-${O}`}e.minExpirationDate=q(new Date);let M=new Date;M.setFullYear(M.getFullYear()+1),e.maxExpirationDate=q(M),e.anonymize_readme="",e.readme="",e.html_readme="",e.isUpdate=!1,e.previousConfigurations=[],e.previousConfigurationId="";let V,z=p=>String(p||"").replace(/\/$/,"").replace(/\.git$/i,"").toLowerCase();async function ne(){if(e.isUpdate||r.repoId||r.pullRequestId||r.gistId)return;let p={generation:m,url:e.sourceUrl.trim(),connection:e.githubConnection};try{V||(V=t.get("/api/user/anonymized_repositories").then(O=>O.data));let v=await V;if(!E(p))return;let D=z(P(p.url));e.previousConfigurations=v.filter(O=>O.repoId&&O.options&&z(O.source?.fullName)===D).sort((O,I)=>(Date.parse(I.anonymizeDate)||0)-(Date.parse(O.anonymizeDate)||0)),e.previousConfigurationId=e.previousConfigurations[0]?.repoId||""}catch{V=void 0}}e.existingConfigurationUrl=()=>{let p=e.previousConfigurations.find(v=>v.repoId===e.previousConfigurationId);return p?"/anonymize/"+encodeURIComponent(p.repoId):null};function ee(p){t.get("/api/user/default").then(v=>{let D=v.data;D.terms&&(e.defaultTerms=D.terms.join(` -`)),e.options=Object.assign({},e.options,D.options),e.options.expirationDate=D.options&&D.options.expirationDate?new Date(D.options.expirationDate):T(),!r.repoId&&!r.pullRequestId&&!r.gistId&&!e.anonymize?.terms?.dirty&&(e.terms=e.defaultTerms),p&&p()})}function _(p,v,D){e.anonymize&&e.anonymize[p]&&e.anonymize[p].setValidity(v,D)}function P(p){try{let v=parseGithubUrl(p);if(v&&v.owner&&v.repo)return v.owner+"/"+v.repo}catch{}return null}e.accessRepairAllowed=!1,e.repairingGitHubAccess=!1,e.accessRepairMessage="",e.repairGitHubAccess=async()=>{if(!e.accessRepairAllowed||e.repairingGitHubAccess||!e.githubConnections?.appEnabled||!r.repoId||e.role!=="owner"||e.githubConnection!=="github-app"||P(e.sourceUrl)!==e._originalFullName)return;e.repairingGitHubAccess=!0,e.accessRepairMessage="";let p=h();try{let v=await t.get("/github/connections");if(e.githubConnections=v.data,!v.data.appEnabled)return;let D=await t.post("/github/connections/migrate",{type:"repository",id:r.repoId,connection:"github-app"},{headers:{"X-CSRF-Token":v.data.csrf}});if(!E(p))return;e.error=null,D.data.fullName&&(e._originalFullName=D.data.fullName,e.source.fullName=D.data.fullName,e.sourceUrl="https://github.com/"+D.data.fullName),e.accessRepairMessage="GitHub access repaired. Your anonymous URL and published commit are unchanged.",await e.urlSelected(!0)}catch{E(p)&&(e.accessRepairMessage="Unable to repair GitHub access. Check the App's repository permissions in Manage access, then retry. Your published snapshot has not been replaced.")}finally{e.repairingGitHubAccess=!1,C(p)}},e.reconnectingSource=!1,e.reconnectRepositoryId=void 0,e.reconnectSource=async()=>{if(confirm("Reconnect to the repository currently at this GitHub URL? Review its branch and commit before saving. Saving will replace the published snapshot.")){e.reconnectingSource=!0,e.reconnectRepositoryId=void 0,e.source.commit="",e.source.branch="",e.readme="",e.branches=[];try{await W()}catch{}}};function G(){return e.reconnectingSource||!e.isUpdate||!e._originalRepositoryID?void 0:P(e.sourceUrl)===e._originalFullName?e._originalRepositoryID:void 0}async function J(){e._preservingDraft=!0;try{await e.urlSelected(!0)}finally{e._preservingDraft=!1}}async function X(){let p;try{p=JSON.parse(sessionStorage.getItem("github-access-draft")||"null")}catch{return!1}if(!p||p.path!==s.path()||Date.now()-p.savedAt>=30*6e4)return S.restore()?(e.sourceUrl&&await J(),!0):!1;S.restore();for(let v of["sourceUrl","terms","repoId","pullRequestId","gistId","source","options","conference","githubConnection"])Object.prototype.hasOwnProperty.call(p.draft,v)&&(e[v]=p.draft[v]);return e.options.expirationDate&&(e.options.expirationDate=new Date(e.options.expirationDate)),await J(),sessionStorage.removeItem("github-access-draft"),!0}ee(()=>{!r.repoId&&!r.pullRequestId&&!r.gistId&&a(X,0),r.repoId&&r.repoId!=""&&(e.isUpdate=!0,e.detectedType="repo",e.repoId=r.repoId,t.get("/api/repo/"+e.repoId).then(async p=>{e.accessRepairAllowed=!["removed","archived","preparing","queue","download","removing","expiring"].includes(p.data.status),e.githubConnection=p.data.connection||"oauth",e.sourceUrl="https://github.com/"+p.data.source.fullName,e._originalFullName=p.data.source.fullName,e.terms=p.data.options.terms.filter(v=>v).join(` -`),e.source=p.data.source,e.role=p.data.role||"owner",e.coauthors=p.data.coauthors||[],e._originalBranch=p.data.source.branch,e.options=Object.assign({},e.options,p.data.options),e.conference=p.data.conference,e._originalConference=p.data.conference,e.repositoryID=p.data.source.repositoryID,e._originalRepositoryID=p.data.source.repositoryID,p.data.options.expirationDate&&(e.options.expirationDate=new Date(p.data.options.expirationDate)),g=b(parseGithubUrl(e.sourceUrl)),!await X()&&(await Promise.all([W(),se()]),_e())},()=>{s.url("/404")})),r.pullRequestId&&r.pullRequestId!=""&&(e.isUpdate=!0,e.detectedType="pr",e.pullRequestId=r.pullRequestId,t.get("/api/pr/"+e.pullRequestId).then(async p=>{if(e.githubConnection=p.data.connection||"oauth",e.sourceUrl="https://github.com/"+p.data.source.repositoryFullName+"/pull/"+p.data.source.pullRequestId,e.terms=p.data.options.terms.filter(v=>v).join(` -`),e.source=p.data.source,e.options=Object.assign({},e.options,p.data.options),e.conference=p.data.conference,e._originalConference=p.data.conference,p.data.options.expirationDate&&(e.options.expirationDate=new Date(p.data.options.expirationDate)),g=b(parseGithubUrl(e.sourceUrl)),!await X())try{await qe()}catch{}},()=>{s.url("/404")})),r.gistId&&r.gistId!=""&&(e.isUpdate=!0,e.detectedType="gist",e.gistId=r.gistId,t.get("/api/gist/"+e.gistId).then(async p=>{e.sourceUrl="https://gist.github.com/"+p.data.source.gistId,e.terms=p.data.options.terms.filter(v=>v).join(` -`),e.source=p.data.source,e.options=Object.assign({},e.options,p.data.options),e.conference=p.data.conference,e._originalConference=p.data.conference,p.data.options.expirationDate&&(e.options.expirationDate=new Date(p.data.options.expirationDate)),g=b(parseGithubUrl(e.sourceUrl)),!await X()&&await ze()},()=>{s.url("/404")}))}),t.get("/github/connections").then(p=>{e.githubConnections=p.data,!r.repoId&&!r.pullRequestId&&!r.gistId&&e.githubConnection===void 0&&p.data.appEnabled&&p.data.appConnected&&(e.githubConnection="github-app",e.sourceUrl&&e.workspaceOpen&&J())}).catch(()=>{}),e.urlSelected=async(p=!1)=>{let v=++m;e.previousConfigurations=[],e.previousConfigurationId="";let D;try{D=parseGithubUrl(e.sourceUrl.trim())}catch{e.sourceLoading=!1,re.cancel(),Se.cancel(),F.cancel(),e.previewStatus="idle",e.sourceUrlError=e.sourceUrl?"Please provide a valid GitHub URL.":"",_("sourceUrl","github",!1);return}let O=b(D),I=p||g===O;g=O,e.sourceUrlError="",_("sourceUrl","github",!0);let U=document.activeElement?.id==="sourceUrl-landing";e.workspaceOpen=!0,U&&a(()=>document.getElementById("sourceUrl")?.focus(),0),e.reconnectingSource=!1,e.reconnectRepositoryId=void 0,!I&&!e.isUpdate&&(e.repoId="",e.pullRequestId="",e.gistId=""),e.details=null,e.branches=[],I||(e.source={type:"GitHubStream",branch:"",commit:""}),re.cancel(),Se.cancel(),F.cancel(),Me.clear(),Ue.clear(),e.previewStatus="idle",e.anonymize_readme="",e.readme="",e.html_readme="",e.detectedType=null,e.gistOAuthRequired=!1,e.gistAppRequired=!1,e._preservingDraft=I;try{D.gistId&&!D.repo?(e.detectedType="gist",e.source={gistId:D.gistId},await ze()):D.pullRequestId?(e.detectedType="pr",e.source={repositoryFullName:D.owner+"/"+D.repo,pullRequestId:D.pullRequestId},await qe()):(e.detectedType="repo",ne(),await Promise.all([W(),se()]),_e())}catch{}finally{v===m&&(e._preservingDraft=!1)}$('[data-toggle="tooltip"]').tooltip()},$('[data-toggle="tooltip"]').tooltip(),e.watch("source.branch",async()=>{if(e.detectedType!=="repo")return;let p=e.branches.filter(D=>D.name==e.source.branch)[0];if(!p)return;!(!e.reconnectingSource&&e.isUpdate&&e._originalBranch===e.source.branch&&e.source.commit)&&!(e._preservingDraft&&e.source.commit)&&(e.source.commit=p.commit),e.readme=p.readme,await se(),_e()}),e.getBranches=async p=>{let v=parseGithubUrl(e.sourceUrl),D=h();try{let O=await t.get(`/api/repo/${v.owner}/${v.repo}/branches`,{params:{reconnect:e.reconnectingSource?"1":void 0,anonymizedRepoId:e.isUpdate&&r.repoId&&P(e.sourceUrl)===e._originalFullName?r.repoId:void 0,connection:e.githubConnection,force:p===!0||e.reconnectingSource?"1":"0",repositoryID:G()}});if(!E(D))return;e.branches=O.data,e.sourceUnreachable=!1,e.source.branch||(e.source.branch=e.details.defaultBranch);let I=e.branches.filter(U=>U.name==e.source.branch);I.length>0&&(!(!e.reconnectingSource&&!p&&e.isUpdate&&!e.options.update&&e._originalBranch===e.source.branch&&e.source.commit)&&!(e._preservingDraft&&e.source.commit)&&(e.source.commit=I[0].commit),e.readme=I[0].readme,await se(p))}catch(O){if(!E(D))return;e.branches=[],e.sourceUnreachable=O&&(O.status===404||O.data&&O.data.error==="repo_not_found");let I=O&&O.data&&O.data.error||(O&&O.status===404?"repo_not_found":"unknown_error");i("ERRORS."+I).then(U=>{e.toasts=e.toasts||[],e.addToast({title:"Error",date:new Date,body:U}),e.error=U},console.error),typeof _=="function"&&_("sourceUrl","missing",!1)}finally{C(D)}};async function W(){let p=parseGithubUrl(e.sourceUrl),v=h();try{te();let D=await t.get(`/api/repo/${p.owner}/${p.repo}/`,{params:{reconnect:e.reconnectingSource?"1":void 0,anonymizedRepoId:e.isUpdate&&r.repoId&&P(e.sourceUrl)===e._originalFullName?r.repoId:void 0,connection:e.githubConnection,repositoryID:G(),force:"1"}});if(!E(v))return;e.details=D.data,e.reconnectingSource&&(e.reconnectRepositoryId=e.details.externalId),e.details&&e.details.id&&(e.repositoryID=e.details.id),e.repoId||(e.repoId=e.details.repo+"-"+generateRandomId(4)),await e.getBranches(e.reconnectingSource)}catch(D){if(!E(v))return;throw D.data&&(i("ERRORS."+D.data.error).then(O=>{e.addToast({title:"Error",date:new Date,body:O}),e.error=O},console.error),Ee(D.data.error)),_("sourceUrl","missing",!1),D}finally{C(v)}}async function se(p){if(e.readme&&!p)return e.readme;let v=parseGithubUrl(e.sourceUrl),D=h();try{let O=await t.get(`/api/repo/${v.owner}/${v.repo}/readme`,{params:{reconnect:e.reconnectingSource?"1":void 0,anonymizedRepoId:e.isUpdate&&r.repoId&&P(e.sourceUrl)===e._originalFullName?r.repoId:void 0,connection:e.githubConnection,force:p===!0?"1":"0",branch:e.source.branch,repositoryID:G()}});E(D,!0)&&(e.readme=O.data)}catch{E(D,!0)&&(e.readme="")}finally{C(D)}}function ce(){let p={terms:e.terms?e.terms.split(` -`):[],image:!!e.options.image,link:!!e.options.link,repoId:e.repoId};e.source&&e.source.branch&&(p.branchName=e.source.branch);try{let v=parseGithubUrl(e.sourceUrl);p.repoName=`${v.owner}/${v.repo}`}catch{}return p}function de(p,v,D){let O=null,I=0,U=()=>{if(e.detectedType!==p)return;O&&a.cancel(O);let L=++I;e.previewStatus="loading",O=a(()=>{O=null;let H=v();if(!H){e.previewStatus="idle";return}t.post("/api/anonymize-preview",H).then(Y=>{L===I&&(D(Y.data,H),e.previewStatus="ready")}).catch(()=>{L===I&&(e.previewStatus="error")})},200)};return U.cancel=()=>{I++,O&&a.cancel(O),O=null},e.on("dispose",U.cancel),U}e.retryPreview=()=>{e.detectedType==="repo"&&re(),e.detectedType==="pr"&&Se(),e.detectedType==="gist"&&F()};let re=de("repo",()=>e.readme?{content:e.readme,options:ce()}:null,p=>{if(typeof p?.content!="string")throw Error("Invalid preview response");e.anonymize_readme=p.content;let v="";try{let O=parseGithubUrl(e.sourceUrl),I=e.source.branch||e.details&&e.details.defaultBranch||"main";v=`https://github.com/${O.owner}/${O.repo}/raw/${I}/`}catch{}let D=renderMD(e.anonymize_readme,v);e.html_readme=D,a(Prism.highlightAll,150)});function _e(){!e.anonymize||!e.anonymize.terms||(e.termsRegexWarning=!!e.terms&&!!e.terms.match(/[-[\]{}()*+?.,\\^$|#]/g),re())}async function qe(){let p=parseGithubUrl(e.sourceUrl),v=h();try{te();let D=await t.get(`/api/pr/${p.owner}/${p.repo}/${p.pullRequestId}`,{params:{connection:e.githubConnection}});if(!E(v))return;e.details=D.data,e.pullRequestId||(e.pullRequestId=p.repo+"-PR"+p.pullRequestId+"-"+generateRandomId(4))}catch(D){if(!E(v))return;throw D.data&&(i("ERRORS."+D.data.error).then(O=>{e.addToast({title:"Error",date:new Date,body:O}),e.error=O},console.error),Ee(D.data.error)),_("sourceUrl","missing",!1),D}finally{C(v)}}let Me=Fe(new Map);function Pe(){let p=new Set,v=e.details&&e.details.pullRequest;if(!v)return p;typeof v.title=="string"&&p.add(v.title),typeof v.body=="string"&&p.add(v.body),typeof v.diff=="string"&&p.add(v.diff);let D=v.comments||[];for(let O of D)typeof O.author=="string"&&p.add(O.author),typeof O.body=="string"&&p.add(O.body);return p}let Se=de("pr",()=>{let p=Pe(),v=Array.from(p);return v.length===0?null:{contents:v,options:ce()}},(p,v)=>{if(!Array.isArray(p?.contents)||p.contents.length!==v.contents.length||p.contents.some(I=>typeof I!="string"))throw Error("Invalid preview response");let D=v.contents,O=new Map;for(let I=0;IMe.set(U,I))});e.anonymizePrContent=function(p){return p&&(Me.has(p)?Me.get(p):"")};async function ze(){let p=parseGithubUrl(e.sourceUrl),v=h();try{te(),e.gistOAuthRequired=!1,e.gistAppRequired=!1;let D=await t.get(`/api/gist/source/${p.gistId}`);if(!E(v))return;e.details=D.data,e.gistId||(e.gistId="gist-"+p.gistId.substring(0,6)+"-"+generateRandomId(4))}catch(D){if(!E(v))return;if(D.data?.error==="github_app_reconnect_required"){e.gistAppRequired=!0,_("sourceUrl","missing",!1);return}if(D.data?.error==="github_oauth_required"){e.gistOAuthRequired=!0,_("sourceUrl","missing",!1);return}throw D.data&&(i("ERRORS."+D.data.error).then(O=>{e.addToast({title:"Error",date:new Date,body:O}),e.error=O},console.error),Ee(D.data.error)),_("sourceUrl","missing",!1),D}finally{C(v)}}let Ue=Fe(new Map);function ke(){let p=new Set,v=e.details&&e.details.gist;if(!v)return p;typeof v.description=="string"&&p.add(v.description),typeof v.ownerLogin=="string"&&p.add(v.ownerLogin);let D=v.files||[];for(let I of D)typeof I.filename=="string"&&p.add(I.filename),typeof I.content=="string"&&p.add(I.content);let O=v.comments||[];for(let I of O)typeof I.author=="string"&&p.add(I.author),typeof I.body=="string"&&p.add(I.body);return p}let F=de("gist",()=>{let p=ke(),v=Array.from(p);return v.length===0?null:{contents:v,options:ce()}},(p,v)=>{if(!Array.isArray(p?.contents)||p.contents.length!==v.contents.length||p.contents.some(I=>typeof I!="string"))throw Error("Invalid preview response");let D=v.contents,O=new Map;for(let I=0;IUe.set(U,I)),Z()});e.anonymizeGistContent=function(p){return p&&(Ue.has(p)?Ue.get(p):"")},e.previewGistFiles=[];function Z(){let p=e.details&&e.details.gist&&e.details.gist.files||[];e.previewGistFiles=p.map(v=>({filename:e.anonymizeGistContent(v.filename),content:e.anonymizeGistContent(v.content),language:v.language}))}e.watch("details.gist.files",Z,!0),e.watch("terms",Z);function Q(){let p=e.conference;if(e.conference_data=null,!p)return;let v=e.isUpdate&&p===e._originalConference;t.get("/api/conferences/"+p).then(D=>{e.conference===p&&(e.conference_data=D.data,e.conference_data.startDate=new Date(e.conference_data.startDate),e.conference_data.endDate=new Date(e.conference_data.endDate),!v&&(e.options.expirationDate=new Date(e.conference_data.endDate),e.options.expirationMode="remove",e.options.update=e.conference_data.options.update,e.options.image=e.conference_data.options.image,e.options.pdf=e.conference_data.options.pdf,e.options.notebook=e.conference_data.options.notebook,e.options.link=e.conference_data.options.link))},()=>{e.conference===p&&(e.conference_data=null)})}function te(){_("repoId","used",!0),_("repoId","format",!0),_("pullRequestId","used",!0),_("pullRequestId","format",!0),_("gistId","used",!0),_("gistId","format",!0),_("sourceUrl","used",!0),_("sourceUrl","missing",!0),_("sourceUrl","access",!0),_("sourceUrl","github",!0),_("commit","exists",!0),_("conference","activated",!0),_("terms","format",!0),e.termsRegexWarning=!1}function ye(){let p=e.anonymize&&e.anonymize.expirationDate;return!e.options.expirationDate||p&&p.invalid?(p&&p.setDirty&&p.setDirty(),e.error="Please choose a valid expiration date.",!0):!1}function Ee(p){let v=e.detectedType==="pr"?"pullRequestId":e.detectedType==="gist"?"gistId":"repoId";switch(p){case"repoId_already_used":_(v,"used",!1);break;case"invalid_repoId":_(v,"format",!1);break;case"options_not_provided":_(v,"format",!1);break;case"repo_already_anonymized":_("sourceUrl","used",!1);break;case"invalid_terms_format":_("terms","format",!1);break;case"repo_not_found":_("sourceUrl","missing",!1);break;case"repo_not_accessible":_("sourceUrl","access",!1);break;case"commit_not_found":_("commit","exists",!1);break;case"conf_not_activated":_("conference","activated",!1);break}}e.coauthors=e.coauthors||[],e.coauthorResults=[],e.coauthorError="",e.searchCoauthors=()=>{let p=(e.coauthorSearch||"").trim();if(e.coauthorError="",p.length<2){e.coauthorResults=[];return}t.get("/api/user/search/github-users",{params:{q:p}}).then(v=>{let D=new Set((e.coauthors||[]).map(O=>(O.username||"").toLowerCase()));e.coauthorResults=(v.data||[]).filter(O=>!D.has((O.username||"").toLowerCase()))},()=>{e.coauthorResults=[]})},e.addCoauthor=(p,v)=>{v&&v.preventDefault(),!(!p||!p.username)&&t.post("/api/repo/"+e.repoId+"/coauthors",{username:p.username}).then(D=>{e.coauthors=D.data||[],e.coauthorResults=[],e.coauthorSearch="",e.coauthorError=""},D=>{let O=D&&D.data&&D.data.error||"unknown_error";e.coauthorError=O})},e.removeCoauthor=p=>{!p||!p.username||confirm("Remove co-author "+p.username+"?")&&t.delete("/api/repo/"+e.repoId+"/coauthors/"+encodeURIComponent(p.username)).then(v=>{e.coauthors=v.data||[]},v=>{let D=v&&v.data&&v.data.error||"unknown_error";e.coauthorError=D})},e.anonymizeRepo=p=>{if(e.sourceLoading){e.error="Wait for the source to finish loading before saving.";return}if(e.reconnectingSource&&!e.reconnectRepositoryId||ye())return;if(e.anonymize?.invalid||e.sourceUrlError){e.error="Please correct the highlighted fields before saving.";return}let v=p.currentTarget||p.target.closest?.("button")||p.target;v.disabled=!0;let D=parseGithubUrl(e.sourceUrl),O={repoId:e.repoId,terms:e.terms.trim().split(` -`).filter(U=>U),connection:e.githubConnection,fullName:`${D.owner}/${D.repo}`,repository:e.sourceUrl,reconnectRepositoryId:e.reconnectRepositoryId,options:e.options,source:e.source,conference:e.conference};e.details&&(O.options.pageSource=e.details.pageSource),te();let I=e.isUpdate?"/api/repo/"+e.repoId:"/api/repo/";t.post(I,O,{headers:{"Content-Type":"application/json"}}).then(()=>{S.clear(),window.location.href="/status/"+e.repoId},U=>{U.data&&(i("ERRORS."+U.data.error).then(L=>{e.error=L},console.error),Ee(U.data.error))}).finally(()=>{v.disabled=!1})},e.anonymizeGist=p=>{if(e.sourceLoading){e.error="Wait for the source to finish loading before saving.";return}if(ye())return;if(e.anonymize?.invalid||e.sourceUrlError){e.error="Please correct the highlighted fields before saving.";return}let v=p.currentTarget||p.target.closest?.("button")||p.target;v.disabled=!0;let D=parseGithubUrl(e.sourceUrl),O={gistId:e.gistId,terms:e.terms.trim().split(` -`).filter(U=>U),source:{gistId:D.gistId},options:e.options,conference:e.conference};te();let I=e.isUpdate?"/api/gist/"+e.gistId:"/api/gist/";t.post(I,O,{headers:{"Content-Type":"application/json"}}).then(()=>{S.clear(),window.location.href="/gist/"+e.gistId},U=>{U.data&&(i("ERRORS."+U.data.error).then(L=>{e.error=L},console.error),Ee(U.data.error))}).finally(()=>{v.disabled=!1})},e.anonymizePullRequest=p=>{if(e.sourceLoading){e.error="Wait for the source to finish loading before saving.";return}if(ye())return;if(e.anonymize?.invalid||e.sourceUrlError){e.error="Please correct the highlighted fields before saving.";return}let v=p.currentTarget||p.target.closest?.("button")||p.target;v.disabled=!0;let D=parseGithubUrl(e.sourceUrl),O={pullRequestId:e.pullRequestId,connection:e.githubConnection,terms:e.terms.trim().split(` -`).filter(U=>U),source:{repositoryFullName:`${D.owner}/${D.repo}`,pullRequestId:D.pullRequestId},options:e.options,conference:e.conference};te();let I=e.isUpdate?"/api/pr/"+e.pullRequestId:"/api/pr/";t.post(I,O,{headers:{"Content-Type":"application/json"}}).then(()=>{S.clear(),window.location.href="/pr/"+e.pullRequestId},U=>{U.data&&(i("ERRORS."+U.data.error).then(L=>{e.error=L},console.error),Ee(U.data.error))}).finally(()=>{v.disabled=!1})},e.watch("conference",()=>{Q()}),e.watch("terms",()=>{e.detectedType==="repo"&&_e(),e.detectedType==="pr"&&Se(),e.detectedType==="gist"&&F()}),e.watch("options.image",()=>{e.detectedType==="repo"&&_e(),e.detectedType==="pr"&&Se(),e.detectedType==="gist"&&F()}),e.watch("options.link",()=>{e.detectedType==="repo"&&_e(),e.detectedType==="pr"&&Se(),e.detectedType==="gist"&&F()}),e.watch("details",()=>{e.detectedType==="pr"&&Se(),e.detectedType==="gist"&&F()},!0)},pr=function(e,t,n,r,s,i){let a=ut();window.Prism?.hooks&&!window.Prism.redactionHook&&(window.Prism.hooks.add("complete",P=>el(P.element)),window.Prism.redactionHook=!0);let u=Zt();e.on("dark-mode",(P,G)=>{e.aceOption&&(G?e.aceOption.theme="nord_dark":e.aceOption.theme="chrome")});let m=0,k=!1;e.on("dispose",()=>{k=!0,m++,y&&y.resolve()}),e.files=[],e.isMac=/Mac|iPhone|iPad|iPod/.test(navigator.platform||navigator.userAgent),e.fileSearchQuery="",e.fileSearchResults=null,e.fileSearchLoading=!1,u(document,"keydown",function(P){if((P.metaKey||P.ctrlKey)&&P.key==="k"){P.preventDefault();var G=document.querySelector(".tree-search-input");G&&(G.focus(),G.select())}});var y=null;e.onFileSearchChange=function(){y&&(y.resolve(),y=null);let P=e.fileSearchQuery;if(!P||P.length<2){e.fileSearchResults=null,e.fileSearchLoading=!1;return}e.fileSearchLoading=!0;let G=i.defer();y=G,t.get(`/api/repo/${e.repoId}/files/search?q=${encodeURIComponent(P)}`,{timeout:G.promise}).then(function(J){if(!(k||y!==G)){y=null,e.fileSearchLoading=!1;var X={};e.files.forEach(function(F){X[(F.path||"")+"/"+F.name]=!0});for(var W=[],se={},ce=0;ce0&&e.files.push.apply(e.files,W);for(var Se=[],ze=0;ze0&&e.files.push.apply(e.files,Se),e.fileSearchResults=J.data}},function(){!k&&y===G&&(y=null,e.fileSearchLoading=!1,e.fileSearchResults=[])})};let E={yml:"yaml",txt:"text",py:"python",js:"javascript",ts:"typescript"},h=["license","txt"],C=["png","jpg","jpeg","gif","svg","ico","bmp","tiff","tif","webp","avif","heif","heic"],g=["wav","mp3","ogg","wma","flac","aac","m4a"],b=["mp4","avi","webm","mov","mpg","mpeg","mkv","flv","wmv","3gp","3g2","m4v","f4v","f4p","f4a","f4b"];e.on("routeUpdate",function(P,G){if(e.repoId!=r.repoId)return _();if((r.path||"")!=e.filePath){e.filePath=r.path||"",e.paths=e.filePath.split("/").filter(J=>J&&J.trim().length>0),ee();for(let J=0;J0?e.paths.slice(0,J).join("/"):"";e.files.some(se=>se.path===X)||e.getFiles(X)}}});function S(){if(e.paths[0]!="")return;let P=["readme.md","readme.txt","readme.org","readme.1st","readme"],G={};for(let X of e.files)X.name.toLowerCase().indexOf("readme")>-1&&(G[X.name.toLowerCase()]=X.name);let J=null;for(let X of P)if(G[X]){J=X;break}if(!J&&Object.keys(G).length>0&&(J=Object.keys(G)[0]),J){let X=n.url();X[X.length-1]!="/"&&(X+="/"),n.url(X+encodePathForUrl(G[J]))}}e.fileCounts=null,e.getFiles=function(P){let G=e.repoId;return t.get(`/api/repo/${e.repoId}/files/?path=${encodeURIComponent(P)}&v=${e.options.lastUpdateDate}`).then(function(J){if(k||G!==e.repoId)return[];let X=P||"";return e.files=e.files.filter(W=>W.path!==X),e.files.push(...J.data),J.data},function(J){if(k||G!==e.repoId)return[];e.type="error",e.content=cr(J),e.files=[]})};function R(){let P=e.repoId;t.get(`/api/repo/${e.repoId}/files/counts`).then(function(G){k||P!==e.repoId||(e.fileCounts=G.data)},function(){e.fileCounts={}})}function T(){return e.files.filter(P=>P.name==e.paths[e.paths.length-1]&&P.path==e.paths.slice(0,e.paths.length-1).join("/"))[0]}var q=null;e.on("dispose",function(){q&&a.interval.cancel(q)});function M(P){if(k)return;let G=e.repoId;t.get(`/api/repo/${e.repoId}/options`).then(J=>{if(!(k||G!==e.repoId)){if(e.options=J.data,e.options.url){window.location=e.options.url;return}P&&P(J.data)}},J=>{if(!(k||G!==e.repoId)){var X=J.data||{};if(X.error==="rate_limited"&&X.resetAt){let se=function(){var ce=Math.max(0,Math.ceil((e.rateLimitResetAt-Date.now())/1e3));if(ce<=0)e.rateLimitCountdown="",e.rateLimitResetAt=0,q&&(a.interval.cancel(q),q=null),M(P);else{var de=Math.floor(ce/60),re=ce%60;e.rateLimitCountdown=de>0?de+"m "+re+"s":re+"s"}};var W=se;e.type="rate_limited",e.rateLimitResetAt=X.resetAt,q&&a.interval.cancel(q),se(),q=a.interval(se,1e3)}else X.error==="repository_not_ready"?(e.type="loading",a.timeout(function(){M(P)},3e3)):(e.type="error",e.content=cr(J))}})}e.toggleSource=function(){e.showSource=!e.showSource},e.toggleAllowScripts=function(){e.allowScripts=!e.allowScripts};function V(P){return E[P]?E[P]:P}function z(P){return P=="pdf"?"pdf":P=="html"||P=="htm"?"html-doc":P=="md"?"md":P=="org"?"org":P=="ipynb"?"IPython":h.indexOf(P)>-1?"text":C.indexOf(P)>-1?"image":b.indexOf(P)>-1?"media":g.indexOf(P)>-1?"audio":"code"}function ne(P,G){let J=m;if(!P){e.type="error",e.content="no_file_selected";return}let X=e.type;e.type="loading",e.content="loading";let W=G&&G.sha||"0";t.get(`/api/repo/${e.repoId}/file/${encodePathForUrl(P)}?v=`+W,{transformResponse:se=>se}).then(se=>{if(!(k||J!==m)){if(e.type=X,e.content=se.data,e.content==""&&(e.content=null),e.type=="md"&&(e.content=renderMD(se.data,n.url()+"/../"),e.type="html"),e.type=="org"){let de=contentAbs2Relative(se.data);var ce=new Org.Parser().parse(de).convert(Org.ConverterHTML,{headerOffset:1,exportFromLineNumber:!1,suppressSubScriptHandling:!0,suppressAutoLink:!1});e.content=DOMPurify.sanitize(ce.toString()),e.type="html"}e.type=="code"&&se.headers("content-type")=="application/octet-stream"&&(e.type="binary",e.content="binary"),a.timeout(()=>{Prism.highlightAll()},50)}},se=>{k||J!==m||(e.type="error",e.content=cr(se))})}function ee(){m++,e.content="",e.file=T();let P="0";e.file&&e.file.sha&&(P=e.file.sha),e.url=`/api/repo/${e.repoId}/file/${encodePathForUrl(e.filePath)}?v=${P}`;let G=e.filePath.substring(0,e.filePath.lastIndexOf("/")+1);e.fileBaseUrl=`/api/repo/${e.repoId}/file/${G?encodePathForUrl(G):""}`,e.showSource=!1,e.allowScripts=!1;let J=e.filePath.toLowerCase(),X=J.lastIndexOf(".");if(X>-1&&(J=J.substring(X+1)),e.aceOption={readOnly:!0,useWrapMode:!0,showGutter:!0,theme:"chrome",useSoftTab:!0,tabSize:2,fontSize:13,keyBinding:"vscode",fullLineSelection:!0,highlightActiveLine:!1,highlightGutterLine:!1,cursor:"hide",showInvisibles:!1,showIndentGuides:!0,showPrintMargin:!1,highlightSelectedWord:!1,enableBehaviours:!0,fadeFoldWidgets:!1,mode:V(J),onLoad:function(W){let se=ace.require("ace/range").Range,ce=null;function de(ke,F){ce!==null&&(W.session.removeMarker(ce),ce=null),ke!=null&&(ce=W.session.addMarker(new se(ke,0,F,1),"highlighted-line","fullLine"))}function re(ke){let F=window.location.hash.match(/^#L(\d+)(?:-L(\d+))?/);if(!F){de(null);return}let Z=parseInt(F[1])-1,Q=F[2]?parseInt(F[2])-1:Z;de(Z,Q),ke&&a.timeout(()=>{W.scrollToLine(Z,!0,!0,function(){})},100)}re(!0);let _e=null;W.on("guttermousedown",function(ke){let F=ke.getDocumentPosition().row,Z=ke.domEvent&&ke.domEvent.shiftKey,Q=F,te=F;Z&&_e!==null?(Q=Math.min(_e,F),te=Math.max(_e,F)):_e=F;let ye=Q===te?`#L${Q+1}`:`#L${Q+1}-L${te+1}`,Ee=window.location.pathname+window.location.search+ye;window.history.replaceState(null,"",Ee),de(Q,te),ke.stop()});let qe=u(window,"hashchange",()=>re(!1));W.setFontSize(e.aceOption.fontSize),W.setReadOnly(e.aceOption.readOnly),W.setKeyboardHandler(e.aceOption.keyBinding),W.setSelectionStyle(e.aceOption.fullLineSelection?"line":"text"),W.setOption("displayIndentGuides",!0),W.setHighlightActiveLine(e.aceOption.highlightActiveLine),e.aceOption.cursor=="hide"&&(W.renderer.$cursorLayer.element.style.display="none"),W.setHighlightGutterLine(e.aceOption.highlightGutterLine),W.setShowInvisibles(e.aceOption.showInvisibles),W.setDisplayIndentGuides(e.aceOption.showIndentGuides),W.renderer.setShowPrintMargin(e.aceOption.showPrintMargin),W.setHighlightSelectedWord(e.aceOption.highlightSelectedWord),W.session.setUseSoftTabs(e.aceOption.useSoftTab),W.session.setTabSize(e.aceOption.tabSize);let Me=window.matchMedia("(max-width: 991px)"),Pe=()=>W.session.setUseWrapMode(e.aceOption.useWrapMode&&Me.matches);Pe(),Me.addEventListener?.("change",Pe),W.setBehavioursEnabled(e.aceOption.enableBehaviours),W.setFadeFoldWidgets(e.aceOption.fadeFoldWidgets);let Se=[],ze=()=>{Se.forEach(Z=>W.session.removeMarker(Z)),Se=[];let ke=xa();if(!ke)return;W.session.getDocument().getAllLines().forEach((Z,Q)=>{for(let te of Z.matchAll(ke))Se.push(W.session.addMarker(new se(Q,te.index,Q,te.index+te[0].length),"ace_redaction","text"))})};ze(),W.session.on("change",()=>a.timeout(ze,0));let Ue=e.on("site-options",ze);return()=>{qe(),Ue(),Me.removeEventListener?.("change",Pe)}}},e.isDarkMode&&(e.aceOption.theme="nord_dark"),e.type=z(J),e.type=="pdf"){e.content="pdf";return}ne(e.filePath,e.file)}e.isSourceAccessError=()=>["repo_not_found","token_expired","github_app_access_required","github_app_reconnect_required","repo_saml_enforcement","repo_access_limited"].includes(e.content),e.retryContent=()=>_();function _(){m++,e.files=[],e.content=null,e.fileCounts=null,e.fileSearchQuery="",e.onFileSearchChange(),e.repoId=r.repoId,e.type="loading",e.filePath=r.path||"",e.paths=e.filePath.split("/");let P=e.repoId;M(function(G){R();var J=i.resolve();for(let X=0;X0?e.paths.slice(0,X).join("/"):"";J=J.then(function(){return e.getFiles(W)}).then(function(){if(e.type==="error")return i.reject("error")})}J.then(function(){k||P!==e.repoId||(e.files.length==1&&e.files[0].name==""?(e.files=[],e.type="empty"):(S(),ee()))})})}_()},ul=function(e,t,n,r,s){async function i(m){t.get(`/api/pr/${e.pullRequestId}/options`).then(k=>{if(e.options=k.data,e.options.url){window.location=e.options.url;return}m&&m(k.data)},k=>{e.type="error",e.content=k.data.error})}async function a(m){t.get(`/api/pr/${e.pullRequestId}/content`).then(k=>{e.details=k.data,e.tabState={active:k.data.diff?"diff":"comments"},m&&m(k.data)},k=>{e.type="error",e.content=k.data.error})}function u(){e.pullRequestId=r.pullRequestId,e.type="loading",i(m=>{a()})}u()},cl=function(e,t,n,r,s){async function i(m){t.get(`/api/gist/${e.gistId}/options`).then(k=>{if(e.options=k.data,e.options.url){window.location=e.options.url;return}m&&m(k.data)},k=>{e.type="error",e.content=k.data.error})}async function a(m){t.get(`/api/gist/${e.gistId}/content`).then(k=>{e.details=k.data;let y=k.data&&k.data.files&&k.data.files.length;e.tabState={active:y?"files":"comments"},m&&m(k.data)},k=>{e.type="error",e.content=k.data.error})}function u(){e.gistId=r.gistId,e.type="loading",i(()=>{a()})}u()},pl=function(e,t,n){e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.conferences=[],e.loading=!0,e.error="",e.search="";let r="conferences.filterPrefs",s={filters:{status:{ready:!0,expired:!1,removed:!1}},orderBy:"name"},i=loadFilterPrefs(r)||{};e.filters={status:Object.assign({},s.filters.status,i.filters&&i.filters.status||{})},e.orderBy=i.orderBy||s.orderBy,e.watch("orderBy",()=>{saveFilterPrefs(r,{filters:e.filters,orderBy:e.orderBy})}),e.watch("filters",()=>{saveFilterPrefs(r,{filters:e.filters,orderBy:e.orderBy})},!0),e.removeConference=function(a){if(!a.removing&&confirm(`Are you sure that you want to remove the conference ${a.name}? All the repositories linked to this conference will expire.`)){a.removing=!0;let u=Fe({title:`Removing ${a.name}...`,date:new Date,body:`The conference ${a.name} is going to be removed.`});e.addToast(u),t.delete(`/api/conferences/${a.conferenceID}`).then(()=>{u.title=`${a.name} is removed.`,u.body=`The conference ${a.name} is removed.`,e.loadConferences()}).catch(()=>{u.title="Unable to remove conference",u.body="Please try again. The conference has not been removed."}).finally(()=>{a.removing=!1})}},e.loadConferences=()=>(e.loading=!0,e.error="",t.get("/api/conferences/").then(a=>{e.conferences=a.data||[]},a=>{e.error="Unable to load your conferences. Please try again."}).finally(()=>{e.loading=!1})),e.loadConferences(),e.conferenceFilter=a=>{if(e.filters.status[a.status]==!1)return!1;let u=e.search.trim().toLowerCase();return!!(!u||(a.name||"").toLowerCase().includes(u)||(a.conferenceID||"").toLowerCase().includes(u))}},fr=function(e,t,n,r){e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.plans=[],e.editionMode=!1,e.saving=!1,e.error="";function s(){t.get("/api/conferences/"+r.conferenceId).then(y=>{e.options={...e.options,...y.data,billing:y.data.billing||{}},e.options.startDate=new Date(e.options.startDate),e.options.endDate=new Date(e.options.endDate)})}r.conferenceId&&(e.editionMode=!0,s());function i(){t.get("/api/conferences/plans").then(y=>{e.plans=y.data,e.plan=e.plans.filter(E=>E.id==e.options.plan.planID)[0]})}i();let a=new Date;a.setDate(1),a.setMonth(a.getMonth()+1);let u=new Date(a);u.setMonth(a.getMonth()+7,0),e.options={billing:{},startDate:a,endDate:u,plan:{planID:"free_conference"},options:{link:!0,image:!0,pdf:!0,notebook:!0,update:!0,page:!0}},e.plan=null,e.watch("options.plan.planID",()=>{e.plan=e.plans.filter(y=>y.id==e.options.plan.planID)[0]});function m(){e.conference.name.setValidity("required",!0),e.conference.conferenceID.setValidity("pattern",!0),e.conference.conferenceID.setValidity("required",!0),e.conference.conferenceID.setValidity("used",!0),e.conference.startDate.setValidity("required",!0),e.conference.startDate.setValidity("invalid",!0),e.conference.endDate.setValidity("required",!0),e.conference.endDate.setValidity("invalid",!0),e.conference.setValidity("error",!0)}function k(y){switch(y){case"conf_name_missing":e.conference.name.setValidity("required",!1);break;case"conf_id_missing":e.conference.conferenceID.setValidity("required",!1);break;case"conf_id_format":e.conference.conferenceID.setValidity("pattern",!1);break;case"conf_id_used":e.conference.conferenceID.setValidity("used",!1);break;case"conf_start_date_missing":e.conference.startDate.setValidity("required",!1);break;case"conf_end_date_missing":e.conference.endDate.setValidity("required",!1);break;case"conf_start_date_invalid":e.conference.startDate.setValidity("invalid",!1);break;case"conf_end_date_invalid":e.conference.endDate.setValidity("invalid",!1);break;default:e.conference.setValidity("error",!1);break}}e.submit=function(){if(e.saving)return;e.saving=!0,e.error="";let y=JSON.parse(JSON.stringify(e.options)),E=Fe({title:`Creating ${y.name}...`,date:new Date,body:`The conference ${y.conferenceID} is in creation.`});e.editionMode&&(E.title=`Updating ${y.name}...`,E.body=`The conference '${y.conferenceID}' is updating.`),e.addToast(E),m(),t.post("/api/conferences/"+(e.editionMode?y.conferenceID:""),y).then(()=>{e.editionMode?(E.title=`${y.name} updated`,E.body=`The conference '${y.conferenceID}' is updated.`):(E.title=`${y.name} created`,E.body=`The conference '${y.conferenceID}' is created.`),n.url("/conference/"+y.conferenceID)},h=>{k(h.data?.error),e.error="Unable to save the conference. Please correct any highlighted fields and try again.",e.removeToast(E)}).finally(()=>{e.saving=!1})}},fl=function(e,t,n,r){e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.conference=null,e.search="",e.filters={status:{ready:!0,expired:!1,removed:!1}},e.orderBy="-anonymizeDate",e.repoFiler=i=>{if(e.filters.status[i.status]==!1)return!1;let a=e.search.trim().toLowerCase();return!!(!a||(i.source?.fullName||"").toLowerCase().includes(a)||(i.repoId||"").toLowerCase().includes(a))};function s(){t.get("/api/conferences/"+r.conferenceId).then(i=>{e.conference=i.data})}s()},ml=function(e,t){e.notificationEmail="",e.emailSaved=!1,e.saveNotificationEmail=async()=>{e.busy=!0,e.emailSaved=!1,e.connectionError="";try{let n=await t.post("/github/connections/email",{email:e.notificationEmail},{headers:{"X-CSRF-Token":e.connections.csrf}});e.notificationEmail=n.data.notificationEmail,e.user&&(e.user.notificationEmail=n.data.notificationEmail),e.emailSaved=!0}catch(n){e.connectionError=n.data?.error||"Unable to save email address."}finally{e.busy=!1}},e.connections=null,e.connectionError="",e.busy=!1,e.loadConnections=()=>t.get("/github/connections").then(n=>{e.connections=n.data,e.notificationEmail=n.data.notificationEmail||""}).catch(n=>{e.connectionError=n.data?.error||"Unable to load connections."}),e.changeConnection=async(n,r,s)=>{e.busy=!0,e.connectionError="";try{let i=await t.post("/github/connections/migrate",{type:n.type,id:n.id,connection:r,preview:s},{headers:{"X-CSRF-Token":e.connections.csrf}});s?n.eligible=i.data.eligible:await e.loadConnections()}catch(i){e.connectionError=i.data?.error||"Unable to change connection."}finally{e.busy=!1}},e.disconnectOAuth=async()=>{e.busy=!0;try{await t.post("/github/connections/disconnect-oauth",{},{headers:{"X-CSRF-Token":e.connections.csrf}}),await e.loadConnections()}catch(n){e.connectionError=n.data?.error||"Unable to disconnect OAuth."}finally{e.busy=!1}},e.loadConnections()},hl=function(e,t){e.accountRecovery=!1,t.get("/github/account-recovery").then(n=>{e.accountRecovery=n.data.required}).catch(()=>{})};var vl=function(e,t,n){let r=ut(),s=Zt();e.Math=Math,e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.repositories=[],e.total=-1,e.totalPage=0,e.statusCounts=[],e.totalSize=0,e.selected={},e.allSelected=!1;let i=g=>{if(g.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement?.tagName)){g.preventDefault();let b=document.querySelector('.admin-filter-toolbar input[type="search"]');b&&b.focus()}};s(document,"keydown",i),e.on("dispose",()=>document.removeEventListener("keydown",i)),e.clearFilter=g=>{g==="dateRange"?(e.query.dateFrom="",e.query.dateTo=""):e.query[g]="",e.query.page=1},e.chips=[];let a=()=>{let g=[];e.query.owner&&g.push({key:"owner",label:"Owner",value:e.query.owner}),e.query.conference&&g.push({key:"conference",label:"Conference",value:e.query.conference}),e.chips=g};e.showStatusMessage=g=>{let b=g.statusMessage||"(no message)";window.prompt(`Status message for ${g.repoId} (${g.status}):`,b)},e.fetchGithubInfo=g=>{let b=window.open("","_blank");b&&b.document.write("
Loading GitHub info for "+g.repoId+"...
"),t.get("/api/admin/repos/"+g.repoId+"/github").then(S=>{b&&(b.document.open(),b.document.write('
'+JSON.stringify(S.data,null,2).replace(/[<>]/g,R=>R==="<"?"<":">")+"
"),b.document.close())},S=>{let R=S&&S.data?JSON.stringify(S.data,null,2):String(S);b&&(b.document.body.innerHTML='
'+R+"
")})},e.statusCountFor=g=>{let b=(e.statusCounts||[]).find(S=>S._id===g);return b?b.count:0},e.statusStorageFor=g=>{let b=(e.statusCounts||[]).find(S=>S._id===g);return b?b.storage:0},e.isErrorsOnly=()=>e.query&&e.query.error&&!e.query.ready&&!e.query.preparing&&!e.query.expired&&!e.query.removed,e.toggleErrorsOnly=()=>{e.isErrorsOnly()?Object.assign(e.query,{ready:!1,preparing:!0,expired:!1,removed:!1,error:!0}):Object.assign(e.query,{ready:!1,preparing:!1,expired:!1,removed:!1,error:!0}),e.query.page=1},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=g=>{e.query.sort===g?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=g,e.query.direction="desc"),e.query.page=1},e.sortIcon=g=>e.query.sort===g?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let u="admin.repos.filterPrefs",m={page:1,limit:25,sort:"lastView",direction:"desc",search:"",owner:"",conference:"",dateFrom:"",dateTo:"",ready:!1,expired:!1,removed:!1,error:!0,preparing:!0},k=loadFilterPrefs(u)||{};e.query=Object.assign({},m,k,{page:1,search:""});let y=n.search();y.owner&&(e.query.owner=y.owner),y.conference&&(e.query.conference=y.conference),y.search&&(e.query.search=y.search);let E="admin.repos.presets";e.presets=JSON.parse(localStorage.getItem(E)||"[]"),e.savePreset=()=>{let g=window.prompt("Preset name:");if(!g)return;let b=Object.assign({},e.query);delete b.page,e.presets=(e.presets||[]).filter(S=>S.name!==g),e.presets.push({name:g,query:b}),localStorage.setItem(E,JSON.stringify(e.presets))},e.applyPreset=g=>{Object.assign(e.query,g.query,{page:1})},e.deletePreset=g=>{e.presets=(e.presets||[]).filter(b=>b.name!==g.name),localStorage.setItem(E,JSON.stringify(e.presets))},e.selectAllOnPage=()=>{e.allSelected=!e.allSelected,e.repositories.forEach(g=>{e.selected[g.repoId]=e.allSelected})},e.selectedCount=()=>Object.values(e.selected||{}).filter(Boolean).length,e.selectedRepos=()=>e.repositories.filter(g=>e.selected[g.repoId]),e.bulkRefresh=()=>{let g=e.selectedRepos();g.length&&confirm(`Force refresh ${g.length} repositories?`)&&g.forEach(b=>e.updateRepository(b))},e.bulkRemoveCache=()=>{let g=e.selectedRepos();g.length&&confirm(`Purge cache for ${g.length} repositories?`)&&g.forEach(b=>e.removeCache(b))},e.clearSelection=()=>{e.selected={},e.allSelected=!1},e.exportCsv=()=>{let g=new URLSearchParams(Object.entries(e.query).filter(([,b])=>b!==""&&b!==!1&&b!=null));g.set("format","csv"),g.set("limit","10000"),window.open("/api/admin/repos?"+g.toString(),"_blank")},e.removeCache=g=>{confirm("Remove cached files for "+g.repoId+"?")&&t.delete("/api/admin/repos/"+g.repoId).then(()=>h(),b=>console.error(b))},e.removeRepository=g=>{confirm("Remove repository "+g.repoId+"?")&&t.delete("/api/repo/"+g.repoId+"/").then(()=>h(),b=>console.error(b))},e.updateRepository=g=>{let b=Fe({title:`Refreshing ${g.repoId}...`,date:new Date,body:`The repository ${g.repoId} is going to be refreshed.`});e.toasts.push(b),t.post(`/api/repo/${g.repoId}/refresh`).then(S=>{S.data.status=="ready"?b.title=`${g.repoId} is refreshed.`:b.title=`Refreshing of ${g.repoId}.`},S=>{b.title=`Error during the refresh of ${g.repoId}.`,b.body=S.body})},e.fetchError=null;function h(){e.fetchError=null,t.get("/api/admin/repos",{params:e.query}).then(g=>{e.total=g.data.total,e.totalPage=Math.ceil(g.data.total/e.query.limit),e.repositories=g.data.results,e.statusCounts=g.data.statusCounts||[],e.totalSize=g.data.totalSize||0,e.allSelected=!1},g=>{e.fetchError=g&&g.data&&g.data.error||"Failed to load repositories",console.error(g)})}h();let C=null;e.watch("query",()=>{r.timeout.cancel(C),C=r.timeout(h,500);let{page:g,search:b,...S}=e.query;saveFilterPrefs(u,S),a()},!0),a()},yl=function(e,t,n){let r=ut(),s=Zt();e.Math=Math,e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.users=[],e.total=-1,e.totalPage=0,e.statusCounts=[],e.selected={},e.allSelected=!1;let i=h=>{if(h.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement?.tagName)){h.preventDefault();let C=document.querySelector('.admin-filter-toolbar input[type="search"]');C&&C.focus()}};s(document,"keydown",i),e.on("dispose",()=>document.removeEventListener("keydown",i)),e.clearFilter=h=>{h==="dateRange"?(e.query.dateFrom="",e.query.dateTo=""):e.query[h]="",e.query.page=1},e.chips=[];let a=()=>{let h=[];e.query.role&&h.push({key:"role",label:"Role",value:e.query.role}),e.chips=h};e.statusCountFor=h=>{let C=(e.statusCounts||[]).find(g=>g._id===h);return C?C.count:0},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=h=>{e.query.sort===h?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=h,e.query.direction="desc"),e.query.page=1},e.sortIcon=h=>e.query.sort===h?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let u="admin.users.filterPrefs",m={page:1,limit:25,sort:"username",direction:"asc",search:"",status:"",role:"",dateFrom:"",dateTo:""},k=loadFilterPrefs(u)||{};e.query=Object.assign({},m,k,{page:1,search:""}),e.selectAllOnPage=()=>{e.allSelected=!e.allSelected,e.users.forEach(h=>{e.selected[h.username]=e.allSelected})},e.selectedCount=()=>Object.values(e.selected||{}).filter(Boolean).length,e.selectedUsers=()=>e.users.filter(h=>e.selected[h.username]),e.banUser=h=>{confirm(`Ban user ${h.username}?`)&&t.post(`/api/admin/users/${h.username}/ban`).then(y,C=>console.error(C))},e.activateUser=h=>{t.post(`/api/admin/users/${h.username}/activate`).then(y,C=>console.error(C))},e.bulkBan=()=>{let h=e.selectedUsers();h.length&&confirm(`Ban ${h.length} users?`)&&h.forEach(C=>e.banUser(C))},e.exportCsv=()=>{let h=new URLSearchParams(Object.entries(e.query).filter(([,C])=>C!==""&&C!==!1&&C!=null));h.set("format","csv"),h.set("limit","10000"),window.open("/api/admin/users?"+h.toString(),"_blank")},e.fetchError=null;function y(){e.fetchError=null,t.get("/api/admin/users",{params:e.query}).then(h=>{e.total=h.data.total,e.totalPage=Math.ceil(h.data.total/e.query.limit),e.users=h.data.results,e.statusCounts=h.data.statusCounts||[],e.allSelected=!1},h=>{e.fetchError=h&&h.data&&h.data.error||"Failed to load users",console.error(h)})}y();let E=null;e.watch("query",()=>{r.timeout.cancel(E),E=r.timeout(y,500);let{page:h,search:C,...g}=e.query;saveFilterPrefs(u,g),a()},!0),a()},gl=function(e,t,n,r){let s=ut();e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.userInfo,e.repositories=[],e.search="",e.selected={},e.allSelected=!1;let i="admin.user.filterPrefs",a={filters:{status:{ready:!0,expired:!0,removed:!0,error:!0,preparing:!0}},sort:"anonymizeDate",direction:"desc"},u=loadFilterPrefs(i)||{};e.filters={status:Object.assign({},a.filters.status,u.filters&&u.filters.status||{})},e.query={sort:u.sort||a.sort,direction:u.direction||a.direction},e.orderBy=(e.query.direction==="asc"?"":"-")+e.query.sort,e.sortBy=h=>{e.query.sort===h?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=h,e.query.direction="desc"),e.orderBy=(e.query.direction==="asc"?"":"-")+e.query.sort},e.sortIcon=h=>e.query.sort===h?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"",e.watch("query",()=>{saveFilterPrefs(i,{filters:e.filters,sort:e.query.sort,direction:e.query.direction})},!0),e.watch("filters",()=>{saveFilterPrefs(i,{filters:e.filters,sort:e.query.sort,direction:e.query.direction})},!0),e.statusCountFor=h=>(e.repositories||[]).filter(C=>C.status===h).length,e.repoFiler=h=>e.filters.status[h.status]==!1?!1:!!(e.search.trim().length==0||h.source.fullName.indexOf(e.search)>-1||h.repoId.indexOf(e.search)>-1||h.statusMessage&&h.statusMessage.indexOf(e.search)>-1||h.conference&&h.conference.indexOf(e.search)>-1),e.selectAllOnPage=()=>{e.allSelected=!e.allSelected,(e.filteredRepositories||e.repositories).forEach(h=>{e.selected[h.repoId]=e.allSelected})},e.selectedCount=()=>Object.values(e.selected||{}).filter(Boolean).length,e.selectedRepos=()=>e.repositories.filter(h=>e.selected[h.repoId]),e.bulkRefresh=()=>{let h=e.selectedRepos();h.length&&confirm(`Force refresh ${h.length} repositories?`)&&h.forEach(C=>e.updateRepository(C))},e.bulkRemoveCache=()=>{let h=e.selectedRepos();h.length&&confirm(`Purge cache for ${h.length} repositories?`)&&h.forEach(C=>e.removeCache(C))},e.clearSelection=()=>{e.selected={},e.allSelected=!1},e.exportCsv=()=>{let h=e.filteredRepositories||e.repositories,g=["repoId","status","statusMessage","pageView","anonymizeDate","source.fullName","conference","size.storage"].join(","),b=h.map(T=>[T.repoId,T.status,T.statusMessage||"",T.pageView||0,T.anonymizeDate||"",T.source&&T.source.fullName||"",T.conference||"",T.size&&T.size.storage||0].map(q=>{let M=String(q??"");return/[",\n\r]/.test(M)?'"'+M.replace(/"/g,'""')+'"':M}).join(",")),S=new Blob([g+` -`+b.join(` -`)],{type:"text/csv"}),R=document.createElement("a");R.href=URL.createObjectURL(S),R.download=r.username+"-repositories.csv",R.click()},e.showStatusMessage=h=>{let C=h.statusMessage||"(no message)";window.prompt(`Status message for ${h.repoId} (${h.status}):`,C)},e.fetchGithubInfo=h=>{let C=window.open("","_blank");C&&C.document.write("
Loading GitHub info for "+h.repoId+"...
"),t.get("/api/admin/repos/"+h.repoId+"/github").then(g=>{C&&(C.document.open(),C.document.write('
'+JSON.stringify(g.data,null,2).replace(/[<>]/g,b=>b==="<"?"<":">")+"
"),C.document.close())},g=>{let b=g&&g.data?JSON.stringify(g.data,null,2):String(g);C&&(C.document.body.innerHTML='
'+b+"
")})};function m(h){t.get("/api/admin/users/"+h+"/repos",{}).then(C=>{e.repositories=C.data},C=>{console.error(C)})}function k(h){t.get("/api/admin/users/"+h,{}).then(C=>{e.userInfo=C.data},C=>{console.error(C)})}k(r.username),m(r.username),e.banUser=()=>{confirm(`Ban user ${r.username}?`)&&t.post(`/api/admin/users/${r.username}/ban`).then(()=>k(r.username),h=>console.error(h))},e.activateUser=()=>{t.post(`/api/admin/users/${r.username}/activate`).then(()=>k(r.username),h=>console.error(h))},e.promoteUser=()=>{confirm(`Promote ${r.username} to admin?`)&&t.post(`/api/admin/users/${r.username}/promote`).then(()=>k(r.username),h=>console.error(h))},e.demoteUser=()=>{confirm(`Remove admin privileges from ${r.username}?`)&&t.post(`/api/admin/users/${r.username}/demote`).then(()=>k(r.username),h=>console.error(h))},e.tokens=[],e.tokenForm={name:"",plaintext:null};function y(){t.get("/api/admin/tokens").then(h=>{e.tokens=h.data||[]},h=>{h.status!==401&&h.status!==403&&console.error(h)})}y(),e.createToken=()=>{e.tokenForm.name&&t.post("/api/admin/tokens",{name:e.tokenForm.name}).then(h=>{e.tokenForm.plaintext=h.data.token,e.tokenForm.name="",y()},h=>console.error(h))},e.revokeToken=h=>{confirm(`Revoke token "${h.name}"?`)&&t.delete("/api/admin/tokens/"+h.id).then(()=>y(),C=>console.error(C))},e.removeCache=h=>{confirm("Remove cached files for "+h.repoId+"?")&&t.delete("/api/admin/repos/"+h.repoId).then(()=>m(r.username),C=>console.error(C))},e.removeRepository=h=>{confirm("Remove repository "+h.repoId+"?")&&t.delete("/api/repo/"+h.repoId+"/").then(()=>m(r.username),C=>console.error(C))},e.updateRepository=h=>{let C=Fe({title:`Refreshing ${h.repoId}...`,date:new Date,body:`The repository ${h.repoId} is going to be refreshed.`});e.toasts.push(C),t.post(`/api/repo/${h.repoId}/refresh`).then(g=>{g.data.status=="ready"?C.title=`${h.repoId} is refreshed.`:C.title=`Refreshing of ${h.repoId}.`},g=>{C.title=`Error during the refresh of ${h.repoId}.`,C.body=g.body})},e.getGitHubRepositories=h=>{t.get(`/api/user/${e.userInfo.username}/all_repositories`,{params:{force:"1"}}).then(C=>{e.userInfo.repositories=C.data})};let E=null;e.watch("query",()=>{s.timeout.cancel(E),E=s.timeout(()=>{m(r.username)},500)},!0)},bl=function(e,t,n){let r=ut(),s=Zt();e.Math=Math,e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.conferences=[],e.total=-1,e.totalPage=0,e.statusCounts=[];let i=g=>{if(g.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement?.tagName)){g.preventDefault();let b=document.querySelector('.admin-filter-toolbar input[type="search"]');b&&b.focus()}};s(document,"keydown",i),e.on("dispose",()=>document.removeEventListener("keydown",i)),e.clearFilter=g=>{g==="dateRange"?(e.query.dateFrom="",e.query.dateTo=""):e.query[g]="",e.query.page=1},e.chips=[];let a=()=>{let g=[];(e.query.dateFrom||e.query.dateTo)&&g.push({key:"dateRange",label:"Date",value:(e.query.dateFrom||"\u2026")+" \u2013 "+(e.query.dateTo||"\u2026")}),e.chips=g};e.statusCountFor=g=>{let b=(e.statusCounts||[]).find(S=>S._id===g);return b?b.count:0},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=g=>{e.query.sort===g?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=g,e.query.direction="desc"),e.query.page=1},e.sortIcon=g=>e.query.sort===g?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let u="admin.conferences.filterPrefs",m={page:1,limit:25,sort:"name",direction:"asc",search:"",dateFrom:"",dateTo:"",ready:!1,expired:!1,removed:!1,error:!0,preparing:!0},k=loadFilterPrefs(u)||{};e.query=Object.assign({},m,k,{page:1,search:""});let y=n.search();y.search&&(e.query.search=y.search);let E="admin.conferences.presets";e.presets=JSON.parse(localStorage.getItem(E)||"[]"),e.savePreset=()=>{let g=window.prompt("Preset name:");if(!g)return;let b=Object.assign({},e.query);delete b.page,e.presets=(e.presets||[]).filter(S=>S.name!==g),e.presets.push({name:g,query:b}),localStorage.setItem(E,JSON.stringify(e.presets))},e.applyPreset=g=>{Object.assign(e.query,g.query,{page:1})},e.deletePreset=g=>{e.presets=(e.presets||[]).filter(b=>b.name!==g.name),localStorage.setItem(E,JSON.stringify(e.presets))},e.removeConference=g=>{confirm("Remove conference "+g.conferenceID+"?")&&t.delete("/api/admin/conferences/"+g.conferenceID).then(()=>h(),b=>console.error(b))},e.exportCsv=()=>{let g=new URLSearchParams(Object.entries(e.query).filter(([,b])=>b!==""&&b!==!1&&b!=null));g.set("format","csv"),g.set("limit","10000"),window.open("/api/admin/conferences?"+g.toString(),"_blank")},e.fetchError=null;function h(){e.fetchError=null,t.get("/api/admin/conferences",{params:e.query}).then(g=>{e.total=g.data.total,e.totalPage=Math.ceil(g.data.total/e.query.limit),e.conferences=g.data.results,e.statusCounts=g.data.statusCounts||[]},g=>{e.fetchError=g&&g.data&&g.data.error||"Failed to load conferences",console.error(g)})}h();let C=null;e.watch("query",()=>{r.timeout.cancel(C),C=r.timeout(h,500);let{page:g,search:b,...S}=e.query;saveFilterPrefs(u,S),a()},!0),a()},wl=function(e,t,n,r,s){let i=ut();e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.queueList=[],e.jobs=[],e.selectedQueue="download",e.selectedStats=null,e.range="1h",e.allStates=["active","waiting","delayed","failed","completed"],e.stateFilter={active:!0,waiting:!0,delayed:!0,failed:!0,completed:!0},e.query={search:"",autoRefresh:!0},e.filteredJobs=()=>(e.jobs||[]).filter(b=>e.stateFilter[b._state]),e.jobProgressPct=b=>b&&b.progress&&typeof b.progress=="object"&&typeof b.progress.percent=="number"?Math.max(0,Math.min(100,Math.round(b.progress.percent))):typeof b.progress=="number"?Math.max(0,Math.min(100,Math.round(b.progress))):null,e.jobDuration=b=>{if(!b.processedOn)return"-";let R=(b.finishedOn||Date.now())-b.processedOn;return R<1e3?R+"ms":(R/1e3).toFixed(1)+"s"},e.metricsPoints=[],e.selectQueue=b=>{e.selectedQueue=b,a(),u()},e.setRange=b=>{e.range=b,u()};function a(){let b={queue:e.selectedQueue,search:e.query.search};t.get("/api/admin/queues",{params:b}).then(S=>{e.queueList=S.data.queues||[],e.jobs=S.data.jobs||[],e.selectedStats=e.queueList.find(R=>R.key===e.selectedQueue)||e.queueList[0]||null},S=>console.error(S))}function u(){t.get("/api/admin/queues/metrics",{params:{queue:e.selectedQueue,range:e.range}}).then(b=>{e.metricsPoints=b.data.points||[],s(h,0)},b=>console.error(b))}a(),u();let m=r(()=>{e.query.autoRefresh&&(a(),u())},15e3);e.on("dispose",()=>r.cancel(m)),e.refreshNow=function(){a(),u()};function k(b){let S=b&&b.data&&(b.data.message||b.data.error)||"Request failed";e.actionError=S,s(()=>{e.actionError=null},5e3),console.error(b)}e.actionError=null,e.removeJob=b=>{t.delete(`/api/admin/queue/${e.selectedQueue}/${b.id}`).then(a,k)},e.retryJob=b=>{t.post(`/api/admin/queue/${e.selectedQueue}/${b.id}`).then(a,k)},e.retryFailed=()=>{confirm(`Retry all failed jobs in ${e.selectedQueue}?`)&&t.post(`/api/admin/queue/${e.selectedQueue}/retry-failed`).then(a,b=>console.error(b))},e.drainSelected=()=>{confirm(`Drain the ${e.selectedQueue} queue?`)&&t.post(`/api/admin/queue/${e.selectedQueue}/drain`).then(a,b=>console.error(b))},e.togglePause=()=>{let b=e.selectedStats&&e.selectedStats.paused?"resume":"pause";t.post(`/api/admin/queue/${e.selectedQueue}/${b}`).then(a,S=>console.error(S))},e.emptyQueue=()=>{confirm(`Empty the ${e.selectedQueue} queue? This removes ALL jobs.`)&&t.post(`/api/admin/queue/${e.selectedQueue}/empty`).then(a,b=>console.error(b))},e.pauseAll=()=>{confirm("Pause all queues?")&&t.post("/api/admin/queues/pause-all").then(a,b=>console.error(b))};let y=null;e.watch("query.search",()=>{i.timeout.cancel(y),y=i.timeout(a,350)}),e.expanded={},e.toggleJob=b=>{e.expanded[b.id]=!e.expanded[b.id]},e.humanTime=b=>{if(!b)return"";let S=new Date(b);return S.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})+" "+S.toLocaleDateString([],{month:"short",day:"numeric"})},e.delayCountdown=b=>{if(!b)return"";var S=Math.max(0,Math.ceil((b-Date.now())/1e3));if(S<=0)return"resuming soon";var R=Math.floor(S/60),T=S%60;return"in "+(R>0?R+"m "+T+"s":T+"s")};function E(b){if(b<=0)return{ticks:[0],niceMax:1};let S=Math.pow(10,Math.floor(Math.log10(b))),R=S;b/R<2?R=S/2:b/R>5&&(R=S*2);let T=Math.ceil(b/R)*R,q=[];for(let M=0;M<=T;M+=R)q.push(M);return{ticks:q,niceMax:T}}function h(){var b=document.getElementById("q-throughput-chart");if(!b)return;var S=b.getContext("2d"),R=window.devicePixelRatio||1,T=b.parentElement.getBoundingClientRect(),q=44,M=50,V=20,z=T.width-40,ne=180,ee=z-q-M,_=ne-V;b.width=z*R,b.height=ne*R,b.style.width=z+"px",b.style.height=ne+"px",S.setTransform(R,0,0,R,0,0);var P=document.body.classList.contains("dark-mode"),G="#8A857C",J=P?"rgba(255,255,255,0.06)":"rgba(0,0,0,0.06)",X=P?"#A7B2FF":"#3B4AD6",W=P?"rgba(167,178,255,0.12)":"rgba(59,74,214,0.08)",se=P?"#F08A82":"#B42318",ce=P?"rgba(240,138,130,0.08)":"rgba(180,35,24,0.06)",de=P?"#F5C842":"#B8860B",re=e.metricsPoints||[];if(re.length===0){S.fillStyle=G,S.font="12px monospace",S.textAlign="center",S.fillText("No metrics data yet",z/2,ne/2),C=null;return}var _e=re.map(function(L){return L.completed}),qe=re.map(function(L){return L.failed}),Me=re.map(function(L){return L.avgMs}),Pe=re.length,Se=ee/(Pe-1||1),ze=Math.max(1,Math.max.apply(null,_e),Math.max.apply(null,qe)),Ue=E(ze),ke=Math.max.apply(null,Me),F=ke>0?E(ke):{ticks:[0],niceMax:1},Z=function(L){return _-L/Ue.niceMax*(_-10)},Q=function(L){return _-L/F.niceMax*(_-10)},te=function(L){return q+L*Se};S.textAlign="right",S.textBaseline="middle",S.font="10px monospace",Ue.ticks.forEach(function(L){var H=Z(L);S.strokeStyle=J,S.lineWidth=1,S.beginPath(),S.moveTo(q,H),S.lineTo(z-M,H),S.stroke(),S.fillStyle=G,S.fillText(L>=1e3?(L/1e3).toFixed(1)+"k":String(L),q-6,H)}),ke>0&&(S.textAlign="left",F.ticks.forEach(function(L){var H=Q(L);S.fillStyle=de,S.fillText(L>=1e3?(L/1e3).toFixed(1)+"s":L+"ms",z-M+6,H)}));var ye=Date.now(),Ee=Math.min(6,Pe);S.textAlign="center",S.textBaseline="top";for(var p=0;p0&&(S.beginPath(),Me.forEach(function(L,H){var Y=te(H),B=Q(L);if(H===0)S.moveTo(Y,B);else{var le=(te(H-1)+Y)/2;S.bezierCurveTo(le,Q(Me[H-1]),le,B,Y,B)}}),S.strokeStyle=de,S.lineWidth=1,S.setLineDash([4,3]),S.stroke(),S.setLineDash([])),C={pts:re,maxLen:Pe,marginLeft:q,step:Se,totalW:z,toX:te}}var C=null;function g(){var b=document.getElementById("q-throughput-chart");if(!(!b||b._tipBound)){b._tipBound=!0;var S=document.getElementById("q-chart-tooltip"),R=document.getElementById("q-chart-crosshair");b.addEventListener("mousemove",function(T){if(!(!C||!S||!R)){var q=C,M=b.getBoundingClientRect(),V=T.clientX-M.left,z=Math.round((V-q.marginLeft)/q.step);if(z<0||z>=q.maxLen){S.style.display="none",R.style.display="none";return}var ne=q.pts[z],ee=Date.now(),_=Math.round((ee-ne.ts)/6e4),P;if(_<=0)P="now";else if(_<60)P=_+"m ago";else if(_<1440){var G=Math.floor(_/60),J=_%60;P=G+"h"+(J?" "+J+"m":"")+" ago"}else P=Math.round(_/1440)+"d ago";var X='
'+P+'
● completed: '+ne.completed+'/min
● failed: '+ne.failed+"/min
";if(ne.avgMs>0){var W=ne.avgMs>=1e3?(ne.avgMs/1e3).toFixed(1)+"s":ne.avgMs+"ms";X+='
● avg time: '+W+"
"}S.innerHTML=X;var se=q.toX(z),ce=S.offsetWidth,de=se+10;de+ce>q.totalW&&(de=se-ce-10),S.style.display="block",S.style.left=de+"px",S.style.top="8px",R.style.display="block",R.style.left=se+"px"}}),b.addEventListener("mouseleave",function(){S&&(S.style.display="none"),R&&(R.style.display="none")})}}e.watch("metricsPoints",function(){s(g,50)})},kl=function(e,t,n,r){let s=ut();e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.entries=[],e.visible=[],e.available=!0,e.cap=1e3,e.total=0,e.pageSize=250,e.expanded={},e.detailTab={},e.copyHint="",e.parsedFilterCount=0,e.stats={last24h:0,prev24h:0,delta:0,severity:{error:0,warn:0,info:0},unique:{error:0,warn:0,info:0},buckets:[],dropped:0},e.query={search:"",bucket:"",sort:"recent",group:"code",autoRefresh:!0},e.relTime=R=>{if(!R)return"";let T=new Date(R).getTime();if(isNaN(T))return R;let q=Math.max(0,Date.now()-T),M=Math.floor(q/1e3);if(M<5)return"just now";if(M<60)return`${M}s ago`;let V=Math.floor(M/60);if(V<60)return`${V}m ago`;let z=Math.floor(V/60);if(z<24)return`${z}h ago`;let ne=Math.floor(z/24);return ne<7?`${ne}d ago`:new Date(R).toLocaleDateString()},e.absTime=R=>{if(!R)return"";let T=new Date(R);return isNaN(T.getTime())?R:T.toLocaleString()},e.absTimeShort=R=>{if(!R)return"";let T=new Date(R);return isNaN(T.getTime())?R:T.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})};let i=/^[a-zA-Z][a-zA-Z0-9]*(?:_[a-zA-Z0-9]+)+$/;function a(R,T){let q=R&&(R.httpStatus||R.status)||null;if(typeof q=="number"){if(q>=500)return"error";if(q===401||q===403||q===404)return"info";if(q>=400)return"warn"}return T==="error"?"error":T==="warn"?"warn":"info"}function u(R){let T=(R.raw||[]).find(z=>z&&typeof z=="object"&&!Array.isArray(z));if(T){T.message&&i.test(T.message)?(R.displayMessage=T.message,R.displayContext=R.message):T.code&&i.test(String(T.code))?(R.displayMessage=String(T.code),R.displayContext=R.message):T.name&&T.name!=="AnonymousError"&&T.name!=="Error"?(R.displayMessage=T.name,R.displayContext=T.message||R.message):R.displayMessage=R.message,R._status=T.httpStatus||T.status||null,R._url=T.url||null,R._method=T.method||null,R._repoId=T.repoId||T.detail||null,R._detail=T.detail&&T.detail!==R._repoId?T.detail:null;let z=typeof T.stack=="string"?T.stack:null;for(var q=[T.cause,T.err].filter(Boolean),M=0;!z&&M{_==null||_===""||q.push([ee,_])};M("name",T&&T.name),M("code",R.displayMessage||T&&T.message),R._bucket&&M("kind",R._bucket),M("httpStatus",T&&T.httpStatus),T&&T.status&&!T.httpStatus&&M("status",T.status),M("module",R.module);let V=T&&T.detail;if(typeof V=="string"){let ee=V.trim();if(ee[0]==="{"||ee[0]==="[")try{V=JSON.parse(V)}catch{}}if(M("detail",V),M("repoId",T&&T.repoId),M("filePath",T&&T.filePath),M("upstreamStatus",T&&T.upstreamStatus),M("upstreamBody",T&&T.upstreamBody),M("url",R._url),M("err",T&&T.err),M("cause",T&&!T.err&&T.cause),M("ts",R.ts),!q.length)return JSON.stringify(R,null,2);let z=q.reduce((ee,_)=>Math.max(ee,_[0].length),0),ne=["{"];return q.forEach(([ee,_],P)=>{let J=` ${`"${ee}":`.padEnd(z+3," ")} `,X=Pde===0?ce:se+ce).join(` -`)}else typeof _=="number"||typeof _=="boolean"?W=String(_):W=JSON.stringify(_);ne.push(`${J}${W}${X}`)}),ne.push("}"),ne.join(` -`)}function k(R){let T=[],q="",M=/(\w+):(>=|<=|!=|>|<|=)?([^\s]+)/g,V=0,z;for(;z=M.exec(R);)q+=R.slice(V,z.index),V=M.lastIndex,T.push({key:z[1],op:z[2]||"=",val:z[3]});return q+=R.slice(V),{filters:T,free:q.trim().toLowerCase()}}function y(R,T){for(let q of T.filters){let M=(z,ne,ee)=>{let _=parseFloat(z),P=parseFloat(ne);return ee==="="?String(z)===String(ne):ee==="!="?String(z)!==String(ne):ee===">="?_>=P:ee==="<="?_<=P:ee===">"?_>P:ee==="<"?_T&&V._bucket!==T?!1:y(V,R)),M=e.query.group;if(M){let V=ee=>M==="module"?ee.module:ee.displayMessage||ee.message||"_",z=new Map;for(let ee of q){let _=V(ee);if(z.has(_)){let P=z.get(_);P.count++,P._related.push(ee),new Date(ee.ts)>new Date(P.ts)&&(P.ts=ee.ts,P._url=ee._url,P._status=ee._status),new Date(ee.ts)new Date(_.ts).getTime()>=ne).length;q=Array.from(z.values())}else q=q.map((V,z)=>(V._key="row:"+z+":"+V.ts,V._related=[V],V._firstSeen=V.ts,V._lastHourCount=0,V.count=1,V));e.query.sort==="count"?q.sort((V,z)=>z.count-V.count||new Date(z.ts)-new Date(V.ts)):q.sort((V,z)=>new Date(z.ts)-new Date(V.ts)),e.visible=q}function h(R){let T=R?e.entries.length:0,q=R?e.pageSize:Math.max(e.pageSize,e.entries.length||e.pageSize);t.get("/api/admin/errors",{params:{offset:T,limit:q}}).then(M=>{let V=(M.data.entries||[]).map(u);e.entries=R?e.entries.concat(V):V,e.available=!!M.data.available,e.cap=M.data.max||e.cap,e.total=M.data.total||e.entries.length,E()},M=>console.error(M))}e.loadMore=()=>h(!0),e.canLoadMore=()=>e.entries.length{let T=R.data||{},q=T.prev24h?Math.round((T.last24h-T.prev24h)/T.prev24h*100):0;e.stats={last24h:T.last24h||0,prev24h:T.prev24h||0,delta:q,severity:T.severity||{error:0,warn:0,info:0},unique:T.unique||{error:0,warn:0,info:0},buckets:T.buckets||[],dropped:T.dropped||0}},R=>console.error(R))}function g(){h(),C()}e.barPx=(R,T)=>{let q=e.stats.buckets||[],M=0;for(let ee of q)M=Math.max(M,(ee.error||0)+(ee.warn||0)+(ee.info||0));if(!M)return 0;let V=(R.error||0)+(R.warn||0)+(R.info||0);if(!V)return 0;let z=Math.round(V/M*60),ne=R[T]||0;return Math.round(ne/V*z)},e.bucketTitle=R=>`${new Date(R.hour).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})} \xB7 ${R.error||0} err \xB7 ${R.warn||0} warn \xB7 ${R.info||0} info`,e.toggle=R=>{e.expanded[R._key]=!e.expanded[R._key]},e.setBucket=R=>{e.query.bucket=R},e.refreshNow=g,e.clearAll=()=>{confirm("Clear all captured errors?")&&t.delete("/api/admin/errors").then(g,R=>console.error(R))},e.exportCsv=()=>{let R=["ts","level","module","displayMessage","_status","_url","_repoId"],T=[R.join(",")];for(let z of e.visible)T.push(R.map(ne=>{let ee=z[ne]==null?"":String(z[ne]);return/[",\n]/.test(ee)?`"${ee.replace(/"/g,'""')}"`:ee}).join(","));let q=new Blob([T.join(` -`)],{type:"text/csv;charset=utf-8"}),M=URL.createObjectURL(q),V=document.createElement("a");V.href=M,V.download=`errors-${new Date().toISOString().slice(0,19)}.csv`,document.body.appendChild(V),V.click(),document.body.removeChild(V),URL.revokeObjectURL(M)};function b(R){e.copyHint=`${R} copied`,s.timeout(()=>{e.copyHint=""},1500)}e.copyJson=R=>{navigator.clipboard.writeText(R._detailJson).then(()=>b("JSON"))},e.copyCurl=R=>{if(!R._url)return;let q=`curl -X ${R._method||"GET"} '${window.location.origin}${R._url}'`;navigator.clipboard.writeText(q).then(()=>b("curl"))},g();let S=r(()=>{e.query.autoRefresh&&g()},15e3);e.on("dispose",()=>r.cancel(S)),e.watch("query.search",E),e.watch("query.bucket",E),e.watch("query.sort",E),e.watch("query.group",E)},El=function(e,t,n,r){if(e.Math=Math,e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null){n.url("/");return}e.data=null,e.loading=!0,e.error=null,e.performance=null,e.performanceMinutes=15,e.performanceTab="routes",e.performanceError=null,e.formatMs=function(g){return g==null?"":g<1e3?g+" ms":+(g/1e3).toFixed(1)+" s"},e.latencyBound=function(g,b){return g.count?g[b]==null?"> 60 s":"\u2264 "+e.formatMs(g[b]):"No samples"},e.firstByteBound=function(g){return e.latencyBound({count:g.firstByteCount,p95UpperMs:g.firstByteP95UpperMs},"p95UpperMs")},e.sampleAge=function(g){return Math.max(0,Math.round((Date.now()-g.sampledAt)/1e3))},e.peakRss=function(g){return(e.performance.runtimeSeries||[]).filter(function(b){return b.instance===g.instance}).reduce(function(b,S){return Math.max(b,S.rss)},g.memory.rss)},e.performanceWarning=function(g){return e.sampleAge(g)>45||g.droppedBatches||g.droppedMetrics||g.sockets?.closeWait>0||g.eventLoop.p95Ms>100||g.memoryLimitBytes&&g.memory.rss>g.memoryLimitBytes*.8};var s=!1;e.loadPerformance=function(){var g=e.performanceMinutes;e.performance?.windowMinutes&&e.performance.windowMinutes!==g&&(e.performance=null),!s&&(s=!0,t.get("/api/admin/performance",{params:{minutes:g}}).then(function(b){g===e.performanceMinutes&&(e.performance=b.data,e.performanceError=b.data.available?null:"Performance monitoring is unavailable. Request history may be incomplete.")},function(){g===e.performanceMinutes&&(e.performanceError="Could not refresh performance monitoring. Displayed samples may be stale.")}).finally(function(){s=!1,g!==e.performanceMinutes&&e.loadPerformance()}))};function i(g){if(g==null)return"\u2014";for(var b=["B","KB","MB","GB","TB"],S=0,R=g;R>=1024&&S0?1:0)+" "+b[S]}e.humanBytes=i;function a(g){if(!g)return"\u2014";var b=Math.floor(g/86400),S=Math.floor(g%86400/3600),R=Math.floor(g%3600/60);return b>0?b+"d "+(S<10?"0":"")+S+"h":S>0?S+"h "+(R<10?"0":"")+R+"m":R+"m"}e.humanDuration=a;function u(g){return g==null?"\u2014":g>=1e6?(g/1e6).toFixed(1)+"M":g>=1e3?(g/1e3).toFixed(1)+"K":String(g)}e.humanNum=u,e.queueTotal=function(g){return g?(g.waiting||0)+(g.active||0)+(g.delayed||0)+(g.failed||0):0},e.statusCount=function(g){if(!e.data||!e.data.repos)return 0;for(var b=e.data.repos.statusBreakdown||[],S=0;Sy[S])&&(y[S]=b[S]),(E[S]==null||b[S]wr(e,t)},{path:"/connections",template:"partials/connections.htm",title:"GitHub connections \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>ml(e,t.http)},{path:"/signin",template:"partials/signin.htm",title:"Sign in \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>hl(e,t.http)},{path:"/",template:"partials/home.htm",title:"Anonymous GitHub \u2013 Share the code, not the author",preserveExplorer:!1,setup:(e,t)=>al(e,t.http,t.location,t.window,t.timeout)},{path:"/dashboard",template:"partials/dashboard.htm",title:"Your anonymizations \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>ll(e,t.http,t.location,t.promises,t.window,t.quotaService)},{path:"/pr-dashboard",redirect:"/dashboard"},{path:"/anonymize/:repoId?",template:"partials/anonymize.htm",title:"New anonymization \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>as(e,t.http,t.html,t.params,t.location,t.translate,t.timeout)},{path:"/pull-request-anonymize/:pullRequestId?",template:"partials/anonymize.htm",title:"Anonymize a pull request \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>as(e,t.http,t.html,t.params,t.location,t.translate,t.timeout)},{path:"/gist-anonymize/:gistId?",template:"partials/anonymize.htm",title:"Anonymize a gist \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>as(e,t.http,t.html,t.params,t.location,t.translate,t.timeout)},{path:"/status/:repoId",template:"partials/status.htm",title:"Repository status \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>dl(e,t.http,t.params)},{path:"/conferences",template:"partials/conferences.htm",title:"Your conferences \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>pl(e,t.http,t.location)},{path:"/conference/new",template:"partials/newConference.htm",title:"New conference \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>fr(e,t.http,t.location,t.params)},{path:"/conference/:conferenceId/edit",template:"partials/newConference.htm",title:"Edit conference \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>fr(e,t.http,t.location,t.params)},{path:"/conference/:conferenceId",template:"partials/conference.htm",title:"Conference \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>fl(e,t.http,t.location,t.params)},{path:"/faq",template:"partials/faq.htm",title:"FAQ \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>sl(e,t.http)},{path:"/profile",template:"partials/profile.htm",title:"Your settings \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>rl(e,t.http,t.translate,t.timeout,t.quotaService)},{path:"/claim",template:"partials/claim.htm",title:"Claim an anonymization \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>il(e,t.http,t.location)},{path:"/pr/:pullRequestId/:path(.*)*",template:"partials/pullRequest.htm",title:"Anonymous pull request \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>ul(e,t.http,t.location,t.params,t.html)},{path:"/gist/:gistId/:path(.*)*",template:"partials/gist.htm",title:"Anonymous gist \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>cl(e,t.http,t.location,t.params,t.html)},{path:"/r/:repoId/:path(.*)*",template:"partials/explorer.htm",title:"Anonymous repository \u2013 Anonymous GitHub",preserveExplorer:!0,setup:(e,t)=>pr(e,t.http,t.location,t.params,t.html,t.promises)},{path:"/repository/:repoId/:path(.*)*",template:"partials/explorer.htm",title:"Anonymous repository \u2013 Anonymous GitHub",preserveExplorer:!0,setup:(e,t)=>pr(e,t.http,t.location,t.params,t.html,t.promises)},{path:"/admin/",template:"partials/admin/overview.htm",title:"Admin \xB7 Overview \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>El(e,t.http,t.location,t.interval)},{path:"/admin/repositories",template:"partials/admin/repositories.htm",title:"Admin \xB7 Repositories \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>vl(e,t.http,t.location)},{path:"/admin/users",template:"partials/admin/users.htm",title:"Admin \xB7 Users \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>yl(e,t.http,t.location)},{path:"/admin/users/:username",template:"partials/admin/user.htm",title:"Admin \xB7 User details \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>gl(e,t.http,t.location,t.params)},{path:"/admin/conferences",template:"partials/admin/conferences.htm",title:"Admin \xB7 Conferences \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>bl(e,t.http,t.location)},{path:"/admin/queues",template:"partials/admin/queues.htm",title:"Admin \xB7 Queues \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>wl(e,t.http,t.location,t.interval,t.timeout)},{path:"/admin/errors",template:"partials/admin/errors.htm",title:"Admin \xB7 Errors \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>kl(e,t.http,t.location,t.interval)},{path:"/404",template:"partials/404.htm",title:"Page not found \u2013 Anonymous GitHub",preserveExplorer:!1,setup:()=>{}},{path:"/:pathMatch(.*)*",template:"partials/404.htm",title:"Page not found \u2013 Anonymous GitHub",setup:()=>{}}];var Tp={class:"container py-4",style:{"max-width":"48rem","overflow-wrap":"anywhere"}},Ap={key:0},Op={key:1,role:"alert"},Ip={key:2,role:"status"},Pp={key:0},Vp={key:1},qp=["disabled"],Mp=["disabled"],Up=["disabled"],$p={key:5,class:"mt-4","aria-labelledby":"review-policy-title"},Lp={id:"review-policy-title"},Fp={key:0,role:"alert"},zp=["disabled"],Hp=["disabled"],Bp=["disabled"],jp={key:6,role:"status"};function _l(e,t){return l(),d("section",Tp,[t[12]||(t[12]=o("a",{href:"/"},"Anonymous GitHub",-1)),t[13]||(t[13]=o("h1",{class:"mt-3"},"Approve artifact access",-1)),t[14]||(t[14]=o("p",null,"This records your approval as the repository owner or an authorized coauthor.",-1)),e.user?.username?f("v-if",!0):(l(),d("p",Ap,[...t[6]||(t[6]=[w("Sign in first, then reopen the artifact link from your submission. ",-1),o("a",{href:"/signin"},"Sign in",-1)])])),e.error?(l(),d("p",Op,c(e.error),1)):f("v-if",!0),e.saved?(l(),d("p",Ip,[t[7]||(t[7]=w("Consent recorded. ",-1)),e.handoffEnabled?(l(),d("span",Pp,"Continue to review to finish linking.")):(l(),d("span",Vp,"Artifact linking is not complete. Return to your submission to check its status."))])):f("v-if",!0),e.saved&&e.handoffEnabled?(l(),d("button",{key:3,class:"btn btn-primary",type:"button",onClick:t[0]||(t[0]=(...n)=>e.continueReview&&e.continueReview(...n)),disabled:e.busy},"Continue to review",8,qp)):f("v-if",!0),e.user?.username&&!e.saved?(l(),d("form",{key:4,onSubmit:t[2]||(t[2]=ie((...n)=>e.loadPreview&&e.loadPreview(...n),["prevent"]))},[t[8]||(t[8]=o("label",{for:"review-repository"},"Anonymous repository ID",-1)),N(o("input",{id:"review-repository",class:"form-control","onUpdate:modelValue":t[1]||(t[1]=n=>e.repositoryId=n),maxlength:"128",autocomplete:"off",disabled:e.busy||e.uncertain,"aria-describedby":"review-repository-help"},null,8,Mp),[[zt,e.repositoryId]]),t[9]||(t[9]=o("p",{id:"review-repository-help"},"Use the ID after /r/ in the anonymous repository URL.",-1)),o("button",{type:"submit",class:"btn btn-primary",disabled:e.busy||e.uncertain},"Preview access and retention",8,Up)],32)):f("v-if",!0),e.preview&&!e.saved?(l(),d("section",$p,[o("h2",Lp,c(e.preview.repositoryName),1),o("p",null,"Access: "+c(e.preview.policy.access==="anonymous-link"?"Anyone with the anonymous link":"Restricted review access")+".",1),o("p",null,"Retain until "+c(e.preview.policy.retainUntil)+". Policy version "+c(e.preview.policy.version)+".",1),e.expired?(l(),d("p",Fp,"This preview expired. Open a new artifact link from your submission.")):f("v-if",!0),o("div",null,[o("label",null,[N(o("input",{type:"checkbox","onUpdate:modelValue":t[3]||(t[3]=n=>e.acceptAccess=n),disabled:e.busy||e.uncertain||e.expired},null,8,zp),[[Xs,e.acceptAccess]]),t[10]||(t[10]=w(" I approve the access policy above.",-1))])]),o("div",null,[o("label",null,[N(o("input",{type:"checkbox","onUpdate:modelValue":t[4]||(t[4]=n=>e.acceptRetention=n),disabled:e.busy||e.uncertain||e.expired},null,8,Hp),[[Xs,e.acceptRetention]]),t[11]||(t[11]=w(" I approve retention until the date above.",-1))])]),o("button",{class:"btn btn-primary",type:"button",onClick:t[5]||(t[5]=(...n)=>e.confirmConsent&&e.confirmConsent(...n)),disabled:e.busy||e.expired||!e.acceptAccess||!e.acceptRetention},c(e.uncertain?"Retry confirmation":"Confirm consent"),9,Bp)])):f("v-if",!0),e.busy?(l(),d("p",jp,"Waiting for the server\u2026")):f("v-if",!0)])}var Gp={class:"container paper-page connections-page"},Wp={key:0,class:"paper-inline-alert paper-inline-alert-error",role:"alert"},Kp={key:1,role:"status"},Yp=["disabled"],Jp={key:3},Qp={key:0,class:"connection-resources"},Xp=["disabled"],Zp=["disabled"],xp={key:0,role:"status"},ef={class:"connections-grid"},tf={key:0},of={class:"connection-title"},nf={key:0,class:"paper-inline-alert paper-inline-alert-error",role:"alert"},sf={class:"connection-actions"},rf={key:0,class:"btn btn-ink",target:"_self",href:"/github/app/install"},af={key:1,class:"connection-installations"},lf={key:0},df=["href"],uf={class:"sr-only"},cf=["disabled"],pf={class:"connection-title"},ff={key:0,target:"_self",href:"/github/login",class:"btn btn-outline-ink"},mf={key:1,class:"connection-revoke"},hf={key:0},vf=["disabled"],yf={class:"connection-resources"},gf={class:"connection-title"},bf={class:"connection-count"},wf={key:0,class:"connection-empty"},kf={class:"connection-resource-name"},Ef={key:0,class:"connection-resource-actions"},Cf=["disabled","onClick"],_f=["disabled","onClick"],Sf={key:1,class:"connection-help",role:"status"},Nf=["disabled","onClick"];function Sl(e,t){return l(),d("div",Gp,[t[25]||(t[25]=ue('
My work / GitHub connections

GitHub connections

Manage how GitHub shares your code. Your anonymizations and URLs stay the same.

',2)),e.connectionError?(l(),d("p",Wp,c(e.connectionError),1)):f("v-if",!0),!e.connections&&!e.connectionError?(l(),d("p",Kp,"Loading your connections\u2026")):f("v-if",!0),!e.connections&&e.connectionError?(l(),d("button",{key:2,class:"btn btn-outline-ink",disabled:e.busy,onClick:t[0]||(t[0]=n=>e.loadConnections())},"Try again",8,Yp)):f("v-if",!0),e.connections?(l(),d("div",Jp,[e.connections.emailNotificationsEnabled?(l(),d("section",Qp,[t[6]||(t[6]=o("h2",null,"Email alerts",-1)),t[7]||(t[7]=o("p",null,"We will email you if your GitHub connection stops working or a repository becomes inaccessible. Your address is never shown on anonymous pages.",-1)),o("form",{onSubmit:t[2]||(t[2]=ie(n=>e.saveNotificationEmail(),["prevent"]))},[t[5]||(t[5]=o("label",{for:"notification-email"},"Email address",-1)),N(o("input",{id:"notification-email",class:"form-control",type:"email",autocomplete:"email",maxlength:"254",required:"","onUpdate:modelValue":t[1]||(t[1]=n=>e.notificationEmail=n),disabled:e.busy},null,8,Xp),[[zt,e.notificationEmail]]),o("button",{class:"btn btn-ink mt-2",type:"submit",disabled:e.busy},"Save email address",8,Zp),e.emailSaved?(l(),d("p",xp,"Email address saved.")):f("v-if",!0)],32)])):f("v-if",!0),o("div",ef,[e.connections.appEnabled?(l(),d("section",tf,[t[13]||(t[13]=o("div",{class:"connection-top"},[o("i",{class:"fab fa-github","aria-hidden":"true"}),o("span",{class:"connection-badge"},"Recommended")],-1)),o("div",of,[t[8]||(t[8]=o("h2",null,"GitHub App",-1)),o("span",{class:A(["connection-status",{"is-connected":e.connections.appConnected&&!e.connections.appError}])},c(e.connections.appError?"Needs attention":e.connections.appConnected?"Connected":"Not connected"),3)]),t[14]||(t[14]=o("p",null,"Read-only access to gists and the repositories you choose.",-1)),e.connections.appError?(l(),d("p",nf,c(e.connections.appError)+". Reconnect to restore access.",1)):f("v-if",!0),o("div",sf,[e.connections.appConnected&&!e.connections.appError?(l(),d("a",rf,[...t[9]||(t[9]=[w("Manage repository access ",-1),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-external-link"})],-1)])])):f("v-if",!0),o("a",{class:A(e.connections.appConnected&&!e.connections.appError?"connection-link":"btn btn-ink"),target:"_self",href:"/github/app/login"},c(e.connections.appConnected?"Reconnect account":"Connect GitHub account"),3)]),t[15]||(t[15]=o("p",{class:"connection-help"},"Choose repositories on GitHub. Organization access may need an administrator's approval.",-1)),e.connections.installations?.length?(l(),d("ul",af,[(l(!0),d(K,null,oe(e.connections.installations,n=>(l(),d("li",{key:n.id},[o("div",null,[o("strong",null,c(n.account),1),n.suspended?(l(),d("span",lf," \xB7 Suspended")):f("v-if",!0)]),o("a",{target:"_self",href:"/github/app/install?installationId="+n.id},[t[10]||(t[10]=w("Manage access ",-1)),o("span",uf,"for "+c(n.account),1),t[11]||(t[11]=w(" \u2192",-1))],8,df)]))),128))])):f("v-if",!0),o("button",{class:"connection-link",disabled:e.busy,onClick:t[3]||(t[3]=n=>e.loadConnections())},[...t[12]||(t[12]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),w(" Refresh access",-1)])],8,cf)])):f("v-if",!0),o("section",null,[t[18]||(t[18]=o("div",{class:"connection-top"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-key"})]),o("span",{class:"connection-badge connection-badge-muted"},"Legacy")],-1)),o("div",pf,[t[16]||(t[16]=o("h2",null,"GitHub OAuth",-1)),o("span",{class:A(["connection-status",{"is-connected":e.connections.oauthConnected}])},c(e.connections.oauthConnected?"Connected":"Not connected"),3)]),t[19]||(t[19]=o("p",null,"For existing OAuth anonymizations.",-1)),t[20]||(t[20]=o("p",{class:"connection-help"},"This connection uses GitHub's broader repository permissions. Existing work keeps using it until you switch below.",-1)),e.connections.oauthEnabled?(l(),d("a",ff,c(e.connections.oauthConnected?"Reconnect OAuth":"Connect legacy OAuth"),1)):f("v-if",!0),e.connections.oauthConnected?(l(),d("div",mf,[e.connections.gistCount?(l(),d("p",hf,c(e.connections.gistCount)+" gist(s) use your GitHub App connection when available.",1)):f("v-if",!0),t[17]||(t[17]=o("p",null,"Switch all dependent repositories before revoking access. Gists can use your GitHub App connection.",-1)),e.connections.appConnected?(l(),d("button",{key:1,class:"connection-link connection-danger",disabled:e.busy||e.connections.resources.some(n=>n.connection==="oauth"),onClick:t[4]||(t[4]=n=>e.disconnectOAuth())},"Revoke OAuth access",8,vf)):f("v-if",!0)])):f("v-if",!0)])]),o("section",yf,[o("div",gf,[t[21]||(t[21]=o("h2",null,"Repository connections",-1)),o("span",bf,c(e.connections.resources?.length||0)+" resources",1)]),t[23]||(t[23]=o("p",null,"Check access, then switch each resource to the GitHub App. After reinstalling the App, reconnect existing resources here to keep their anonymous URLs and published snapshots.",-1)),e.connections.resources?.length?f("v-if",!0):(l(),d("div",wf,[...t[22]||(t[22]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1),o("div",null,[o("h3",null,"No repository connections yet"),o("p",null,"Your repositories and pull requests will appear here once you anonymize them.")],-1),o("a",{class:"connection-link",href:"/anonymize"},"New anonymization \u2192",-1)])])),(l(!0),d(K,null,oe(e.connections.resources,n=>(l(),d("div",{class:"connection-resource",key:n.type+n.id},[o("div",kf,[o("strong",null,c(n.name||n.id),1),o("small",null,c(n.type)+" \xB7 "+c(n.id),1)]),o("span",{class:A(["connection-badge",{"connection-badge-muted":n.connection==="oauth"}])},c(n.connection==="github-app"?"Read-only App":"Legacy OAuth"),3),!["archived","removed","preparing","queue","removing","expiring"].includes(n.status)&&(n.status!=="download"||n.type==="pull-request"&&(!n.statusDate||new Date(n.statusDate).getTime()<=Date.now()-3e5))&&e.connections.appEnabled&&e.connections.appConnected?(l(),d("div",Ef,[o("button",{class:"btn btn-outline-ink",disabled:e.busy,onClick:r=>e.changeConnection(n,"github-app",!0)},"Check read-only access",8,Cf),n.eligible?(l(),d("button",{key:0,class:"btn btn-ink",disabled:e.busy,onClick:r=>e.changeConnection(n,"github-app",!1)},c(n.connection==="github-app"?"Reconnect read-only access":"Switch to read-only access"),9,_f)):f("v-if",!0),n.eligible===!1?(l(),d("span",Sf,"Access unavailable. Allow this repository on GitHub, then check again.")):f("v-if",!0)])):f("v-if",!0),!["archived","removed","preparing","queue","removing","expiring"].includes(n.status)&&(n.status!=="download"||n.type==="pull-request"&&(!n.statusDate||new Date(n.statusDate).getTime()<=Date.now()-3e5))&&n.connection==="github-app"&&e.connections.oauthConnected?(l(),d("button",{key:1,class:"connection-link",disabled:e.busy,onClick:r=>e.changeConnection(n,"oauth",!1)},"Use OAuth",8,Nf)):f("v-if",!0)]))),128)),t[24]||(t[24]=o("p",{class:"connection-footnote"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})]),w(" Removing access stops new fetches from GitHub. Published content keeps its current expiration and removal settings.")],-1))])])):f("v-if",!0)])}var Df={class:"container paper-page auth-page"},Rf={class:"auth-layout"},Tf={class:"auth-options"},Af={key:0},Of={key:0,class:"btn btn-ink auth-continue",target:"_self",href:"/github/login?recover=1"},If={key:1},Pf={key:1},Vf={key:2,class:"auth-legacy"},qf={key:3,role:"status"};function Nl(e,t){return l(),d("div",Df,[t[5]||(t[5]=o("a",{class:"auth-back",href:"/"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-arrow-left"})]),w(" Anonymous GitHub")],-1)),o("div",Rf,[t[4]||(t[4]=ue('
Your research, ready for review

Your code.
Your identity,
protected.
Sign in to GitHub

Sign in to create and manage your anonymizations.

',1)),o("div",Tf,[e.accountRecovery?(l(),d("section",Af,[t[0]||(t[0]=o("h2",null,"Verify your existing account",-1)),t[1]||(t[1]=o("p",null,"We found an existing account. Verify it with your previous GitHub connection to keep your anonymizations. Future sign-ins will use the GitHub App.",-1)),e.site_options?.GITHUB_OAUTH_ENABLED?(l(),d("a",Of,"Verify with previous GitHub connection")):(l(),d("p",If,"Account verification is currently unavailable. Please try again later."))])):f("v-if",!0),e.site_options?.GITHUB_APP_ENABLED&&!e.accountRecovery?(l(),d("section",Pf,[...t[2]||(t[2]=[ue('
Read-only access

Continue with GitHub

Connect through the GitHub App with read-only repository access.

  • You choose which repositories to share
  • No permission to write to your code
Sign in with GitHub Your existing anonymizations and connections stay with your account.',6)])])):f("v-if",!0),!e.site_options?.GITHUB_APP_ENABLED&&e.site_options?.GITHUB_OAUTH_ENABLED&&!e.accountRecovery?(l(),d("section",Vf,[...t[3]||(t[3]=[o("div",{class:"connection-title"},[o("h2",null,"Continue with GitHub")],-1),o("p",null,"Sign in to access your account. GitHub OAuth includes write access to private repositories.",-1),o("a",{class:"connection-link",target:"_self",href:"/github/login"},[w("Sign in with GitHub "),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-arrow-right"})])],-1)])])):f("v-if",!0),e.site_options&&!e.site_options.GITHUB_APP_ENABLED&&!e.site_options.GITHUB_OAUTH_ENABLED?(l(),d("p",qf,"GitHub sign-in is currently unavailable. Please try again later.")):f("v-if",!0)])])])}var Mf={class:"paper-empty"};function Dl(e,t){return l(),d("div",Mf,[...t[0]||(t[0]=[ue('
Error \xB7 404

This link
isn\u2019t here.

The anonymous mirror you\u2019re looking for has expired, been removed by its owner, or never existed. If you received this URL from an author, ask them to re-issue it.

',1)])])}var Uf={class:"container paper-page admin-page"},$f={class:"admin-summary"},Lf={class:"summary-total"},Ff=["aria-pressed"],zf={class:"count"},Hf=["aria-pressed"],Bf={class:"count"},jf=["aria-pressed"],Gf={class:"count"},Wf=["aria-pressed"],Kf={class:"count"},Yf=["aria-pressed"],Jf={class:"count"},Qf={key:0,class:"alert alert-danger",style:{margin:"8px 0"}},Xf={class:"w-100 admin-filter-toolbar","aria-label":"Conferences","accept-charset":"UTF-8"},Zf={class:"admin-filter-row"},xf={class:"search-wrap"},em={type:"search",class:"form-control",placeholder:"Search conferences\u2026",autocomplete:"off"},tm={key:0,class:"admin-search-hint"},om={class:"admin-filter-inline","aria-label":"Pagination"},nm=["disabled"],sm={style:{"font-family":"var(--font-mono)","font-size":"12px",color:"var(--ink-muted)"}},rm=["disabled"],im={key:0,class:"admin-filter-row"},am={class:"admin-active-chips"},lm={class:"key"},dm=["onClick"],um={class:"paper-table paper-table-conferences w-100",role:"table","aria-label":"Conferences"},cm={class:"paper-table-head",role:"row"},pm={role:"columnheader"},fm={role:"columnheader"},mm={role:"columnheader"},hm={class:"paper-table-row",role:"row"},vm={class:"cell-anon",role:"cell"},ym={class:"anon-text"},gm=["textContent","href"],bm={class:"anon-sub"},wm={class:"cell-status",role:"cell"},km=["textContent"],Em={class:"cell-views num",role:"cell"},Cm=["textContent","href"],_m={class:"cell-expires",role:"cell"},Sm={class:"cell-actions",role:"cell"},Nm={class:"dropdown"},Dm={class:"dropdown-menu dropdown-menu-right"},Rm=["href"],Tm=["href"],Am=["href"],Om=["onClick"],Im={key:0,class:"paper-table-empty"},Pm={class:"admin-toolbar",style:{"justify-content":"space-between","border-bottom":"none"}},Vm={style:{"font-size":"12px",color:"var(--ink-muted)"}},qm={key:0,class:"pagination-compact"},Mm=["disabled"],Um=["max"],$m=["disabled"],Lm={class:"admin-filter-inline"},Fm={class:"form-control form-control-sm"};function Rl(e,t){let n=ve("field"),r=ve("form");return l(),d("div",Uf,[t[47]||(t[47]=ue('
Admin \xA0/\xA0 Conferences

Conferences

',3)),o("div",$f,[o("span",Lf,c(e.total>=0?e.fmt.number(e.total):"\u2026"),1),o("button",{type:"button",class:A(["summary-pill ok",{active:e.query?.ready}]),title:"Toggle ready filter",onClick:t[0]||(t[0]=s=>{e.query.ready=!e.query.ready,e.query.page=1}),"aria-pressed":!!e.query?.ready},[t[13]||(t[13]=w("Ready ",-1)),o("span",zf,c(e.fmt?.number(e.statusCountFor("ready"))),1)],10,Ff),o("button",{type:"button",class:A(["summary-pill warn",{active:e.query?.preparing}]),title:"Toggle preparing filter",onClick:t[1]||(t[1]=s=>{e.query.preparing=!e.query.preparing,e.query.page=1}),"aria-pressed":!!e.query?.preparing},[t[14]||(t[14]=w("Preparing ",-1)),o("span",Bf,c(e.fmt?.number(e.statusCountFor("preparing"))),1)],10,Hf),o("button",{type:"button",class:A(["summary-pill error",{active:e.query?.error}]),title:"Toggle errored filter",onClick:t[2]||(t[2]=s=>{e.query.error=!e.query.error,e.query.page=1}),"aria-pressed":!!e.query?.error},[t[15]||(t[15]=w("Errored ",-1)),o("span",Gf,c(e.fmt?.number(e.statusCountFor("error"))),1)],10,jf),o("button",{type:"button",class:A(["summary-pill",{active:e.query?.expired}]),title:"Toggle expired filter",onClick:t[3]||(t[3]=s=>{e.query.expired=!e.query.expired,e.query.page=1}),"aria-pressed":!!e.query?.expired},[t[16]||(t[16]=w("Expired ",-1)),o("span",Kf,c(e.fmt?.number(e.statusCountFor("expired"))),1)],10,Wf),o("button",{type:"button",class:A(["summary-pill",{active:e.query?.removed}]),title:"Toggle removed filter",onClick:t[4]||(t[4]=s=>{e.query.removed=!e.query.removed,e.query.page=1}),"aria-pressed":!!e.query?.removed},[t[17]||(t[17]=w("Removed ",-1)),o("span",Jf,c(e.fmt?.number(e.statusCountFor("removed"))),1)],10,Yf)]),e.fetchError?(l(),d("div",Qf,[t[18]||(t[18]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),w(" "+c(e.fetchError),1)])):f("v-if",!0),N((l(),d("form",Xf,[o("div",Zf,[o("div",xf,[N(o("input",em,null,512),[[n,{state:e.viewState,set:s=>{e.query.search=s},value:e.query?.search,form:null,options:{}}]]),e.query?.search?f("v-if",!0):(l(),d("span",tm,"/"))]),t[22]||(t[22]=o("span",{class:"admin-filter-spacer"},null,-1)),o("button",{class:"btn btn-sm",type:"button",onClick:t[5]||(t[5]=s=>e.exportCsv())},[...t[19]||(t[19]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-export"})],-1),w(" Export",-1)])]),o("span",om,[o("button",{class:"btn btn-sm btn-icon",type:"button",onClick:t[6]||(t[6]=s=>e.query.page=Math.max(1,e.query.page-1)),disabled:e.query?.page<=1,"aria-label":"Previous page"},[...t[20]||(t[20]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-left"})],-1)])],8,nm),o("span",sm,c(e.query?.page)+"/"+c(e.totalPage||1),1),o("button",{class:"btn btn-sm btn-icon",type:"button",onClick:t[7]||(t[7]=s=>e.query.page=Math.min(e.totalPage,e.query.page+1)),disabled:e.query?.page>=e.totalPage,"aria-label":"Next page"},[...t[21]||(t[21]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-right"})],-1)])],8,rm)])]),e.chips?.length?(l(),d("div",im,[o("div",am,[(l(!0),d(K,null,oe(e.chips,(s,i)=>(l(),d("span",{class:"admin-active-chip",key:s?.key},[o("span",lm,c(s?.label),1),o("span",null,c(s?.value),1),o("button",{type:"button",onClick:a=>e.clearFilter(s.key),"aria-label":"Clear filter"},[...t[23]||(t[23]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])],8,dm)]))),128))])])):f("v-if",!0)])),[[r,e.viewState]]),o("div",um,[o("div",cm,[o("div",pm,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="name"}]),onClick:t[8]||(t[8]=s=>e.sortBy("name"))},[t[25]||(t[25]=w("Conference ",-1)),e.sortIcon("name")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("name")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[24]||(t[24]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)]),o("div",fm,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="status"}]),onClick:t[9]||(t[9]=s=>e.sortBy("status"))},[t[27]||(t[27]=w("Status ",-1)),e.sortIcon("status")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("status")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[26]||(t[26]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)]),t[30]||(t[30]=o("div",{role:"columnheader",class:"num"},"Repos",-1)),o("div",mm,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="startDate"}]),onClick:t[10]||(t[10]=s=>e.sortBy("startDate"))},[t[29]||(t[29]=w("Window ",-1)),e.sortIcon("startDate")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("startDate")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[28]||(t[28]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)]),t[31]||(t[31]=o("div",{role:"columnheader","aria-label":"Actions"},null,-1))]),(l(!0),d(K,null,oe(e.filteredConferences,(s,i)=>(l(),d("div",hm,[o("div",vm,[t[33]||(t[33]=o("svg",{class:"ui-icon record-type-icon",role:"img","aria-label":"Conference"},[o("use",{href:"#project-icon-conference"})],-1)),o("div",ym,[o("a",{class:"repo-name",textContent:c(s?.name),href:e.safeUrl("/conference/"+s?.conferenceID)},null,8,gm),o("div",bm,[o("span",null,c(s?.conferenceID),1),t[32]||(t[32]=w("\xA0\xB7\xA0",-1)),o("span",null,c(e.fmt?.number(s?.price||0))+" \u20AC",1)])])]),o("div",wm,[o("span",{class:A(["status-dot",{"status-removed":s?.status=="removed"||s?.status=="expired","status-ready":s?.status=="ready","status-error":s?.status=="error","status-preparing":s?.status=="preparing"}])},null,2),o("span",{textContent:c(e.fmt?.title(s?.status))},null,8,km)]),o("div",Em,[t[34]||(t[34]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1)),o("a",{title:"Show repositories in this conference",textContent:c(e.fmt?.number(s?.repositories?.length||0)),href:e.safeUrl("/admin/?conference="+s?.conferenceID)},null,8,Cm)]),o("div",_m,[t[35]||(t[35]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),w(" "+c(e.fmt?.date(s?.startDate))+" \u2013 "+c(e.fmt?.date(s?.endDate)),1)]),o("div",Sm,[o("div",Nm,[t[41]||(t[41]=o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"Actions"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})])],-1)),o("div",Dm,[o("a",{class:"dropdown-item",href:e.safeUrl("/conference/"+s?.conferenceID+"/edit")},[...t[36]||(t[36]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),w(" Edit",-1)])],8,Rm),o("a",{class:"dropdown-item",href:e.safeUrl("/conference/"+s?.conferenceID+"/")},[...t[37]||(t[37]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),w(" View",-1)])],8,Tm),o("a",{class:"dropdown-item",href:e.safeUrl("/admin/?conference="+s?.conferenceID)},[...t[38]||(t[38]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1),w(" View repositories",-1)])],8,Am),t[40]||(t[40]=o("div",{class:"dropdown-divider"},null,-1)),N(o("a",{class:"dropdown-item text-danger",href:"#",onClick:ie(a=>e.removeConference(s),["prevent"])},[...t[39]||(t[39]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),w(" Remove",-1)])],8,Om),[[j,s?.status!="removed"]])])])])]))),256)),e.filteredConferences?.length==0?(l(),d("div",Im,[...t[42]||(t[42]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1),o("span",null,"No conferences match the current filters.",-1)])])):f("v-if",!0)]),o("div",Pm,[o("span",Vm,c(e.fmt?.number(e.total))+" results",1),e.totalPage>1?(l(),d("div",qm,[o("button",{class:"btn btn-sm",onClick:t[11]||(t[11]=s=>e.query.page=Math.max(1,e.query.page-1)),disabled:e.query?.page<=1},[...t[43]||(t[43]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-left"})],-1),w(" Previous",-1)])],8,Mm),N(o("input",{type:"number",class:"form-control form-control-sm",min:"1",style:{width:"56px"},max:e.totalPage},null,8,Um),[[n,{state:e.viewState,set:s=>{e.query.page=s},value:e.query?.page,form:null,options:{}}]]),o("span",null,"of "+c(e.totalPage),1),o("button",{class:"btn btn-sm",onClick:t[12]||(t[12]=s=>e.query.page=Math.min(e.totalPage,e.query.page+1)),disabled:e.query?.page>=e.totalPage},[...t[44]||(t[44]=[w("Next ",-1),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-right"})],-1)])],8,$m)])):f("v-if",!0),o("span",Lm,[t[46]||(t[46]=o("label",null,"Per page",-1)),N((l(),d("select",Fm,[...t[45]||(t[45]=[ue('',5)])])),[[n,{state:e.viewState,set:s=>{e.query.limit=s},value:e.query?.limit,form:null,options:{}}]])])])])}var zm={class:"container paper-page admin-page errors-page"},Hm={class:"errors-header"},Bm={class:"errors-actions"},jm={class:"kpi-grid"},Gm={class:"kpi-card"},Wm={class:"kpi-value"},Km={key:0},Ym={key:1},Jm={class:"kpi-card kpi-error"},Qm={class:"kpi-value"},Xm={class:"kpi-sub"},Zm={class:"kpi-card kpi-warn"},xm={class:"kpi-value"},eh={class:"kpi-sub"},th={class:"kpi-card kpi-info"},oh={class:"kpi-value"},nh={class:"kpi-sub"},sh={class:"kpi-value"},rh={class:"kpi-sub"},ih={key:0,class:"dropped-warn"},ah={class:"volume-chart"},lh={class:"volume-bars"},dh=["title"],uh={class:"errors-toolbar","aria-label":"Error filters"},ch={class:"seg-tabs"},ph={class:"search-wrap"},fh={type:"search",class:"form-control",placeholder:"code:repo_not_found module:route status:>=400",autocomplete:"off"},mh={key:0,class:"filter-count"},hh={class:"select-wrap"},vh={class:"form-control form-control-sm"},yh={class:"select-wrap"},gh={class:"form-control form-control-sm"},bh={class:"autoref"},wh={type:"checkbox"},kh={key:0,class:"admin-empty"},Eh={key:1,class:"errors-pager"},Ch={key:2,class:"errors-list"},_h=["onClick"],Sh={class:"col-when"},Nh={class:"when-rel"},Dh={class:"when-abs"},Rh={class:"col-sev"},Th={class:"sev-label"},Ah={class:"col-mod"},Oh={class:"pill pill-module"},Ih={class:"col-msg"},Ph={class:"msg-code"},Vh={key:0,class:"msg-context"},qh={key:1,class:"msg-detail"},Mh={key:2,class:"msg-url"},Uh={class:"col-count"},$h={key:0,class:"count-pill"},Lh={key:1,class:"count-pill count-pill-muted"},Fh={class:"col-status"},zh={key:0,class:"errors-row-detail"},Hh={class:"detail-tabs"},Bh=["onClick"],jh=["onClick"],Gh=["onClick"],Wh={class:"detail-body"},Kh={class:"detail-main"},Yh={key:0},Jh={key:1,class:"stack-pre"},Qh={key:2,class:"related-list"},Xh={class:"when-abs"},Zh={class:"msg-url"},xh={class:"detail-actions"},ev=["onClick"],tv=["onClick"],ov={key:0,class:"copy-hint"},nv={class:"detail-aside"},sv={class:"aside-block"},rv=["title"],iv={class:"aside-block"},av=["title"],lv={class:"aside-block"},dv={class:"aside-value"},uv={key:0,class:"aside-sub"},cv={key:0,class:"aside-block"},pv=["href"],fv={key:1,class:"aside-block"},mv={class:"aside-value mono"};function Tl(e,t){let n=ve("field"),r=ve("form");return l(),d("div",zm,[t[32]||(t[32]=o("div",{class:"paper-crumbs"},[w("Admin \xA0/\xA0 "),o("span",{class:"here"},"Errors")],-1)),o("header",Hm,[t[10]||(t[10]=o("h1",{class:"paper-page-title"},"Errors",-1)),o("div",Bm,[o("button",{class:"btn btn-sm",type:"button",onClick:t[0]||(t[0]=s=>e.exportCsv())},[...t[8]||(t[8]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-export"})],-1),w(" Export CSV",-1)])]),o("button",{class:"btn btn-sm btn-danger-soft",type:"button",onClick:t[1]||(t[1]=s=>e.clearAll())},[...t[9]||(t[9]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),w(" Clear all",-1)])])])]),t[33]||(t[33]=ue('',1)),o("section",jm,[o("div",Gm,[t[11]||(t[11]=o("div",{class:"kpi-label"},"Last 24h",-1)),o("div",Wm,c(e.stats?.last24h),1),o("div",{class:A(["kpi-sub",{up:e.stats?.delta>0,down:e.stats?.delta<0}])},[e.stats?.prev24h?(l(),d("span",Km,c(e.stats?.delta>0?"+":"")+c(e.stats?.delta)+"% vs yesterday",1)):f("v-if",!0),e.stats?.prev24h?f("v-if",!0):(l(),d("span",Ym,"no prior baseline"))],2)]),o("div",Jm,[t[12]||(t[12]=o("div",{class:"kpi-label"},"Errors (5xx)",-1)),o("div",Qm,c(e.stats?.severity?.error),1),o("div",Xm,c(e.stats?.unique?.error)+" unique",1)]),o("div",Zm,[t[13]||(t[13]=o("div",{class:"kpi-label"},"Warnings (4xx)",-1)),o("div",xm,c(e.stats?.severity?.warn),1),o("div",eh,c(e.stats?.unique?.warn)+" unique",1)]),o("div",th,[t[14]||(t[14]=o("div",{class:"kpi-label"},"Info (auth, 404)",-1)),o("div",oh,c(e.stats?.severity?.info),1),o("div",nh,c(e.stats?.unique?.info)+" unique",1)]),o("div",{class:A(["kpi-card",{"kpi-error":e.stats?.dropped>0}])},[t[15]||(t[15]=o("div",{class:"kpi-label"},"Captured",-1)),o("div",sh,c(e.total),1),o("div",rh,[w(" cap "+c(e.cap)+" \xB7 "+c(e.available?"live":"redis off")+" ",1),e.stats?.dropped>0?(l(),d("span",ih," \xB7 "+c(e.stats?.dropped)+" dropped",1)):f("v-if",!0)])],2)]),o("section",ah,[t[16]||(t[16]=ue('
Volume \xB7 24h \xB7 1h bucketserror warn info
',1)),o("div",lh,[(l(!0),d(K,null,oe(e.stats?.buckets,(s,i)=>(l(),d("div",{class:"volume-bar",key:i,title:e.bucketTitle(s)},[o("span",{class:"seg seg-error",style:Ie({height:e.barPx(s,"error")+"px"})},null,4),o("span",{class:"seg seg-warn",style:Ie({height:e.barPx(s,"warn")+"px"})},null,4),o("span",{class:"seg seg-info",style:Ie({height:e.barPx(s,"info")+"px"})},null,4)],8,dh))),128))])]),N((l(),d("form",uh,[o("div",ch,[o("button",{type:"button",class:A({active:e.query?.bucket===""}),onClick:t[2]||(t[2]=s=>e.setBucket(""))},"All",2),o("button",{type:"button",class:A({active:e.query?.bucket==="error"}),onClick:t[3]||(t[3]=s=>e.setBucket("error"))},"5xx",2),o("button",{type:"button",class:A({active:e.query?.bucket==="warn"}),onClick:t[4]||(t[4]=s=>e.setBucket("warn"))},"4xx",2),o("button",{type:"button",class:A({active:e.query?.bucket==="info"}),onClick:t[5]||(t[5]=s=>e.setBucket("info"))},"Info",2)]),o("div",ph,[t[17]||(t[17]=o("svg",{class:"ui-icon search-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-search"})],-1)),N(o("input",fh,null,512),[[n,{state:e.viewState,set:s=>{e.query.search=s},value:e.query?.search,form:null,options:{}}]]),e.parsedFilterCount?(l(),d("span",mh,c(e.parsedFilterCount)+" filter"+c(e.parsedFilterCount>1?"s":""),1)):f("v-if",!0)]),o("div",hh,[t[19]||(t[19]=o("label",null,"Sort",-1)),N((l(),d("select",vh,[...t[18]||(t[18]=[o("option",{value:"recent"},"Most recent",-1),o("option",{value:"count"},"Most frequent",-1)])])),[[n,{state:e.viewState,set:s=>{e.query.sort=s},value:e.query?.sort,form:null,options:{}}]])]),o("div",yh,[t[21]||(t[21]=o("label",null,"Group",-1)),N((l(),d("select",gh,[...t[20]||(t[20]=[o("option",{value:""},"Off",-1),o("option",{value:"code"},"By code",-1),o("option",{value:"module"},"By module",-1)])])),[[n,{state:e.viewState,set:s=>{e.query.group=s},value:e.query?.group,form:null,options:{}}]])]),o("label",bh,[N(o("input",wh,null,512),[[n,{state:e.viewState,set:s=>{e.query.autoRefresh=s},value:e.query?.autoRefresh,form:null,options:{}}]]),t[22]||(t[22]=w(" Auto-refresh ",-1))]),o("button",{class:"btn btn-sm btn-icon",type:"button",title:"Refresh now",onClick:t[6]||(t[6]=s=>e.refreshNow()),"aria-label":"Refresh"},[...t[23]||(t[23]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1)])])])),[[r,e.viewState]]),e.visible?.length?f("v-if",!0):(l(),d("div",kh,"No errors captured.")),e.canLoadMore()&&e.visible?.length?(l(),d("div",Eh,[o("span",null,"Showing "+c(e.entries?.length)+" of "+c(e.total)+" captured",1),o("button",{class:"btn btn-sm",type:"button",onClick:t[7]||(t[7]=s=>e.loadMore())},"Load older")])):f("v-if",!0),e.visible?.length?(l(),d("div",Ch,[t[31]||(t[31]=ue('
WhenSeverityModuleMessageCountStatus
',1)),(l(!0),d(K,null,oe(e.visible,(s,i)=>(l(),d("div",{class:A(["errors-row",{open:e.expanded[s?._key]}]),key:s?._key},[o("div",{class:"errors-row-main",onClick:a=>e.toggle(s)},[o("div",Sh,[o("div",Nh,c(e.relTime(s?.ts)),1),o("div",Dh,c(e.absTimeShort(s?.ts)),1)]),o("div",Rh,[o("span",{class:A(["sev-dot","sev-"+s?._bucket])},null,2),o("span",Th,c(e.fmt?.title(s?._bucket)),1)]),o("div",Ah,[o("span",Oh,c(s?.module),1)]),o("div",Ih,[o("strong",Ph,c(s?.displayMessage),1),s?.displayContext&&s?.displayContext!==s?.displayMessage?(l(),d("span",Vh,c(s?.displayContext),1)):f("v-if",!0),s?._detail?(l(),d("span",qh,c(s?._detail),1)):f("v-if",!0),s?._url?(l(),d("div",Mh,c(s?._url),1)):f("v-if",!0)]),o("div",Uh,[s?.count>1?(l(),d("span",$h,"\xD7"+c(s?.count),1)):f("v-if",!0),s?.count===1?(l(),d("span",Lh,"\xD71")):f("v-if",!0)]),o("div",Fh,[s?._status?(l(),d("span",{key:0,class:A(["status-pill","status-"+s?._bucket])},c(s?._status),3)):f("v-if",!0)])],8,_h),e.expanded[s?._key]?(l(),d("div",zh,[o("div",Hh,[o("button",{type:"button",class:A({active:e.detailTab[s?._key]==="raw"||!e.detailTab[s?._key]}),onClick:a=>e.detailTab[s._key]="raw"},"Raw",10,Bh),s?._stack?(l(),d("button",{key:0,type:"button",class:A({active:e.detailTab[s?._key]==="stack"}),onClick:a=>e.detailTab[s._key]="stack"},"Stack",10,jh)):f("v-if",!0),s?.count>1?(l(),d("button",{key:1,type:"button",class:A({active:e.detailTab[s?._key]==="related"}),onClick:a=>e.detailTab[s._key]="related"},"Related ("+c(s?.count)+")",11,Gh)):f("v-if",!0)]),o("div",Wh,[o("div",Kh,[(e.detailTab[s?._key]||"raw")==="raw"?(l(),d("pre",Yh,c(s?._detailJson),1)):f("v-if",!0),e.detailTab[s?._key]==="stack"?(l(),d("pre",Jh,c(s?._stack),1)):f("v-if",!0),e.detailTab[s?._key]==="related"?(l(),d("div",Qh,[(l(!0),d(K,null,oe(s?._related,(a,u)=>(l(),d("div",{class:"related-row",key:u},[o("span",Xh,c(e.absTimeShort(a?.ts)),1),o("span",Zh,c(a?._url),1),a?._status?(l(),d("span",{key:0,class:A(["status-pill","status-"+a?._bucket])},c(a?._status),3)):f("v-if",!0)]))),128))])):f("v-if",!0),o("div",xh,[o("button",{class:"btn btn-sm",type:"button",title:"Copy a curl that reproduces the request",onClick:a=>e.copyCurl(s)},[...t[24]||(t[24]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-code"})],-1),w(" Copy curl",-1)])],8,ev),o("button",{class:"btn btn-sm",type:"button",onClick:a=>e.copyJson(s)},[...t[25]||(t[25]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-clipboard"})],-1),w(" Copy JSON",-1)])],8,tv),e.copyHint?(l(),d("span",ov,c(e.copyHint),1)):f("v-if",!0)])]),o("aside",nv,[o("div",sv,[t[26]||(t[26]=o("div",{class:"aside-label"},"First seen",-1)),o("div",{class:"aside-value",title:e.absTime(s?._firstSeen)},c(e.relTime(s?._firstSeen)),9,rv)]),o("div",iv,[t[27]||(t[27]=o("div",{class:"aside-label"},"Last seen",-1)),o("div",{class:"aside-value",title:e.absTime(s?.ts)},c(e.relTime(s?.ts)),9,av)]),o("div",lv,[t[28]||(t[28]=o("div",{class:"aside-label"},"Occurrences",-1)),o("div",dv,[w(c(s?.count),1),s?._lastHourCount?(l(),d("span",uv," \xB7 "+c(s?._lastHourCount)+" this hour",1)):f("v-if",!0)])]),s?._repoId?(l(),d("div",cv,[t[29]||(t[29]=o("div",{class:"aside-label"},"Repository",-1)),o("a",{class:"aside-value",href:e.safeUrl("/r/"+s?._repoId)},c(s?._repoId),9,pv)])):f("v-if",!0),s?._url?(l(),d("div",fv,[t[30]||(t[30]=o("div",{class:"aside-label"},"URL",-1)),o("div",mv,c(s?._url),1)])):f("v-if",!0)])])])):f("v-if",!0)],2))),128))])):f("v-if",!0)])}var hv={class:"container paper-page admin-page overview-page"},vv={key:0,class:"admin-empty"},yv={key:1,class:"alert alert-danger",style:{margin:"12px 0"}},gv={key:2},bv={class:"ov-kpi-row"},wv={class:"ov-kpi-card"},kv={class:"ov-kpi-value"},Ev={class:"ov-kpi-sub"},Cv={class:"ov-kpi-card"},_v={class:"ov-kpi-sub"},Sv={class:"ov-kpi-card"},Nv={class:"ov-kpi-sub"},Dv={class:"ov-kpi-card"},Rv={class:"ov-kpi-sub"},Tv={class:"ov-kpi-card"},Av={class:"ov-kpi-value"},Ov={class:"ov-kpi-sub"},Iv={class:"ov-daily-row"},Pv={class:"ov-daily-card"},Vv={class:"ov-daily-value"},qv={class:"ov-daily-card"},Mv={class:"ov-daily-value"},Uv={class:"ov-daily-sub"},$v={class:"ov-daily-card"},Lv={class:"ov-daily-value"},Fv={class:"ov-chart-row"},zv={class:"ov-chart-card"},Hv={key:0,class:"ov-spark-bars"},Bv=["data-tip","aria-label"],jv={key:1,class:"ov-spark-x"},Gv={class:"ov-chart-card"},Wv={key:0,class:"ov-spark-bars"},Kv=["data-tip","aria-label"],Yv={key:1,class:"ov-spark-x"},Jv={class:"ov-chart-card"},Qv={class:"ov-chart-head"},Xv={class:"ov-chart-legend"},Zv={key:0,class:"ov-spark-bars"},xv=["data-tip","aria-label"],ey={key:1,class:"ov-spark-x"},ty={class:"ov-chart-card"},oy={key:0,class:"ov-spark-bars"},ny=["data-tip","aria-label"],sy={key:1,class:"ov-spark-x"},ry={class:"ov-triple-row"},iy={class:"ov-panel-card"},ay={class:"ov-panel-head"},ly={class:"ov-panel-meta"},dy={class:"ov-stacked-bar"},uy={class:"ov-bar-legend"},cy={href:"/admin/repositories",class:"ov-legend-item"},py={class:"ov-legend-n"},fy={href:"/admin/repositories",class:"ov-legend-item"},my={class:"ov-legend-n"},hy={href:"/admin/repositories",class:"ov-legend-item"},vy={class:"ov-legend-n"},yy={href:"/admin/repositories",class:"ov-legend-item"},gy={class:"ov-legend-n"},by={href:"/admin/repositories",class:"ov-legend-item"},wy={class:"ov-legend-n"},ky={class:"ov-panel-card"},Ey={class:"ov-panel-head"},Cy={class:"ov-panel-meta"},_y={class:"ov-error-bars"},Sy={class:"ov-ebar-row"},Ny={class:"ov-ebar-track"},Dy={class:"ov-ebar-n"},Ry={class:"ov-ebar-row"},Ty={class:"ov-ebar-track"},Ay={class:"ov-ebar-n"},Oy={class:"ov-ebar-row"},Iy={class:"ov-ebar-track"},Py={class:"ov-ebar-n"},Vy={key:0,class:"ov-panel-foot"},qy={href:"/admin/errors"},My={class:"ov-panel-card"},Uy={class:"ov-routes-table"},$y={class:"ov-route-row",href:"/admin/queues"},Ly={class:"ov-route-n"},Fy={class:"ov-route-n"},zy={class:"ov-route-row",href:"/admin/queues"},Hy={class:"ov-route-n"},By={class:"ov-route-n"},jy={class:"ov-route-row",href:"/admin/queues"},Gy={class:"ov-route-n"},Wy={class:"ov-route-n"},Ky={class:"ov-services-card"},Yy={class:"ov-services-head"},Jy={class:"ov-panel-meta"},Qy={class:"ov-services-grid"},Xy={class:"ov-svc"},Zy={class:"ov-svc-info"},xy={class:"ov-svc-meta"},eg={class:"ov-svc-detail"},tg={class:"ov-svc"},og={class:"ov-svc-info"},ng={key:0,class:"ov-svc-meta"},sg={key:1,class:"ov-svc-meta"},rg={class:"ov-svc"},ig={class:"ov-svc-info"},ag={key:0,class:"ov-svc-meta"},lg={key:1,class:"ov-svc-meta"},dg={class:"ov-svc"},ug={class:"ov-svc-info"},cg={key:0,class:"ov-svc-meta"},pg={key:1,class:"ov-svc-meta"},fg={class:"ov-svc"},mg={class:"ov-svc-info"},hg={class:"ov-svc-meta"},vg={class:"ov-panel-card ov-performance","aria-labelledby":"performance-heading"},yg={class:"ov-panel-head ov-performance-head"},gg={class:"ov-performance-window"},bg={key:0,class:"ov-performance-message ov-performance-warning",role:"alert"},wg={key:1,class:"ov-performance-empty",role:"status"},kg={key:2},Eg={class:"paper-tabs ov-performance-tabs",role:"tablist","aria-label":"Performance metrics"},Cg=["aria-selected","tabindex"],_g=["aria-selected","tabindex"],Sg=["aria-selected","tabindex"],Ng={id:"performance-routes",role:"tabpanel","aria-labelledby":"performance-routes-tab"},Dg={key:0,class:"ov-metrics-scroll",tabindex:"0",role:"region","aria-label":"Route latency metrics, scroll for more columns"},Rg={class:"ov-metrics-table"},Tg={scope:"row",class:"ov-metric-name"},Ag={class:"num"},Og={class:"num"},Ig={class:"num"},Pg={class:"num"},Vg={class:"num"},qg={key:1,class:"ov-performance-empty"},Mg={id:"performance-processes",role:"tabpanel","aria-labelledby":"performance-processes-tab"},Ug={key:0,class:"ov-performance-message ov-performance-warning",role:"status"},$g={key:1,class:"ov-metrics-scroll",tabindex:"0",role:"region","aria-label":"Process resource metrics, scroll for more columns"},Lg={class:"ov-metrics-table"},Fg={scope:"row",class:"ov-metric-name"},zg={key:0,class:"ov-metric-warn"},Hg={class:"num"},Bg={class:"num"},jg={class:"num"},Gg={class:"num"},Wg={class:"num"},Kg={class:"num"},Yg={class:"num"},Jg={class:"num"},Qg={id:"performance-stages",role:"tabpanel","aria-labelledby":"performance-stages-tab"},Xg={key:0,class:"ov-metrics-scroll",tabindex:"0",role:"region","aria-label":"Work stage metrics, scroll for more columns"},Zg={class:"ov-metrics-table"},xg={scope:"row",class:"ov-metric-name"},eb={class:"num"},tb={class:"num"},ob={class:"num"},sb={key:1,class:"ov-performance-empty"};function Al(e,t){return l(),d("div",hv,[t[65]||(t[65]=ue('
Admin \xA0/\xA0 Overview

Overview

',3)),e.loading?(l(),d("div",vv,"Loading overview\u2026")):f("v-if",!0),e.error?(l(),d("div",yv,[t[9]||(t[9]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),w(" "+c(e.error),1)])):f("v-if",!0),e.data?(l(),d("div",gv,[f(" \u2500\u2500 Top KPI row \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 "),o("section",bv,[o("div",wv,[t[10]||(t[10]=o("div",{class:"ov-kpi-label"},[w("Repositories "),o("span",{class:"ov-dot ov-dot-ok"})],-1)),o("div",kv,c(e.humanNum(e.data?.repos?.total)),1),o("div",Ev,"+"+c(e.data?.repos?.newRepos24h)+" \xB7 last 24h",1)]),o("div",Cv,[t[11]||(t[11]=o("div",{class:"ov-kpi-label"},"CPU",-1)),o("div",{class:A(["ov-kpi-value",{"ov-val-warn":e.data?.system?.cpuPercent>80}])},c(e.data?.system?.cpuPercent)+"%",3),o("div",_v,c(e.data?.system?.cpuCount)+" cores \xB7 load "+c(e.data?.system?.loadAvg?.[0]?.toFixed(1)),1)]),o("div",Sv,[t[12]||(t[12]=o("div",{class:"ov-kpi-label"},"Memory",-1)),o("div",{class:A(["ov-kpi-value",{"ov-val-warn":e.data?.system?.memPercent>85}])},c(e.data?.system?.memPercent)+"%",3),o("div",Nv,c(e.humanBytes(e.data?.system?.memUsed))+" / "+c(e.humanBytes(e.data?.system?.memTotal)),1)]),o("div",Dv,[t[13]||(t[13]=o("div",{class:"ov-kpi-label"},"Disk",-1)),o("div",{class:A(["ov-kpi-value",{"ov-val-warn":e.data?.system?.diskPercent>85}])},c(e.data?.system?.diskPercent)+"%",3),o("div",Rv,c(e.humanBytes(e.data?.system?.diskUsed))+" / "+c(e.humanBytes(e.data?.system?.diskTotal))+" \xB7 "+c(e.data?.system?.diskMount),1)]),o("div",Tv,[t[14]||(t[14]=o("div",{class:"ov-kpi-label"},"Uptime",-1)),o("div",Av,c(e.humanDuration(e.data?.system?.uptime)),1),o("div",Ov,c(e.data?.system?.nodeVersion)+" \xB7 "+c(e.data?.system?.platform),1)])]),f(" \u2500\u2500 Daily activity highlights \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 "),o("section",Iv,[o("div",Pv,[t[15]||(t[15]=o("div",{class:"ov-daily-label"},"New repos today",-1)),o("div",Vv,"+"+c(e.fmt?.number(e.data?.daily?.today?.repositories)),1),t[16]||(t[16]=o("div",{class:"ov-daily-sub"},"since yesterday",-1))]),o("div",qv,[t[17]||(t[17]=o("div",{class:"ov-daily-label"},"New users today",-1)),o("div",Mv,"+"+c(e.fmt?.number(e.data?.daily?.today?.users)),1),o("div",Uv,c(e.fmt?.number(e.data?.users?.total))+" total users",1)]),o("div",$v,[t[18]||(t[18]=o("div",{class:"ov-daily-label"},"Page views today",-1)),o("div",Lv,"+"+c(e.fmt?.number(e.data?.daily?.today?.pageViews)),1),t[19]||(t[19]=o("div",{class:"ov-daily-sub"},"since yesterday",-1))])]),f(" \u2500\u2500 Daily charts \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 "),o("section",Fv,[o("div",zv,[t[20]||(t[20]=o("div",{class:"ov-chart-head"},[o("span",{class:"ov-chart-title"},"Daily page views \xB7 30d"),o("span",{class:"ov-chart-legend"},[o("span",{class:"ov-dot-legend ov-dot-accent"}),w("views/day")])],-1)),e.data?.history?.length?(l(),d("div",Hv,[(l(!0),d(K,null,oe(e.data?.history,(n,r)=>(l(),d("div",{class:"ov-spark-col has-tip",key:r,"data-tip":e.historyLabel(n)+": +"+e.fmt?.number(n?.dailyPageViews)+" views","aria-label":e.historyLabel(n)+": +"+e.fmt?.number(n?.dailyPageViews)+" views"},[o("span",{class:"ov-spark-fill",style:Ie({height:e.historyBarH(n,"dailyPageViews")+"px"})},null,4)],8,Bv))),128))])):f("v-if",!0),e.data?.history?.length?(l(),d("div",jv,[o("span",null,c(e.historyLabel(e.data?.history[0])),1),o("span",null,c(e.historyLabel(e.data?.history[Math?.floor(e.data?.history?.length/2)])),1),o("span",null,c(e.historyLabel(e.data?.history[e.data?.history?.length-1])),1)])):f("v-if",!0)]),o("div",Gv,[t[21]||(t[21]=o("div",{class:"ov-chart-head"},[o("span",{class:"ov-chart-title"},"New repos \xB7 30d"),o("span",{class:"ov-chart-legend"},[o("span",{class:"ov-dot-legend ov-dot-ok-fill"}),w("repos/day")])],-1)),e.data?.history?.length?(l(),d("div",Wv,[(l(!0),d(K,null,oe(e.data?.history,(n,r)=>(l(),d("div",{class:"ov-spark-col has-tip",key:r,"data-tip":e.historyLabel(n)+": +"+e.fmt?.number(n?.dailyRepositories)+" repos","aria-label":e.historyLabel(n)+": +"+e.fmt?.number(n?.dailyRepositories)+" repos"},[o("span",{class:"ov-spark-fill ov-spark-fill-alt",style:Ie({height:e.historyBarH(n,"dailyRepositories")+"px"})},null,4)],8,Kv))),128))])):f("v-if",!0),e.data?.history?.length?(l(),d("div",Yv,[o("span",null,c(e.historyLabel(e.data?.history[0])),1),o("span",null,c(e.historyLabel(e.data?.history[Math?.floor(e.data?.history?.length/2)])),1),o("span",null,c(e.historyLabel(e.data?.history[e.data?.history?.length-1])),1)])):f("v-if",!0)]),o("div",Jv,[o("div",Qv,[t[23]||(t[23]=o("span",{class:"ov-chart-title"},"Users \xB7 30d",-1)),o("span",Xv,[t[22]||(t[22]=o("span",{class:"ov-dot-legend ov-dot-user-fill"},null,-1)),w("total users \xB7 "+c(e.fmt?.number(e.historyRange("nbUsers").min))+"\u2013"+c(e.fmt?.number(e.historyRange("nbUsers").max)),1)])]),e.data?.history?.length?(l(),d("div",Zv,[(l(!0),d(K,null,oe(e.data?.history,(n,r)=>(l(),d("div",{class:"ov-spark-col has-tip",key:r,"data-tip":e.historyLabel(n)+": "+e.fmt?.number(n?.nbUsers)+" users","aria-label":e.historyLabel(n)+": "+e.fmt?.number(n?.nbUsers)+" users"},[o("span",{class:"ov-spark-fill ov-spark-fill-user",style:Ie({height:e.historyRangeH(n,"nbUsers")+"px"})},null,4)],8,xv))),128))])):f("v-if",!0),e.data?.history?.length?(l(),d("div",ey,[o("span",null,c(e.historyLabel(e.data?.history[0])),1),o("span",null,c(e.historyLabel(e.data?.history[Math?.floor(e.data?.history?.length/2)])),1),o("span",null,c(e.historyLabel(e.data?.history[e.data?.history?.length-1])),1)])):f("v-if",!0)]),o("div",ty,[t[24]||(t[24]=o("div",{class:"ov-chart-head"},[o("span",{class:"ov-chart-title"},"New users \xB7 30d"),o("span",{class:"ov-chart-legend"},[o("span",{class:"ov-dot-legend ov-dot-new-user-fill"}),w("users/day")])],-1)),e.data?.history?.length?(l(),d("div",oy,[(l(!0),d(K,null,oe(e.data?.history,(n,r)=>(l(),d("div",{class:"ov-spark-col has-tip",key:r,"data-tip":e.historyLabel(n)+": +"+e.fmt?.number(n?.dailyUsers)+" users","aria-label":e.historyLabel(n)+": +"+e.fmt?.number(n?.dailyUsers)+" users"},[o("span",{class:"ov-spark-fill ov-spark-fill-new-user",style:Ie({height:e.historyBarH(n,"dailyUsers")+"px"})},null,4)],8,ny))),128))])):f("v-if",!0),e.data?.history?.length?(l(),d("div",sy,[o("span",null,c(e.historyLabel(e.data?.history[0])),1),o("span",null,c(e.historyLabel(e.data?.history[Math?.floor(e.data?.history?.length/2)])),1),o("span",null,c(e.historyLabel(e.data?.history[e.data?.history?.length-1])),1)])):f("v-if",!0)])]),f(" \u2500\u2500 Three-panel row: Status / Errors / Queues \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 "),o("section",ry,[f(" Repo status breakdown "),o("div",iy,[o("div",ay,[t[25]||(t[25]=o("span",{class:"ov-panel-title"},"Repo status",-1)),o("span",ly,c(e.fmt?.number(e.data?.repos?.total))+" total",1)]),o("div",dy,[o("span",{class:"ov-bar-seg ov-bar-ready",title:"Ready",style:Ie({width:e.barPct("ready")+"%"})},null,4),o("span",{class:"ov-bar-seg ov-bar-preparing",title:"Preparing",style:Ie({width:e.barPct("preparing")+"%"})},null,4),o("span",{class:"ov-bar-seg ov-bar-error",title:"Error",style:Ie({width:e.barPct("error")+"%"})},null,4),o("span",{class:"ov-bar-seg ov-bar-expired",title:"Expired",style:Ie({width:e.barPct("expired")+"%"})},null,4),o("span",{class:"ov-bar-seg ov-bar-removed",title:"Removed",style:Ie({width:e.barPct("removed")+"%"})},null,4)]),o("div",uy,[o("a",cy,[t[26]||(t[26]=o("span",{class:"ov-swatch ov-bar-ready"},null,-1)),t[27]||(t[27]=w(" ready ",-1)),o("span",py,c(e.fmt?.number(e.statusCount("ready"))),1)]),o("a",fy,[t[28]||(t[28]=o("span",{class:"ov-swatch ov-bar-preparing"},null,-1)),t[29]||(t[29]=w(" preparing ",-1)),o("span",my,c(e.fmt?.number(e.statusCount("preparing")+e.statusCount("download"))),1)]),o("a",hy,[t[30]||(t[30]=o("span",{class:"ov-swatch ov-bar-error"},null,-1)),t[31]||(t[31]=w(" error ",-1)),o("span",vy,c(e.fmt?.number(e.statusCount("error"))),1)]),o("a",yy,[t[32]||(t[32]=o("span",{class:"ov-swatch ov-bar-expired"},null,-1)),t[33]||(t[33]=w(" expired ",-1)),o("span",gy,c(e.fmt?.number(e.statusCount("expired")+e.statusCount("expiring"))),1)]),o("a",by,[t[34]||(t[34]=o("span",{class:"ov-swatch ov-bar-removed"},null,-1)),t[35]||(t[35]=w(" removed ",-1)),o("span",wy,c(e.fmt?.number(e.statusCount("removed")+e.statusCount("removing"))),1)])])]),f(" Error breakdown "),o("div",ky,[o("div",Ey,[t[36]||(t[36]=o("span",{class:"ov-panel-title"},"Errors \xB7 24h",-1)),o("span",Cy,c(e.data?.errors?.last24h)+" total",1)]),o("div",_y,[o("div",Sy,[t[37]||(t[37]=o("span",{class:"ov-ebar-label"},"5xx",-1)),o("span",Ny,[o("span",{class:"ov-ebar-fill ov-ebar-error",style:Ie({width:e.errPct("error")+"%"})},null,4)]),o("span",Dy,c(e.data?.errors?.severity?.error),1)]),o("div",Ry,[t[38]||(t[38]=o("span",{class:"ov-ebar-label"},"4xx",-1)),o("span",Ty,[o("span",{class:"ov-ebar-fill ov-ebar-warn",style:Ie({width:e.errPct("warn")+"%"})},null,4)]),o("span",Ay,c(e.data?.errors?.severity?.warn),1)]),o("div",Oy,[t[39]||(t[39]=o("span",{class:"ov-ebar-label"},"Info",-1)),o("span",Iy,[o("span",{class:"ov-ebar-fill ov-ebar-info",style:Ie({width:e.errPct("info")+"%"})},null,4)]),o("span",Py,c(e.data?.errors?.severity?.info),1)])]),e.data?.repos?.recentErrors24h?(l(),d("div",Vy,[o("a",qy,c(e.data?.repos?.recentErrors24h)+" repos in error state \u2192",1)])):f("v-if",!0)]),f(" Top routes / queues "),o("div",My,[t[44]||(t[44]=o("div",{class:"ov-panel-head"},[o("span",{class:"ov-panel-title"},"Queues"),o("span",{class:"ov-panel-meta"},"by state")],-1)),o("div",Uy,[t[43]||(t[43]=ue('
QueueActiveWaitFailed
',1)),o("a",$y,[t[40]||(t[40]=o("span",{class:"ov-route-name"},"download",-1)),o("span",Ly,c(e.data?.queues?.download?.active),1),o("span",Fy,c(e.data?.queues?.download?.waiting),1),o("span",{class:A(["ov-route-n ov-route-lat",{"ov-n-bad":e.data?.queues?.download?.failed>0}])},c(e.data?.queues?.download?.failed),3)]),o("a",zy,[t[41]||(t[41]=o("span",{class:"ov-route-name"},"remove",-1)),o("span",Hy,c(e.data?.queues?.remove?.active),1),o("span",By,c(e.data?.queues?.remove?.waiting),1),o("span",{class:A(["ov-route-n ov-route-lat",{"ov-n-bad":e.data?.queues?.remove?.failed>0}])},c(e.data?.queues?.remove?.failed),3)]),o("a",jy,[t[42]||(t[42]=o("span",{class:"ov-route-name"},"cache",-1)),o("span",Gy,c(e.data?.queues?.cache?.active),1),o("span",Wy,c(e.data?.queues?.cache?.waiting),1),o("span",{class:A(["ov-route-n ov-route-lat",{"ov-n-bad":e.data?.queues?.cache?.failed>0}])},c(e.data?.queues?.cache?.failed),3)])])])]),f(" \u2500\u2500 Services bar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 "),o("section",Ky,[o("div",Yy,[t[45]||(t[45]=o("span",{class:"ov-panel-title"},"Services",-1)),o("span",Jy,c(e.fmt?.number(e.data?.users?.total))+" users \xB7 "+c(e.data?.conferences?.total)+" conferences",1)]),o("div",Qy,[o("div",Xy,[t[47]||(t[47]=o("span",{class:"ov-svc-dot ov-dot-ok"},null,-1)),o("div",Zy,[t[46]||(t[46]=o("span",{class:"ov-svc-name"},"web",-1)),o("span",xy,c(e.data?.system?.nodeVersion),1)]),o("span",eg,"uptime "+c(e.humanDuration(e.data?.system?.uptime)),1)]),o("div",tg,[o("span",{class:A(["ov-svc-dot",e.queueTotal(e.data?.queues?.download)>0?"ov-dot-ok":"ov-dot-idle"])},null,2),o("div",og,[t[48]||(t[48]=o("span",{class:"ov-svc-name"},"download",-1)),e.queueTotal(e.data?.queues?.download)?(l(),d("span",ng,c(e.queueTotal(e.data?.queues?.download))+" jobs",1)):f("v-if",!0),e.queueTotal(e.data?.queues?.download)?f("v-if",!0):(l(),d("span",sg,"idle"))])]),o("div",rg,[o("span",{class:A(["ov-svc-dot",e.queueTotal(e.data?.queues?.cache)>0?"ov-dot-ok":"ov-dot-idle"])},null,2),o("div",ig,[t[49]||(t[49]=o("span",{class:"ov-svc-name"},"cache",-1)),e.queueTotal(e.data?.queues?.cache)?(l(),d("span",ag,c(e.queueTotal(e.data?.queues?.cache))+" jobs",1)):f("v-if",!0),e.queueTotal(e.data?.queues?.cache)?f("v-if",!0):(l(),d("span",lg,"idle"))])]),o("div",dg,[o("span",{class:A(["ov-svc-dot",e.queueTotal(e.data?.queues?.remove)>0?"ov-dot-ok":"ov-dot-idle"])},null,2),o("div",ug,[t[50]||(t[50]=o("span",{class:"ov-svc-name"},"remove",-1)),e.queueTotal(e.data?.queues?.remove)?(l(),d("span",cg,c(e.queueTotal(e.data?.queues?.remove))+" jobs",1)):f("v-if",!0),e.queueTotal(e.data?.queues?.remove)?f("v-if",!0):(l(),d("span",pg,"idle"))])]),o("div",fg,[o("span",{class:A(["ov-svc-dot",e.data?.repos?.recentErrors24h>10?"ov-dot-warn":"ov-dot-ok"])},null,2),o("div",mg,[t[51]||(t[51]=o("span",{class:"ov-svc-name"},"errors",-1)),o("span",hg,c(e.data?.errors?.last24h)+" / 24h",1)])])])])])):f("v-if",!0),o("section",vg,[o("div",yg,[t[54]||(t[54]=o("div",null,[o("h2",{class:"ov-panel-title",id:"performance-heading"},"Request performance"),o("p",{class:"ov-performance-note"},"Request latency and process health \xB7 refreshes every 30 seconds")],-1)),o("div",gg,[t[53]||(t[53]=o("label",{for:"performance-window"},"Time range",-1)),N(o("select",{id:"performance-window",class:"form-control form-control-sm","onUpdate:modelValue":t[0]||(t[0]=n=>e.performanceMinutes=n),onChange:t[1]||(t[1]=n=>e.loadPerformance()),"aria-label":"Performance time range"},[...t[52]||(t[52]=[o("option",{value:15},"Last 15 minutes",-1),o("option",{value:60},"Last hour",-1)])],544),[[Xn,e.performanceMinutes,void 0,{number:!0}]])])]),e.performanceError?(l(),d("div",bg,[t[55]||(t[55]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),o("span",null,c(e.performanceError),1),o("button",{type:"button",class:"btn btn-sm",onClick:t[2]||(t[2]=n=>e.loadPerformance())},"Retry")])):f("v-if",!0),!e.performance&&!e.performanceError?(l(),d("p",wg,"Loading performance monitoring\u2026")):f("v-if",!0),e.performance?.available?(l(),d("div",kg,[o("div",Eg,[o("button",{id:"performance-routes-tab",type:"button",class:A(["paper-tab",{active:e.performanceTab==="routes"}]),role:"tab","aria-selected":e.performanceTab==="routes",tabindex:e.performanceTab==="routes"?0:-1,"aria-controls":"performance-routes",onClick:t[3]||(t[3]=n=>e.performanceTab="routes"),onKeydown:t[4]||(t[4]=n=>e.previewTabKeydown(n))},"Routes",42,Cg),o("button",{id:"performance-processes-tab",type:"button",class:A(["paper-tab",{active:e.performanceTab==="processes"}]),role:"tab","aria-selected":e.performanceTab==="processes",tabindex:e.performanceTab==="processes"?0:-1,"aria-controls":"performance-processes",onClick:t[5]||(t[5]=n=>e.performanceTab="processes"),onKeydown:t[6]||(t[6]=n=>e.previewTabKeydown(n))},"Processes",42,_g),o("button",{id:"performance-stages-tab",type:"button",class:A(["paper-tab",{active:e.performanceTab==="stages"}]),role:"tab","aria-selected":e.performanceTab==="stages",tabindex:e.performanceTab==="stages"?0:-1,"aria-controls":"performance-stages",onClick:t[7]||(t[7]=n=>e.performanceTab="stages"),onKeydown:t[8]||(t[8]=n=>e.previewTabKeydown(n))},"Work stages",42,Sg)]),N(o("div",Ng,[e.performance.routes?.length?(l(),d("div",Dg,[o("table",Rg,[t[56]||(t[56]=o("caption",{class:"sr-only"},"Route latency for the selected time range",-1)),t[57]||(t[57]=o("thead",null,[o("tr",null,[o("th",{scope:"col"},"Route"),o("th",{scope:"col",class:"num"},"Requests"),o("th",{scope:"col",class:"num"},"Average"),o("th",{scope:"col",class:"num"},"First byte p95"),o("th",{scope:"col",class:"num"},"p95"),o("th",{scope:"col",class:"num"},"p99"),o("th",{scope:"col",class:"num"},"Interrupted"),o("th",{scope:"col",class:"num"},"5xx"),o("th",{scope:"col",class:"num"},"Slow")])],-1)),o("tbody",null,[(l(!0),d(K,null,oe(e.performance.routes,n=>(l(),d("tr",{key:n.service+n.method+n.route},[o("th",Tg,[o("span",null,c(n.route),1),o("small",null,c(n.service)+" \xB7 "+c(n.method),1)]),o("td",Ag,c(e.fmt.number(n.count)),1),o("td",Og,c(e.formatMs(n.avgMs)),1),o("td",Ig,c(e.firstByteBound(n)),1),o("td",Pg,c(e.latencyBound(n,"p95UpperMs")),1),o("td",Vg,c(e.latencyBound(n,"p99UpperMs")),1),o("td",{class:A(["num",{"ov-metric-warn":n.aborted>0}])},c(e.fmt.number(n.aborted)),3),o("td",{class:A(["num",{"ov-metric-warn":n.errors>0}])},c(e.fmt.number(n.errors)),3),o("td",{class:A(["num",{"ov-metric-warn":n.slow>0}])},c(e.fmt.number(n.slow)),3)]))),128))])])])):(l(),d("p",qg,"No recorded requests in this time range yet."))],512),[[j,e.performanceTab==="routes"]]),N(o("div",Mg,[t[61]||(t[61]=o("p",{class:"ov-performance-note"},"API and streamer processes \xB7 latest sample per instance",-1)),e.performance.instances?.length?(l(),d("div",$g,[o("table",Lg,[t[59]||(t[59]=o("caption",{class:"sr-only"},"API and streamer process resource usage",-1)),t[60]||(t[60]=o("thead",null,[o("tr",null,[o("th",{scope:"col"},"Process"),o("th",{scope:"col",class:"num"},"RSS / limit"),o("th",{scope:"col",class:"num"},"CPU"),o("th",{scope:"col",class:"num"},"Event loop p95"),o("th",{scope:"col",class:"num"},"Active requests"),o("th",{scope:"col",class:"num"},"Sockets / CLOSE_WAIT"),o("th",{scope:"col",class:"num"},"Workers / waiting"),o("th",{scope:"col",class:"num"},"Sample age"),o("th",{scope:"col",class:"num"},"Dropped batches / metrics")])],-1)),o("tbody",null,[(l(!0),d(K,null,oe(e.performance.instances,n=>(l(),d("tr",{key:n.instance,class:A({"ov-metric-warning-row":e.performanceWarning(n)})},[o("th",Fg,[o("span",null,c(n.instance),1),e.performanceWarning(n)?(l(),d("small",zg,[...t[58]||(t[58]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1),w(" Needs attention",-1)])])):f("v-if",!0)]),o("td",Hg,[w(c(e.humanBytes(n.memory.rss))+" / "+c(e.humanBytes(n.memoryLimitBytes)),1),o("small",null,"Peak "+c(e.humanBytes(e.peakRss(n))),1)]),o("td",Bg,c(n.cpuPercent.toFixed(1))+"%",1),o("td",jg,c(n.eventLoop.p95Ms.toFixed(1))+" ms",1),o("td",Gg,c(n.activeRequests),1),o("td",Wg,c(n.sockets?.descriptors??"Unavailable")+" / "+c(n.sockets?.closeWait??"Unavailable"),1),o("td",Kg,c(n.workers?.running??0)+" / "+c(n.workers?.waiting??0),1),o("td",Yg,c(e.sampleAge(n))+" s",1),o("td",Jg,c(n.droppedBatches)+" / "+c(n.droppedMetrics),1)],2))),128))])])])):(l(),d("div",Ug,"No recent process samples. Monitoring coverage is incomplete."))],512),[[j,e.performanceTab==="processes"]]),N(o("div",Qg,[e.performance.stages?.some(n=>n.metric!=="first_byte")?(l(),d("div",Xg,[o("table",Zg,[t[62]||(t[62]=o("caption",{class:"sr-only"},"Work stages and cache results",-1)),t[63]||(t[63]=o("thead",null,[o("tr",null,[o("th",{scope:"col"},"Work stage"),o("th",{scope:"col",class:"num"},"Samples"),o("th",{scope:"col",class:"num"},"Average"),o("th",{scope:"col",class:"num"},"p95")])],-1)),o("tbody",null,[(l(!0),d(K,null,oe(e.performance.stages.filter(n=>n.metric!=="first_byte"),n=>(l(),d("tr",{key:n.service+n.metric},[o("th",xg,[o("span",null,c(n.metric),1),o("small",null,c(n.service),1)]),o("td",eb,c(e.fmt.number(n.count)),1),o("td",tb,c(e.formatMs(n.avgMs)),1),o("td",ob,c(e.latencyBound(n,"p95UpperMs")),1)]))),128))])])])):(l(),d("p",sb,"No recorded work stages or cache results in this time range yet."))],512),[[j,e.performanceTab==="stages"]]),t[64]||(t[64]=o("details",{class:"ov-performance-help"},[o("summary",null,"How to read these metrics"),o("p",null,"Latency includes upstream waits and response transfer. Percentiles show histogram bucket upper bounds, not exact timings. Process rows marked \u201CNeeds attention\u201D have stale samples, dropped monitoring data, CLOSE_WAIT sockets, high event loop delay, or high memory usage.")],-1))])):f("v-if",!0)])])}var rb={class:"container paper-page admin-page"},ib={class:"q-header"},ab={class:"q-header-actions"},lb={class:"q-range-btns"},db={class:"q-cards"},ub=["aria-pressed","onKeydown","onClick"],cb={class:"q-card-head"},pb=["textContent"],fb=["textContent"],mb={class:"q-card-sub"},hb={key:0,class:"q-card-bar"},vb={key:0,class:"q-detail"},yb={class:"q-throughput"},gb={class:"q-section-label"},bb={class:"q-section-right"},wb={class:"q-stats-panel"},kb={class:"q-section-label"},Eb={class:"q-stats-grid"},Cb={class:"q-stat"},_b=["textContent"],Sb={class:"q-stat"},Nb=["textContent"],Db={class:"q-stat"},Rb=["textContent"],Tb={class:"q-stat"},Ab=["textContent"],Ob={class:"q-stat"},Ib=["textContent"],Pb={class:"q-stat"},Vb=["textContent"],qb={class:"q-stats-actions"},Mb=["disabled"],Ub={class:"q-jobs"},$b={class:"q-jobs-header"},Lb={class:"q-section-label"},Fb={class:"q-state-filters"},zb={class:"q-state-toggle"},Hb={type:"checkbox"},Bb={class:"q-search-row"},jb={type:"search",class:"form-control",placeholder:"Search by job/repo id\u2026",autocomplete:"off"},Gb={class:"q-auto-refresh"},Wb={type:"checkbox"},Kb={key:0,class:"q-table"},Yb=["onClick"],Jb={class:"q-cell-state"},Qb=["textContent"],Xb=["textContent"],Zb={class:"q-cell-id"},xb=["textContent","href"],e1={class:"q-cell-payload"},t1=["textContent"],o1={key:0,class:"q-payload-detail"},n1=["textContent"],s1=["textContent"],r1={class:"q-cell-progress"},i1={key:0,class:"q-progress-wrap"},a1=["textContent"],l1={class:"q-cell-actions"},d1=["onClick"],u1=["onClick"],c1={key:0,class:"q-detail-row"},p1={colspan:"7"},f1={class:"q-job-detail"},m1={class:"q-job-detail-grid"},h1={class:"q-job-detail-item"},v1={class:"q-job-detail-value"},y1=["textContent","href"],g1={class:"q-job-detail-item"},b1={class:"q-job-detail-value"},w1=["textContent"],k1={key:0,class:"q-job-detail-item"},E1=["textContent"],C1={key:1,class:"q-job-detail-item"},_1=["textContent"],S1={key:2,class:"q-job-detail-item"},N1={class:"q-job-detail-value"},D1={key:3,class:"q-job-detail-item"},R1=["textContent"],T1={key:4,class:"q-job-detail-item"},A1=["textContent"],O1={key:5,class:"q-job-detail-item"},I1=["textContent"],P1={key:6,class:"q-job-detail-item"},V1=["textContent"],q1={key:7,class:"q-job-detail-item"},M1=["textContent"],U1={key:0,class:"q-job-detail-error"},$1=["textContent"],L1={key:1},F1=["textContent"],z1={class:"q-job-detail-actions"},H1=["onClick"],B1=["onClick"],j1=["href"],G1={key:1,class:"paper-table-empty",style:{border:"1px solid var(--border-color)","border-radius":"10px",background:"var(--paper-card)"}},W1={key:0},K1={key:1};function Ol(e,t){let n=ve("field");return l(),d("div",rb,[t[48]||(t[48]=o("div",{class:"paper-crumbs"},[w("Admin \xA0/\xA0 "),o("span",{class:"here"},"Queues")],-1)),o("div",ib,[t[12]||(t[12]=o("h1",{class:"paper-page-title"},"Queues",-1)),o("div",ab,[o("div",lb,[o("button",{class:A(["btn btn-sm",{active:e.range=="1h"}]),onClick:t[0]||(t[0]=r=>e.setRange("1h"))},"1h",2),o("button",{class:A(["btn btn-sm",{active:e.range=="6h"}]),onClick:t[1]||(t[1]=r=>e.setRange("6h"))},"6h",2),o("button",{class:A(["btn btn-sm",{active:e.range=="24h"}]),onClick:t[2]||(t[2]=r=>e.setRange("24h"))},"24h",2),o("button",{class:A(["btn btn-sm",{active:e.range=="7d"}]),onClick:t[3]||(t[3]=r=>e.setRange("7d"))},"7d",2)]),o("button",{class:"btn btn-sm",onClick:t[4]||(t[4]=r=>e.pauseAll())},"Pause all"),o("button",{class:"btn btn-sm btn-danger-soft",onClick:t[5]||(t[5]=r=>e.drainSelected())},"Drain "+c(e.selectedQueue),1)])]),t[49]||(t[49]=ue('',1)),f(" Queue overview cards "),o("div",db,[(l(!0),d(K,null,oe(e.queueList,(r,s)=>(l(),d("div",{class:A(["q-card",{selected:e.selectedQueue==r?.key,paused:r?.paused}]),role:"button",tabindex:"0","aria-pressed":e.selectedQueue===r.key,onKeydown:[To(ie(i=>e.selectQueue(r.key),["prevent"]),["enter"]),To(ie(i=>e.selectQueue(r.key),["prevent"]),["space"])],onClick:i=>e.selectQueue(r.key)},[o("div",cb,[o("span",{class:A(["q-dot",{"q-dot-red":r?.paused||r?.counts?.failed>0}])},null,2),o("span",{class:"q-card-name",textContent:c(r?.label)},null,8,pb)]),o("div",{class:"q-card-count",textContent:c((r?.counts?.waiting||0)+(r?.counts?.active||0)+(r?.counts?.delayed||0))},null,8,fb),o("div",mb,[o("span",null,"waiting \xB7 "+c(r?.counts?.active||0)+" active",1),r?.counts?.active?(l(),d("div",hb,[o("div",{class:"q-card-bar-fill",style:Ie({width:r?.counts?.active/((r?.counts?.waiting||0)+(r?.counts?.active||0)+(r?.counts?.delayed||0)||1)*100+"%"})},null,4)])):f("v-if",!0)])],42,ub))),256))]),f(" Detail: throughput chart + stats panel "),e.selectedStats?(l(),d("div",vb,[o("div",yb,[o("div",gb,[w(c(e.selectedQueue)+" \xB7 throughput ",1),o("span",bb,[t[13]||(t[13]=o("span",{class:"q-legend-completed"},"\u25CF",-1)),t[14]||(t[14]=w(" completed ",-1)),t[15]||(t[15]=o("span",{class:"q-legend-failed"},"\u25CF",-1)),t[16]||(t[16]=w(" failed ",-1)),t[17]||(t[17]=o("span",{class:"q-legend-exec"},"- -",-1)),w(" avg time \xB7 "+c(e.range),1)])]),t[18]||(t[18]=o("div",{class:"q-chart-wrap"},[o("canvas",{id:"q-throughput-chart",height:"180"}),o("div",{id:"q-chart-tooltip",class:"q-chart-tooltip",style:{display:"none"}}),o("div",{id:"q-chart-crosshair",class:"q-chart-crosshair",style:{display:"none"}})],-1))]),o("div",wb,[o("div",kb,c(e.selectedQueue)+" \xB7 stats",1),o("div",Eb,[o("div",Cb,[t[19]||(t[19]=o("div",{class:"q-stat-label"},"Waiting",-1)),o("div",{class:"q-stat-value",textContent:c(e.selectedStats?.counts?.waiting||0)},null,8,_b)]),o("div",Sb,[t[20]||(t[20]=o("div",{class:"q-stat-label"},"Active",-1)),o("div",{class:"q-stat-value",textContent:c(e.selectedStats?.counts?.active||0)},null,8,Nb)]),o("div",Db,[t[21]||(t[21]=o("div",{class:"q-stat-label"},"Completed (24h)",-1)),o("div",{class:"q-stat-value",textContent:c(e.fmt?.number(e.selectedStats?.completed24h))},null,8,Rb)]),o("div",Tb,[t[22]||(t[22]=o("div",{class:"q-stat-label"},"Failed (24h)",-1)),o("div",{class:"q-stat-value",textContent:c(e.selectedStats?.failed24h||0)},null,8,Ab)]),o("div",Ob,[t[23]||(t[23]=o("div",{class:"q-stat-label"},"Delayed",-1)),o("div",{class:"q-stat-value",textContent:c(e.selectedStats?.counts?.delayed||0)},null,8,Ib)]),o("div",Pb,[t[24]||(t[24]=o("div",{class:"q-stat-label"},"Workers",-1)),o("div",{class:"q-stat-value",textContent:c(e.selectedStats?.workers||0)},null,8,Vb)])]),o("div",qb,[o("button",{class:"btn btn-sm",onClick:t[6]||(t[6]=r=>e.togglePause())},c(e.selectedStats?.paused?"Resume":"Pause"),1),o("button",{class:"btn btn-sm",onClick:t[7]||(t[7]=r=>e.retryFailed()),disabled:!e.selectedStats?.counts?.failed},"Retry failed",8,Mb),o("button",{class:"btn btn-sm",onClick:t[8]||(t[8]=r=>e.emptyQueue())},"Empty")])])])):f("v-if",!0),e.actionError?(l(),d("div",{key:1,class:"q-toast-error",onClick:t[9]||(t[9]=r=>e.actionError=null)},[t[25]||(t[25]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})],-1)),w(" "+c(e.actionError),1)])):f("v-if",!0),f(" Jobs table "),o("div",Ub,[o("div",$b,[o("div",Lb,"All jobs \xB7 "+c(e.selectedQueue),1),o("div",Fb,[(l(!0),d(K,null,oe(e.allStates,(r,s)=>(l(),d("label",zb,[N(o("input",Hb,null,512),[[n,{state:e.viewState,set:i=>{e.stateFilter[r]=i},value:e.stateFilter[r],form:null,options:{}}]]),o("span",{class:A("q-state-chip q-state-"+r)},c(r),3)]))),256))])]),o("div",Bb,[N(o("input",jb,null,512),[[n,{state:e.viewState,set:r=>{e.query.search=r},value:e.query?.search,form:null,options:{}}]]),o("label",Gb,[N(o("input",Wb,null,512),[[n,{state:e.viewState,set:r=>{e.query.autoRefresh=r},value:e.query?.autoRefresh,form:null,options:{}}]]),t[26]||(t[26]=w(" Auto-refresh ",-1))]),o("button",{class:"btn btn-sm btn-icon",type:"button",title:"Refresh now",onClick:t[10]||(t[10]=r=>e.refreshNow()),"aria-label":"Refresh"},[...t[27]||(t[27]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1)])])]),e.filteredJobs().length>0?(l(),d("table",Kb,[t[46]||(t[46]=o("thead",null,[o("tr",null,[o("th",null,"State"),o("th",null,"Job id"),o("th",null,"Payload"),o("th",null,"Attempts"),o("th",null,"Duration"),o("th",null,"Progress"),o("th")])],-1)),(l(!0),d(K,null,oe(e.filteredJobs(),(r,s)=>(l(),d("tbody",null,[o("tr",{style:{cursor:"pointer"},class:A({"q-row-failed":r?._state=="failed","q-row-expanded":e.expanded[r?.id]}),onClick:i=>e.toggleJob(r)},[o("td",Jb,[o("span",{textContent:c(r?._state),class:A("q-state-badge q-state-"+r?._state)},null,10,Qb),r?._state=="delayed"&&r?.delayUntil?(l(),d("span",{key:0,class:"q-delay-hint",textContent:c(e.delayCountdown(r?.delayUntil))},null,8,Xb)):f("v-if",!0)]),o("td",Zb,[(l(),d("svg",{class:A(["ui-icon q-chevron",{"q-chevron-open":e.expanded[r?.id]}]),"aria-hidden":"true"},[...t[28]||(t[28]=[o("use",{href:"#ui-icon-chevron-right"},null,-1)])],2)),o("a",{target:"_blank",textContent:c("job:"+e.fmt.limitTo(r?.id,6)),onClick:t[11]||(t[11]=i=>i.stopPropagation()),href:e.safeUrl("/r/"+r?.id)},null,8,xb)]),o("td",e1,[o("span",{textContent:c(r?.name||"anonymize")},null,8,t1),r?.data?.repoId&&r?.data?.repoId!==r?.name?(l(),d("span",o1," \xB7 "+c(r?.data?.repoId),1)):f("v-if",!0)]),o("td",{class:"q-cell-num",textContent:c(r?.attemptsMade||1)},null,8,n1),o("td",{class:"q-cell-num",textContent:c(e.jobDuration(r))},null,8,s1),o("td",r1,[e.jobProgressPct(r)!==null?(l(),d("div",i1,[o("div",{class:"q-progress-bar",style:Ie({"--pct":e.jobProgressPct(r)+"%"})},null,4),o("span",{class:"q-progress-label",textContent:c(e.jobProgressPct(r)+"%")},null,8,a1)])):f("v-if",!0)]),o("td",l1,[r?._state=="failed"?(l(),d("button",{key:0,class:"btn btn-sm btn-icon",title:"Retry",onClick:i=>{e.retryJob(r),i.stopPropagation()},"aria-label":"Retry job"},[...t[29]||(t[29]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1)])],8,d1)):f("v-if",!0),o("button",{class:"btn btn-sm btn-icon",title:"Remove","aria-label":"Remove job",onClick:i=>{e.removeJob(r),i.stopPropagation()}},[...t[30]||(t[30]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1)])],8,u1)])],10,Yb),e.expanded[r?.id]?(l(),d("tr",c1,[o("td",p1,[o("div",f1,[o("div",m1,[o("div",h1,[t[31]||(t[31]=o("span",{class:"q-job-detail-label"},"Job id",-1)),o("span",v1,[o("a",{target:"_blank",textContent:c(r?.id),href:e.safeUrl("/r/"+r?.id)},null,8,y1)])]),o("div",g1,[t[32]||(t[32]=o("span",{class:"q-job-detail-label"},"State",-1)),o("span",b1,[o("span",{textContent:c(r?._state),class:A("q-state-badge q-state-"+r?._state)},null,10,w1)])]),r?.data?.repoId?(l(),d("div",k1,[t[33]||(t[33]=o("span",{class:"q-job-detail-label"},"Repo ID",-1)),o("span",{class:"q-job-detail-value",textContent:c(r?.data?.repoId)},null,8,E1)])):f("v-if",!0),r?.timestamp?(l(),d("div",C1,[t[34]||(t[34]=o("span",{class:"q-job-detail-label"},"Created",-1)),o("span",{class:"q-job-detail-value",textContent:c(e.humanTime(r?.timestamp))},null,8,_1)])):f("v-if",!0),r?._state=="delayed"&&r?.delayUntil?(l(),d("div",S1,[t[35]||(t[35]=o("span",{class:"q-job-detail-label"},"Retry at",-1)),o("span",N1,c(e.humanTime(r?.delayUntil))+" ("+c(e.delayCountdown(r?.delayUntil))+")",1)])):f("v-if",!0),r?.processedOn?(l(),d("div",D1,[t[36]||(t[36]=o("span",{class:"q-job-detail-label"},"Processed",-1)),o("span",{class:"q-job-detail-value",textContent:c(e.humanTime(r?.processedOn))},null,8,R1)])):f("v-if",!0),r?.finishedOn?(l(),d("div",T1,[t[37]||(t[37]=o("span",{class:"q-job-detail-label"},"Finished",-1)),o("span",{class:"q-job-detail-value",textContent:c(e.humanTime(r?.finishedOn))},null,8,A1)])):f("v-if",!0),r?.attemptsMade?(l(),d("div",O1,[t[38]||(t[38]=o("span",{class:"q-job-detail-label"},"Attempts",-1)),o("span",{class:"q-job-detail-value",textContent:c(r?.attemptsMade)},null,8,I1)])):f("v-if",!0),r?.progress&&r?.progress?.status?(l(),d("div",P1,[t[39]||(t[39]=o("span",{class:"q-job-detail-label"},"Status",-1)),o("span",{class:"q-job-detail-value",textContent:c(r?.progress?.status)},null,8,V1)])):f("v-if",!0),e.jobProgressPct(r)!==null?(l(),d("div",q1,[t[40]||(t[40]=o("span",{class:"q-job-detail-label"},"Progress",-1)),o("span",{class:"q-job-detail-value",textContent:c(e.jobProgressPct(r)+"%")},null,8,M1)])):f("v-if",!0)]),r?.failedReason?(l(),d("div",U1,[t[41]||(t[41]=o("span",{class:"q-job-detail-label"},"Error",-1)),o("div",{class:"q-error-reason",textContent:c(r?.failedReason)},null,8,$1)])):f("v-if",!0),r?.stacktrace?.length?(l(),d("div",L1,[t[42]||(t[42]=o("span",{class:"q-job-detail-label"},"Stacktrace",-1)),(l(!0),d(K,null,oe(r?.stacktrace,(i,a)=>(l(),d("pre",{class:"q-error-stack",key:a},[o("code",{textContent:c(i)},null,8,F1)]))),128))])):f("v-if",!0),o("div",z1,[r?._state=="failed"?(l(),d("button",{key:0,class:"btn btn-sm",onClick:i=>e.retryJob(r)},[...t[43]||(t[43]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),w(" Retry",-1)])],8,H1)):f("v-if",!0),o("button",{class:"btn btn-sm",onClick:i=>e.removeJob(r)},[...t[44]||(t[44]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),w(" Remove",-1)])],8,B1),o("a",{class:"btn btn-sm",target:"_blank",href:e.safeUrl("/r/"+r?.id)},[...t[45]||(t[45]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-external-link"})],-1),w(" View repo",-1)])],8,j1)])])])])):f("v-if",!0)]))),256))])):f("v-if",!0),e.filteredJobs().length==0?(l(),d("div",G1,[t[47]||(t[47]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-check-circle"})],-1)),e.query?.search?f("v-if",!0):(l(),d("span",W1,"No jobs in the "+c(e.selectedQueue)+" queue.",1)),e.query?.search?(l(),d("span",K1,"No jobs match the current filters.")):f("v-if",!0)])):f("v-if",!0)])])}var Y1={class:"container paper-page admin-page"},J1={class:"admin-summary"},Q1={class:"summary-total"},X1={class:"summary-meta"},Z1=["aria-pressed"],x1={class:"count"},ew=["aria-pressed"],tw={class:"count"},ow=["aria-pressed"],nw={class:"count"},sw=["aria-pressed"],rw={class:"count"},iw=["aria-pressed"],aw={class:"count"},lw={key:0,class:"alert alert-danger",style:{margin:"8px 0"}},dw={class:"w-100 admin-filter-toolbar","aria-label":"Repositories","accept-charset":"UTF-8"},uw={class:"admin-filter-row"},cw={class:"search-wrap"},pw={type:"search",class:"form-control","aria-label":"Search repositories",placeholder:"Search repoId, source repo, error message\u2026",autocomplete:"off"},fw={key:0,class:"admin-search-hint"},mw={class:"admin-filter-inline"},hw={type:"text",class:"form-control form-control-sm",placeholder:"username"},vw={class:"admin-filter-inline"},yw={type:"text",class:"form-control form-control-sm",placeholder:"ID"},gw={class:"admin-filter-inline","aria-label":"Pagination"},bw=["disabled"],ww={style:{"font-family":"var(--font-mono)","font-size":"12px",color:"var(--ink-muted)"}},kw=["disabled"],Ew={key:0,class:"admin-filter-row"},Cw={class:"admin-active-chips"},_w={class:"key"},Sw=["onClick"],Nw={key:1,class:"bulk-bar"},Dw={class:"paper-table paper-table-repos has-bulk w-100",role:"table","aria-label":"Repositories"},Rw={class:"paper-table-head",role:"row"},Tw={role:"columnheader",style:{width:"28px"}},Aw=["checked"],Ow={role:"columnheader"},Iw={role:"columnheader"},Pw={role:"columnheader",class:"num"},Vw={role:"columnheader"},qw={role:"cell",style:{width:"28px"}},Mw={type:"checkbox","aria-label":"Select repository"},Uw={class:"cell-anon",role:"cell"},$w={class:"anon-text"},Lw=["textContent","href"],Fw={class:"anon-sub"},zw=["textContent","href"],Hw={key:0},Bw=["textContent","href"],jw={key:1},Gw=["textContent","href"],Ww={key:2},Kw={class:"cell-status",role:"cell"},Yw={class:"status-line"},Jw=["textContent"],Qw=["textContent","title"],Xw={class:"cell-views num",role:"cell"},Zw=["textContent"],xw={class:"cell-expires",role:"cell"},ek=["textContent"],tk={class:"cell-actions",role:"cell"},ok={class:"dropdown"},nk={class:"dropdown-menu dropdown-menu-right"},sk=["href"],rk=["href"],ik=["href"],ak=["onClick"],lk=["onClick"],dk=["onClick"],uk=["onClick"],ck=["onClick"],pk=["onClick"],fk={key:0,class:"paper-table-empty"},mk={class:"admin-toolbar",style:{"justify-content":"space-between","border-bottom":"none"}},hk={style:{"font-size":"12px",color:"var(--ink-muted)"}},vk={key:0,class:"pagination-compact"},yk=["disabled"],gk=["max"],bk=["disabled"],wk={class:"admin-filter-inline"},kk={class:"form-control form-control-sm"};function Il(e,t){let n=ve("field"),r=ve("form");return l(),d("div",Y1,[t[69]||(t[69]=ue('
Admin \xA0/\xA0 Repositories

Repositories

',3)),o("div",J1,[o("span",Q1,c(e.total>=0?e.fmt.number(e.total):"\u2026"),1),o("span",X1,c(e.fmt?.humanFileSize(e.totalSize))+" on disk",1),o("button",{type:"button",class:A(["summary-pill ok",{active:e.query?.ready}]),title:"Toggle ready filter",onClick:t[0]||(t[0]=s=>{e.query.ready=!e.query.ready,e.query.page=1}),"aria-pressed":!!e.query?.ready},[t[18]||(t[18]=w("Ready ",-1)),o("span",x1,c(e.fmt?.number(e.statusCountFor("ready"))),1)],10,Z1),o("button",{type:"button",class:A(["summary-pill warn",{active:e.query?.preparing}]),title:"Toggle preparing filter",onClick:t[1]||(t[1]=s=>{e.query.preparing=!e.query.preparing,e.query.page=1}),"aria-pressed":!!e.query?.preparing},[t[19]||(t[19]=w("Preparing ",-1)),o("span",tw,c(e.fmt?.number(e.statusCountFor("preparing")+e.statusCountFor("download"))),1)],10,ew),o("button",{type:"button",class:A(["summary-pill error",{active:e.query?.error}]),title:"Toggle errored filter",onClick:t[2]||(t[2]=s=>{e.query.error=!e.query.error,e.query.page=1}),"aria-pressed":!!e.query?.error},[t[20]||(t[20]=w("Errored ",-1)),o("span",nw,c(e.fmt?.number(e.statusCountFor("error"))),1)],10,ow),o("button",{type:"button",class:A(["summary-pill",{active:e.query?.expired}]),title:"Toggle expired filter",onClick:t[3]||(t[3]=s=>{e.query.expired=!e.query.expired,e.query.page=1}),"aria-pressed":!!e.query?.expired},[t[21]||(t[21]=w("Expired ",-1)),o("span",rw,c(e.fmt?.number(e.statusCountFor("expired")+e.statusCountFor("expiring"))),1)],10,sw),o("button",{type:"button",class:A(["summary-pill",{active:e.query?.removed}]),title:"Toggle removed filter",onClick:t[4]||(t[4]=s=>{e.query.removed=!e.query.removed,e.query.page=1}),"aria-pressed":!!e.query?.removed},[t[22]||(t[22]=w("Removed ",-1)),o("span",aw,c(e.fmt?.number(e.statusCountFor("removed")+e.statusCountFor("removing"))),1)],10,iw)]),e.fetchError?(l(),d("div",lw,[t[23]||(t[23]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),w(" "+c(e.fetchError),1)])):f("v-if",!0),N((l(),d("form",dw,[f(" Row 1: search + scoped inputs + headline actions "),o("div",uw,[o("div",cw,[N(o("input",pw,null,512),[[n,{state:e.viewState,set:s=>{e.query.search=s},value:e.query?.search,form:null,options:{}}]]),e.query?.search?f("v-if",!0):(l(),d("span",fw,"/"))]),o("span",mw,[t[24]||(t[24]=o("label",null,"Owner",-1)),N(o("input",hw,null,512),[[n,{state:e.viewState,set:s=>{e.query.owner=s},value:e.query?.owner,form:null,options:{}}]])]),o("span",vw,[t[25]||(t[25]=o("label",null,"Conference",-1)),N(o("input",yw,null,512),[[n,{state:e.viewState,set:s=>{e.query.conference=s},value:e.query?.conference,form:null,options:{}}]])]),t[29]||(t[29]=o("span",{class:"admin-filter-spacer"},null,-1)),o("button",{class:"btn btn-sm",type:"button",title:"Export current view to CSV",onClick:t[5]||(t[5]=s=>e.exportCsv())},[...t[26]||(t[26]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-export"})],-1),w(" Export",-1)])]),o("span",gw,[o("button",{class:"btn btn-sm btn-icon",type:"button",onClick:t[6]||(t[6]=s=>e.query.page=Math.max(1,e.query.page-1)),disabled:e.query?.page<=1,"aria-label":"Previous page"},[...t[27]||(t[27]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-left"})],-1)])],8,bw),o("span",ww,c(e.query?.page)+"/"+c(e.totalPage||1),1),o("button",{class:"btn btn-sm btn-icon",type:"button",onClick:t[7]||(t[7]=s=>e.query.page=Math.min(e.totalPage,e.query.page+1)),disabled:e.query?.page>=e.totalPage,"aria-label":"Next page"},[...t[28]||(t[28]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-right"})],-1)])],8,kw)])]),f(" Row 2: appears only when there are active filter chips "),e.chips?.length?(l(),d("div",Ew,[o("div",Cw,[(l(!0),d(K,null,oe(e.chips,(s,i)=>(l(),d("span",{class:"admin-active-chip",key:s?.key},[o("span",_w,c(s?.label),1),o("span",null,c(s?.value),1),o("button",{type:"button","aria-label":"Remove filter",onClick:a=>e.clearFilter(s.key)},[...t[30]||(t[30]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])],8,Sw)]))),128))])])):f("v-if",!0)])),[[r,e.viewState]]),e.selectedCount()>0?(l(),d("div",Nw,[o("span",null,[o("strong",null,c(e.selectedCount()),1),t[31]||(t[31]=w(" selected",-1))]),o("button",{class:"btn btn-sm",type:"button",onClick:t[8]||(t[8]=s=>e.bulkRefresh())},[...t[32]||(t[32]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),w(" Force refresh",-1)])]),o("button",{class:"btn btn-sm text-danger",type:"button",onClick:t[9]||(t[9]=s=>e.bulkRemoveCache())},[...t[33]||(t[33]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-broom"})],-1),w(" Remove cache",-1)])]),o("button",{class:"btn btn-sm",type:"button",onClick:t[10]||(t[10]=s=>e.clearSelection())},"Clear")])):f("v-if",!0),o("div",Dw,[o("div",Rw,[o("div",Tw,[o("input",{type:"checkbox","aria-label":"Select all on page",onClick:t[11]||(t[11]=s=>e.selectAllOnPage()),checked:e.allSelected},null,8,Aw)]),o("div",Ow,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="source.repositoryName"}]),onClick:t[12]||(t[12]=s=>e.sortBy("source.repositoryName"))},[t[35]||(t[35]=w("Repository ",-1)),e.sortIcon("source.repositoryName")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("source.repositoryName")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[34]||(t[34]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)]),o("div",Iw,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="status"}]),onClick:t[13]||(t[13]=s=>e.sortBy("status"))},[t[37]||(t[37]=w("Status ",-1)),e.sortIcon("status")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("status")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[36]||(t[36]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)]),o("div",Pw,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="pageView"}]),onClick:t[14]||(t[14]=s=>e.sortBy("pageView"))},[t[39]||(t[39]=w("Views ",-1)),e.sortIcon("pageView")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("pageView")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[38]||(t[38]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)]),o("div",Vw,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="anonymizeDate"}]),onClick:t[15]||(t[15]=s=>e.sortBy("anonymizeDate"))},[t[41]||(t[41]=w("Anonymized ",-1)),e.sortIcon("anonymizeDate")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("anonymizeDate")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[40]||(t[40]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)]),t[42]||(t[42]=o("div",{role:"columnheader","aria-label":"Actions"},null,-1))]),(l(!0),d(K,null,oe(e.filteredRepositories,(s,i)=>(l(),d("div",{class:A(["paper-table-row",{"repo-inactive":s?.status=="expired"||s?.status=="removed","repo-error":s?.status=="error","row-selected":e.selected[s?.repoId]}]),role:"row"},[o("div",qw,[N(o("input",Mw,null,512),[[n,{state:e.viewState,set:a=>{e.selected[s.repoId]=a},value:e.selected[s?.repoId],form:null,options:{}}]])]),o("div",Uw,[t[47]||(t[47]=o("svg",{class:"ui-icon record-type-icon",role:"img","aria-label":"Repository"},[o("use",{href:"#project-type-repo"})],-1)),o("div",$w,[o("a",{class:"repo-name",target:"_blank",textContent:c(s?.repoId),href:e.safeUrl("/r/"+s?.repoId)},null,8,Lw),o("div",Fw,[o("a",{textContent:c(s?.source?.repositoryName),href:e.safeUrl("https://github.com/"+s?.source?.repositoryName+"/")},null,8,zw),s?.options?.update?(l(),d("span",Hw,[t[43]||(t[43]=w("\xA0\xB7\xA0",-1)),o("a",{textContent:c(s?.source?.branch),href:e.safeUrl("https://github.com/"+s?.source?.fullName+"/tree/"+s?.source?.branch)},null,8,Bw)])):f("v-if",!0),s?.options?.update?f("v-if",!0):(l(),d("span",jw,[t[44]||(t[44]=w("\xA0\xB7\xA0@",-1)),o("a",{textContent:c(s?.source?.commit?.substring(0,8)),href:e.safeUrl("https://github.com/"+s?.source?.fullName+"/tree/"+s?.source?.commit)},null,8,Gw)])),s?.conference?(l(),d("span",Ww,[t[45]||(t[45]=w("\xA0\xB7\xA0",-1)),t[46]||(t[46]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-conference"})],-1)),w(" "+c(s?.conference),1)])):f("v-if",!0),o("span",null,"\xA0\xB7\xA0"+c(e.fmt?.humanFileSize(s?.size?.storage)),1),o("span",null,"\xA0\xB7\xA0"+c(e.fmt?.number(s?.options?.terms?.length))+" "+c(s?.options?.terms?.length===1?"term":"terms"),1)])])]),o("div",Kw,[o("span",Yw,[o("span",{class:A(["status-dot",{"status-removed":s?.status=="removed"||s?.status=="expired","status-ready":s?.status=="ready","status-error":s?.status=="error","status-preparing":s?.status=="preparing"}])},null,2),o("span",{textContent:c(e.fmt?.title(s?.status))},null,8,Jw)]),s?.statusMessage?(l(),d("span",{key:0,class:"status-sub",textContent:c(e.fmt?.statusMsg(s?.statusMessage)),title:s?.statusMessage},null,8,Qw)):f("v-if",!0)]),o("div",Xw,[t[48]||(t[48]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1)),t[49]||(t[49]=w()),o("span",{textContent:c(e.fmt?.number(s?.pageView||0))},null,8,Zw)]),o("div",xw,[t[50]||(t[50]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),t[51]||(t[51]=w()),o("span",{textContent:c(e.fmt?.humanTime(s?.anonymizeDate))},null,8,ek)]),o("div",tk,[o("div",ok,[t[63]||(t[63]=o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"Actions"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})])],-1)),o("div",nk,[o("a",{class:"dropdown-item",href:e.safeUrl("/anonymize/"+s?.repoId)},[...t[52]||(t[52]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),w(" Edit",-1)])],8,sk),o("a",{class:"dropdown-item",href:e.safeUrl("/r/"+s?.repoId+"/")},[...t[53]||(t[53]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),w(" View repo",-1)])],8,rk),s?.options?.page&&s?.status=="ready"?(l(),d("a",{key:0,class:"dropdown-item",target:"_self",href:e.safeUrl("/w/"+s?.repoId+"/")},[...t[54]||(t[54]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-globe"})],-1),w(" View page",-1)])],8,ik)):f("v-if",!0),o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.fetchGithubInfo(s),["prevent"])},[...t[55]||(t[55]=[o("i",{class:"fab fa-github"},null,-1),w(" Live GitHub info",-1)])],8,ak),t[61]||(t[61]=o("div",{class:"dropdown-divider"},null,-1)),N(o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.updateRepository(s),["prevent"])},[...t[56]||(t[56]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),w(" Force update",-1)])],8,lk),[[j,s?.status=="ready"||s?.status=="error"]]),N(o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.updateRepository(s),["prevent"])},[...t[57]||(t[57]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-check-circle"})],-1),w(" Enable",-1)])],8,dk),[[j,s?.status=="removed"]]),N(o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.showStatusMessage(s),["prevent"])},[...t[58]||(t[58]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1),w(" View status message",-1)])],8,uk),[[j,s?.statusMessage]]),t[62]||(t[62]=o("div",{class:"dropdown-divider"},null,-1)),o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.removeCache(s),["prevent"])},[...t[59]||(t[59]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-broom"})],-1),w(" Remove cache",-1)])],8,ck),N(o("a",{class:"dropdown-item text-danger",href:"#",onClick:ie(a=>e.removeRepository(s),["prevent"])},[...t[60]||(t[60]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),w(" Remove",-1)])],8,pk),[[j,s?.status=="ready"]])])])])],2))),256)),e.filteredRepositories?.length==0?(l(),d("div",fk,[...t[64]||(t[64]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1),o("span",null,"No repositories match the current filters.",-1)])])):f("v-if",!0)]),o("div",mk,[o("span",hk,c(e.fmt?.number(e.total))+" results",1),e.totalPage>1?(l(),d("div",vk,[o("button",{class:"btn btn-sm",onClick:t[16]||(t[16]=s=>e.query.page=Math.max(1,e.query.page-1)),disabled:e.query?.page<=1},[...t[65]||(t[65]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-left"})],-1),w(" Previous ",-1)])],8,yk),N(o("input",{type:"number",class:"form-control form-control-sm",min:"1",style:{width:"56px"},"aria-label":"Page",max:e.totalPage},null,8,gk),[[n,{state:e.viewState,set:s=>{e.query.page=s},value:e.query?.page,form:null,options:{}}]]),o("span",null,"of "+c(e.totalPage),1),o("button",{class:"btn btn-sm",onClick:t[17]||(t[17]=s=>e.query.page=Math.min(e.totalPage,e.query.page+1)),disabled:e.query?.page>=e.totalPage},[...t[66]||(t[66]=[w(" Next ",-1),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-right"})],-1)])],8,bk)])):f("v-if",!0),o("span",wk,[t[68]||(t[68]=o("label",null,"Per page",-1)),N((l(),d("select",kk,[...t[67]||(t[67]=[ue('',5)])])),[[n,{state:e.viewState,set:s=>{e.query.limit=s},value:e.query?.limit,form:null,options:{}}]])])])])}var Ek={class:"container paper-page admin-page"},Ck={class:"paper-crumbs"},_k={class:"here"},Sk={class:"paper-page-title"},Nk={key:0,class:"user-detail-card"},Dk={class:"user-header"},Rk=["src"],Tk={class:"status-dot-wrap"},Ak=["textContent"],Ok={key:0,class:"type-badge type-repo"},Ik={class:"user-actions",style:{"margin-top":"4px"}},Pk={class:"user-detail-grid"},Vk={class:"detail-value"},qk={class:"detail-value"},Mk={key:0,class:"detail-value",style:{"font-family":"var(--font-mono)","font-size":"0.85rem"}},Uk={key:1,class:"detail-value text-muted"},$k={class:"detail-value"},Lk=["href"],Fk={class:"detail-value"},zk={class:"detail-value"},Hk={key:0},Bk={key:1,class:"text-muted"},jk={class:"detail-value"},Gk={key:0,style:{"margin-top":"20px"}},Wk={class:"paper-table w-100",style:{"margin-top":"10px"}},Kk={class:"paper-table-row",style:{"grid-template-columns":"1fr 160px"}},Yk={class:"cell-anon",role:"cell"},Jk={class:"anon-text"},Qk=["textContent"],Xk={class:"cell-expires",role:"cell"},Zk={key:1,class:"admin-section-header"},xk={class:"section-count"},e0={key:2,class:"user-detail-card"},t0={type:"text",class:"form-control",placeholder:"Token name (e.g. dev-laptop)",required:""},o0={key:0,class:"alert alert-warning",role:"alert"},n0={style:{"white-space":"pre-wrap","word-break":"break-all",margin:"8px 0 0","font-family":"var(--font-mono)","font-size":"0.85rem"}},s0={key:1,class:"paper-table w-100"},r0={class:"paper-table-row",role:"row",style:{"grid-template-columns":"1fr 200px 200px 80px"}},i0=["textContent"],a0=["textContent"],l0={role:"cell"},d0={key:0},u0={key:1,class:"text-muted"},c0={role:"cell"},p0=["onClick"],f0={key:2,class:"paper-table-empty"},m0={class:"admin-section-header"},h0={class:"section-count"},v0={class:"admin-summary"},y0={class:"summary-total"},g0=["aria-pressed"],b0={class:"count"},w0=["aria-pressed"],k0={class:"count"},E0=["aria-pressed"],C0={class:"count"},_0=["aria-pressed"],S0={class:"count"},N0=["aria-pressed"],D0={class:"count"},R0={class:"w-100 admin-filter-toolbar","aria-label":"Repositories","accept-charset":"UTF-8"},T0={class:"admin-filter-row"},A0={class:"search-wrap"},O0={type:"search",class:"form-control","aria-label":"Search repositories",placeholder:"Search repoId, source repo, error message\u2026",autocomplete:"off"},I0={key:3,class:"bulk-bar"},P0={class:"paper-table paper-table-repos has-bulk w-100",role:"table","aria-label":"Repositories"},V0={class:"paper-table-head",role:"row"},q0={role:"columnheader",style:{width:"28px"}},M0=["checked"],U0={role:"columnheader"},$0={role:"columnheader"},L0={role:"columnheader",class:"num"},F0={role:"columnheader"},z0={role:"cell",style:{width:"28px"}},H0={type:"checkbox","aria-label":"Select repository"},B0={class:"cell-anon",role:"cell"},j0={class:"anon-text"},G0=["textContent","href"],W0={class:"anon-sub"},K0=["textContent","href"],Y0={key:0},J0=["textContent","href"],Q0={key:1},X0=["textContent","href"],Z0={key:2},x0={class:"cell-status",role:"cell"},eE={class:"status-line"},tE=["textContent"],oE=["textContent","title"],nE=["textContent"],sE=["textContent"],rE={class:"cell-actions",role:"cell"},iE={class:"dropdown"},aE={class:"dropdown-menu dropdown-menu-right"},lE=["href"],dE=["href"],uE=["href"],cE=["onClick"],pE=["onClick"],fE=["onClick"],mE=["onClick"],hE=["onClick"],vE=["onClick"],yE={key:0,class:"paper-table-empty"};function Pl(e,t){let n=ve("field"),r=ve("form");return l(),d("div",Ek,[o("div",Ck,[t[22]||(t[22]=o("a",{href:"/admin/"},"Admin",-1)),t[23]||(t[23]=w(" \xA0/\xA0 ",-1)),t[24]||(t[24]=o("a",{href:"/admin/users"},"Users",-1)),t[25]||(t[25]=w(" \xA0/\xA0 ",-1)),o("span",_k,c(e.userInfo?.username||"Profile"),1)]),o("h1",Sk,c(e.userInfo?.username||"User"),1),t[87]||(t[87]=ue('',1)),e.userInfo?(l(),d("div",Nk,[o("div",Dk,[e.userInfo?.photo?(l(),d("img",{key:0,width:"56",height:"56",src:e.safeUrl(e.userInfo?.photo)},null,8,Rk)):f("v-if",!0),o("div",null,[o("h2",null,[w(c(e.userInfo?.username)+" ",1),o("span",Tk,[o("span",{class:A(["status-dot",{"status-ready":e.userInfo?.status=="active","status-removed":e.userInfo?.status!="active"}])},null,2),o("span",{textContent:c(e.fmt?.title(e.userInfo?.status))},null,8,Ak)]),e.userInfo?.isAdmin?(l(),d("span",Ok,"Admin")):f("v-if",!0)]),o("div",Ik,[e.userInfo?.status!=="banned"?(l(),d("button",{key:0,class:"btn btn-sm text-danger",onClick:t[0]||(t[0]=s=>e.banUser())},[...t[26]||(t[26]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-ban"})],-1),w(" Ban",-1)])])):f("v-if",!0),e.userInfo?.status==="banned"||e.userInfo?.status==="removed"?(l(),d("button",{key:1,class:"btn btn-sm",onClick:t[1]||(t[1]=s=>e.activateUser())},[...t[27]||(t[27]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-check-circle"})],-1),w(" Activate",-1)])])):f("v-if",!0),e.userInfo?.isAdmin?f("v-if",!0):(l(),d("button",{key:2,class:"btn btn-sm",onClick:t[2]||(t[2]=s=>e.promoteUser())},[...t[28]||(t[28]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user-shield"})],-1),w(" Promote to admin",-1)])])),e.userInfo?.isAdmin?(l(),d("button",{key:3,class:"btn btn-sm text-danger",onClick:t[3]||(t[3]=s=>e.demoteUser())},[...t[29]||(t[29]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user-minus"})],-1),w(" Remove admin",-1)])])):f("v-if",!0)])])]),o("div",Pk,[t[32]||(t[32]=o("div",{class:"detail-label"},"ID",-1)),o("div",Vk,c(e.userInfo?._id),1),t[33]||(t[33]=o("div",{class:"detail-label"},"Email",-1)),o("div",qk,c(e.userInfo?.emails?.[0]?.email),1),t[34]||(t[34]=o("div",{class:"detail-label"},"Access token",-1)),e.userInfo?.accessTokens?.github?(l(),d("div",Mk,c(e.userInfo?.accessTokens?.github),1)):f("v-if",!0),e.userInfo?.accessTokens?.github?f("v-if",!0):(l(),d("div",Uk,"None stored")),t[35]||(t[35]=o("div",{class:"detail-label"},"GitHub",-1)),o("div",$k,[o("a",{target:"_blank",href:e.safeUrl("https://github.com/"+e.userInfo?.username)},[t[30]||(t[30]=o("i",{class:"fab fa-github"},null,-1)),w(" "+c(e.userInfo?.username),1)],8,Lk)]),t[36]||(t[36]=o("div",{class:"detail-label"},"Created",-1)),o("div",Fk,c(e.fmt?.humanTime(e.userInfo?.dateOfEntry)),1),t[37]||(t[37]=o("div",{class:"detail-label"},"Last connection",-1)),o("div",zk,[e.userInfo?.accessTokenDates?.github?(l(),d("span",Hk,c(e.fmt?.humanTime(e.userInfo?.accessTokenDates?.github)),1)):f("v-if",!0),e.userInfo?.accessTokenDates?.github?f("v-if",!0):(l(),d("span",Bk,"never"))]),t[38]||(t[38]=o("div",{class:"detail-label"},"GitHub repos",-1)),o("div",jk,[w(c(e.userInfo?.repositories?.length)+" repositories ",1),o("button",{class:"btn btn-sm ml-2",onClick:t[4]||(t[4]=s=>e.showRepos=!e.showRepos)},c(e.showRepos?"Hide":"Show"),1),o("button",{class:"btn btn-sm ml-1",onClick:t[5]||(t[5]=s=>e.getGitHubRepositories())},[...t[31]||(t[31]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),w(" Refresh ",-1)])])])]),e.showRepos?(l(),d("div",Gk,[t[41]||(t[41]=o("div",{class:"paper-section-eyebrow"},"GitHub repositories",-1)),o("div",Wk,[(l(!0),d(K,null,oe(e.userInfo?.repositories,(s,i)=>(l(),d("div",Kk,[o("div",Yk,[t[39]||(t[39]=o("svg",{class:"ui-icon record-type-icon",role:"img","aria-label":"Repository"},[o("use",{href:"#project-type-repo"})],-1)),o("div",Jk,[o("span",{class:"repo-name",textContent:c(s?.name)},null,8,Qk)])]),o("div",Xk,[t[40]||(t[40]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-database"})],-1)),w(" "+c(e.fmt?.humanFileSize(s?.size)),1)])]))),256))])])):f("v-if",!0)])):f("v-if",!0),e.userInfo&&e.userInfo?.isAdmin&&e.user&&e.user?.username==e.userInfo?.username?(l(),d("div",Zk,[t[42]||(t[42]=o("h2",null,[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-key"})]),w(" API tokens")],-1)),o("span",xk,c(e.tokens?.length),1)])):f("v-if",!0),e.userInfo&&e.userInfo?.isAdmin&&e.user&&e.user?.username==e.userInfo?.username?(l(),d("div",e0,[t[48]||(t[48]=o("p",{class:"paper-page-lede"},[w("Personal API tokens for this admin account. Send as "),o("code",null,"Authorization: Bearer "),w(" to authenticate without GitHub OAuth (useful for development).")],-1)),N((l(),d("form",{class:"d-flex",style:{gap:"8px","margin-bottom":"12px"},onSubmit:t[6]||(t[6]=ie(s=>e.submitForm(s,()=>{e.createToken()}),["prevent"]))},[N(o("input",t0,null,512),[[n,{state:e.viewState,set:s=>{e.tokenForm.name=s},value:e.tokenForm?.name,form:null,options:{}}]]),t[43]||(t[43]=o("button",{type:"submit",class:"btn btn-ink"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-plus"})]),w(" Generate")],-1))],32)),[[r,e.viewState]]),e.tokenForm?.plaintext?(l(),d("div",o0,[t[44]||(t[44]=o("strong",null,"Copy this token now \u2014 it will not be shown again:",-1)),o("pre",n0,c(e.tokenForm?.plaintext),1),o("button",{class:"btn btn-sm",onClick:t[7]||(t[7]=s=>e.tokenForm.plaintext=null)},"Dismiss")])):f("v-if",!0),e.tokens?.length?(l(),d("div",s0,[t[46]||(t[46]=o("div",{class:"paper-table-head",role:"row",style:{"grid-template-columns":"1fr 200px 200px 80px"}},[o("div",{role:"columnheader"},"Name"),o("div",{role:"columnheader"},"Created"),o("div",{role:"columnheader"},"Last used"),o("div",{role:"columnheader","aria-label":"Actions"})],-1)),(l(!0),d(K,null,oe(e.tokens,(s,i)=>(l(),d("div",r0,[o("div",{role:"cell",textContent:c(s?.name)},null,8,i0),o("div",{role:"cell",textContent:c(e.fmt?.humanTime(s?.createdAt))},null,8,a0),o("div",l0,[s?.lastUsedAt?(l(),d("span",d0,c(e.fmt?.humanTime(s?.lastUsedAt)),1)):f("v-if",!0),s?.lastUsedAt?f("v-if",!0):(l(),d("span",u0,"never"))]),o("div",c0,[o("button",{class:"btn btn-sm text-danger btn-icon",title:"Revoke","aria-label":"Revoke token",onClick:a=>e.revokeToken(s)},[...t[45]||(t[45]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1)])],8,p0)])]))),256))])):f("v-if",!0),e.tokens?.length?f("v-if",!0):(l(),d("div",f0,[...t[47]||(t[47]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1),o("span",null,"No tokens yet.",-1)])]))])):f("v-if",!0),o("div",m0,[t[49]||(t[49]=o("h2",null,[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})]),w(" Anonymized repositories")],-1)),o("span",h0,c(e.repositories?.length),1)]),o("div",v0,[o("span",y0,c(e.fmt?.number(e.repositories?.length)),1),o("button",{type:"button",class:A(["summary-pill ok",{active:e.filters?.status?.ready===!1}]),title:"Toggle ready filter",onClick:t[8]||(t[8]=s=>e.filters.status.ready=!e.filters.status.ready),"aria-pressed":e.filters?.status?.ready===!1},[t[50]||(t[50]=w("Ready ",-1)),o("span",b0,c(e.fmt?.number(e.statusCountFor("ready"))),1)],10,g0),o("button",{type:"button",class:A(["summary-pill warn",{active:e.filters?.status?.preparing===!1}]),title:"Toggle preparing filter",onClick:t[9]||(t[9]=s=>e.filters.status.preparing=!e.filters.status.preparing),"aria-pressed":e.filters?.status?.preparing===!1},[t[51]||(t[51]=w("Preparing ",-1)),o("span",k0,c(e.fmt?.number(e.statusCountFor("preparing"))),1)],10,w0),o("button",{type:"button",class:A(["summary-pill error",{active:e.filters?.status?.error===!1}]),title:"Toggle errored filter",onClick:t[10]||(t[10]=s=>e.filters.status.error=!e.filters.status.error),"aria-pressed":e.filters?.status?.error===!1},[t[52]||(t[52]=w("Errored ",-1)),o("span",C0,c(e.fmt?.number(e.statusCountFor("error"))),1)],10,E0),o("button",{type:"button",class:A(["summary-pill",{active:e.filters?.status?.expired===!1}]),title:"Toggle expired filter",onClick:t[11]||(t[11]=s=>e.filters.status.expired=!e.filters.status.expired),"aria-pressed":e.filters?.status?.expired===!1},[t[53]||(t[53]=w("Expired ",-1)),o("span",S0,c(e.fmt?.number(e.statusCountFor("expired"))),1)],10,_0),o("button",{type:"button",class:A(["summary-pill",{active:e.filters?.status?.removed===!1}]),title:"Toggle removed filter",onClick:t[12]||(t[12]=s=>e.filters.status.removed=!e.filters.status.removed),"aria-pressed":e.filters?.status?.removed===!1},[t[54]||(t[54]=w("Removed ",-1)),o("span",D0,c(e.fmt?.number(e.statusCountFor("removed"))),1)],10,N0)]),N((l(),d("form",R0,[o("div",T0,[o("div",A0,[N(o("input",O0,null,512),[[n,{state:e.viewState,set:s=>{e.search=s},value:e.search,form:null,options:{}}]])]),t[56]||(t[56]=o("span",{class:"admin-filter-spacer"},null,-1)),o("button",{class:"btn btn-sm",type:"button",title:"Export current view to CSV",onClick:t[13]||(t[13]=s=>e.exportCsv())},[...t[55]||(t[55]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-export"})],-1),w(" Export",-1)])])])])),[[r,e.viewState]]),e.selectedCount()>0?(l(),d("div",I0,[o("span",null,[o("strong",null,c(e.selectedCount()),1),t[57]||(t[57]=w(" selected",-1))]),o("button",{class:"btn btn-sm",type:"button",onClick:t[14]||(t[14]=s=>e.bulkRefresh())},[...t[58]||(t[58]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),w(" Force refresh",-1)])]),o("button",{class:"btn btn-sm text-danger",type:"button",onClick:t[15]||(t[15]=s=>e.bulkRemoveCache())},[...t[59]||(t[59]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-broom"})],-1),w(" Remove cache",-1)])]),o("button",{class:"btn btn-sm",type:"button",onClick:t[16]||(t[16]=s=>e.clearSelection())},"Clear")])):f("v-if",!0),o("div",P0,[o("div",V0,[o("div",q0,[o("input",{type:"checkbox","aria-label":"Select all on page",onClick:t[17]||(t[17]=s=>e.selectAllOnPage()),checked:e.allSelected},null,8,M0)]),o("div",U0,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="source.repositoryName"}]),onClick:t[18]||(t[18]=s=>e.sortBy("source.repositoryName"))},[t[61]||(t[61]=w("Repository ",-1)),e.sortIcon("source.repositoryName")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("source.repositoryName")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[60]||(t[60]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)]),o("div",$0,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="status"}]),onClick:t[19]||(t[19]=s=>e.sortBy("status"))},[t[63]||(t[63]=w("Status ",-1)),e.sortIcon("status")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("status")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[62]||(t[62]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)]),o("div",L0,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="pageView"}]),onClick:t[20]||(t[20]=s=>e.sortBy("pageView"))},[t[65]||(t[65]=w("Views ",-1)),e.sortIcon("pageView")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("pageView")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[64]||(t[64]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)]),o("div",F0,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="anonymizeDate"}]),onClick:t[21]||(t[21]=s=>e.sortBy("anonymizeDate"))},[t[67]||(t[67]=w("Anonymized ",-1)),e.sortIcon("anonymizeDate")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("anonymizeDate")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[66]||(t[66]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)]),t[68]||(t[68]=o("div",{role:"columnheader","aria-label":"Actions"},null,-1))]),(l(!0),d(K,null,oe(e.filteredRepositories,(s,i)=>(l(),d("div",{class:A(["paper-table-row",{"repo-inactive":s?.status=="expired"||s?.status=="removed","repo-error":s?.status=="error","row-selected":e.selected[s?.repoId]}]),role:"row"},[o("div",z0,[N(o("input",H0,null,512),[[n,{state:e.viewState,set:a=>{e.selected[s.repoId]=a},value:e.selected[s?.repoId],form:null,options:{}}]])]),o("div",B0,[t[73]||(t[73]=o("svg",{class:"ui-icon record-type-icon",role:"img","aria-label":"Repository"},[o("use",{href:"#project-type-repo"})],-1)),o("div",j0,[o("a",{class:"repo-name",target:"_blank",textContent:c(s?.repoId),href:e.safeUrl("/r/"+s?.repoId)},null,8,G0),o("div",W0,[o("a",{textContent:c(s?.source?.fullName),href:e.safeUrl("https://github.com/"+s?.source?.fullName+"/")},null,8,K0),s?.options?.update?(l(),d("span",Y0,[t[69]||(t[69]=w("\xA0\xB7\xA0",-1)),o("a",{textContent:c(s?.source?.branch),href:e.safeUrl("https://github.com/"+s?.source?.fullName+"/tree/"+s?.source?.branch)},null,8,J0)])):f("v-if",!0),s?.options?.update?f("v-if",!0):(l(),d("span",Q0,[t[70]||(t[70]=w("\xA0\xB7\xA0@",-1)),o("a",{textContent:c(s?.source?.commit?.substring(0,8)),href:e.safeUrl("https://github.com/"+s?.source?.fullName+"/tree/"+s?.source?.commit)},null,8,X0)])),s?.conference?(l(),d("span",Z0,[t[71]||(t[71]=w("\xA0\xB7\xA0",-1)),t[72]||(t[72]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-conference"})],-1)),w(" "+c(s?.conference),1)])):f("v-if",!0),o("span",null,"\xA0\xB7\xA0"+c(e.fmt?.humanFileSize(s?.size?.storage)),1),o("span",null,"\xA0\xB7\xA0"+c(e.fmt?.number(s?.options?.terms?.length))+" "+c(s?.options?.terms?.length===1?"term":"terms"),1)])])]),o("div",x0,[o("span",eE,[o("span",{class:A(["status-dot",{"status-removed":s?.status=="removed"||s?.status=="expired","status-ready":s?.status=="ready","status-error":s?.status=="error","status-preparing":s?.status=="preparing"}])},null,2),o("span",{textContent:c(e.fmt?.title(s?.status))},null,8,tE)]),s?.statusMessage?(l(),d("span",{key:0,class:"status-sub",textContent:c(e.fmt?.statusMsg(s?.statusMessage)),title:s?.statusMessage},null,8,oE)):f("v-if",!0)]),o("div",{class:"cell-views num",role:"cell",textContent:c(e.fmt?.number(s?.pageView||0))},null,8,nE),o("div",{class:"cell-expires",role:"cell",textContent:c(e.fmt?.humanTime(s?.anonymizeDate))},null,8,sE),o("div",rE,[o("div",iE,[t[85]||(t[85]=o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"Actions"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})])],-1)),o("div",aE,[o("a",{class:"dropdown-item",href:e.safeUrl("/anonymize/"+s?.repoId)},[...t[74]||(t[74]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),w(" Edit",-1)])],8,lE),o("a",{class:"dropdown-item",href:e.safeUrl("/r/"+s?.repoId+"/")},[...t[75]||(t[75]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),w(" View repo",-1)])],8,dE),s?.options?.page&&s?.status=="ready"?(l(),d("a",{key:0,class:"dropdown-item",target:"_self",href:e.safeUrl("/w/"+s?.repoId+"/")},[...t[76]||(t[76]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-globe"})],-1),w(" View page",-1)])],8,uE)):f("v-if",!0),o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.fetchGithubInfo(s),["prevent"])},[...t[77]||(t[77]=[o("i",{class:"fab fa-github"},null,-1),w(" Live GitHub info",-1)])],8,cE),t[83]||(t[83]=o("div",{class:"dropdown-divider"},null,-1)),N(o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.updateRepository(s),["prevent"])},[...t[78]||(t[78]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),w(" Force update",-1)])],8,pE),[[j,s?.status=="ready"||s?.status=="error"]]),N(o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.updateRepository(s),["prevent"])},[...t[79]||(t[79]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-check-circle"})],-1),w(" Enable",-1)])],8,fE),[[j,s?.status=="removed"]]),N(o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.showStatusMessage(s),["prevent"])},[...t[80]||(t[80]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1),w(" View status message",-1)])],8,mE),[[j,s?.statusMessage]]),t[84]||(t[84]=o("div",{class:"dropdown-divider"},null,-1)),o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.removeCache(s),["prevent"])},[...t[81]||(t[81]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-broom"})],-1),w(" Remove cache",-1)])],8,hE),N(o("a",{class:"dropdown-item text-danger",href:"#",onClick:ie(a=>e.removeRepository(s),["prevent"])},[...t[82]||(t[82]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),w(" Remove",-1)])],8,vE),[[j,s?.status=="ready"]])])])])],2))),256)),e.filteredRepositories?.length==0?(l(),d("div",yE,[...t[86]||(t[86]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1),o("span",null,"No repositories match the current filters.",-1)])])):f("v-if",!0)])])}var gE={class:"container paper-page admin-page"},bE={class:"admin-summary"},wE={class:"summary-total"},kE=["aria-pressed"],EE={class:"count"},CE=["aria-pressed"],_E={class:"count"},SE=["aria-pressed"],NE={class:"count"},DE={key:0,class:"alert alert-danger",style:{margin:"8px 0"}},RE={class:"w-100 admin-filter-toolbar","aria-label":"Users","accept-charset":"UTF-8"},TE={class:"admin-filter-row"},AE={class:"search-wrap"},OE={type:"search",class:"form-control","aria-label":"Search users",placeholder:"Search username or email\u2026",autocomplete:"off"},IE={key:0,class:"admin-search-hint"},PE={class:"admin-filter-inline"},VE={class:"form-control form-control-sm"},qE={class:"admin-filter-inline","aria-label":"Pagination"},ME=["disabled"],UE={style:{"font-family":"var(--font-mono)","font-size":"12px",color:"var(--ink-muted)"}},$E=["disabled"],LE={key:0,class:"admin-filter-row"},FE={class:"admin-active-chips"},zE={class:"key"},HE=["onClick"],BE={key:1,class:"bulk-bar"},jE={class:"paper-table w-100",role:"table","aria-label":"Users",style:{"--cols":"28px minmax(280px, 2.4fr) 100px 140px 140px 52px"}},GE={class:"paper-table-head admin-users-row",role:"row"},WE={role:"columnheader",style:{width:"28px"}},KE=["checked"],YE={role:"columnheader"},JE={role:"columnheader"},QE={role:"cell",style:{width:"28px"}},XE={type:"checkbox","aria-label":"Select user"},ZE={class:"cell-anon",role:"cell"},xE=["src"],eC={class:"anon-text"},tC=["textContent","href"],oC={class:"anon-sub"},nC={key:0},sC=["href"],rC={key:1},iC={class:"cell-views num",role:"cell"},aC=["textContent","href"],lC={class:"cell-status",role:"cell"},dC=["textContent"],uC={class:"cell-status",role:"cell"},cC={key:0,class:"type-badge type-repo"},pC={key:1,class:"empty-dash"},fC={class:"cell-actions",role:"cell"},mC={class:"dropdown"},hC={class:"dropdown-menu dropdown-menu-right"},vC=["href"],yC=["href"],gC=["onClick"],bC=["onClick"],wC={key:0,class:"paper-table-empty"},kC={class:"admin-toolbar",style:{"justify-content":"space-between","border-bottom":"none"}},EC={style:{"font-size":"12px",color:"var(--ink-muted)"}},CC={key:0,class:"pagination-compact"},_C=["disabled"],SC=["max"],NC=["disabled"],DC={class:"admin-filter-inline"},RC={class:"form-control form-control-sm"};function Vl(e,t){let n=ve("field"),r=ve("form");return l(),d("div",gE,[t[46]||(t[46]=ue('
Admin \xA0/\xA0 Users

Users

',3)),o("div",bE,[o("span",wE,c(e.total>=0?e.fmt.number(e.total):"\u2026"),1),o("button",{type:"button",class:A(["summary-pill ok",{active:e.query?.status=="active"}]),onClick:t[0]||(t[0]=s=>{e.query.status=e.query.status=="active"?"":"active",e.query.page=1}),"aria-pressed":e.query?.status=="active"},[t[13]||(t[13]=w("Active ",-1)),o("span",EE,c(e.fmt?.number(e.statusCountFor("active"))),1)],10,kE),o("button",{type:"button",class:A(["summary-pill error",{active:e.query?.status=="banned"}]),onClick:t[1]||(t[1]=s=>{e.query.status=e.query.status=="banned"?"":"banned",e.query.page=1}),"aria-pressed":e.query?.status=="banned"},[t[14]||(t[14]=w("Banned ",-1)),o("span",_E,c(e.fmt?.number(e.statusCountFor("banned"))),1)],10,CE),o("button",{type:"button",class:A(["summary-pill",{active:e.query?.status=="removed"}]),onClick:t[2]||(t[2]=s=>{e.query.status=e.query.status=="removed"?"":"removed",e.query.page=1}),"aria-pressed":e.query?.status=="removed"},[t[15]||(t[15]=w("Removed ",-1)),o("span",NE,c(e.fmt?.number(e.statusCountFor("removed"))),1)],10,SE)]),e.fetchError?(l(),d("div",DE,[t[16]||(t[16]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),w(" "+c(e.fetchError),1)])):f("v-if",!0),N((l(),d("form",RE,[o("div",TE,[o("div",AE,[N(o("input",OE,null,512),[[n,{state:e.viewState,set:s=>{e.query.search=s},value:e.query?.search,form:null,options:{}}]]),e.query?.search?f("v-if",!0):(l(),d("span",IE,"/"))]),o("span",PE,[t[18]||(t[18]=o("label",null,"Role",-1)),N((l(),d("select",VE,[...t[17]||(t[17]=[o("option",{value:""},"Any",-1),o("option",{value:"admin"},"Admin",-1)])])),[[n,{state:e.viewState,set:s=>{e.query.role=s},value:e.query?.role,form:null,options:{}}]])]),t[22]||(t[22]=o("span",{class:"admin-filter-spacer"},null,-1)),o("button",{class:"btn btn-sm",type:"button",onClick:t[3]||(t[3]=s=>e.exportCsv())},[...t[19]||(t[19]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-export"})],-1),w(" Export",-1)])]),o("span",qE,[o("button",{class:"btn btn-sm btn-icon",type:"button",onClick:t[4]||(t[4]=s=>e.query.page=Math.max(1,e.query.page-1)),disabled:e.query?.page<=1,"aria-label":"Previous page"},[...t[20]||(t[20]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-left"})],-1)])],8,ME),o("span",UE,c(e.query?.page)+"/"+c(e.totalPage||1),1),o("button",{class:"btn btn-sm btn-icon",type:"button",onClick:t[5]||(t[5]=s=>e.query.page=Math.min(e.totalPage,e.query.page+1)),disabled:e.query?.page>=e.totalPage,"aria-label":"Next page"},[...t[21]||(t[21]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-right"})],-1)])],8,$E)])]),e.chips?.length?(l(),d("div",LE,[o("div",FE,[(l(!0),d(K,null,oe(e.chips,(s,i)=>(l(),d("span",{class:"admin-active-chip",key:s?.key},[o("span",zE,c(s?.label),1),o("span",null,c(s?.value),1),o("button",{type:"button",onClick:a=>e.clearFilter(s.key),"aria-label":"Clear filter"},[...t[23]||(t[23]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])],8,HE)]))),128))])])):f("v-if",!0)])),[[r,e.viewState]]),e.selectedCount()>0?(l(),d("div",BE,[o("span",null,[o("strong",null,c(e.selectedCount()),1),t[24]||(t[24]=w(" selected",-1))]),o("button",{class:"btn btn-sm text-danger",type:"button",onClick:t[6]||(t[6]=s=>e.bulkBan())},[...t[25]||(t[25]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-ban"})],-1),w(" Ban",-1)])]),o("button",{class:"btn btn-sm",type:"button",onClick:t[7]||(t[7]=s=>{e.selected={},e.allSelected=!1})},"Clear")])):f("v-if",!0),o("div",jE,[o("div",GE,[o("div",WE,[o("input",{type:"checkbox","aria-label":"Select all on page",onClick:t[8]||(t[8]=s=>e.selectAllOnPage()),checked:e.allSelected},null,8,KE)]),o("div",YE,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="username"}]),onClick:t[9]||(t[9]=s=>e.sortBy("username"))},[t[27]||(t[27]=w("User ",-1)),e.sortIcon("username")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("username")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[26]||(t[26]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)]),t[30]||(t[30]=o("div",{role:"columnheader",class:"num"},"Repos",-1)),o("div",JE,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="status"}]),onClick:t[10]||(t[10]=s=>e.sortBy("status"))},[t[29]||(t[29]=w("Status ",-1)),e.sortIcon("status")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("status")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[28]||(t[28]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)]),t[31]||(t[31]=o("div",{role:"columnheader"},"Role",-1)),t[32]||(t[32]=o("div",{role:"columnheader","aria-label":"Actions"},null,-1))]),(l(!0),d(K,null,oe(e.filteredUsers,(s,i)=>(l(),d("div",{class:A(["paper-table-row admin-users-row",{"row-selected":e.selected[s?.username]}]),role:"row"},[o("div",QE,[N(o("input",XE,null,512),[[n,{state:e.viewState,set:a=>{e.selected[s.username]=a},value:e.selected[s?.username],form:null,options:{}}]])]),o("div",ZE,[s?.photo?(l(),d("img",{key:0,width:"28",height:"28",class:"rounded-circle",style:{"flex-shrink":"0"},src:e.safeUrl(s?.photo)},null,8,xE)):f("v-if",!0),o("div",eC,[o("a",{class:"repo-name",textContent:c(s?.username),href:e.safeUrl("/admin/users/"+s?.username)},null,8,tC),o("div",oC,[s?.emails?.[0]?.email?(l(),d("span",nC,c(s?.emails?.[0]?.email)+" \xB7 ",1)):f("v-if",!0),o("a",{target:"_blank",href:e.safeUrl("https://github.com/"+s?.username)},[t[33]||(t[33]=o("i",{class:"fab fa-github"},null,-1)),w(" "+c(s?.username),1)],8,sC),s?.dateOfEntry?(l(),d("span",rC,"\xA0\xB7\xA0Joined "+c(e.fmt?.humanTime(s?.dateOfEntry)),1)):f("v-if",!0)])])]),o("div",iC,[t[34]||(t[34]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1)),o("a",{title:"Show this user's repositories",textContent:c(e.fmt?.number(s?.repoCount||0)),href:e.safeUrl("/admin/repositories?owner="+s?.username)},null,8,aC)]),o("div",lC,[o("span",{class:A(["status-dot",{"status-ready":s?.status=="active","status-removed":s?.status=="removed"||s?.status=="banned"}])},null,2),o("span",{textContent:c(e.fmt?.title(s?.status))},null,8,dC)]),o("div",uC,[s?.isAdmin?(l(),d("span",cC,"Admin")):f("v-if",!0),s?.isAdmin?f("v-if",!0):(l(),d("span",pC,"\u2014"))]),o("div",fC,[o("div",mC,[t[40]||(t[40]=o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"Actions"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})])],-1)),o("div",hC,[o("a",{class:"dropdown-item",href:e.safeUrl("/admin/users/"+s?.username)},[...t[35]||(t[35]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),w(" View details",-1)])],8,vC),o("a",{class:"dropdown-item",href:e.safeUrl("/admin/repositories?owner="+s?.username)},[...t[36]||(t[36]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1),w(" View repositories",-1)])],8,yC),t[39]||(t[39]=o("div",{class:"dropdown-divider"},null,-1)),N(o("a",{class:"dropdown-item text-danger",href:"#",onClick:ie(a=>e.banUser(s),["prevent"])},[...t[37]||(t[37]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-ban"})],-1),w(" Ban",-1)])],8,gC),[[j,s?.status=="active"]]),N(o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.activateUser(s),["prevent"])},[...t[38]||(t[38]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-check-circle"})],-1),w(" Activate",-1)])],8,bC),[[j,s?.status=="removed"||s?.status=="banned"]])])])])],2))),256)),e.filteredUsers?.length==0?(l(),d("div",wC,[...t[41]||(t[41]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1),o("span",null,"No users match the current filters.",-1)])])):f("v-if",!0)]),o("div",kC,[o("span",EC,c(e.fmt?.number(e.total))+" results",1),e.totalPage>1?(l(),d("div",CC,[o("button",{class:"btn btn-sm",onClick:t[11]||(t[11]=s=>e.query.page=Math.max(1,e.query.page-1)),disabled:e.query?.page<=1},[...t[42]||(t[42]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-left"})],-1),w(" Previous",-1)])],8,_C),N(o("input",{type:"number",class:"form-control form-control-sm",min:"1",style:{width:"56px"},max:e.totalPage},null,8,SC),[[n,{state:e.viewState,set:s=>{e.query.page=s},value:e.query?.page,form:null,options:{}}]]),o("span",null,"of "+c(e.totalPage),1),o("button",{class:"btn btn-sm",onClick:t[12]||(t[12]=s=>e.query.page=Math.min(e.totalPage,e.query.page+1)),disabled:e.query?.page>=e.totalPage},[...t[43]||(t[43]=[w("Next ",-1),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-right"})],-1)])],8,NC)])):f("v-if",!0),o("span",DC,[t[45]||(t[45]=o("label",null,"Per page",-1)),N((l(),d("select",RC,[...t[44]||(t[44]=[o("option",{value:"10"},"10",-1),o("option",{value:"25"},"25",-1),o("option",{value:"50"},"50",-1),o("option",{value:"100"},"100",-1)])])),[[n,{state:e.viewState,set:s=>{e.query.limit=s},value:e.query?.limit,form:null,options:{}}]])])])])}var TC={class:"anonymize-landing"},AC={class:"anonymize-landing-inner"},OC={class:"form-group mt-4 mb-2"},IC={class:"source-url-label-row"},PC={key:0,class:"repo-access","aria-label":"GitHub access"},VC={key:0,class:"repo-access-switch",role:"group","aria-label":"Repository connection"},qC=["aria-pressed","disabled"],MC=["aria-pressed","disabled"],UC={key:1,class:"connection-badge"},$C={id:"sourceUrl-landing",type:"text",class:"form-control form-control-lg",placeholder:"https://github.com/owner/repository"},LC={key:0,class:"draft-status",role:"status"},FC={key:1,class:"text-danger",role:"alert"},zC={key:2,class:"repo-access-details","aria-label":"GitHub access"},HC={class:"repo-access-main"},BC={class:"repo-access-controls"},jC={key:1,class:"connection-link",href:"/connections"},GC={class:"repo-access-note"},WC={key:0},KC={class:"anonymize-workspace"},YC={class:"anonymize-topbar"},JC={class:"anonymize-topbar-inner"},QC={class:"paper-crumbs"},XC={class:"here"},ZC={class:"anonymize-topbar-head"},xC={class:"paper-page-title anonymize-topbar-title"},e2={key:0},t2={key:1},o2={key:0,class:"alert alert-info",role:"status"},n2={key:1,class:"alert alert-info",role:"status"},s2={key:1},r2={class:"anonymize-mobile-tabs",role:"tablist","aria-label":"Anonymization workspace"},i2=["aria-selected","tabindex"],a2=["aria-selected","tabindex"],l2={key:2,class:"anonymize-preview-empty",id:"workspace-preview",role:"status"},d2={class:"anonymize-split"},u2=["role","aria-labelledby"],c2={class:"form needs-validation paper-settings-main",name:"anonymize",novalidate:""},p2={class:"paper-settings-section"},f2={class:"form-group"},m2={class:"source-url-label-row"},h2={key:0,class:"repo-access","aria-label":"GitHub access"},v2={key:0,class:"repo-access-switch",role:"group","aria-label":"Repository connection"},y2=["aria-pressed","disabled"],g2=["aria-pressed","disabled"],b2={key:1,class:"connection-badge"},w2=["disabled"],k2={class:"invalid-feedback"},E2={class:"invalid-feedback"},C2={class:"invalid-feedback"},_2={class:"invalid-feedback"},S2={key:0,class:"repo-access-details","aria-label":"Previous repository configuration"},N2={key:0,class:"form-group"},D2=["value"],R2={key:1},T2={class:"repo-access-controls"},A2=["href"],O2={key:1,class:"repo-access-details","aria-label":"GitHub access"},I2={class:"repo-access-main"},P2={class:"repo-access-controls"},V2={key:1,class:"connection-link",href:"/connections"},q2={class:"repo-access-note"},M2={key:0},U2={key:2,class:"repo-access-details"},$2=["disabled"],L2={key:0,role:"status"},F2={key:3,class:"repo-access-details"},z2={key:0,role:"status"},H2={key:4,class:"form-grid-2"},B2={class:"form-group"},j2={class:"input-group"},G2={class:"form-control",id:"branch",name:"branch"},W2=["textContent","value"],K2={class:"input-group-append"},Y2={class:"form-group"},J2=["disabled"],Q2={class:"invalid-feedback"},X2={class:"invalid-feedback"},Z2={class:"form-check"},x2={class:"form-check-input",type:"checkbox",id:"update",name:"update"},e_={class:"paper-settings-section"},t_={class:"form-group"},o_=["disabled"],n_={class:"form-text text-muted"},s_={class:"invalid-feedback"},r_={class:"form-group"},i_=["disabled"],a_={class:"form-text text-muted"},l_={class:"invalid-feedback"},d_={class:"form-group"},u_=["disabled"],c_={class:"form-text text-muted"},p_={class:"invalid-feedback"},f_={class:"form-group"},m_={class:"form-text text-muted"},h_=["href"],v_={class:"invalid-feedback"},y_={class:"form-text text-muted"},g_={class:"paper-settings-section"},b_={class:"form-group"},w_={class:"form-text text-muted"},k_={class:"warning-feedback"},E_={class:"invalid-feedback"},C_={class:"paper-settings-section"},__={class:"form-check"},S_={class:"form-check-input",type:"checkbox",id:"link",name:"link"},N_={class:"form-check"},D_={class:"form-check-input",type:"checkbox",id:"image",name:"image"},R_={class:"form-check"},T_={class:"form-check-input",type:"checkbox",id:"pdf",name:"pdf"},A_={class:"form-check"},O_={class:"form-check-input",type:"checkbox",id:"notebook",name:"notebook"},I_={class:"form-check"},P_=["disabled"],V_={key:0,class:"form-text text-muted"},q_={key:1,class:"form-text text-muted"},M_={class:"form-check"},U_={class:"form-check-input",type:"checkbox",id:"title-gist",name:"title-gist"},$_={class:"form-check"},L_={class:"form-check-input",type:"checkbox",id:"content-gist",name:"content-gist"},F_={class:"form-check"},z_={class:"form-check-input",type:"checkbox",id:"comments-gist",name:"comments-gist"},H_={class:"form-check"},B_={class:"form-check-input",type:"checkbox",id:"username-gist",name:"username-gist"},j_={class:"form-check"},G_={class:"form-check-input",type:"checkbox",id:"date-gist",name:"date-gist"},W_={class:"form-check"},K_={class:"form-check-input",type:"checkbox",id:"origin-gist",name:"origin-gist"},Y_={class:"form-check"},J_={class:"form-check-input",type:"checkbox",id:"title",name:"title"},Q_={class:"form-check"},X_={class:"form-check-input",type:"checkbox",id:"body",name:"body"},Z_={class:"form-check"},x_={class:"form-check-input",type:"checkbox",id:"diff",name:"diff"},eS={class:"form-check"},tS={class:"form-check-input",type:"checkbox",id:"comments",name:"comments"},oS={class:"form-check"},nS={class:"form-check-input",type:"checkbox",id:"username",name:"username"},sS={class:"form-check"},rS={class:"form-check-input",type:"checkbox",id:"date",name:"date"},iS={class:"form-check"},aS={class:"form-check-input",type:"checkbox",id:"origin",name:"origin"},lS={class:"paper-settings-section"},dS={class:"form-grid-2"},uS={class:"form-group"},cS={class:"form-control",id:"expiration",name:"expiration"},pS={class:"form-group"},fS=["min","max"],mS={class:"invalid-feedback"},hS={class:"invalid-feedback"},vS={class:"paper-settings-section"},yS={class:"form-group"},gS={style:{position:"relative"}},bS={type:"text",id:"coauthorSearch",class:"form-control",placeholder:"Search GitHub username\u2026",autocomplete:"off"},wS={class:"dropdown-menu show",style:{display:"block","max-height":"220px","overflow-y":"auto",width:"100%"}},kS=["onClick"],ES=["src"],CS=["textContent"],_S=["textContent"],SS={class:"coauthor-list"},NS={class:"coauthor-row d-flex align-items-center",style:{padding:"6px 0",gap:"8px"}},DS=["src"],RS=["textContent","href"],TS=["onClick"],AS={class:"form-text text-muted"},OS=["textContent"],IS={key:1,class:"draft-status",role:"status"},PS={key:2,class:"draft-status"},VS={key:3,class:"anonymize-review-note"},qS={class:"anonymize-submit-bar"},MS=["disabled"],US=["disabled"],$S=["disabled"],LS=["disabled"],FS=["disabled"],zS=["disabled"],HS=["role","aria-labelledby"],BS={class:"anonymize-preview-head"},jS={class:"anonymize-preview-sub"},GS={key:0,class:"anonymize-preview-status",role:"status"},WS={key:1,class:"anonymize-preview-status",role:"status"},KS={key:2,class:"anonymize-preview-status",role:"alert"},YS={key:3,class:"anonymize-preview-status"},JS=["innerHTML"],QS=["role","aria-labelledby"],XS={class:"anonymize-preview-head"},ZS={class:"anonymize-preview-sub"},xS={key:0,class:"anonymize-preview-status",role:"status"},eN={key:1,class:"anonymize-preview-status",role:"status"},tN={key:2,class:"anonymize-preview-status",role:"alert"},oN={key:3,class:"anonymize-preview-body"},nN={class:"d-flex w-100 justify-content-between align-items-center flex-wrap"},sN={class:"pr-title mb-1"},rN={key:0},iN=["textContent"],aN={key:0},lN={key:1},dN={key:2},uN={class:"pr-comments mt-3"},cN={class:"pr-comment"},pN={class:"pr-comment-head"},fN=["textContent"],mN={key:0,class:"pr-comment-date"},hN={key:3},vN={class:"pr-comments"},yN={class:"pr-comment"},gN={class:"pr-comment-head"},bN={key:0,class:"pr-comment-author"},wN=["textContent"],kN=["textContent"],EN={key:0,class:"pr-comment-body"},CN=["role","aria-labelledby"],_N={class:"anonymize-preview-head"},SN={class:"anonymize-preview-sub"},NN={key:0,class:"anonymize-preview-status",role:"status"},DN={key:1,class:"anonymize-preview-status",role:"status"},RN={key:2,class:"anonymize-preview-status",role:"alert"},TN={key:3,class:"anonymize-preview-body"},AN={class:"d-flex w-100 justify-content-between align-items-center flex-wrap"},ON={class:"pr-title mb-1"},IN={key:0},PN=["textContent"],VN={key:0},qN={key:1,class:"pr-body shadow-sm p-3 mb-4 rounded",style:{background:"var(--paper-bg-alt)"}},MN={key:2,class:"paper-tabs",role:"tablist"},UN=["aria-selected","tabindex"],$N=["aria-selected","tabindex"],LN=["textContent"],FN={key:3,class:"anonymize-preview-status"},zN={class:"paper-tab-content"},HN={key:0,role:"tabpanel",id:"preview-pr-diff-panel","aria-labelledby":"preview-pr-diff-tab"},BN=["innerHTML"],jN={key:1,role:"tabpanel",id:"preview-pr-comments-panel","aria-labelledby":"preview-pr-comments-tab"},GN={class:"pr-comments"},WN={class:"pr-comment"},KN={class:"pr-comment-head"},YN={key:0,class:"pr-comment-author"},JN=["textContent"],QN=["textContent"],XN={key:0,class:"pr-comment-body"};function ql(e,t){let n=Ge("gist-file"),r=Ge("markdown"),s=ve("field"),i=ve("form");return l(),d("div",{class:A(["anonymize-page h-100",{"mobile-preview-active":e.mobilePane==="preview"}])},[f(" ===== STATE 1: No URL \u2014 centered input ===== "),N(o("div",TC,[o("div",AC,[t[40]||(t[40]=o("div",{class:"paper-crumbs"},[w("My work \xA0/\xA0 "),o("span",{class:"here"},"New anonymization")],-1)),t[41]||(t[41]=o("h1",{class:"paper-page-title"},[w("New "),o("em",null,"anonymization")],-1)),t[42]||(t[42]=o("p",{class:"paper-page-lede"}," Paste a GitHub repository, pull-request, or gist URL. We\u2019ll fetch it, redact the terms you choose in text files, and give you a share link. Images and PDFs are served unchanged when enabled. Review them before sharing. ",-1)),o("div",OC,[o("div",IC,[t[36]||(t[36]=o("label",{class:"paper-field-label",for:"sourceUrl-landing"},"Source URL",-1)),!e.sourceUrl&&e.githubConnections?.appEnabled&&e.githubConnections.appConnected&&e.githubConnections.oauthConnected?(l(),d("aside",PC,[!e.isUpdate&&e.detectedType!=="gist"?(l(),d("div",VC,[o("button",{type:"button","aria-pressed":e.githubConnection==="github-app",disabled:e.githubConnection==="github-app",onClick:t[0]||(t[0]=a=>e.chooseGitHubConnection("github-app"))},[...t[35]||(t[35]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),w(),o("span",{class:"sr-only"},"Read-only ",-1),w("GitHub App",-1)])],8,qC),o("button",{type:"button","aria-pressed":e.githubConnection==="oauth",disabled:e.githubConnection==="oauth",onClick:t[1]||(t[1]=a=>e.chooseGitHubConnection("oauth"))},"Legacy OAuth",8,MC)])):f("v-if",!0),e.isUpdate||e.detectedType==="gist"?(l(),d("span",UC,c((e.detectedType==="gist"?e.githubConnections?.gistConnection==="github-app":e.githubConnection==="github-app")?"Read-only GitHub App":"Legacy OAuth"),1)):f("v-if",!0)])):f("v-if",!0)]),N(o("input",$C,null,512),[[s,{state:e.viewState,set:a=>{e.sourceUrl=a},value:e.sourceUrl,form:null,options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"},change:()=>{e.urlSelected()}}]])]),e.draftRestored?(l(),d("div",LC,[t[37]||(t[37]=w("Your unsaved draft was restored. ",-1)),o("button",{type:"button",class:"draft-discard",onClick:t[2]||(t[2]=a=>e.discardDraft())},"Discard draft")])):f("v-if",!0),e.sourceUrlError?(l(),d("p",FC,c(e.sourceUrlError),1)):f("v-if",!0),t[43]||(t[43]=o("small",{class:"form-text",style:{color:"var(--ink-muted)"}}," Repository, pull request (\u2026/pull/42) and gist (gist.github.com/\u2026) URLs are all accepted. ",-1)),!e.sourceUrl&&e.githubConnections?.appEnabled&&e.githubConnections.appConnected?(l(),d("aside",zC,[o("div",HC,[o("div",BC,[e.detectedType!=="gist"&&e.githubConnection!=="oauth"?(l(),d("button",{key:0,type:"button",class:"btn btn-outline-ink",onClick:t[3]||(t[3]=a=>e.grantGitHubAccess())},[...t[38]||(t[38]=[w("Manage access ",-1),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-external-link"})],-1)])])):f("v-if",!0),e.isUpdate||e.detectedType==="gist"||e.githubConnection==="oauth"?(l(),d("a",jC,c(e.isUpdate?"Change connection":"Manage connections")+" \u2192",1)):f("v-if",!0)])]),o("div",GC,[e.detectedType!=="gist"&&e.githubConnection!=="oauth"?(l(),d("span",WC,"Signing in does not grant access to private repositories. Use Manage access to install or configure the GitHub App, select this repository, then return here. Organization access may require administrator approval.")):f("v-if",!0),t[39]||(t[39]=o("span",null,[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})]),w(" Selected content will be published, including content from private repositories.")],-1))])])):f("v-if",!0)])],512),[[j,!e.workspaceOpen&&!e.isUpdate]]),f(" ===== STATE 2: URL provided \u2014 form (left) + preview (right) ===== "),N(o("div",KC,[o("header",YC,[o("div",JC,[o("div",QC,[t[44]||(t[44]=o("a",{href:"/dashboard"},"My work",-1)),t[45]||(t[45]=w(" \xA0/\xA0 ",-1)),o("span",XC,c(e.isUpdate?"Edit anonymization":"New anonymization"),1)]),o("div",ZC,[o("h1",xC,[e.isUpdate?f("v-if",!0):(l(),d("span",e2,[...t[46]||(t[46]=[w("New ",-1),o("em",null,"anonymization",-1)])])),e.isUpdate?(l(),d("span",t2,[...t[47]||(t[47]=[w("Edit ",-1),o("em",null,"anonymization",-1)])])):f("v-if",!0)]),N(o("span",{class:A(["type-badge",{"type-repo":e.detectedType==="repo","type-pr":e.detectedType==="pr","type-gist":e.detectedType==="gist"}])},c(e.detectedType==="repo"?"Repo":e.detectedType==="pr"?"PR":"Gist"),3),[[j,e.detectedType]])])])]),e.detectedType==="gist"&&e.gistAppRequired?(l(),d("aside",o2,[t[48]||(t[48]=o("p",null,"Reconnect your GitHub account to read this gist. Your draft will be restored when you return.",-1)),o("button",{type:"button",class:"btn btn-ink",onClick:t[4]||(t[4]=a=>e.connectGistApp())},"Connect GitHub App to access gists")])):f("v-if",!0),e.detectedType==="gist"&&e.gistOAuthRequired?(l(),d("aside",n2,[t[49]||(t[49]=o("p",null,"Connect GitHub OAuth to access gists. Your account and existing anonymizations stay the same, and your draft will be restored when you return.",-1)),t[50]||(t[50]=o("p",null,"GitHub's legacy OAuth connection includes write access to private repositories.",-1)),e.githubConnections?.oauthEnabled?(l(),d("button",{key:0,type:"button",class:"btn btn-ink",onClick:t[5]||(t[5]=a=>e.connectGistOAuth())},"Connect GitHub OAuth to access gists")):(l(),d("p",s2,"GitHub OAuth is currently unavailable. Please try again later."))])):f("v-if",!0),o("nav",r2,[o("button",{id:"workspace-settings-tab",role:"tab",type:"button","aria-selected":e.mobilePane==="settings","aria-controls":"workspace-settings",tabindex:e.mobilePane==="settings"?0:-1,onKeydown:t[6]||(t[6]=a=>e.previewTabKeydown(a)),onClick:t[7]||(t[7]=a=>e.selectMobilePane("settings"))},"Settings",40,i2),o("button",{id:"workspace-preview-tab",role:"tab",type:"button","aria-selected":e.mobilePane==="preview","aria-controls":"workspace-preview",tabindex:e.mobilePane==="preview"?0:-1,onKeydown:t[8]||(t[8]=a=>e.previewTabKeydown(a)),onClick:t[9]||(t[9]=a=>e.selectMobilePane("preview"))},"Reviewer preview",40,a2)]),e.detectedType!=="repo"&&!e.details?(l(),d("div",l2,c(e.sourceLoading?"Loading source\u2026":"Choose an accessible source to see its preview."),1)):f("v-if",!0),o("div",d2,[f(" Form column (left) "),o("div",{id:"workspace-settings",role:e.mobileWorkspace?"tabpanel":null,"aria-labelledby":e.mobileWorkspace?"workspace-settings-tab":null,class:"anonymize-form-col overflow-auto"},[N((l(),d("form",c2,[o("section",p2,[t[65]||(t[65]=o("div",{class:"paper-section-eyebrow"},"Source",-1)),o("div",f2,[o("div",m2,[t[52]||(t[52]=o("label",{class:"paper-field-label",for:"sourceUrl"},"GitHub URL",-1)),e.sourceUrl&&e.githubConnections?.appEnabled&&e.githubConnections.appConnected&&e.githubConnections.oauthConnected?(l(),d("aside",h2,[!e.isUpdate&&e.detectedType!=="gist"?(l(),d("div",v2,[o("button",{type:"button","aria-pressed":e.githubConnection==="github-app",disabled:e.githubConnection==="github-app",onClick:t[10]||(t[10]=a=>e.chooseGitHubConnection("github-app"))},[...t[51]||(t[51]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),w(),o("span",{class:"sr-only"},"Read-only ",-1),w("GitHub App",-1)])],8,y2),o("button",{type:"button","aria-pressed":e.githubConnection==="oauth",disabled:e.githubConnection==="oauth",onClick:t[11]||(t[11]=a=>e.chooseGitHubConnection("oauth"))},"Legacy OAuth",8,g2)])):f("v-if",!0),e.isUpdate||e.detectedType==="gist"?(l(),d("span",b2,c((e.detectedType==="gist"?e.githubConnections?.gistConnection==="github-app":e.githubConnection==="github-app")?"Read-only GitHub App":"Legacy OAuth"),1)):f("v-if",!0)])):f("v-if",!0)]),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.anonymize?.sourceUrl?.invalid}]),name:"sourceUrl",id:"sourceUrl",disabled:e.isUpdate&&e.detectedType!=="repo",placeholder:"Paste a GitHub repo or pull request URL"},null,10,w2),[[s,{state:e.viewState,set:a=>{e.sourceUrl=a},value:e.sourceUrl,form:"anonymize",options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"},change:()=>{e.urlSelected()}}]]),N(o("div",k2," Please provide a valid GitHub URL. ",512),[[j,e.anonymize?.sourceUrl?.errors?.github]]),N(o("div",E2," Not accessible. The organization may restrict access. ",512),[[j,e.anonymize?.sourceUrl?.errors?.access]]),N(o("div",C2," Does not exist or is not accessible. ",512),[[j,e.anonymize?.sourceUrl?.errors?.missing]]),N(o("div",_2," Already anonymized. ",512),[[j,e.anonymize?.sourceUrl?.errors?.used]])]),!e.isUpdate&&e.previousConfigurations.length?(l(),d("aside",S2,[t[54]||(t[54]=o("p",{role:"status"},"You have already anonymized this repository. Use the existing configuration to keep its anonymous link and avoid creating another repository.",-1)),e.previousConfigurations.length>1?(l(),d("div",N2,[t[53]||(t[53]=o("label",{class:"paper-field-label",for:"previousConfiguration"},"Previous anonymization",-1)),N(o("select",{id:"previousConfiguration",class:"form-control","onUpdate:modelValue":t[12]||(t[12]=a=>e.previousConfigurationId=a)},[(l(!0),d(K,null,oe(e.previousConfigurations,a=>(l(),d("option",{key:a.repoId,value:a.repoId},c(a.repoId),9,D2))),128))],512),[[Xn,e.previousConfigurationId]])])):(l(),d("p",R2,c(e.previousConfigurationId),1)),t[55]||(t[55]=o("p",null,"You can review and update its settings before saving.",-1)),o("div",T2,[o("a",{class:"btn btn-ink",href:e.existingConfigurationUrl()},"Use existing configuration",8,A2),o("button",{type:"button",class:"btn btn-link",onClick:t[13]||(t[13]=a=>e.previousConfigurations=[])},"Create a separate anonymization")])])):f("v-if",!0),e.sourceUrl&&e.githubConnections?.appEnabled&&e.githubConnections.appConnected?(l(),d("aside",O2,[o("div",I2,[o("div",P2,[e.detectedType!=="gist"&&e.githubConnection!=="oauth"?(l(),d("button",{key:0,type:"button",class:"btn btn-outline-ink",onClick:t[14]||(t[14]=a=>e.grantGitHubAccess())},[...t[56]||(t[56]=[w("Manage access ",-1),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-external-link"})],-1)])])):f("v-if",!0),e.isUpdate||e.detectedType==="gist"||e.githubConnection==="oauth"?(l(),d("a",V2,c(e.isUpdate?"Change connection":"Manage connections")+" \u2192",1)):f("v-if",!0)])]),o("div",q2,[e.detectedType!=="gist"&&e.githubConnection!=="oauth"?(l(),d("span",M2,"Signing in does not grant access to private repositories. Use Manage access to install or configure the GitHub App, select this repository, then return here. Organization access may require administrator approval.")):f("v-if",!0),t[57]||(t[57]=o("span",null,[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})]),w(" Selected content will be published, including content from private repositories.")],-1))])])):f("v-if",!0),e.isUpdate&&e.detectedType==="repo"&&e.role==="owner"&&e.accessRepairAllowed&&e.githubConnections?.appEnabled&&e.githubConnection==="github-app"&&e.sourceUrl==="https://github.com/"+e._originalFullName?(l(),d("aside",U2,[t[58]||(t[58]=o("p",null,"If this repository became private or its App installation changed, repair its access here. This keeps the same anonymous URL and published commit.",-1)),o("button",{type:"button",class:"btn btn-outline-ink",disabled:e.repairingGitHubAccess,onClick:t[15]||(t[15]=a=>e.repairGitHubAccess())},"Repair GitHub access",8,$2),o("button",{type:"button",class:"btn btn-outline-ink",onClick:t[16]||(t[16]=a=>e.grantGitHubAccess())},"Manage access"),e.accessRepairMessage?(l(),d("p",L2,c(e.accessRepairMessage),1)):f("v-if",!0)])):f("v-if",!0),e.isUpdate&&e.detectedType==="repo"&&e.role==="owner"&&e.sourceUrl==="https://github.com/"+e._originalFullName?(l(),d("aside",F2,[t[59]||(t[59]=o("p",null,"If you deleted and recreated this repository, reconnect it before choosing a branch.",-1)),o("button",{type:"button",class:"btn btn-outline-ink",onClick:t[17]||(t[17]=a=>e.reconnectSource())},"Reconnect source repository"),e.reconnectRepositoryId?(l(),d("p",z2,"Source reloaded. Review the branch, commit, and anonymization preview, then save to replace the published snapshot.")):f("v-if",!0)])):f("v-if",!0),e.detectedType==="repo"?(l(),d("div",H2,[o("div",B2,[t[61]||(t[61]=o("label",{class:"paper-field-label",for:"branch"},"Branch",-1)),o("div",j2,[N((l(),d("select",G2,[(l(!0),d(K,null,oe(e.branches,(a,u)=>(l(),d("option",{textContent:c(a?.name),value:a?.name},null,8,W2))),256))])),[[s,{state:e.viewState,set:a=>{e.source.branch=a},value:e.source?.branch,form:"anonymize",options:{}}]]),o("div",K2,[o("button",{class:"btn btn-icon",type:"button",title:"Refresh","data-toggle":"tooltip","data-placement":"bottom",onClick:t[18]||(t[18]=a=>e.getBranches(!0)),"aria-label":"Refresh"},[...t[60]||(t[60]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1)])])])])]),o("div",Y2,[t[62]||(t[62]=o("label",{class:"paper-field-label",for:"commit"},"Commit",-1)),N(o("input",{class:A(["form-control",{"is-invalid":e.anonymize?.commit?.invalid}]),id:"commit",disabled:e.options.update,name:"commit",pattern:"[a-fA-Z0-9]{6,}",required:""},null,10,J2),[[s,{state:e.viewState,set:a=>{e.source.commit=a},value:e.source?.commit,form:"anonymize",options:{}}]]),N(o("div",Q2," The commit SHA is not valid. ",512),[[j,e.anonymize?.commit?.errors?.pattern||e.anonymize?.commit?.errors?.required]]),N(o("div",X2," This commit no longer exists in the repository. Click refresh to get the latest. ",512),[[j,e.anonymize?.commit?.errors?.exists]])])])):f("v-if",!0),N(o("div",Z2,[N(o("input",x2,null,512),[[s,{state:e.viewState,set:a=>{e.options.update=a},value:e.options?.update,form:"anonymize",options:{}}]]),t[63]||(t[63]=o("label",{class:"form-check-label",for:"update"},"Auto-update from GitHub",-1)),t[64]||(t[64]=o("small",{class:"form-text text-muted"},"Follow the branch and pull the latest commit automatically, at most once an hour.",-1))],512),[[j,e.detectedType]])]),N(o("section",e_,[t[76]||(t[76]=o("div",{class:"paper-section-eyebrow"},"Identity",-1)),N(o("div",t_,[t[68]||(t[68]=o("label",{class:"paper-field-label",for:"repoId"},"Anonymized repository ID",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.anonymize?.repoId?.invalid}]),name:"repoId",id:"repoId",disabled:e.isUpdate},null,10,o_),[[s,{state:e.viewState,set:a=>{e.repoId=a},value:e.repoId,form:"anonymize",options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"}}]]),o("small",n_,[t[66]||(t[66]=w("Your share link will be ",-1)),o("code",null,"anonymous.4open.science/r/"+c(e.repoId),1),t[67]||(t[67]=w(".",-1))]),N(o("div",s_,"ID can only contain letters and numbers.",512),[[j,e.anonymize?.repoId?.errors?.format]]),N(o("div",{class:"invalid-feedback"},c(e.repoId)+" is already used.",513),[[j,e.anonymize?.repoId?.errors?.used]])],512),[[j,e.detectedType==="repo"]]),N(o("div",r_,[t[71]||(t[71]=o("label",{class:"paper-field-label",for:"pullRequestId"},"Anonymized pull request ID",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.anonymize?.pullRequestId?.invalid}]),name:"pullRequestId",id:"pullRequestId",disabled:e.isUpdate},null,10,i_),[[s,{state:e.viewState,set:a=>{e.pullRequestId=a},value:e.pullRequestId,form:"anonymize",options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"}}]]),o("small",a_,[t[69]||(t[69]=w("Your share link will be ",-1)),o("code",null,"anonymous.4open.science/pr/"+c(e.pullRequestId),1),t[70]||(t[70]=w(".",-1))]),N(o("div",l_,"ID can only contain letters and numbers.",512),[[j,e.anonymize?.pullRequestId?.errors?.format]]),N(o("div",{class:"invalid-feedback"},c(e.pullRequestId)+" is already used.",513),[[j,e.anonymize?.pullRequestId?.errors?.used]])],512),[[j,e.detectedType==="pr"]]),N(o("div",d_,[t[74]||(t[74]=o("label",{class:"paper-field-label",for:"gistId"},"Anonymized gist ID",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.anonymize?.gistId?.invalid}]),name:"gistId",id:"gistId",disabled:e.isUpdate},null,10,u_),[[s,{state:e.viewState,set:a=>{e.gistId=a},value:e.gistId,form:"anonymize",options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"}}]]),o("small",c_,[t[72]||(t[72]=w("Your share link will be ",-1)),o("code",null,"anonymous.4open.science/gist/"+c(e.gistId),1),t[73]||(t[73]=w(".",-1))]),N(o("div",p_,"ID can only contain letters and numbers.",512),[[j,e.anonymize?.gistId?.errors?.format]]),N(o("div",{class:"invalid-feedback"},c(e.gistId)+" is already used.",513),[[j,e.anonymize?.gistId?.errors?.used]])],512),[[j,e.detectedType==="gist"]]),o("div",f_,[t[75]||(t[75]=o("label",{class:"paper-field-label",for:"conference"},[w("Conference "),o("span",{class:"paper-optional"},"(optional)")],-1)),N(o("input",{class:A(["form-control",{"is-invalid":e.anonymize?.conference?.invalid}]),id:"conference",name:"conference"},null,2),[[s,{state:e.viewState,set:a=>{e.conference=a},value:e.conference,form:"anonymize",options:{debounce:{default:800,blur:0},updateOn:"default blur"}}]]),N(o("small",m_,[o("a",{target:"_blank",href:e.safeUrl(e.conference_data?.url)},c(e.conference_data?.name),9,h_),w(" expires "+c(e.fmt?.date(e.conference_data?.endDate))+". ",1)],512),[[j,e.conference_data]]),N(o("div",v_,"The conference is not activated.",512),[[j,e.anonymize?.conference?.errors?.activated]]),N(o("small",y_,"Link to a conference to apply its shared defaults.",512),[[j,!e.conference_data]])])],512),[[j,e.detectedType]]),N(o("section",g_,[t[84]||(t[84]=o("div",{class:"paper-section-eyebrow"},"Anonymization",-1)),o("div",b_,[t[83]||(t[83]=o("label",{class:"paper-field-label",for:"terms"},"Terms to redact",-1)),N(o("textarea",{class:A(["form-control",{"is-invalid":e.anonymize?.terms?.invalid}]),id:"terms",name:"terms",rows:"4"},null,2),[[s,{state:e.viewState,set:a=>{e.terms=a},value:e.terms,form:"anonymize",options:{debounce:250}}]]),o("small",w_,[t[77]||(t[77]=w("One term per line (regex allowed). Replaced by ",-1)),o("code",null,c(e.site_options?.ANONYMIZATION_MASK)+"-[N]",1),t[78]||(t[78]=w(", or use ",-1)),t[79]||(t[79]=o("code",null,"term=>replacement",-1)),t[80]||(t[80]=w(" to pick your own (e.g. ",-1)),t[81]||(t[81]=o("code",null,"Anonymous=>ABC",-1)),t[82]||(t[82]=w(").",-1))]),N(o("div",k_,"Regex characters detected. Escape them if unintentional.",512),[[j,e.termsRegexWarning]]),N(o("div",E_,"Terms are in an invalid format.",512),[[j,e.anonymize?.terms?.errors?.format]])])],512),[[j,e.detectedType]]),N(o("section",C_,[t[105]||(t[105]=o("div",{class:"paper-section-eyebrow"},"Display",-1)),N(o("div",null,[o("div",__,[N(o("input",S_,null,512),[[s,{state:e.viewState,set:a=>{e.options.link=a},value:e.options?.link,form:"anonymize",options:{}}]]),t[85]||(t[85]=o("label",{class:"form-check-label",for:"link"},"Keep links",-1))]),o("div",N_,[N(o("input",D_,null,512),[[s,{state:e.viewState,set:a=>{e.options.image=a},value:e.options?.image,form:"anonymize",options:{}}]]),t[86]||(t[86]=o("label",{class:"form-check-label",for:"image"},"Display images",-1)),t[87]||(t[87]=o("small",{class:"form-text text-muted"},"Images are served unchanged and may contain names or affiliations.",-1))]),o("div",R_,[N(o("input",T_,null,512),[[s,{state:e.viewState,set:a=>{e.options.pdf=a},value:e.options?.pdf,form:"anonymize",options:{}}]]),t[88]||(t[88]=o("label",{class:"form-check-label",for:"pdf"},"Display PDFs",-1)),t[89]||(t[89]=o("small",{class:"form-text text-muted"},[w("PDF contents and metadata are served unchanged. "),o("a",{href:"/faq#formats"},"About supported formats")],-1))]),o("div",A_,[N(o("input",O_,null,512),[[s,{state:e.viewState,set:a=>{e.options.notebook=a},value:e.options?.notebook,form:"anonymize",options:{}}]]),t[90]||(t[90]=o("label",{class:"form-check-label",for:"notebook"},"Display Notebooks",-1))]),o("div",I_,[N(o("input",{class:"form-check-input",type:"checkbox",id:"page",name:"page",disabled:!e.details?.hasPage||e.details?.pageSource&&e.details?.pageSource?.branch!==e.source?.branch},null,8,P_),[[s,{state:e.viewState,set:a=>{e.options.page=a},value:e.options?.page,form:"anonymize",options:{}}]]),t[91]||(t[91]=o("label",{class:"form-check-label",for:"page"},"GitHub Pages",-1)),e.details?.hasPage?f("v-if",!0):(l(),d("small",V_,c(e.fmt?.translate("WARNINGS.page_not_enabled_on_repo")),1)),e.details?.hasPage&&e.details?.pageSource?.branch&&e.source?.branch&&e.details.pageSource.branch!==e.source.branch?(l(),d("small",q_,c(e.fmt?.translate("WARNINGS.page_branch_mismatch",{pageBranch:e.details?.pageSource?.branch,selectedBranch:e.source?.branch})),1)):f("v-if",!0)])],512),[[j,e.detectedType==="repo"]]),N(o("div",null,[o("div",M_,[N(o("input",U_,null,512),[[s,{state:e.viewState,set:a=>{e.options.title=a},value:e.options?.title,form:"anonymize",options:{}}]]),t[92]||(t[92]=o("label",{class:"form-check-label",for:"title-gist"},"Gist description",-1))]),o("div",$_,[N(o("input",L_,null,512),[[s,{state:e.viewState,set:a=>{e.options.content=a},value:e.options?.content,form:"anonymize",options:{}}]]),t[93]||(t[93]=o("label",{class:"form-check-label",for:"content-gist"},"File contents",-1))]),o("div",F_,[N(o("input",z_,null,512),[[s,{state:e.viewState,set:a=>{e.options.comments=a},value:e.options?.comments,form:"anonymize",options:{}}]]),t[94]||(t[94]=o("label",{class:"form-check-label",for:"comments-gist"},"Comments",-1))]),o("div",H_,[N(o("input",B_,null,512),[[s,{state:e.viewState,set:a=>{e.options.username=a},value:e.options?.username,form:"anonymize",options:{}}]]),t[95]||(t[95]=o("label",{class:"form-check-label",for:"username-gist"},"Usernames",-1))]),o("div",j_,[N(o("input",G_,null,512),[[s,{state:e.viewState,set:a=>{e.options.date=a},value:e.options?.date,form:"anonymize",options:{}}]]),t[96]||(t[96]=o("label",{class:"form-check-label",for:"date-gist"},"Dates",-1))]),o("div",W_,[N(o("input",K_,null,512),[[s,{state:e.viewState,set:a=>{e.options.origin=a},value:e.options?.origin,form:"anonymize",options:{}}]]),t[97]||(t[97]=o("label",{class:"form-check-label",for:"origin-gist"},"Source gist ID",-1))])],512),[[j,e.detectedType==="gist"]]),N(o("div",null,[o("div",Y_,[N(o("input",J_,null,512),[[s,{state:e.viewState,set:a=>{e.options.title=a},value:e.options?.title,form:"anonymize",options:{}}]]),t[98]||(t[98]=o("label",{class:"form-check-label",for:"title"},"PR title",-1))]),o("div",Q_,[N(o("input",X_,null,512),[[s,{state:e.viewState,set:a=>{e.options.body=a},value:e.options?.body,form:"anonymize",options:{}}]]),t[99]||(t[99]=o("label",{class:"form-check-label",for:"body"},"PR body",-1))]),o("div",Z_,[N(o("input",x_,null,512),[[s,{state:e.viewState,set:a=>{e.options.diff=a},value:e.options?.diff,form:"anonymize",options:{}}]]),t[100]||(t[100]=o("label",{class:"form-check-label",for:"diff"},"Diff",-1))]),o("div",eS,[N(o("input",tS,null,512),[[s,{state:e.viewState,set:a=>{e.options.comments=a},value:e.options?.comments,form:"anonymize",options:{}}]]),t[101]||(t[101]=o("label",{class:"form-check-label",for:"comments"},"Comments",-1))]),o("div",oS,[N(o("input",nS,null,512),[[s,{state:e.viewState,set:a=>{e.options.username=a},value:e.options?.username,form:"anonymize",options:{}}]]),t[102]||(t[102]=o("label",{class:"form-check-label",for:"username"},"Usernames",-1))]),o("div",sS,[N(o("input",rS,null,512),[[s,{state:e.viewState,set:a=>{e.options.date=a},value:e.options?.date,form:"anonymize",options:{}}]]),t[103]||(t[103]=o("label",{class:"form-check-label",for:"date"},"Dates",-1))]),o("div",iS,[N(o("input",aS,null,512),[[s,{state:e.viewState,set:a=>{e.options.origin=a},value:e.options?.origin,form:"anonymize",options:{}}]]),t[104]||(t[104]=o("label",{class:"form-check-label",for:"origin"},"Project name",-1))])],512),[[j,e.detectedType==="pr"]])],512),[[j,e.detectedType]]),N(o("section",lS,[t[109]||(t[109]=o("div",{class:"paper-section-eyebrow"},"Expiration",-1)),o("div",dS,[o("div",uS,[t[107]||(t[107]=o("label",{class:"paper-field-label",for:"expiration"},"Strategy",-1)),N((l(),d("select",cS,[...t[106]||(t[106]=[o("option",{value:"redirect"},"Redirect to GitHub when expired",-1),o("option",{value:"remove",selected:""},"Remove when expired",-1)])])),[[s,{state:e.viewState,set:a=>{e.options.expirationMode=a},value:e.options?.expirationMode,form:"anonymize",options:{}}]])]),o("div",pS,[t[108]||(t[108]=o("label",{class:"paper-field-label",for:"expirationDate"},"Expiration date",-1)),N(o("input",{class:A(["form-control",{"is-invalid":e.anonymize?.expirationDate?.invalid}]),type:"date",name:"expirationDate",id:"expirationDate",required:"",min:e.minExpirationDate,max:e.maxExpirationDate},null,10,fS),[[s,{state:e.viewState,set:a=>{e.options.expirationDate=a},value:e.options?.expirationDate,form:"anonymize",options:{}}]]),N(o("div",mS,"Pick a date in the future.",512),[[j,e.anonymize?.expirationDate?.errors?.min]]),N(o("div",{class:"invalid-feedback"},"Pick a date on or before "+c(e.fmt?.date(e.maxExpirationDate))+".",513),[[j,e.anonymize?.expirationDate?.errors?.max]]),N(o("div",hS,"Enter a valid expiration date.",512),[[j,e.anonymize?.expirationDate?.errors?.required||e.anonymize?.expirationDate?.errors?.date]])])]),N(o("small",{class:"form-text text-muted"},"After "+c(e.fmt?.date(e.options?.expirationDate))+", the content will be removed.",513),[[j,e.options?.expirationMode=="remove"&&e.options?.expirationDate]]),N(o("small",{class:"form-text text-muted"},"After "+c(e.fmt?.date(e.options?.expirationDate))+", visitors will be redirected to GitHub.",513),[[j,e.options?.expirationMode=="redirect"&&e.options?.expirationDate]])],512),[[j,e.detectedType]]),N(o("section",vS,[t[113]||(t[113]=o("div",{class:"paper-section-eyebrow"},"Co-authors",-1)),t[114]||(t[114]=o("p",{class:"form-text text-muted",style:{"margin-bottom":"8px"}}," Co-authors can view and edit these settings. They cannot delete the anonymization or manage co-authors. ",-1)),N(o("div",yS,[t[110]||(t[110]=o("label",{class:"paper-field-label",for:"coauthorSearch"},"Add a GitHub user",-1)),o("div",gS,[N(o("input",bS,null,512),[[s,{state:e.viewState,set:a=>{e.coauthorSearch=a},value:e.coauthorSearch,form:"anonymize",options:{debounce:300},change:()=>{e.searchCoauthors()}}]]),N(o("div",wS,[(l(!0),d(K,null,oe(e.coauthorResults,(a,u)=>(l(),d("a",{href:"#",class:"dropdown-item d-flex align-items-center",onClick:ie(m=>e.addCoauthor(a,m),["prevent"])},[o("img",{alt:"",style:{width:"22px",height:"22px","border-radius":"50%","margin-right":"8px"},src:e.safeUrl(a?.photo)},null,8,ES),o("span",{textContent:c(a?.username)},null,8,CS)],8,kS))),256))],512),[[j,e.coauthorResults?.length>0]])]),N(o("small",{class:"form-text text-muted",textContent:c(e.coauthorError)},null,8,_S),[[j,e.coauthorError]])],512),[[j,e.role==="owner"||e.role==="admin"]]),o("div",SS,[(l(!0),d(K,null,oe(e.coauthors,(a,u)=>(l(),d("div",NS,[a?.photo?(l(),d("img",{key:0,alt:"",style:{width:"24px",height:"24px","border-radius":"50%"},src:e.safeUrl(a?.photo)},null,8,DS)):f("v-if",!0),o("a",{target:"_blank",textContent:c(a?.username),href:e.safeUrl("https://github.com/"+a?.username)},null,8,RS),t[112]||(t[112]=o("span",{class:"type-badge type-coauthor"},"Co-author",-1)),N(o("button",{type:"button",class:"btn btn-sm btn-icon",style:{"margin-left":"auto"},title:"Remove co-author",onClick:m=>e.removeCoauthor(a),"aria-label":"Remove co-author"},[...t[111]||(t[111]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])],8,TS),[[j,e.role==="owner"||e.role==="admin"]])]))),256)),N(o("div",AS," No co-authors yet. ",512),[[j,!e.coauthors||e.coauthors?.length===0]])])],512),[[j,e.isUpdate&&e.detectedType==="repo"]]),e.error?(l(),d("div",{key:0,class:"alert alert-danger",role:"alert",textContent:c(e.error)},null,8,OS)):f("v-if",!0),e.draftRestored?(l(),d("div",IS,[t[115]||(t[115]=w("Your unsaved draft was restored. ",-1)),o("button",{type:"button",class:"draft-discard",onClick:t[19]||(t[19]=a=>e.discardDraft())},"Discard draft")])):e.unsavedChanges?(l(),d("div",PS,[w(c(e.draftSaved?"Draft saved in this tab for 30 minutes.":"Unsaved changes. Keep this tab open until you save.")+" ",1),o("button",{type:"button",class:"draft-discard",onClick:t[20]||(t[20]=a=>e.discardDraft())},c(e.isUpdate?"Restore saved settings":"Discard changes"),1)])):f("v-if",!0),e.detectedType==="repo"&&(e.options.image||e.options.pdf)?(l(),d("p",VS,"Review enabled images and PDFs before sharing. Their contents are not anonymized.")):f("v-if",!0),o("button",{type:"button",class:"btn btn-outline-ink mobile-preview-jump",onClick:t[21]||(t[21]=a=>e.selectMobilePane("preview"))},[...t[116]||(t[116]=[w("Review preview ",-1),o("span",{"aria-hidden":"true"},"\u2192",-1)])]),N(o("div",qS,[e.detectedType==="repo"&&!e.isUpdate?(l(),d("button",{key:0,type:"submit",disabled:e.sourceLoading,class:"btn btn-ink",onClick:t[22]||(t[22]=ie(a=>e.submitForm(a,()=>{e.anonymizeRepo(a)}),["prevent"]))},[...t[117]||(t[117]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),w(" Anonymize Repository ",-1)])],8,MS)):f("v-if",!0),e.detectedType==="repo"&&e.isUpdate?(l(),d("button",{key:1,type:"submit",disabled:e.sourceLoading,class:"btn btn-ink",onClick:t[23]||(t[23]=ie(a=>e.submitForm(a,()=>{e.anonymizeRepo(a)}),["prevent"]))},[...t[118]||(t[118]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-save"})],-1),w(" Update Repository ",-1)])],8,US)):f("v-if",!0),e.detectedType==="pr"&&!e.isUpdate?(l(),d("button",{key:2,type:"submit",disabled:e.sourceLoading,class:"btn btn-ink",onClick:t[24]||(t[24]=ie(a=>e.submitForm(a,()=>{e.anonymizePullRequest(a)}),["prevent"]))},[...t[119]||(t[119]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),w(" Anonymize Pull Request ",-1)])],8,$S)):f("v-if",!0),e.detectedType==="pr"&&e.isUpdate?(l(),d("button",{key:3,type:"submit",disabled:e.sourceLoading,class:"btn btn-ink",onClick:t[25]||(t[25]=ie(a=>e.submitForm(a,()=>{e.anonymizePullRequest(a)}),["prevent"]))},[...t[120]||(t[120]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-save"})],-1),w(" Update Pull Request ",-1)])],8,LS)):f("v-if",!0),e.detectedType==="gist"&&!e.isUpdate?(l(),d("button",{key:4,type:"submit",disabled:e.sourceLoading,class:"btn btn-ink",onClick:t[26]||(t[26]=ie(a=>e.submitForm(a,()=>{e.anonymizeGist(a)}),["prevent"]))},[...t[121]||(t[121]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),w(" Anonymize Gist ",-1)])],8,FS)):f("v-if",!0),e.detectedType==="gist"&&e.isUpdate?(l(),d("button",{key:5,type:"submit",disabled:e.sourceLoading,class:"btn btn-ink",onClick:t[27]||(t[27]=ie(a=>e.submitForm(a,()=>{e.anonymizeGist(a)}),["prevent"]))},[...t[122]||(t[122]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-save"})],-1),w(" Update Gist ",-1)])],8,zS)):f("v-if",!0)],512),[[j,e.detectedType]])])),[[i,e.viewState]])],8,u2),f(" Preview column (right) "),e.detectedType==="repo"?(l(),d("div",{key:0,id:"workspace-preview",role:e.mobileWorkspace?"tabpanel":null,"aria-labelledby":e.mobileWorkspace?"workspace-preview-tab":null,class:"anonymize-preview-col"},[o("div",BS,[t[123]||(t[123]=o("span",{class:"paper-eyebrow"},"Live preview",-1)),o("span",jS,c(e.previewStatus==="ready"?"README with redactions applied":"README preview"),1)]),e.sourceLoading&&e.previewStatus==="idle"?(l(),d("div",GS,"Loading source\u2026")):f("v-if",!0),e.previewStatus==="loading"?(l(),d("div",WS,"Updating the anonymized preview\u2026")):f("v-if",!0),e.previewStatus==="error"?(l(),d("div",KS,[t[124]||(t[124]=o("p",null,"Unable to generate the anonymized preview. The latest redactions have not been verified.",-1)),o("button",{class:"btn btn-outline-ink",type:"button",onClick:t[28]||(t[28]=a=>e.retryPreview())},"Retry preview")])):f("v-if",!0),!e.sourceLoading&&!e.readme&&e.previewStatus==="idle"?(l(),d("div",YS,"No README is available to preview. Review the published files before sharing.")):f("v-if",!0),e.previewStatus==="ready"?(l(),d("div",{key:4,class:"anonymize-preview-body markdown-body body",innerHTML:e.sanitize(e.html_readme)},null,8,JS)):f("v-if",!0)],8,HS)):f("v-if",!0),e.detectedType==="gist"&&e.details?(l(),d("div",{key:1,id:"workspace-preview",role:e.mobileWorkspace?"tabpanel":null,"aria-labelledby":e.mobileWorkspace?"workspace-preview-tab":null,class:"anonymize-preview-col"},[o("div",XS,[t[125]||(t[125]=o("span",{class:"paper-eyebrow"},"Live preview",-1)),o("span",ZS,c(e.previewStatus==="ready"?"Gist with redactions applied":"Gist preview"),1)]),e.sourceLoading&&e.previewStatus==="idle"?(l(),d("div",xS,"Loading source\u2026")):f("v-if",!0),e.previewStatus==="loading"?(l(),d("div",eN,"Updating the anonymized preview\u2026")):f("v-if",!0),e.previewStatus==="error"?(l(),d("div",tN,[t[126]||(t[126]=o("p",null,"Unable to generate the anonymized preview. The latest redactions have not been verified.",-1)),o("button",{class:"btn btn-outline-ink",type:"button",onClick:t[29]||(t[29]=a=>e.retryPreview())},"Retry preview")])):f("v-if",!0),e.previewStatus==="ready"?(l(),d("div",oN,[o("div",nN,[o("h2",sN,[e.options?.title?(l(),d("span",rN,c(e.anonymizeGistContent(e.details?.gist?.description)||"Untitled gist"),1)):f("v-if",!0),o("span",{class:A(["badge",{"badge-success":e.details?.gist?.isPublic,"badge-secondary":!e.details?.gist?.isPublic}])},c(e.details?.gist?.isPublic?"public":"secret"),3)]),e.options?.date?(l(),d("small",{key:0,textContent:c(e.fmt?.date(e.details?.gist?.updatedDate))},null,8,iN)):f("v-if",!0)]),e.options?.origin?(l(),d("small",aN,"Gist ID: "+c(e.details?.source?.gistId),1)):f("v-if",!0),e.options?.username&&e.details?.gist?.ownerLogin?(l(),d("small",lN,"By @"+c(e.anonymizeGistContent(e.details?.gist?.ownerLogin)),1)):f("v-if",!0),e.options?.content&&e.previewGistFiles?.length?(l(),d("div",dN,[o("ul",uN,[(l(!0),d(K,null,oe(e.previewGistFiles,(a,u)=>(l(),d("li",cN,[o("div",pN,[o("strong",{textContent:c(a?.filename)},null,8,fN),a?.language?(l(),d("span",mN,c(a?.language),1)):f("v-if",!0)]),Ce(n,{file:a,terms:e.terms,options:e.options},null,8,["file","terms","options"])]))),256))])])):f("v-if",!0),e.options?.comments&&e.details?.gist?.comments&&e.details?.gist?.comments?.length?(l(),d("div",hN,[t[129]||(t[129]=o("h3",{class:"paper-section-eyebrow mt-3"},"Comments",-1)),o("ul",vN,[(l(!0),d(K,null,oe(e.details?.gist?.comments,(a,u)=>(l(),d("li",yN,[o("div",gN,[e.options?.username?(l(),d("span",bN,[t[127]||(t[127]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user"})],-1)),t[128]||(t[128]=w(" @",-1)),o("span",{textContent:c(e.anonymizeGistContent(a?.author))},null,8,wN)])):f("v-if",!0),e.options?.date?(l(),d("span",{key:1,class:"pr-comment-date",textContent:c(e.fmt?.date(a?.updatedDate))},null,8,kN)):f("v-if",!0)]),e.options?.body?(l(),d("div",EN,[Ce(r,{content:e.anonymizeGistContent(a?.body),options:e.options,terms:e.terms},null,8,["content","options","terms"])])):f("v-if",!0)]))),256))])])):f("v-if",!0)])):f("v-if",!0)],8,QS)):f("v-if",!0),e.detectedType==="pr"&&e.details?(l(),d("div",{key:2,id:"workspace-preview",role:e.mobileWorkspace?"tabpanel":null,"aria-labelledby":e.mobileWorkspace?"workspace-preview-tab":null,class:"anonymize-preview-col"},[o("div",_N,[t[130]||(t[130]=o("span",{class:"paper-eyebrow"},"Live preview",-1)),o("span",SN,c(e.previewStatus==="ready"?"Pull request with redactions applied":"Pull request preview"),1)]),e.sourceLoading&&e.previewStatus==="idle"?(l(),d("div",NN,"Loading source\u2026")):f("v-if",!0),e.previewStatus==="loading"?(l(),d("div",DN,"Updating the anonymized preview\u2026")):f("v-if",!0),e.previewStatus==="error"?(l(),d("div",RN,[t[131]||(t[131]=o("p",null,"Unable to generate the anonymized preview. The latest redactions have not been verified.",-1)),o("button",{class:"btn btn-outline-ink",type:"button",onClick:t[30]||(t[30]=a=>e.retryPreview())},"Retry preview")])):f("v-if",!0),e.previewStatus==="ready"?(l(),d("div",TN,[o("div",AN,[o("h2",ON,[e.options?.title?(l(),d("span",IN,c(e.anonymizePrContent(e.details?.pullRequest?.title)),1)):f("v-if",!0),o("span",{class:A(["badge",{"badge-success":e.details?.pullRequest?.merged,"badge-warning":e.details?.pullRequest?.state=="open","badge-danger":e.details?.pullRequest?.state=="closed"&&!e.details?.pullRequest?.merged}])},c(e.fmt?.title(e.details?.pullRequest?.merged?"merged":e.details?.pullRequest?.state)),3)]),e.options?.date?(l(),d("small",{key:0,textContent:c(e.fmt?.date(e.details?.pullRequest?.updatedDate))},null,8,PN)):f("v-if",!0)]),e.options?.origin?(l(),d("small",VN,"Pull Request on "+c(e.details?.pullRequest?.baseRepositoryFullName),1)):f("v-if",!0),e.options?.body?(l(),d("div",qN,[Ce(r,{content:e.anonymizePrContent(e.details?.pullRequest?.body),options:e.options,terms:e.terms},null,8,["content","options","terms"])])):f("v-if",!0),e.options?.diff||e.options?.comments?(l(),d("nav",MN,[e.options?.diff?(l(),d("button",{key:0,class:A(["paper-tab",{active:e.prTabState?.active=="diff"}]),type:"button",role:"tab",id:"preview-pr-diff-tab","aria-selected":e.prTabState?.active==="diff","aria-controls":"preview-pr-diff-panel",tabindex:e.prTabState?.active==="diff"?0:-1,onKeydown:t[31]||(t[31]=a=>e.previewTabKeydown(a)),onClick:t[32]||(t[32]=a=>e.prTabState.active="diff")},[...t[132]||(t[132]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-code"})],-1),w(" Diff ",-1)])],42,UN)):f("v-if",!0),e.options?.comments?(l(),d("button",{key:1,class:A(["paper-tab",{active:e.prTabState?.active=="comments"}]),type:"button",role:"tab",id:"preview-pr-comments-tab","aria-selected":e.prTabState?.active==="comments","aria-controls":"preview-pr-comments-panel",tabindex:e.prTabState?.active==="comments"?0:-1,onKeydown:t[33]||(t[33]=a=>e.previewTabKeydown(a)),onClick:t[34]||(t[34]=a=>e.prTabState.active="comments")},[t[133]||(t[133]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-comment"})],-1)),o("span",{textContent:c(e.fmt.plural(e.details?.pullRequest?.comments?.length,{0:"No comments",one:"1 comment",other:"{} comments"}))},null,8,LN)],42,$N)):f("v-if",!0)])):f("v-if",!0),!e.options?.diff&&!e.options?.comments?(l(),d("div",FN,"Diff and comments are hidden by your display settings.")):f("v-if",!0),o("div",zN,[e.options?.diff&&e.prTabState?.active=="diff"?(l(),d("div",HN,[o("div",{class:"pr-diff",innerHTML:e.sanitize(e.fmt?.diff(e.anonymizePrContent(e.details?.pullRequest?.diff)))},null,8,BN)])):f("v-if",!0),e.options?.comments&&e.prTabState?.active=="comments"?(l(),d("div",jN,[o("ul",GN,[(l(!0),d(K,null,oe(e.details?.pullRequest?.comments,(a,u)=>(l(),d("li",WN,[o("div",KN,[e.options?.username?(l(),d("span",YN,[t[134]||(t[134]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user"})],-1)),t[135]||(t[135]=w(" @",-1)),o("span",{textContent:c(e.anonymizePrContent(a?.author))},null,8,JN)])):f("v-if",!0),e.options?.date?(l(),d("span",{key:1,class:"pr-comment-date",textContent:c(e.fmt?.date(a?.updatedDate))},null,8,QN)):f("v-if",!0)]),e.options?.body?(l(),d("div",XN,[Ce(r,{content:e.anonymizePrContent(a?.body),options:e.options,terms:e.terms},null,8,["content","options","terms"])])):f("v-if",!0)]))),256))])])):f("v-if",!0)])])):f("v-if",!0)],8,CN)):f("v-if",!0)])],512),[[j,e.workspaceOpen||e.isUpdate]])],2)}var ZN={class:"container-fluid h-100 anonymize-page"},xN={class:"row h-100 flex-column flex-md-row"},eD={class:"col-md sidePanel shadow overflow-auto anonymize-form-col"},tD={class:"form-group"},oD={class:"form-group"},nD={class:"form-check"},sD={class:"form-check-input",type:"checkbox",id:"update",name:"update"},rD={class:"form-group"},iD={class:"form-text text-muted"},aD=["href"],lD={class:"invalid-feedback"},dD={class:"form-text text-muted"},uD={class:"form-group"},cD={id:"idHelp",class:"form-text text-muted"},pD={class:"invalid-feedback"},fD={class:"form-group"},mD={class:"invalid-feedback"},hD={class:"form-group"},vD={class:"form-control",id:"expiration",name:"expiration"},yD={class:"form-group",id:"expiration-date-form"},gD={class:"form-control",type:"date",name:"expirationDate",id:"expirationDate"},bD={class:"accordion mb-3",id:"options"},wD={class:"card"},kD={id:"collapseOne",class:"collapse show","aria-labelledby":"headingOne","data-parent":"#options"},ED={class:"card-body"},CD={class:"form-group mb-0"},_D={class:"form-check"},SD={class:"form-check-input",type:"checkbox",id:"link",name:"link"},ND={class:"form-check"},DD={class:"form-check-input",type:"checkbox",id:"image",name:"image"},RD={class:"form-check"},TD={class:"form-check-input",type:"checkbox",id:"date",name:"date"},AD={class:"form-check"},OD={class:"form-check-input",type:"checkbox",id:"username",name:"username"},ID={class:"form-check"},PD={class:"form-check-input",type:"checkbox",id:"comments",name:"comments"},VD={class:"form-check"},qD={class:"form-check-input",type:"checkbox",id:"diff",name:"diff"},MD={class:"form-check"},UD={class:"form-check-input",type:"checkbox",id:"origin",name:"origin"},$D={class:"form-check"},LD={class:"form-check-input",type:"checkbox",id:"title",name:"title"},FD={class:"form-check"},zD={class:"form-check-input",type:"checkbox",id:"body",name:"body"},HD=["textContent"],BD={class:"anonymize-submit-bar"},jD={key:0,class:"col-md-8 p-2 overflow-auto anonymize-preview-col"},GD={class:"d-flex w-100 justify-content-between align-items-center flex-wrap"},WD={class:"pr-title mb-1"},KD={key:0},YD=["textContent"],JD={key:0},QD={key:1,class:"pr-body shadow-sm p-3 mb-4 rounded",style:{background:"var(--sidebar-bg-color)"}},XD={class:"nav nav-tabs",id:"myTab",role:"tablist"},ZD={key:0,class:"nav-item",role:"presentation"},xD={key:1,class:"nav-item",role:"presentation"},eR=["textContent"],tR={class:"tab-content",id:"pills-tabContent"},oR={class:"tab-pane show active",id:"pills-diff",role:"tabpanel","aria-labelledby":"pills-diff-tab"},nR={key:0,class:"pr-diff shadow-sm p-3 mb-4 rounded",style:{background:"var(--sidebar-bg-color)"}},sR={style:{"overflow-x":"auto"}},rR=["innerHTML"],iR={key:0,class:"pr-comments list-group"},aR={class:"pr-comment list-group-item"},lR={class:"d-flex w-100 justify-content-between flex-wrap"},dR={key:0,class:"mb-1"},uR=["textContent"],cR={class:"mb-1"};function Ml(e,t){let n=Ge("markdown"),r=ve("field"),s=ve("form");return l(),d("div",ZN,[o("div",xN,[o("div",eD,[o("div",{class:A(["p-0 py-2 m-auto",{card:!e.pullRequestUrl,container:e.pullRequestUrl}])},[N((l(),d("form",{class:A(["form needs-validation",{"card-body":!e.pullRequestUrl}]),name:"anonymizeForm",novalidate:""},[t[30]||(t[30]=ue('
Anonymize \xA0/\xA0 Pull request

Anonymize a pull request

Fill in the details \u2014 it only takes a minute.

Source
',4)),f(" pullRequestUrl "),o("div",tD,[t[2]||(t[2]=o("label",{for:"pullRequestUrl"},"URL of your pull request",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.anonymize?.pullRequestUrl?.invalid}]),name:"pullRequestUrl",id:"pullRequestUrl",placeholder:"https://github.com/owner/repo/pull/123"},null,2),[[r,{state:e.viewState,set:i=>{e.pullRequestUrl=i},value:e.pullRequestUrl,form:"anonymizeForm",options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"},change:()=>{e.pullRequestSelected()}}]]),N(o("div",{class:"invalid-feedback"},c(e.pullRequestUrl)+" is not accessible. Some organizations are restricting the access to the repositories. ",513),[[j,e.anonymize?.pullRequestUrl?.errors?.access]]),N(o("div",{class:"invalid-feedback"},c(e.pullRequestUrl)+" does not exist or is not accessible ",513),[[j,e.anonymize?.pullRequestUrl?.errors?.missing]]),N(o("div",{class:"invalid-feedback"},c(e.pullRequestUrl)+" is already anonymized ",513),[[j,e.anonymize?.pullRequestUrl?.errors?.used]])]),N(o("div",null,[o("div",oD,[o("div",nD,[N(o("input",sD,null,512),[[r,{state:e.viewState,set:i=>{e.options.update=i},value:e.options?.update,form:"anonymizeForm",options:{}}]]),t[3]||(t[3]=o("label",{class:"form-check-label",for:"update"},"Auto update",-1)),t[4]||(t[4]=o("small",{id:"updateHelp",class:"form-text text-muted"},"Automatically update the anonymized pull request with the latest updates. The pull request is updated once per day maximum.",-1))])]),t[26]||(t[26]=o("div",{class:"paper-section-eyebrow anonymize-section-title"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-conference"})]),w(" Conference ID ")],-1)),f(" Conference "),o("div",rD,[t[5]||(t[5]=o("label",{for:"conference"},[w("Conference ID "),o("span",{class:"text-muted"},"(Optional)")],-1)),N(o("input",{class:A(["form-control",{"is-invalid":e.anonymize?.conference?.invalid}]),id:"conference",name:"conference"},null,2),[[r,{state:e.viewState,set:i=>{e.conference=i},value:e.conference,form:"anonymizeForm",options:{debounce:{default:800,blur:0},updateOn:"default blur"}}]]),N(o("small",iD,[o("a",{target:"_target",href:e.safeUrl(e.conference_data?.url)},c(e.conference_data?.name),9,aD),w(" will expire on "+c(e.fmt?.date(e.conference_data?.endDate))+".",1)],512),[[j,e.conference_data]]),N(o("div",lD," The conference is not activated. ",512),[[j,e.anonymize?.conference?.errors?.activated]]),N(o("small",dD," Use the Conference ID that your conference provided you. This will update automatically the anonymization options based on the conference preferences. ",512),[[j,!e.conference_data]])]),t[27]||(t[27]=o("div",{class:"paper-section-eyebrow anonymize-section-title"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})]),w(" Anonymization Options ")],-1)),f(" Pull Request ID "),o("div",uD,[t[6]||(t[6]=o("label",{for:"pullRequestId"},"Anonymized pull request id",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.anonymize?.pullRequestId?.invalid}]),name:"pullRequestId",id:"pullRequestId"},null,2),[[r,{state:e.viewState,set:i=>{e.pullRequestId=i},value:e.pullRequestId,form:"anonymizeForm",options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"}}]]),o("small",cD,"Id used in the url: https://anonymous.4open.science/r/"+c(e.pullRequestId),1),N(o("div",pD," Repository id can only contain letters and numbers ",512),[[j,e.anonymize?.pullRequestId?.errors?.format]]),N(o("div",{class:"invalid-feedback"},c(e.pullRequestId)+" is already used ",513),[[j,e.anonymize?.pullRequestId?.errors?.used]])]),f(" Terms "),o("div",fD,[t[7]||(t[7]=o("label",{for:"terms"},"Terms to anonymize",-1)),N(o("textarea",{class:A(["form-control",{"is-invalid":e.anonymize?.terms?.invalid}]),id:"terms",name:"terms",rows:"3"},null,2),[[r,{state:e.viewState,set:i=>{e.terms=i},value:e.terms,form:"anonymizeForm",options:{debounce:250}}]]),t[8]||(t[8]=o("small",{id:"termsHelp",class:"form-text text-muted"},"One term per line. Each term will be replaced by XXX.",-1)),N(o("div",mD," Terms are in an invalid format ",512),[[j,e.anonymize?.terms?.errors?.format]])]),o("div",hD,[t[10]||(t[10]=o("label",{for:"expiration"},"Expiration strategy",-1)),N((l(),d("select",vD,[...t[9]||(t[9]=[o("option",{value:"never",selected:""},"Never expire",-1),o("option",{value:"redirect"}," Redirect to GitHub when expired ",-1),o("option",{value:"remove"},"Remove when expired",-1)])])),[[r,{state:e.viewState,set:i=>{e.options.expirationMode=i},value:e.options?.expirationMode,form:"anonymizeForm",options:{}}]]),t[11]||(t[11]=o("small",{class:"form-text text-muted"},"Define the expiration strategy for the anonymized repository.",-1))]),N(o("div",yD,[t[12]||(t[12]=o("label",{for:"expirationDate"},"Expiration date of the anonymized repository",-1)),N(o("input",gD,null,512),[[r,{state:e.viewState,set:i=>{e.options.expirationDate=i},value:e.options?.expirationDate,form:"anonymizeForm",options:{}}]]),N(o("small",{class:"form-text text-muted"},"After "+c(e.fmt?.date(e.options?.expirationDate))+", the repository will be removed and the visitor will not be able to see the content of the repository.",513),[[j,e.options?.expirationMode=="remove"]]),N(o("small",{class:"form-text text-muted"},"After "+c(e.fmt?.date(e.options?.expirationDate))+", the visitors of the anonymized repository will be redirected to "+c(e.pullRequestUrl)+".",513),[[j,e.options?.expirationMode=="redirect"]])],512),[[j,e.options?.expirationMode!="never"]]),o("div",bD,[o("div",wD,[t[25]||(t[25]=ue('

',1)),o("div",kD,[o("div",ED,[o("div",CD,[o("div",_D,[N(o("input",SD,null,512),[[r,{state:e.viewState,set:i=>{e.options.link=i},value:e.options?.link,form:"anonymizeForm",options:{}}]]),t[13]||(t[13]=o("label",{class:"form-check-label",for:"link"},"Keep links",-1)),t[14]||(t[14]=o("small",{class:"form-text text-muted"},"Keep or remove all the links.",-1))]),o("div",ND,[N(o("input",DD,null,512),[[r,{state:e.viewState,set:i=>{e.options.image=i},value:e.options?.image,form:"anonymizeForm",options:{}}]]),t[15]||(t[15]=o("label",{class:"form-check-label",for:"image"},"Display images",-1)),t[16]||(t[16]=o("small",{class:"form-text text-muted"},"Images are not anonymized",-1))]),o("div",RD,[N(o("input",TD,null,512),[[r,{state:e.viewState,set:i=>{e.options.date=i},value:e.options?.date,form:"anonymizeForm",options:{}}]]),t[17]||(t[17]=o("label",{class:"form-check-label",for:"date"},"Display dates",-1)),t[18]||(t[18]=o("small",{class:"form-text text-muted"},"Display the date of the Pull Request and the date of the comments.",-1))]),o("div",AD,[N(o("input",OD,null,512),[[r,{state:e.viewState,set:i=>{e.options.username=i},value:e.options?.username,form:"anonymizeForm",options:{}}]]),t[19]||(t[19]=o("label",{class:"form-check-label",for:"username"},"Display username",-1))]),o("div",ID,[N(o("input",PD,null,512),[[r,{state:e.viewState,set:i=>{e.options.comments=i},value:e.options?.comments,form:"anonymizeForm",options:{}}]]),t[20]||(t[20]=o("label",{class:"form-check-label",for:"comments"},"Display comments",-1))]),o("div",VD,[N(o("input",qD,null,512),[[r,{state:e.viewState,set:i=>{e.options.diff=i},value:e.options?.diff,form:"anonymizeForm",options:{}}]]),t[21]||(t[21]=o("label",{class:"form-check-label",for:"diff"},"Display diff",-1))]),o("div",MD,[N(o("input",UD,null,512),[[r,{state:e.viewState,set:i=>{e.options.origin=i},value:e.options?.origin,form:"anonymizeForm",options:{}}]]),t[22]||(t[22]=o("label",{class:"form-check-label",for:"origin"},"Display the project name",-1))]),o("div",$D,[N(o("input",LD,null,512),[[r,{state:e.viewState,set:i=>{e.options.title=i},value:e.options?.title,form:"anonymizeForm",options:{}}]]),t[23]||(t[23]=o("label",{class:"form-check-label",for:"title"},"Display the PR title",-1))]),o("div",FD,[N(o("input",zD,null,512),[[r,{state:e.viewState,set:i=>{e.options.body=i},value:e.options?.body,form:"anonymizeForm",options:{}}]]),t[24]||(t[24]=o("label",{class:"form-check-label",for:"body"},"Display the PR body and comment bodies",-1))])])])])])])],512),[[j,e.pullRequestUrl]]),e.error?(l(),d("div",{key:0,class:"alert alert-danger",role:"alert",textContent:c(e.error)},null,8,HD)):f("v-if",!0),N(o("div",BD,[e.isUpdate?f("v-if",!0):(l(),d("button",{key:0,id:"submit",type:"submit",class:"btn btn-ink btn-block",onClick:t[0]||(t[0]=ie(i=>e.submitForm(i,()=>{e.anonymizePullRequest(i)}),["prevent"]))},[...t[28]||(t[28]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),w(" Anonymize ",-1)])])),e.isUpdate?(l(),d("button",{key:1,id:"submit",type:"submit",class:"btn btn-ink btn-block",onClick:t[1]||(t[1]=ie(i=>e.submitForm(i,()=>{e.updatePullRequest(i)}),["prevent"]))},[...t[29]||(t[29]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-save"})],-1),w(" Update ",-1)])])):f("v-if",!0)],512),[[j,e.pullRequestUrl]])],2)),[[s,e.viewState]])],2)]),e.details?(l(),d("div",jD,[o("div",GD,[o("h2",WD,[e.options?.title?(l(),d("span",KD,c(e.anonymize(e.details?.pullRequest?.title)),1)):f("v-if",!0),o("span",{class:A(["badge",{"badge-success":e.details?.pullRequest?.merged,"badge-warning":e.details?.pullRequest?.state=="open","badge-danger":e.details?.pullRequest?.state=="closed"&&!e.details?.pullRequest?.merged}])},c(e.fmt?.title(e.details?.pullRequest?.merged?"merged":e.details?.pullRequest?.state)),3)]),e.options?.date?(l(),d("small",{key:0,textContent:c(e.fmt?.date(e.details?.pullRequest?.updatedDate))},null,8,YD)):f("v-if",!0)]),e.options?.origin?(l(),d("small",JD,"Pull Request on "+c(e.details?.pullRequest?.baseRepositoryFullName),1)):f("v-if",!0),e.options?.body?(l(),d("div",QD,[Ce(n,{content:e.anonymize(e.details?.pullRequest?.body),options:e.options,terms:e.terms},null,8,["content","options","terms"])])):f("v-if",!0),o("ul",XD,[e.options?.diff?(l(),d("li",ZD,[...t[31]||(t[31]=[o("button",{class:"nav-link active",id:"pills-diff-tab","data-toggle":"pill","data-target":"#pills-diff",type:"button",role:"tab","aria-controls":"pills-diff","aria-selected":"true"}," Diff ",-1)])])):f("v-if",!0),e.options?.comments?(l(),d("li",xD,[o("button",{class:A(["nav-link",{active:!e.options?.diff}]),id:"pills-comments-tab","data-toggle":"pill","data-target":"#pills-comments",type:"button",role:"tab","aria-controls":"pills-comments","aria-selected":"false"},[o("span",{textContent:c(e.fmt.plural(e.details?.pullRequest?.comments?.length,{0:"No comment",one:"One Comment",other:"{} Comments"}))},null,8,eR)],2)])):f("v-if",!0)]),o("div",tR,[o("div",oR,[e.options?.diff?(l(),d("div",nR,[o("pre",sR,[o("code",{innerHTML:e.sanitize(e.fmt?.diff(e.anonymize(e.details?.pullRequest?.diff)))},null,8,rR)])])):f("v-if",!0)]),o("div",{class:A(["tab-pane",{"show active":!e.options?.diff}]),id:"pills-comments",role:"tabpanel","aria-labelledby":"pills-comments-tab"},[e.options?.comments?(l(),d("ul",iR,[(l(!0),d(K,null,oe(e.details?.pullRequest?.comments,(i,a)=>(l(),d("li",aR,[o("div",lR,[e.options?.username?(l(),d("h5",dR," @"+c(e.anonymize(i?.author)),1)):f("v-if",!0),e.options?.date?(l(),d("small",{key:1,textContent:c(e.fmt?.date(i?.updatedDate))},null,8,uR)):f("v-if",!0)]),o("p",cR,[e.options?.body?(l(),Lt(n,{key:0,class:"pr-comment-body",content:e.anonymize(i?.body),options:e.options,terms:e.terms},null,8,["content","options","terms"])):f("v-if",!0)])]))),256))])):f("v-if",!0)],2)])])):f("v-if",!0)])])}var pR={class:"container paper-page claim-page"},fR={class:"paper-settings-main claim-form"},mR={class:"form-group"},hR={class:"invalid-feedback"},vR={class:"form-group"};function Ul(e,t){let n=ve("field"),r=ve("form");return l(),d("div",pR,[t[6]||(t[6]=ue('
My work \xA0/\xA0 Claim

Claim an anonymization

Take ownership of an existing anonymized repository so it appears on your dashboard.

',3)),o("div",fR,[t[5]||(t[5]=o("p",{class:"paper-section-copy"},"Use this when an anonymization was created by a co-author or from another account. You must have access to the GitHub repository it was made from.",-1)),N((l(),d("form",{class:"form needs-validation",name:"claimForm",novalidate:"",onSubmit:t[0]||(t[0]=ie(s=>e.submitForm(s,()=>{e.claim()}),["prevent"]))},[o("div",mR,[t[1]||(t[1]=o("label",{class:"paper-field-label",for:"repoUrl"},"GitHub repository URL",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.claimForm?.repoUrl?.invalid&&(e.claimForm?.repoUrl?.touched||e.claimForm?.submitted)}]),name:"repoUrl",id:"repoUrl",placeholder:"https://github.com/owner/repository",required:""},null,2),[[n,{state:e.viewState,set:s=>{e.repoUrl=s},value:e.repoUrl,form:"claimForm",options:{}}]]),N(o("div",hR," No anonymization matches this repository and ID. Check both values and that you can access the repository on GitHub. ",512),[[j,e.claimForm?.repoUrl?.errors?.not_found]])]),o("div",vR,[t[2]||(t[2]=o("label",{class:"paper-field-label",for:"repoId"},"Anonymized repository ID",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.claimForm?.repoId?.invalid&&(e.claimForm?.repoId?.touched||e.claimForm?.submitted)}]),name:"repoId",id:"repoId",placeholder:"e.g. my-paper-7F2A","aria-describedby":"idHelp",required:""},null,2),[[n,{state:e.viewState,set:s=>{e.repoId=s},value:e.repoId,form:"claimForm",options:{}}]]),t[3]||(t[3]=o("small",{id:"idHelp",class:"form-text text-muted"},[w("The ID is the last part of the anonymized URL: "),o("code",null,"anonymous.4open.science/r/"),w(".")],-1))]),t[4]||(t[4]=o("button",{id:"submit",type:"submit",class:"btn btn-ink"}," Claim anonymization ",-1))],32)),[[r,e.viewState]])])])}var yR={class:"container page paper-page conference-page"},gR={class:"paper-crumbs"},bR={class:"here"},wR={class:"d-flex align-items-end flex-wrap",style:{gap:"12px","justify-content":"space-between"}},kR=["textContent"],ER={key:0,class:"paper-page-lede"},CR=["textContent","href"],_R={class:"d-flex align-items-center flex-wrap",style:{gap:"10px"}},SR=["textContent"],NR=["href"],DR={class:"paper-meta-rule"},RR=["textContent"],TR=["textContent"],AR={key:0},OR={class:"search-wrap"},IR={type:"search",id:"search",class:"form-control","aria-label":"Search repositories",placeholder:"Search by ID or source repository\u2026",autocomplete:"off"},PR={class:"dashboard-filter-controls"},VR={class:"dropdown"},qR={class:"btn dropdown-toggle",type:"button",id:"dropdownSort","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},MR={class:"filter-btn-value"},UR={class:"dropdown-menu","aria-labelledby":"dropdownSort"},$R={class:"form-check dropdown-item"},LR={class:"form-check-input",type:"radio",name:"sort",id:"anonymizeDate",value:"-anonymizeDate"},FR={class:"form-check dropdown-item"},zR={class:"form-check-input",type:"radio",name:"sort",id:"sortID",value:"repoId"},HR={class:"form-check dropdown-item"},BR={class:"form-check-input",type:"radio",name:"sort",id:"sortStatus",value:"-status"},jR={class:"form-check dropdown-item"},GR={class:"form-check-input",type:"radio",name:"sort",id:"sortViews",value:"-pageView"},WR={class:"dropdown"},KR={class:"btn dropdown-toggle",type:"button",id:"dropdownStatus","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},YR={key:0,class:"filter-btn-value"},JR={key:1,class:"filter-btn-value"},QR={class:"dropdown-menu","aria-labelledby":"dropdownStatus"},XR={class:"form-check dropdown-item"},ZR=["id"],xR=["for"],eT={class:"dashboard-meta"},tT={class:"dashboard-count"},oT={key:0},nT={key:0},sT={key:1},rT={key:1},iT={key:0,class:"filter-chip"},aT=["onClick","aria-label"],lT={class:"paper-table paper-table-repos w-100",role:"table","aria-label":"Repositories"},dT={class:"cell-anon",role:"cell"},uT={class:"anon-text"},cT=["textContent","href"],pT={class:"anon-sub"},fT={class:"anon-source"},mT=["textContent","href"],hT={key:0},vT=["textContent","href"],yT={key:1},gT=["href"],bT={class:"cell-status",role:"cell"},wT={class:"status-line"},kT=["textContent"],ET={key:0,class:"status-sub"},CT={class:"cell-views num",role:"cell"},_T=["textContent"],ST={class:"cell-expires",role:"cell"},NT={key:0,class:"expires-never"},DT=["textContent"],RT={key:2,class:"expires-past"},TT={key:0},AT={key:3,class:"empty-dash","aria-label":"Not applicable"},OT={class:"cell-actions",role:"cell"},IT={class:"dropdown"},PT=["aria-label"],VT={class:"dropdown-menu dropdown-menu-right"},qT=["href"],MT=["href"],UT={key:0,class:"paper-table-empty"},$T={key:0},LT={key:1},FT={key:2,class:"paper-table-empty-actions"};function $l(e,t){let n=ve("field"),r=ve("form");return l(),d("div",yR,[o("div",null,[o("div",gR,[t[2]||(t[2]=o("a",{href:"/dashboard"},"My work",-1)),t[3]||(t[3]=w(" \xA0/\xA0 ",-1)),t[4]||(t[4]=o("a",{href:"/conferences"},"Conferences",-1)),t[5]||(t[5]=w(" \xA0/\xA0 ",-1)),o("span",bR,c(e.conference?.conferenceID),1)]),o("div",wR,[o("div",null,[o("h1",{class:"paper-page-title",textContent:c(e.conference?.name)},null,8,kR),e.conference?.url?(l(),d("p",ER,[o("a",{target:"_blank",rel:"noopener",textContent:c(e.conference?.url),href:e.safeUrl(e.conference?.url)},null,8,CR)])):f("v-if",!0)]),o("div",_R,[o("span",{class:A(["status-pill",{"status-pill-ready":e.conference?.status=="ready","status-pill-removed":e.conference?.status=="removed"||e.conference?.status=="expired"}])},[o("span",{class:A(["status-dot","status-"+e.conference?.status]),"aria-hidden":"true"},null,2),o("span",{textContent:c(e.fmt?.statusLabel(e.conference?.status))},null,8,SR)],2),o("a",{class:"btn btn-outline-ink",href:e.safeUrl("/conference/"+e.conference?.conferenceID+"/edit")},[...t[6]||(t[6]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),w(" Edit conference",-1)])],8,NR)])]),o("div",DR,[o("span",null,[t[7]||(t[7]=w("ID ",-1)),o("b",{class:"commit-hash",textContent:c(e.conference?.conferenceID)},null,8,RR)]),o("span",null,[t[8]||(t[8]=w("Review window ",-1)),o("b",null,c(e.fmt?.date(e.conference?.startDate,"mediumDate"))+" \u2013 "+c(e.fmt?.date(e.conference?.endDate,"mediumDate")),1)]),o("span",null,[t[9]||(t[9]=w("Repositories ",-1)),o("b",null,c(e.fmt?.number(e.conference?.repositories?.length)),1)]),o("span",null,[t[10]||(t[10]=w("Plan ",-1)),o("b",{textContent:c(e.conference?.plan?.name||e.conference?.plan?.planID||"Free")},null,8,TR)]),e.conference?.price?(l(),d("span",AR,[t[11]||(t[11]=w("Cost so far ",-1)),o("b",null,c(e.fmt?.number(e.conference?.price,2))+" \u20AC",1)])):f("v-if",!0)]),t[32]||(t[32]=o("div",{class:"paper-section-eyebrow"},"Repositories",-1)),N((l(),d("form",{class:"w-100 dashboard-filter-row","aria-label":"Filter repositories","accept-charset":"UTF-8",onSubmit:t[0]||(t[0]=ie(s=>e.submitForm(s,()=>{s.preventDefault()}),["prevent"]))},[o("div",OR,[N(o("input",IR,null,512),[[n,{state:e.viewState,set:s=>{e.search=s},value:e.search,form:null,options:{}}]])]),o("div",PR,[o("div",VR,[o("button",qR,[t[12]||(t[12]=o("span",{class:"filter-btn-label"},"Sort",-1)),o("span",MR,c({"-anonymizeDate":"Anonymize date",repoId:"ID","-status":"Status","-pageView":"Views"}[e.orderBy]||"Custom"),1)]),o("div",UR,[t[17]||(t[17]=o("h6",{class:"dropdown-header"},"Order by",-1)),o("div",$R,[N(o("input",LR,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[13]||(t[13]=o("label",{class:"form-check-label",for:"anonymizeDate"},"Anonymize date",-1))]),o("div",FR,[N(o("input",zR,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[14]||(t[14]=o("label",{class:"form-check-label",for:"sortID"},"ID",-1))]),o("div",HR,[N(o("input",BR,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[15]||(t[15]=o("label",{class:"form-check-label",for:"sortStatus"},"Status",-1))]),o("div",jR,[N(o("input",GR,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[16]||(t[16]=o("label",{class:"form-check-label",for:"sortViews"},"Views",-1))])])]),o("div",WR,[o("button",KR,[t[18]||(t[18]=o("span",{class:"filter-btn-label"},"Status",-1)),e.filters?.status?.ready&&e.filters?.status?.expired&&e.filters?.status?.removed?(l(),d("span",YR,"All")):f("v-if",!0),e.filters?.status?.ready&&e.filters?.status?.expired&&e.filters?.status?.removed?f("v-if",!0):(l(),d("span",JR,c((e.filters?.status?.ready?0:1)+(e.filters?.status?.expired?0:1)+(e.filters?.status?.removed?0:1))+" hidden ",1))]),o("div",QR,[t[19]||(t[19]=o("h6",{class:"dropdown-header"},"Show statuses",-1)),(l(!0),d(K,null,oe(e.statusLabels,(s,i,a)=>(l(),d("div",XR,[N(o("input",{class:"form-check-input",type:"checkbox",id:"status-"+i},null,8,ZR),[[n,{state:e.viewState,set:u=>{e.filters.status[i]=u},value:e.filters?.status[i],form:null,options:{}}]]),o("label",{class:"form-check-label",for:"status-"+i},c(s),9,xR)]))),256))])])])],32)),[[r,e.viewState]]),o("div",eT,[o("span",tT,[e.filteredRepositories?.length===e.conference?.repositories?.length?(l(),d("span",oT,[w(c(e.fmt?.number(e.conference?.repositories?.length))+" repositor",1),e.conference?.repositories?.length===1?(l(),d("span",nT,"y")):f("v-if",!0),e.conference?.repositories?.length!==1?(l(),d("span",sT,"ies")):f("v-if",!0)])):f("v-if",!0),e.filteredRepositories?.length!==e.conference?.repositories?.length?(l(),d("span",rT,c(e.fmt?.number(e.filteredRepositories?.length))+" of "+c(e.fmt?.number(e.conference?.repositories?.length))+" shown",1)):f("v-if",!0)]),(l(!0),d(K,null,oe(e.filters?.status,(s,i,a)=>(l(),d(K,null,[s===!1?(l(),d("span",iT,[w(" Hiding "+c(e.statusLabels[i])+" ",1),o("button",{type:"button",class:"filter-chip-close",onClick:u=>{e.filters.status[i]=!0},"aria-label":"Show "+e.statusLabels[i]+" again"},"\xD7",8,aT)])):f("v-if",!0)],64))),256))]),o("div",lT,[t[31]||(t[31]=o("div",{class:"paper-table-head",role:"row"},[o("div",{role:"columnheader"},"Repository"),o("div",{role:"columnheader"},"Status"),o("div",{role:"columnheader",class:"num"},"Views"),o("div",{role:"columnheader"},"Expires"),o("div",{role:"columnheader"},[o("span",{class:"sr-only"},"Actions")])],-1)),(l(!0),d(K,null,oe(e.filteredRepositories,(s,i)=>(l(),d("div",{class:A(["paper-table-row",{"repo-inactive":s?.status=="expired"||s?.status=="removed","repo-error":s?.status=="error"}]),role:"row",key:s?.repoId},[o("div",dT,[t[22]||(t[22]=o("svg",{class:"ui-icon record-type-icon",role:"img","aria-label":"Repository"},[o("use",{href:"#project-type-repo"})],-1)),o("div",uT,[o("a",{class:"repo-name",textContent:c(s?.repoId),href:e.safeUrl("/r/"+s?.repoId+"/")},null,8,cT),o("div",pT,[o("span",fT,[o("a",{target:"_blank",rel:"noopener",textContent:c(s?.source?.fullName),href:e.safeUrl("https://github.com/"+s?.source?.fullName+"/")},null,8,mT),s?.options?.update&&s?.source?.branch?(l(),d("span",hT,[t[20]||(t[20]=w(" \xB7 ",-1)),o("a",{target:"_blank",rel:"noopener",textContent:c(s?.source?.branch),href:e.safeUrl("https://github.com/"+s?.source?.fullName+"/tree/"+s?.source?.branch)},null,8,vT)])):f("v-if",!0),s?.source?.commit?(l(),d("span",yT,[t[21]||(t[21]=w(" \xB7 ",-1)),o("a",{class:"commit-hash",target:"_blank",rel:"noopener",href:e.safeUrl("https://github.com/"+s?.source?.fullName+"/tree/"+s?.source?.commit)},"@"+c(s?.source?.commit?.substring(0,8)),9,gT)])):f("v-if",!0)])])])]),o("div",bT,[o("div",wT,[o("span",{class:A(["status-dot","status-"+(s?.status=="error"?"error":s?.status=="ready"?"ready":s?.status=="expired"||s?.status=="removed"?s?.status:"progress")]),"aria-hidden":"true"},null,2),o("span",{class:"status-word",textContent:c(e.fmt?.statusLabel(s?.status))},null,8,kT)]),s?.anonymizeDate?(l(),d("div",ET,"anonymized "+c(e.fmt?.humanTime(s?.anonymizeDate)),1)):f("v-if",!0)]),o("div",CT,[t[23]||(t[23]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1)),t[24]||(t[24]=w()),o("span",{textContent:c(e.fmt?.number(s?.pageView))},null,8,_T)]),o("div",ST,[t[26]||(t[26]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),s?.status=="ready"&&(s?.options?.expirationMode==="never"||!s?.options?.expirationDate)?(l(),d("span",NT,"Never")):f("v-if",!0),s?.status=="ready"&&s?.options?.expirationMode!=="never"&&s?.options?.expirationDate?(l(),d("span",{key:1,textContent:c(e.fmt?.humanTime(s?.options?.expirationDate))},null,8,DT)):f("v-if",!0),s?.status=="expired"?(l(),d("span",RT,[t[25]||(t[25]=w("Expired",-1)),s?.options?.expirationDate?(l(),d("span",TT,c(e.fmt?.humanTime(s?.options?.expirationDate)),1)):f("v-if",!0)])):f("v-if",!0),s?.status!="ready"&&s?.status!="expired"?(l(),d("span",AT,"\u2014")):f("v-if",!0)]),o("div",OT,[o("div",IT,[o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"Actions for "+s?.repoId},[...t[27]||(t[27]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})],-1)])],8,PT),o("div",VT,[o("a",{class:"dropdown-item",href:e.safeUrl("/r/"+s?.repoId+"/")},[...t[28]||(t[28]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),w(" View ",-1)])],8,qT),o("a",{class:"dropdown-item",href:e.safeUrl("/anonymize/"+s?.repoId)},[...t[29]||(t[29]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),w(" Edit ",-1)])],8,MT)])])])],2))),128)),e.filteredRepositories?.length==0?(l(),d("div",UT,[t[30]||(t[30]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1)),e.conference?.repositories?.length?f("v-if",!0):(l(),d("span",$T,"No repository has been submitted to this conference yet.")),e.conference?.repositories?.length?(l(),d("span",LT,"Nothing matches the current filters.")):f("v-if",!0),e.conference?.repositories?.length?(l(),d("div",FT,[o("button",{type:"button",class:"btn btn-outline-ink",onClick:t[1]||(t[1]=s=>{e.search="",e.filters.status.ready=!0,e.filters.status.expired=!0,e.filters.status.removed=!0})},"Clear filters")])):f("v-if",!0)])):f("v-if",!0)])])])}var zT={class:"container page paper-page conferences-page"},HT={class:"row"},BT={class:"w-100"},jT={class:"search-wrap"},GT={type:"search",id:"search",class:"form-control","aria-label":"Search conferences",placeholder:"Search by name or ID\u2026",autocomplete:"off"},WT={class:"dashboard-filter-controls"},KT={class:"dropdown"},YT={class:"btn dropdown-toggle",type:"button",id:"dropdownSort","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},JT={class:"filter-btn-value"},QT={class:"dropdown-menu","aria-labelledby":"dropdownSort"},XT={class:"form-check dropdown-item"},ZT={class:"form-check-input",type:"radio",name:"sort",id:"sortName",value:"name"},xT={class:"form-check dropdown-item"},eA={class:"form-check-input",type:"radio",name:"sort",id:"sortID",value:"conferenceID"},tA={class:"form-check dropdown-item"},oA={class:"form-check-input",type:"radio",name:"sort",id:"sortStatus",value:"-status"},nA={class:"dropdown"},sA={class:"btn dropdown-toggle",type:"button",id:"dropdownStatus","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},rA={key:0,class:"filter-btn-value"},iA={key:1,class:"filter-btn-value"},aA={class:"dropdown-menu","aria-labelledby":"dropdownStatus"},lA={class:"form-check dropdown-item"},dA=["id"],uA=["for"],cA={class:"dashboard-meta"},pA={class:"dashboard-count"},fA={key:0},mA={key:0},hA={key:1},vA={key:0,class:"filter-chip"},yA=["onClick","aria-label"],gA={key:0,class:"conference-feedback",role:"alert"},bA={key:1,class:"conference-feedback",role:"status"},wA={class:"paper-table paper-table-conferences w-100",role:"table","aria-label":"Conferences"},kA={class:"cell-anon",role:"cell"},EA={class:"anon-text"},CA=["textContent","href"],_A={class:"anon-sub"},SA={class:"anon-source"},NA=["textContent"],DA={key:0},RA=["textContent","href"],TA={class:"cell-status",role:"cell"},AA={class:"status-line"},OA=["textContent"],IA={class:"cell-views num",role:"cell"},PA=["textContent"],VA={class:"cell-expires",role:"cell"},qA={key:0},MA={key:1,class:"empty-dash","aria-label":"No review window"},UA={class:"cell-actions",role:"cell"},$A={class:"dropdown"},LA=["disabled","aria-label"],FA={class:"dropdown-menu dropdown-menu-right"},zA=["href"],HA=["href"],BA={key:0},jA=["onClick"],GA={key:0,class:"paper-table-empty"},WA={key:0},KA={key:1},YA={class:"paper-table-empty-actions"},JA={key:1,href:"/conference/new",class:"btn btn-ink"};function Ll(e,t){let n=ve("field"),r=ve("form");return l(),d("div",zT,[o("div",HT,[o("div",BT,[t[10]||(t[10]=ue('
My work \xA0/\xA0 Conferences

Your conferences

Group anonymizations by venue, give chairs a shared dashboard, and set one expiry for every submission.

New conference
',2)),N((l(),d("form",{class:"w-100 dashboard-filter-row","aria-label":"Filter conferences","accept-charset":"UTF-8",onSubmit:t[0]||(t[0]=ie(s=>e.submitForm(s,()=>{s.preventDefault()}),["prevent"]))},[o("div",jT,[N(o("input",GT,null,512),[[n,{state:e.viewState,set:s=>{e.search=s},value:e.search,form:null,options:{}}]])]),o("div",WT,[o("div",KT,[o("button",YT,[t[3]||(t[3]=o("span",{class:"filter-btn-label"},"Sort",-1)),o("span",JT,c({name:"Name",conferenceID:"ID","-status":"Status"}[e.orderBy]||"Custom"),1)]),o("div",QT,[t[7]||(t[7]=o("h6",{class:"dropdown-header"},"Order by",-1)),o("div",XT,[N(o("input",ZT,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[4]||(t[4]=o("label",{class:"form-check-label",for:"sortName"},"Name",-1))]),o("div",xT,[N(o("input",eA,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[5]||(t[5]=o("label",{class:"form-check-label",for:"sortID"},"ID",-1))]),o("div",tA,[N(o("input",oA,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[6]||(t[6]=o("label",{class:"form-check-label",for:"sortStatus"},"Status",-1))])])]),o("div",nA,[o("button",sA,[t[8]||(t[8]=o("span",{class:"filter-btn-label"},"Status",-1)),e.filters?.status?.ready&&e.filters?.status?.expired&&e.filters?.status?.removed?(l(),d("span",rA,"All")):f("v-if",!0),e.filters?.status?.ready&&e.filters?.status?.expired&&e.filters?.status?.removed?f("v-if",!0):(l(),d("span",iA,c((e.filters?.status?.ready?0:1)+(e.filters?.status?.expired?0:1)+(e.filters?.status?.removed?0:1))+" hidden ",1))]),o("div",aA,[t[9]||(t[9]=o("h6",{class:"dropdown-header"},"Show statuses",-1)),(l(!0),d(K,null,oe(e.statusLabels,(s,i,a)=>(l(),d("div",lA,[N(o("input",{class:"form-check-input",type:"checkbox",id:"status-"+i},null,8,dA),[[n,{state:e.viewState,set:u=>{e.filters.status[i]=u},value:e.filters?.status[i],form:null,options:{}}]]),o("label",{class:"form-check-label",for:"status-"+i},c(s),9,uA)]))),256))])])])],32)),[[r,e.viewState]]),o("div",cA,[o("span",pA,[e.filteredConferences?.length===e.conferences?.length?(l(),d("span",fA,[w(c(e.fmt?.number(e.conferences?.length))+" conference",1),e.conferences?.length!==1?(l(),d("span",mA,"s")):f("v-if",!0)])):f("v-if",!0),e.filteredConferences?.length!==e.conferences?.length?(l(),d("span",hA,c(e.fmt?.number(e.filteredConferences?.length))+" of "+c(e.fmt?.number(e.conferences?.length))+" shown",1)):f("v-if",!0)]),(l(!0),d(K,null,oe(e.filters?.status,(s,i,a)=>(l(),d(K,null,[s===!1?(l(),d("span",vA,[w(" Hiding "+c(e.statusLabels[i])+" ",1),o("button",{type:"button",class:"filter-chip-close",onClick:u=>{e.filters.status[i]=!0},"aria-label":"Show "+e.statusLabels[i]+" again"},"\xD7",8,yA)])):f("v-if",!0)],64))),256))])]),e.error?(l(),d("div",gA,[o("span",null,c(e.error),1),o("button",{type:"button",class:"btn btn-outline-ink",onClick:t[1]||(t[1]=s=>e.loadConferences())},"Retry")])):f("v-if",!0),e.loading?(l(),d("div",bA,"Loading conferences\u2026")):f("v-if",!0),o("div",wA,[t[24]||(t[24]=o("div",{class:"paper-table-head",role:"row"},[o("div",{role:"columnheader"},"Conference"),o("div",{role:"columnheader"},"Status"),o("div",{role:"columnheader",class:"num"},"Repos"),o("div",{role:"columnheader"},"Review window"),o("div",{role:"columnheader"},[o("span",{class:"sr-only"},"Actions")])],-1)),(l(!0),d(K,null,oe(e.filteredConferences,(s,i)=>(l(),d("div",{class:A(["paper-table-row row-clickable",{"repo-inactive":s?.status=="expired"||s?.status=="removed"}]),role:"row",key:s?.conferenceID},[o("div",kA,[t[13]||(t[13]=o("svg",{class:"ui-icon record-type-icon",role:"img","aria-label":"Conference"},[o("use",{href:"#project-icon-conference"})],-1)),o("div",EA,[o("a",{class:"repo-name",textContent:c(s?.name),href:e.safeUrl("/conference/"+s?.conferenceID)},null,8,CA),o("div",_A,[o("span",SA,[t[12]||(t[12]=w("ID ",-1)),o("span",{class:"commit-hash",textContent:c(s?.conferenceID)},null,8,NA),s?.url?(l(),d("span",DA,[t[11]||(t[11]=w(" \xB7 ",-1)),o("a",{target:"_blank",rel:"noopener",textContent:c(e.fmt?.limitTo(s?.url,60)),href:e.safeUrl(s?.url)},null,8,RA)])):f("v-if",!0)])])])]),o("div",TA,[o("div",AA,[o("span",{class:A(["status-dot","status-"+s?.status]),"aria-hidden":"true"},null,2),o("span",{class:"status-word",textContent:c(e.fmt?.statusLabel(s?.status))},null,8,OA)])]),o("div",IA,[t[14]||(t[14]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1)),t[15]||(t[15]=w()),o("span",{textContent:c(e.fmt?.number(s?.nbRepositories||0))},null,8,PA)]),o("div",VA,[t[16]||(t[16]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),s?.startDate?(l(),d("span",qA,c(e.fmt?.date(s?.startDate,"mediumDate"))+" \u2013 "+c(e.fmt?.date(s?.endDate,"mediumDate")),1)):f("v-if",!0),s?.startDate?f("v-if",!0):(l(),d("span",MA,"\u2014"))]),o("div",UA,[o("div",$A,[o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false",disabled:s?.removing,"aria-label":"Actions for "+s?.name},[...t[17]||(t[17]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})],-1)])],8,LA),o("div",FA,[o("a",{class:"dropdown-item",href:e.safeUrl("/conference/"+s?.conferenceID+"/")},[...t[18]||(t[18]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),w(" View ",-1)])],8,zA),o("a",{class:"dropdown-item",href:e.safeUrl("/conference/"+s?.conferenceID+"/edit")},[...t[19]||(t[19]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),w(" Edit ",-1)])],8,HA),s?.status!="removed"?(l(),d("div",BA,[t[21]||(t[21]=o("div",{class:"dropdown-divider"},null,-1)),o("button",{type:"button",class:"dropdown-item dropdown-item-danger",onClick:a=>e.removeConference(s)},[...t[20]||(t[20]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),w(" Remove ",-1)])],8,jA)])):f("v-if",!0)])])])],2))),128)),!e.loading&&!e.error&&e.filteredConferences?.length==0?(l(),d("div",GA,[t[23]||(t[23]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1)),e.conferences?.length==0?(l(),d("span",WA,"You have not created a conference yet.")):f("v-if",!0),e.conferences?.length>0?(l(),d("span",KA,"Nothing matches the current filters.")):f("v-if",!0),o("div",YA,[e.conferences?.length>0?(l(),d("button",{key:0,type:"button",class:"btn btn-outline-ink",onClick:t[2]||(t[2]=s=>{e.search="",e.filters.status.ready=!0,e.filters.status.expired=!0,e.filters.status.removed=!0})},"Clear filters")):f("v-if",!0),e.conferences?.length==0?(l(),d("a",JA,[...t[22]||(t[22]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#project-icon-plus"})],-1),w(" New conference",-1)])])):f("v-if",!0)])])):f("v-if",!0)])])])}var QA={class:"container page dashboard-page paper-page"},XA={class:"row"},ZA={class:"w-100"},xA={class:"dashboard-heading"},eO=["open"],tO=["aria-expanded"],oO=["stroke-dasharray"],nO={key:1,d:"M7 12c0-4 4-4 5 0s5 4 5 0-4-4-5 0-5 4-5 0",class:"quota-ring-unlimited"},sO={key:0,class:"quota-summary-value"},rO={key:0},iO={class:"quota-panel",id:"dashboard-usage"},aO={class:"quota-panel-heading"},lO={key:1,class:"quota-loading",role:"status"},dO={class:"search-wrap"},uO={type:"search",id:"search",class:"form-control","aria-label":"Search anonymizations",placeholder:"Search projects, IDs, or conferences\u2026",autocomplete:"off"},cO=["aria-expanded"],pO={class:"btn-group",role:"group","aria-label":"Type"},fO=["aria-pressed"],mO=["aria-pressed"],hO=["aria-pressed"],vO=["aria-pressed"],yO={class:"dropdown"},gO={class:"btn dropdown-toggle",type:"button",id:"dropdownSort","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},bO={class:"filter-btn-value"},wO={class:"sr-only"},kO={class:"dropdown-menu","aria-labelledby":"dropdownSort"},EO={class:"form-check dropdown-item"},CO=["onClick","checked","id"],_O=["for"],SO={class:"dropdown"},NO={class:"btn dropdown-toggle",type:"button",id:"dropdownStatus","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},DO={key:0,class:"filter-btn-value"},RO={key:1,class:"filter-btn-value"},TO={class:"dropdown-menu","aria-labelledby":"dropdownStatus"},AO={class:"form-check dropdown-item"},OO=["id"],IO=["for"],PO={key:0,class:"dashboard-meta"},VO={class:"dashboard-view-tabs",role:"group","aria-label":"Project view"},qO=["aria-pressed"],MO=["aria-pressed","aria-label"],UO={class:"dashboard-count"},$O={key:0},LO={key:0},FO={key:1},zO={class:"dashboard-active-filters"},HO=["onClick","aria-label","title"],BO=["aria-busy"],jO={class:"paper-table-head",role:"row"},GO=["aria-sort"],WO=["aria-sort"],KO=["aria-sort"],YO=["aria-sort"],JO={key:0,class:"paper-table-row paper-table-skeleton",role:"row","aria-hidden":"true"},QO=["onClick"],XO={class:"cell-anon",role:"cell"},ZO=["aria-label","title"],xO={class:"project-type-svg","aria-hidden":"true"},eI=["href"],tI={class:"anon-text"},oI={class:"anon-title"},nI=["title","textContent","href"],sI=["textContent"],rI={key:2,class:"type-badge type-coauthor",title:"You are a co-author on this anonymization"},iI={class:"anon-sub"},aI=["title"],lI=["title"],dI=["title"],uI=["textContent"],cI={class:"dashboard-row-meta",role:"presentation"},pI={class:"cell-status",role:"cell"},fI={class:"status-line"},mI=["textContent"],hI=["textContent","title"],vI=["title"],yI=["href"],gI=["onClick"],bI={key:4,class:"status-sub status-sub-date"},wI=["aria-label"],kI={class:"cell-expires",role:"cell"},EI={key:0,class:"expires-never"},CI=["textContent"],_I={key:2,class:"expires-past"},SI={key:3,class:"expires-past"},NI={key:4,class:"empty-dash","aria-label":"Not applicable"},DI={class:"cell-actions",role:"cell"},RI=["onClick","disabled","title","aria-label"],TI=["onClick","data-project-actions","aria-controls","aria-expanded"],AI={key:2,class:"dropdown"},OI=["data-project-actions","aria-label"],II={class:"dropdown-menu dropdown-menu-right"},PI=["onClick","aria-controls","aria-expanded"],VI=["href"],qI=["href"],MI=["onClick","disabled"],UI=["href"],$I=["onClick"],LI=["onClick"],FI=["onClick"],zI={key:5},HI=["onClick"],BI={key:1,class:"project-details-row",role:"row"},jI=["id","onKeydown"],GI={class:"project-details-heading"},WI=["onClick"],KI={class:"project-details-list"},YI={key:0},JI={key:1},QI={key:0},XI={key:2},ZI={key:0,class:"project-progress-help"},xI=["href"],e4=["onSubmit"],t4=["for"],o4=["id"],n4={class:"project-name-controls"},s4=["id","aria-describedby","disabled"],r4=["disabled"],i4={key:0,class:"project-name-error",role:"alert"},a4={key:1,role:"status"},l4={key:0,class:"paper-table-empty"},d4={key:0},u4={key:1},c4={class:"paper-table-empty-actions"},p4={key:1,href:"/anonymize",class:"btn btn-ink"},f4={key:0,class:"dashboard-pagination"},m4={key:0,role:"alert"},h4=["disabled"];function Fl(e,t){let n=Ge("quota-usage"),r=ve("field"),s=ve("form");return l(),d("div",QA,[o("div",XA,[o("div",ZA,[o("div",xA,[o("div",null,[t[27]||(t[27]=o("h1",{class:"paper-page-title"},"Projects",-1)),t[28]||(t[28]=o("p",{class:"paper-page-lede"},"Manage your anonymous links.",-1)),o("details",{class:"dashboard-quota",open:e.quotaExpanded,onToggle:t[1]||(t[1]=i=>e.quotaExpanded=i.target.open),onKeydown:t[2]||(t[2]=To(ie(i=>e.closeQuota(),["prevent","stop"]),["esc"]))},[o("summary",{"aria-controls":"dashboard-usage","aria-expanded":e.quotaExpanded},[(l(),d("svg",{class:A(["quota-summary-ring",e.quota?"quota-"+e.quota.repository.level:""]),viewBox:"0 0 24 24","aria-hidden":"true"},[t[21]||(t[21]=o("circle",{class:"quota-ring-track",cx:"12",cy:"12",r:"9"},null,-1)),e.quota&&!e.quota.repository.unlimited?(l(),d("circle",{key:0,class:"quota-ring-fill",cx:"12",cy:"12",r:"9",pathLength:"100","stroke-dasharray":e.quota.repository.percent+" 100"},null,8,oO)):f("v-if",!0),e.quota?.repository.unlimited?(l(),d("path",nO)):f("v-if",!0)],2)),t[23]||(t[23]=o("span",{class:"quota-summary-label"},"Usage",-1)),e.quota?(l(),d("span",sO,[w(c(e.fmt.number(e.quota.repository.used)),1),e.quota.repository.unlimited?f("v-if",!0):(l(),d("span",rO," / "+c(e.fmt.number(e.quota.repository.total)),1)),t[22]||(t[22]=w(" repos",-1))])):f("v-if",!0),t[24]||(t[24]=o("svg",{class:"project-type-svg quota-summary-chevron","aria-hidden":"true"},[o("use",{href:"#project-icon-chevron"})],-1))],8,tO),o("div",iO,[o("div",aO,[t[26]||(t[26]=o("h2",null,"Account usage",-1)),o("button",{type:"button",class:"project-close","aria-label":"Close usage",onClick:t[0]||(t[0]=i=>e.closeQuota())},[...t[25]||(t[25]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])])]),e.quota?(l(),Lt(n,{key:0,quota:e.quota,fmt:e.fmt},null,8,["quota","fmt"])):(l(),d("p",lO,"Loading usage\u2026"))])],40,eO)]),t[29]||(t[29]=ue('',1))]),f(" Search + filters "),N((l(),d("form",{class:"w-100 dashboard-filter-row","aria-label":"Filter anonymizations","accept-charset":"UTF-8",onSubmit:t[9]||(t[9]=ie(i=>e.submitForm(i,()=>{i.preventDefault()}),["prevent"]))},[o("div",dO,[N(o("input",uO,null,512),[[r,{state:e.viewState,set:i=>{e.search=i},value:e.search,form:null,options:{}}]])]),o("button",{class:"btn dashboard-filters-toggle",type:"button","aria-expanded":e.filtersExpanded,"aria-controls":"dashboard-filter-controls",onClick:t[3]||(t[3]=i=>e.filtersExpanded=!e.filtersExpanded)},[...t[30]||(t[30]=[w("Filters",-1),o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-filter"})],-1)])],8,cO),o("div",{id:"dashboard-filter-controls",class:A(["dashboard-filter-controls",{expanded:e.filtersExpanded}])},[o("div",pO,[o("button",{type:"button",class:A(["btn",{"btn-primary":e.typeFilter==="all"}]),onClick:t[4]||(t[4]=i=>e.typeFilter="all"),"aria-pressed":e.typeFilter==="all"},"All",10,fO),o("button",{type:"button",class:A(["btn dashboard-type-filter",{"btn-primary":e.typeFilter==="repo"}]),title:"Repositories",onClick:t[5]||(t[5]=i=>e.typeFilter="repo"),"aria-pressed":e.typeFilter==="repo"},[...t[31]||(t[31]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1),o("span",{class:"type-filter-label"},"Repos",-1)])],10,mO),o("button",{type:"button",class:A(["btn dashboard-type-filter",{"btn-primary":e.typeFilter==="pr"}]),title:"Pull requests",onClick:t[6]||(t[6]=i=>e.typeFilter="pr"),"aria-pressed":e.typeFilter==="pr"},[...t[32]||(t[32]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-type-pr"})],-1),o("span",{class:"type-filter-label"},"PRs",-1)])],10,hO),o("button",{type:"button",class:A(["btn dashboard-type-filter",{"btn-primary":e.typeFilter==="gist"}]),title:"Gists",onClick:t[7]||(t[7]=i=>e.typeFilter="gist"),"aria-pressed":e.typeFilter==="gist"},[...t[33]||(t[33]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-type-gist"})],-1),o("span",{class:"type-filter-label"},"Gists",-1)])],10,vO)]),o("div",{id:"dashboard-extra-filters",class:A(["dashboard-extra-filters",{expanded:e.filtersExpanded}])},[o("div",yO,[o("button",gO,[t[35]||(t[35]=o("span",{class:"filter-btn-label"},"Sort",-1)),o("span",bO,c(e.sortLabel()),1),(l(),d("svg",{class:A(["project-type-svg sort-direction",{ascending:!e.sortDesc()}]),"aria-hidden":"true"},[...t[34]||(t[34]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)),o("span",wO,c(e.sortDesc()?"descending":"ascending"),1)]),o("div",kO,[t[36]||(t[36]=o("h6",{class:"dropdown-header"},"Order by",-1)),(l(!0),d(K,null,oe(e.sortFields,(i,a,u)=>(l(),d("div",EO,[o("input",{class:"form-check-input",type:"radio",name:"sort",onClick:m=>e.setSort(a,i.defaultDesc),checked:e.isSortedBy(a),id:"sort-"+u},null,8,CO),o("label",{class:"form-check-label",for:"sort-"+u},c(i?.label),9,_O)]))),256)),t[37]||(t[37]=o("div",{class:"dropdown-divider"},null,-1)),o("button",{type:"button",class:"dropdown-item",onClick:t[8]||(t[8]=i=>e.toggleSortDirection())},c(e.sortDesc()?"Switch to ascending":"Switch to descending"),1)])]),o("div",SO,[o("button",NO,[t[38]||(t[38]=o("span",{class:"filter-btn-label"},"Status",-1)),e.hasHiddenStatus()?f("v-if",!0):(l(),d("span",DO,"All")),e.hasHiddenStatus()?(l(),d("span",RO,c(e.hiddenStatusCount())+" hidden",1)):f("v-if",!0)]),o("div",TO,[t[39]||(t[39]=o("h6",{class:"dropdown-header"},"Show statuses",-1)),(l(!0),d(K,null,oe(e.statusKeyLabels,(i,a,u)=>(l(),d("div",AO,[N(o("input",{class:"form-check-input",type:"checkbox",id:"status-"+a},null,8,OO),[[r,{state:e.viewState,set:m=>{e.filters.status[a]=m},value:e.filters?.status[a],form:null,options:{}}]]),o("label",{class:"form-check-label",for:"status-"+a},c(i),9,IO)]))),256))])])],2)],2)],32)),[[s,e.viewState]]),f(" Result count + active filter chips "),e.loading?f("v-if",!0):(l(),d("div",PO,[o("div",VO,[o("button",{type:"button","aria-pressed":e.projectView==="all",onClick:t[10]||(t[10]=i=>e.setProjectView("all")),"aria-label":"All projects"},[...t[40]||(t[40]=[o("span",{class:"dashboard-view-long"},"All projects",-1),o("span",{class:"dashboard-view-short","aria-hidden":"true"},"All",-1)])],8,qO),o("button",{type:"button","aria-pressed":e.projectView==="attention",onClick:t[11]||(t[11]=i=>e.setProjectView("attention")),"aria-label":"Needs attention "+e.attentionCount()},[t[41]||(t[41]=o("span",{class:"dashboard-attention-prefix"},"Needs ",-1)),t[42]||(t[42]=o("span",null,"attention",-1)),t[43]||(t[43]=w()),o("span",{class:A(["attention-count",{"has-attention":e.attentionCount()>0}])},c(e.attentionCount()),3)],8,MO)]),o("span",UO,[(e.dashboardTotals?.filtered??e.filteredItems?.length)===(e.dashboardTotals?.total??e.items?.length)?(l(),d("span",$O,[w(c(e.fmt?.number(e.dashboardTotals?.total??e.items?.length))+" project",1),(e.dashboardTotals?.total??e.items?.length)!==1?(l(),d("span",LO,"s")):f("v-if",!0)])):(l(),d("span",FO,c(e.fmt?.number(e.dashboardTotals?.filtered??e.filteredItems?.length))+" of "+c(e.fmt?.number(e.dashboardTotals?.total??e.items?.length))+" shown",1))]),o("div",zO,[(l(!0),d(K,null,oe(e.filters?.status,(i,a,u)=>(l(),d(K,null,[i===!1?(l(),d("button",{key:0,type:"button",class:"filter-chip",onClick:m=>e.filters.status[a]=!0,"aria-label":"Show "+e.statusKeyLabels[a]+" again",title:"Show "+e.statusKeyLabels[a]+" again"},[w(c(e.statusKeyLabels[a])+" hidden",1),t[44]||(t[44]=o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1))],8,HO)):f("v-if",!0)],64))),256)),e.typeFilter!=="all"?(l(),d("button",{key:0,type:"button",class:"filter-chip",onClick:t[12]||(t[12]=i=>e.typeFilter="all"),"aria-label":"Show all project types"},[w(c(e.typeFilter==="repo"?"Repositories":e.typeFilter==="pr"?"Pull requests":"Gists"),1),t[45]||(t[45]=o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1))])):f("v-if",!0),e.showClearFilters()?(l(),d("button",{key:1,type:"button",class:"btn-link-inline",onClick:t[13]||(t[13]=i=>e.clearFilters())},"Clear filters")):f("v-if",!0)])]))]),f(" Table "),o("div",{class:"paper-table paper-table-dashboard",role:"table","aria-label":"Anonymizations","aria-busy":e.loading},[o("div",jO,[o("div",{role:"columnheader","aria-sort":e.isSortedBy("_label")?e.sortDesc()?"descending":"ascending":"none"},[o("button",{type:"button",class:A(["sortable",{active:e.isSortedBy("_label")}]),onClick:t[14]||(t[14]=i=>e.setSort("_label"))},[t[47]||(t[47]=w(" Project ",-1)),e.isSortedBy("_label")?(l(),d("svg",{key:0,class:A(["project-type-svg sort-direction",{ascending:!e.sortDesc()}]),"aria-hidden":"true"},[...t[46]||(t[46]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)],8,GO),o("div",{role:"columnheader","aria-sort":e.isSortedBy("status")?e.sortDesc()?"descending":"ascending":"none"},[o("button",{type:"button",class:A(["sortable",{active:e.isSortedBy("status")}]),onClick:t[15]||(t[15]=i=>e.setSort("status"))},[t[49]||(t[49]=w(" Status ",-1)),e.isSortedBy("status")?(l(),d("svg",{key:0,class:A(["project-type-svg sort-direction",{ascending:!e.sortDesc()}]),"aria-hidden":"true"},[...t[48]||(t[48]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)],8,WO),o("div",{role:"columnheader",class:"num","aria-sort":e.isSortedBy("pageView")?e.sortDesc()?"descending":"ascending":"none"},[o("button",{type:"button",class:A(["sortable",{active:e.isSortedBy("pageView")}]),onClick:t[16]||(t[16]=i=>e.setSort("pageView"))},[t[51]||(t[51]=w(" Views ",-1)),e.isSortedBy("pageView")?(l(),d("svg",{key:0,class:A(["project-type-svg sort-direction",{ascending:!e.sortDesc()}]),"aria-hidden":"true"},[...t[50]||(t[50]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)],8,KO),o("div",{role:"columnheader","aria-sort":e.isSortedBy("options.expirationDate")?e.sortDesc()?"descending":"ascending":"none"},[o("button",{type:"button",class:A(["sortable",{active:e.isSortedBy("options.expirationDate")}]),onClick:t[17]||(t[17]=i=>e.setSort("options.expirationDate"))},[t[53]||(t[53]=w(" Expires ",-1)),e.isSortedBy("options.expirationDate")?(l(),d("svg",{key:0,class:A(["project-type-svg sort-direction",{ascending:!e.sortDesc()}]),"aria-hidden":"true"},[...t[52]||(t[52]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)],8,YO),t[54]||(t[54]=o("div",{role:"columnheader"},[o("span",{class:"sr-only"},"Actions")],-1))]),f(" Loading skeleton: keeps the layout stable while the three lists load "),(l(),d(K,null,oe([1,2,3,4],(i,a)=>(l(),d(K,null,[e.loading?(l(),d("div",JO,[...t[55]||(t[55]=[o("div",{class:"cell-anon",role:"cell"},[o("span",{class:"skeleton skeleton-badge"}),o("div",{class:"anon-text"},[o("span",{class:"skeleton skeleton-line",style:{width:"38%"}}),o("span",{class:"skeleton skeleton-line skeleton-line-sm",style:{width:"56%"}})])],-1),o("div",{class:"cell-status",role:"cell"},[o("span",{class:"skeleton skeleton-line",style:{width:"60%"}})],-1),o("div",{class:"cell-views num",role:"cell"},[o("span",{class:"skeleton skeleton-line",style:{width:"40%"}})],-1),o("div",{class:"cell-expires",role:"cell"},[o("span",{class:"skeleton skeleton-line",style:{width:"55%"}})],-1),o("div",{class:"cell-actions",role:"cell"},null,-1)])])):f("v-if",!0)],64))),64)),(l(!0),d(K,null,oe(e.filteredItems,(i,a)=>(l(),d(K,{key:i?._type+":"+(i?._id||a)},[e.loading?f("v-if",!0):(l(),d("div",{key:0,class:A(["paper-table-row",{"repo-inactive":i?._statusKey=="expired"||i?._statusKey=="removed","repo-error":i?.status=="error","row-clickable":!!i?._viewUrl}]),role:"row",onClick:u=>e.openItem(i,u)},[o("div",XO,[o("span",{class:"project-type-icon",role:"img","aria-label":i?._type==="repo"?"Repository":i?._type==="pr"?"Pull request":"Gist",title:i?._type==="repo"?"Repository":i?._type==="pr"?"Pull request":"Gist"},[(l(),d("svg",xO,[o("use",{href:"#project-type-"+i._type},null,8,eI)]))],8,ZO),o("div",tI,[o("div",oI,[i?._viewUrl?(l(),d("a",{key:0,class:"repo-name",title:i._label,textContent:c(i?._label),href:e.safeUrl(i?._viewUrl)},null,8,nI)):f("v-if",!0),i?._viewUrl?f("v-if",!0):(l(),d("span",{key:1,class:"repo-name repo-name-static",textContent:c(i?._label)},null,8,sI)),i?.role==="coauthor"?(l(),d("span",rI,"Co-author")):f("v-if",!0)]),o("div",iI,[i?._id?(l(),d("code",{key:0,class:"anonymous-id",title:i._id},c(i._id),9,aI)):f("v-if",!0),i?._type==="repo"&&i?.source?.commit?(l(),d("span",{key:1,class:"commit-hash",title:i.source.commit},c(i.source.commit.substring(0,8)),9,lI)):f("v-if",!0),i?.conference?(l(),d("span",{key:2,class:"cell-conf conf-tag",title:i?.conference},[t[56]||(t[56]=o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-conference"})],-1)),t[57]||(t[57]=w()),o("span",{textContent:c(i?.conference)},null,8,uI)],8,dI)):f("v-if",!0)])])]),o("div",cI,[o("div",pI,[o("div",fI,[o("span",{class:A(["status-dot","status-"+i?._statusKey]),"aria-hidden":"true"},null,2),o("span",{class:"status-word",textContent:c(e.fmt?.statusLabel(i?.status))},null,8,mI)]),i?.status=="error"&&i?.statusMessage?(l(),d("div",{key:0,class:"status-sub status-sub-error",textContent:c(e.fmt?.statusMsg(i?.statusMessage)),title:i?.statusMessage},null,8,hI)):f("v-if",!0),i?._stale?(l(),d("div",{key:1,class:"status-sub status-sub-warn",title:"Last activity "+e.fmt?.humanTime(i?.anonymizeDate||i?.lastView)}," Last activity "+c(e.fmt?.humanTime(i?.anonymizeDate||i?.lastView))+" \xB7 may be stuck ",9,vI)):f("v-if",!0),i.status==="error"&&i._editUrl?(l(),d("a",{key:2,class:"project-attention-action",href:e.safeUrl(i._editUrl)},"Fix source",8,yI)):f("v-if",!0),i._stale||i._broken?(l(),d("button",{key:3,type:"button",class:"project-attention-action",onClick:ie(u=>e.showProjectDetails(i),["stop"])},c(i._broken?"Review details":"Check progress"),9,gI)):f("v-if",!0),i?.status!="error"&&!i?._stale&&i?.anonymizeDate?(l(),d("div",bI," anonymized "+c(e.fmt?.humanTime(i?.anonymizeDate)),1)):f("v-if",!0)]),o("div",{class:"cell-views num",role:"cell","aria-label":e.fmt.number(i.pageView)+" views"},[t[58]||(t[58]=o("svg",{class:"project-type-svg mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1)),o("span",null,c(e.fmt.number(i.pageView)),1)],8,wI),o("div",kI,[t[59]||(t[59]=o("svg",{class:"project-type-svg mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),i?._expiry?.kind==="never"?(l(),d("span",EI,"Never")):f("v-if",!0),i?._expiry?.kind==="date"?(l(),d("span",{key:1,textContent:c(e.fmt?.humanTime(i?._expiry?.date))},null,8,CI)):f("v-if",!0),i?._expiry?.kind==="expired"&&i?._expiry?.date?(l(),d("span",_I,"Expired "+c(e.fmt?.humanTime(i?._expiry?.date)),1)):f("v-if",!0),i?._expiry?.kind==="expired"&&!i?._expiry?.date?(l(),d("span",SI,"Expired")):f("v-if",!0),i?._expiry?.kind==="none"?(l(),d("span",NI,"\u2014")):f("v-if",!0)])]),o("div",DI,[i._viewUrl?(l(),d("button",{key:0,type:"button",class:"copy-link-inline",onClick:ie(u=>e.copyLink(i),["stop"]),disabled:!!e.copyingId,title:"Copy anonymous link for "+i._label,"aria-label":"Copy anonymous link for "+i._label},[...t[60]||(t[60]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-copy"})],-1)])],8,RI)):f("v-if",!0),i._broken?(l(),d("button",{key:1,type:"button",class:"project-details-button",onClick:ie(u=>e.showProjectDetails(i),["stop"]),"data-project-actions":encodeURIComponent(i._type+":"+i._id),"aria-controls":e.projectDetailsId(i),"aria-expanded":e.selectedProject===i},"Details",8,TI)):f("v-if",!0),i?._broken?f("v-if",!0):(l(),d("div",AI,[o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","data-project-actions":encodeURIComponent(i._type+":"+i._id),"aria-label":"Actions for "+i?._name},[...t[61]||(t[61]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})],-1)])],8,OI),o("div",II,[o("button",{type:"button",class:"dropdown-item",onClick:u=>e.showProjectDetails(i),"aria-controls":e.projectDetailsId(i),"aria-expanded":e.selectedProject===i},"Project details & name",8,PI),o("a",{class:"dropdown-item",href:e.safeUrl(i?._viewUrl)}," View ",8,VI),i?._type==="repo"&&i?.options?.page&&i?.status=="ready"?(l(),d("a",{key:0,class:"dropdown-item",target:"_self",href:e.safeUrl("/w/"+i?.repoId+"/")}," View page ",8,qI)):f("v-if",!0),i?._viewUrl?(l(),d("button",{key:1,type:"button",class:"dropdown-item",onClick:u=>e.copyLink(i),disabled:!!e.copyingId}," Copy anonymous link ",8,MI)):f("v-if",!0),o("a",{class:"dropdown-item",href:e.safeUrl(i?._editUrl)}," Edit ",8,UI),i?.status=="ready"||i?.status=="error"?(l(),d("button",{key:2,type:"button",class:"dropdown-item",onClick:u=>e.refreshItem(i)}," Force update ",8,$I)):f("v-if",!0),i?.status=="removed"?(l(),d("button",{key:3,type:"button",class:"dropdown-item",onClick:u=>e.refreshItem(i)}," Enable ",8,LI)):f("v-if",!0),i?.status=="expired"?(l(),d("button",{key:4,type:"button",class:"dropdown-item",onClick:u=>e.extendItem(i)}," Extend 6 months ",8,FI)):f("v-if",!0),(i?.status=="ready"||i?.status=="expired"||i?.status=="error")&&i?.role!=="coauthor"?(l(),d("div",zI,[t[62]||(t[62]=o("div",{class:"dropdown-divider"},null,-1)),o("button",{type:"button",class:"dropdown-item dropdown-item-danger",onClick:u=>e.removeItem(i)}," Remove ",8,HI)])):f("v-if",!0)])]))])],10,QO)),!e.loading&&e.selectedProject===i?(l(),d("div",BI,[o("div",{class:"project-details",role:"cell","aria-colspan":"5",id:e.projectDetailsId(i),tabindex:"-1",onKeydown:To(ie(u=>e.closeProjectDetails(i),["stop"]),["esc"])},[o("div",GI,[t[64]||(t[64]=o("h2",null,"Project details",-1)),o("button",{type:"button",class:"project-close",onClick:u=>e.closeProjectDetails(i),"aria-label":"Close project details"},[...t[63]||(t[63]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])],8,WI)]),o("dl",KI,[o("div",null,[t[65]||(t[65]=o("dt",null,"Source",-1)),o("dd",null,c(i._source||"Not available"),1)]),o("div",null,[t[66]||(t[66]=o("dt",null,"Anonymous ID",-1)),o("dd",null,[o("code",null,c(i._id||"Missing identifier"),1)])]),i.source?.commit?(l(),d("div",YI,[t[67]||(t[67]=o("dt",null,"Commit",-1)),o("dd",null,[o("code",null,c(i.source.commit),1)])])):f("v-if",!0),i.conference?(l(),d("div",JI,[t[68]||(t[68]=o("dt",null,"Conference",-1)),o("dd",null,c(i.conference),1)])):f("v-if",!0),o("div",null,[t[69]||(t[69]=o("dt",null,"Status",-1)),o("dd",null,[w(c(e.fmt.statusLabel(i.status)),1),i.statusMessage?(l(),d("span",QI," \xB7 "+c(e.fmt.statusMsg(i.statusMessage)),1)):f("v-if",!0)])]),i.anonymizeDate?(l(),d("div",XI,[t[70]||(t[70]=o("dt",null,"Last anonymized",-1)),o("dd",null,c(e.fmt.humanTime(i.anonymizeDate)),1)])):f("v-if",!0)]),i._stale?(l(),d("p",ZI,"This download has not progressed recently. Check the source access and selected branch before retrying.")):f("v-if",!0),i._editUrl?(l(),d("a",{key:1,class:"project-attention-action",href:e.safeUrl(i._editUrl)},c(e.needsAttention(i)?"Check source settings":"Edit anonymization settings"),9,xI)):f("v-if",!0),i._id?(l(),d("form",{key:2,class:"project-name-form",onSubmit:ie(u=>e.saveProjectName(i),["prevent"])},[o("label",{for:"project-name-"+i._type+"-"+i._id},"Project name",8,t4),o("p",{id:"project-name-help-"+i._type+"-"+i._id},"Only you see this name. Leave it blank to use the default.",8,o4),o("div",n4,[N(o("input",{class:"form-control",type:"text",id:"project-name-"+i._type+"-"+i._id,"aria-describedby":"project-name-help-"+i._type+"-"+i._id,maxlength:"100","onUpdate:modelValue":t[18]||(t[18]=u=>e.projectName=u),disabled:e.nameSaving},null,8,s4),[[zt,e.projectName]]),o("button",{class:"btn btn-ink",type:"submit",disabled:e.nameSaving},c(e.nameSaving?"Saving\u2026":"Save name"),9,r4)]),e.nameError?(l(),d("p",i4,c(e.nameError),1)):f("v-if",!0),e.nameMessage?(l(),d("p",a4,c(e.nameMessage),1)):f("v-if",!0)],40,e4)):f("v-if",!0)],40,jI)])):f("v-if",!0)],64))),128)),!e.loading&&e.filteredItems?.length==0?(l(),d("div",l4,[t[72]||(t[72]=o("svg",{class:"project-type-svg project-empty-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1)),e.hasProjects()?f("v-if",!0):(l(),d("span",d4,"You have no anonymizations yet.")),e.hasProjects()?(l(),d("span",u4,"Nothing matches the current filters.")):f("v-if",!0),o("div",c4,[e.hasActiveFilters()?(l(),d("button",{key:0,type:"button",class:"btn btn-outline-ink",onClick:t[19]||(t[19]=i=>e.clearFilters())},"Clear filters")):f("v-if",!0),e.hasProjects()?f("v-if",!0):(l(),d("a",p4,[...t[71]||(t[71]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-plus"})],-1),w(" New anonymization",-1)])]))])])):f("v-if",!0)],8,BO)]),e.dashboardCursor||e.dashboardError?(l(),d("div",f4,[e.dashboardError?(l(),d("p",m4,c(e.dashboardError),1)):f("v-if",!0),e.dashboardCursor?(l(),d("button",{key:1,type:"button",class:"btn",onClick:t[20]||(t[20]=i=>e.loadMoreProjects()),disabled:e.loadingMore},c(e.loadingMore?"Loading\u2026":"Load more projects"),9,h4)):f("v-if",!0)])):f("v-if",!0)])}var v4={class:"explorer-page"},y4=["aria-label"],g4={class:"ui-icon","aria-hidden":"true"},b4=["href"],w4=["textContent"],k4={class:"leftCol-head"},E4={class:"leftCol-search"},C4={class:"tree-search-box"},_4=["href"],S4={type:"text",class:"tree-search-input",placeholder:"Search files","aria-label":"Search files"},N4={class:"leftCol-project-header"},D4=["textContent","title"],R4={class:"project-file-count"},T4=["title"],A4={class:"leftCol-body"},O4={key:0,class:"paper-inline-warning",role:"alert"},I4={key:1,class:"paper-inline-warning",role:"alert"},P4={class:"leftCol-foot"},V4=["title"],q4=["title"],M4=["title"],U4={key:2,class:"last-update",title:"Older repositories have no recorded publication date. The source commit date does not establish when files became available here."},$4={class:"explorer-main"},L4={class:"status-bar"},F4={class:"breadcrumb paths","aria-label":"Path"},z4=["textContent"],H4={class:"status-bar-actions"},B4=["href"],j4={class:"d-none d-md-inline"},G4={class:"ui-icon","aria-hidden":"true"},W4=["href"],K4={class:"d-none d-md-inline"},Y4=["href"],J4=["href"],Q4=["href"],X4=["href"],Z4={class:"explorer-content"};function zl(e,t){let n=Ge("tree"),r=Ge("partial-view"),s=ve("field");return l(),d("div",v4,[N(o("button",{class:"sidebar-toggle",onClick:t[0]||(t[0]=i=>e.sidebarCollapsed=!e.sidebarCollapsed),"aria-label":e.sidebarCollapsed?"Show files":"Hide files"},[(l(),d("svg",g4,[o("use",{href:e.sidebarCollapsed?"#ui-icon-folder":"#project-icon-close"},null,8,b4)])),o("span",{textContent:c(e.sidebarCollapsed?"Files":"Close")},null,8,w4)],8,y4),[[j,e.files?.length]]),N(o("div",{class:A(["leftCol",{collapsed:e.sidebarCollapsed}])},[o("div",k4,[t[7]||(t[7]=o("span",{class:"leftCol-eyebrow"},"Files",-1)),o("button",{class:"leftCol-close","aria-label":"Close files",onClick:t[1]||(t[1]=i=>e.sidebarCollapsed=!0)},[...t[6]||(t[6]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])])]),o("div",E4,[o("div",C4,[(l(),d("svg",{class:A(["ui-icon tree-search-icon",{"fa-spin":e.fileSearchLoading}]),"aria-hidden":"true"},[o("use",{href:e.fileSearchLoading?"#ui-icon-spinner":"#ui-icon-search"},null,8,_4)],2)),N(o("input",S4,null,512),[[s,{state:e.viewState,set:i=>{e.fileSearchQuery=i},value:e.fileSearchQuery,form:null,options:{debounce:300},change:()=>{e.onFileSearchChange()}}]]),N(o("kbd",{class:"tree-search-kbd"},c(e.isMac?"\u2318":"Ctrl+")+"K",513),[[j,!e.fileSearchQuery]]),N(o("button",{class:"tree-search-clear","aria-label":"Clear search",onClick:t[2]||(t[2]=i=>{e.fileSearchQuery="",e.onFileSearchChange()})},"\xD7",512),[[j,e.fileSearchQuery]])])]),o("div",N4,[o("span",{class:"project-name",textContent:c(e.repoId),title:e.repoId},null,8,D4),o("span",R4,c(e.fileCounts?.[""]||e.files?.length)+" files",1),e.options?.expirationDate?(l(),d("span",{key:0,class:"project-expiry",title:e.options.expirationDate},[t[8]||(t[8]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),w(" Available until "+c(e.fmt?.date(e.options.expirationDate)),1)],8,T4)):f("v-if",!0)]),o("div",A4,[e.options?.truncatedFolders?.length>0?(l(),d("div",O4,[t[9]||(t[9]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),w(" "+c(e.fmt?.translate("WARNINGS.repo_truncated")),1)])):f("v-if",!0),e.options?.hasSubmodules?(l(),d("div",I4,[t[10]||(t[10]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),w(" "+c(e.fmt?.translate("WARNINGS.submodules_not_included")),1)])):f("v-if",!0),Ce(n,{class:"files",file:e.files,"search-query":e.fileSearchQuery,"search-results":e.fileSearchResults,page:e.viewState},null,8,["file","search-query","search-results","page"])]),o("div",P4,[o("span",{class:"last-update",title:e.options?.sourceCommitDate||e.options?.anonymizedAt||e.options?.lastUpdateDate},c(e.options?.sourceCommitDate?"Source commit":e.options?.anonymizedAt?"Anonymized":"Updated")+" "+c(e.fmt?.date(e.options?.sourceCommitDate||e.options?.anonymizedAt||e.options?.lastUpdateDate)),9,V4),e.options?.settingsSavedAt?(l(),d("span",{key:0,class:"last-update",title:e.options.settingsSavedAt}," Settings saved "+c(e.fmt?.date(e.options.settingsSavedAt)),9,q4)):f("v-if",!0),e.options?.publishedAt?(l(),d("span",{key:1,class:"last-update",title:e.options.publishedAt}," Snapshot ready "+c(e.fmt?.date(e.options.publishedAt)),9,M4)):f("v-if",!0),e.options?.anonymizedAt&&!e.options?.publishedAt?(l(),d("span",U4," Snapshot ready date not recorded ")):f("v-if",!0)])],2),[[j,e.files?.length]]),N(o("div",{class:"leftCol-backdrop",onClick:t[3]||(t[3]=i=>e.sidebarCollapsed=!0)},null,512),[[j,e.files?.length&&!e.sidebarCollapsed]]),o("div",$4,[N(o("div",L4,[o("ol",F4,[(l(!0),d(K,null,oe(e.paths,(i,a)=>(l(),d("li",{class:"breadcrumb-item",textContent:c(i)},null,8,z4))),256))]),o("div",H4,[e.options?.isAdmin||e.options?.isOwner?(l(),d("a",{key:0,class:"btn btn-sm","aria-label":"Edit",href:e.safeUrl("/anonymize/"+e.repoId)},[...t[11]||(t[11]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),o("span",{class:"d-none d-md-inline"}," Edit",-1)])],8,B4)):f("v-if",!0),e.type=="html-doc"&&!e.showSource?(l(),d("button",{key:1,class:A(["btn btn-sm",{"btn-active":e.allowScripts}]),"aria-label":"Allow this document to run JavaScript",title:"Scripts in this file are blocked by default. Enable them only if you trust the repository \u2014 the document stays isolated from your session either way.",onClick:t[4]||(t[4]=i=>e.toggleAllowScripts())},[t[12]||(t[12]=o("i",{class:"fab fa-js"},null,-1)),o("span",j4,c(e.allowScripts?"JS on":"JS off"),1)],2)):f("v-if",!0),e.type=="html-doc"?(l(),d("button",{key:2,class:"btn btn-sm","aria-label":"Toggle between the rendered document and its source",title:"Toggle between the rendered document and its source",onClick:t[5]||(t[5]=i=>e.toggleSource())},[(l(),d("svg",G4,[o("use",{href:e.showSource?"#project-icon-eye":"#ui-icon-code"},null,8,W4)])),o("span",K4,c(e.showSource?"Rendered":"Source"),1)])):f("v-if",!0),N(o("a",{target:"_self",class:"btn btn-sm btn-icon-only","aria-label":"View raw current file",title:"View raw file",href:e.safeUrl(e.url)},[...t[13]||(t[13]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-file"})],-1)])],8,Y4),[[j,e.content!=null&&e.type!="error"&&e.type!="rate_limited"]]),N(o("a",{target:"_self",class:"btn btn-sm btn-icon-only","aria-label":"Download current file",title:"Download this file",href:e.safeUrl(e.url+"&download=true")},[...t[14]||(t[14]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-download"})],-1)])],8,J4),[[j,e.content!=null&&e.type!="error"&&e.type!="rate_limited"]]),e.options?.download?(l(),d("a",{key:3,target:"_self",class:"btn btn-sm btn-ink","aria-label":"Download repository as ZIP",title:"Download the whole repository as a ZIP archive",href:e.safeUrl("/api/repo/"+e.repoId+"/zip")},[...t[15]||(t[15]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-archive"})],-1),o("span",{class:"d-none d-md-inline"}," Download repository",-1)])],8,Q4)):f("v-if",!0),e.options?.hasWebsite?(l(),d("a",{key:4,target:"_self",class:"btn btn-sm","aria-label":"Website",href:e.safeUrl("/w/"+e.repoId+"/")},[...t[16]||(t[16]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-globe"})],-1),o("span",{class:"d-none d-md-inline"}," Website",-1)])],8,X4)):f("v-if",!0)])],512),[[j,e.type!="error"||e.files?.length]]),o("div",Z4,[Ce(r,{name:"partials/pageView.htm",state:e.viewState},null,8,["state"])])])])}var x4={class:"paper-faq"};function Hl(e,t){return l(),d("div",x4,[...t[0]||(t[0]=[ue('
Help

Answers to the questions that come up most.

If something's missing, write to us \u2014 report a bug on GitHub.

',1),o("div",{class:"paper-faq-body"},[o("aside",{class:"paper-faq-toc"},[o("div",{class:"paper-faq-toc-head"},"Contents"),o("nav",null,[o("a",{href:"#faq-general"},"General"),o("a",{href:"#faq-features"},"Features"),o("a",{href:"#faq-limitations"},"Limitations"),o("a",{href:"#faq-privacy"},"Privacy & Security"),o("a",{href:"#faq-hosting"},"Self-Hosting")])]),o("section",{class:"faq-section","aria-label":"FAQs"},[o("div",null,[f(" General "),o("h4",{class:"faq-cat"},[o("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})]),w("General ")]),o("div",{class:"panel-group",id:"faq-general",role:"tablist","aria-multiselectable":"true"},[o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingWhatIs"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-general",href:"#whatIs","aria-expanded":"false","aria-controls":"whatIs"}," What is Anonymous GitHub? ")])]),o("div",{id:"whatIs",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingWhatIs"},[o("div",{class:"panel-body p-3"},[o("p",null," Anonymous GitHub is a free, open-source tool that anonymizes GitHub repositories and pull requests for double-anonymous (double-blind) peer review. It replaces identifying information \u2014 such as the repository owner, organization name, and custom terms \u2014 so that reviewers cannot determine the identity of the authors through the code repository. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingHowWork"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-general",href:"#howWork","aria-expanded":"false","aria-controls":"howWork"}," How does Anonymous GitHub work? ")])]),o("div",{id:"howWork",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingHowWork"},[o("div",{class:"panel-body p-3"},[o("p",null," Anonymous GitHub either downloads the complete repository and anonymizes the content, or proxies requests to GitHub on the fly. In both cases, the original and anonymized versions of files are cached on the server. The system automatically detects and replaces the repository owner, organization name, and repository name. You can also specify additional custom terms to anonymize using one-per-line regex patterns. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingScope"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-general",href:"#scope","aria-expanded":"false","aria-controls":"scope"}," What is the scope of anonymization? ")])]),o("div",{id:"scope",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingScope"},[o("div",{class:"panel-body p-3"},[o("p",null," In double-anonymous peer review, the boundary of anonymization is the paper plus its online appendix \u2014 not the entire internet. Searching for any part of the paper or the online appendix can be considered a deliberate attempt to break anonymity. Anonymous GitHub anonymizes the repository owner, organization, repository name, file and directory names, and file contents across all text-based file types. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingCost"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-general",href:"#cost","aria-expanded":"false","aria-controls":"cost"}," How much does it cost? ")])]),o("div",{id:"cost",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingCost"},[o("div",{class:"panel-body p-3"},[o("p",null,[w(" Anonymous GitHub is completely free to use. However, the server costs hundreds of dollars per year to maintain. If you find the service useful, a small donation would be greatly appreciated. You can support the project by "),o("a",{href:"https://github.com/sponsors/tdurieux/",target:"_blank"},"sponsoring on GitHub"),w(", donating through "),o("a",{href:"https://ko-fi.com/tdurieux",target:"_blank"},"Ko-fi"),w(', or by clicking the "Support me" button on the site. ')])])])])]),f(" Features "),o("h4",{class:"faq-cat"},[o("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[o("use",{href:"#project-icon-filter"})]),w("Features ")]),o("div",{class:"panel-group",id:"faq-features",role:"tablist","aria-multiselectable":"true"},[o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingFormats"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#formats","aria-expanded":"false","aria-controls":"formats"}," Which file formats are supported? ")])]),o("div",{id:"formats",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingFormats"},[o("div",{class:"panel-body p-3"},[o("p",null," Anonymous GitHub can display and render a wide variety of file types: "),o("ul",null,[o("li",null,[o("strong",null,"Text and source code"),w(" \u2014 displayed with syntax highlighting")]),o("li",null,[o("strong",null,"Markdown"),w(" \u2014 rendered as formatted HTML")]),o("li",null,[o("strong",null,"Images"),w(" (PNG, JPG, SVG, etc.) \u2014 displayed inline")]),o("li",null,[o("strong",null,"PDFs"),w(" \u2014 rendered directly in the browser")]),o("li",null,[o("strong",null,"Jupyter Notebooks"),w(" \u2014 rendered with code cells and outputs")])]),o("p",null," Only text-based files are anonymized. Anonymous GitHub analyzes the content of each file to determine whether it is textual or binary. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingPR"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#pullRequests","aria-expanded":"false","aria-controls":"pullRequests"}," Can I anonymize pull requests? ")])]),o("div",{id:"pullRequests",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingPR"},[o("div",{class:"panel-body p-3"},[o("p",null," Yes. In addition to full repositories, Anonymous GitHub supports anonymizing individual pull requests. Simply paste the URL of a GitHub pull request when creating a new anonymized repository, and the system will automatically detect that it is a pull request and anonymize it accordingly. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingConference"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#conference","aria-expanded":"false","aria-controls":"conference"}," What is the Conference ID feature? ")])]),o("div",{id:"conference",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingConference"},[o("div",{class:"panel-body p-3"},[o("p",null," When creating an anonymized repository, you can associate it with a Conference ID. This allows conferences to define default anonymization settings (such as expiration dates) that are automatically applied to repositories submitted under that conference. If your conference provides a Conference ID, enter it during the anonymization setup. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingExpiration"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#expiration","aria-expanded":"false","aria-controls":"expiration"}," What happens when an anonymized repository expires? ")])]),o("div",{id:"expiration",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingExpiration"},[o("div",{class:"panel-body p-3"},[o("p",null," You can configure one of three expiration strategies when creating your anonymized repository: "),o("ul",null,[o("li",null,[o("strong",null,"Never expire"),w(" \u2014 the anonymized repository remains accessible indefinitely.")]),o("li",null,[o("strong",null,"Redirect to GitHub"),w(" \u2014 after expiration, visitors are redirected to the original GitHub repository.")]),o("li",null,[o("strong",null,"Remove content"),w(" \u2014 after expiration, the anonymized content is deleted from the server.")])])])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingDownload"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#download","aria-expanded":"false","aria-controls":"download"}," Can I download an anonymized repository? ")])]),o("div",{id:"download",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingDownload"},[o("div",{class:"panel-body p-3"},[o("p",null," Yes. Anonymized repositories can be downloaded as a ZIP file. This is useful if reviewers want to build or test the code locally. The downloaded archive contains the fully anonymized version of the repository. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingUpdates"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#updates","aria-expanded":"false","aria-controls":"updates"}," Are updates to the original repository reflected in the anonymized version? ")])]),o("div",{id:"updates",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingUpdates"},[o("div",{class:"panel-body p-3"},[o("p",null," Yes. The anonymized repository tracks the source on GitHub: when you push new commits to the original repository, the anonymized view picks up those changes (cached files are refreshed against GitHub). This means you can keep iterating on the code while reviewers have the link, and you do not need to recreate the anonymized repository every time you update the source. "),o("p",null," A few practical implications worth keeping in mind: "),o("ul",null,[o("li",null," You can safely create the anonymized repository early in the writing process \u2014 later commits will be visible to reviewers without any additional action. "),o("li",null," If you rename files, add new identifiers, or introduce new contributor names after creation, revisit the anonymization options (custom terms, file filters) to make sure the new content is still properly anonymized. "),o("li",null," If the original repository is made private or deleted, the anonymized repository will no longer be able to fetch updated content. ")])])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingCLI"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#cli","aria-expanded":"false","aria-controls":"cli"}," Is there a command-line tool? ")])]),o("div",{id:"cli",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingCLI"},[o("div",{class:"panel-body p-3"},[o("p",null," Yes. Anonymous GitHub provides a CLI tool that lets you anonymize repositories locally, generating an anonymized ZIP file on your machine. Install it via npm: "),o("pre",{style:{"background-color":"var(--hover-bg-color)",padding:"12px","border-radius":"4px","margin-top":"8px",color:"var(--color)"}},[o("code",null,`npm install -g @tdurieux/anonymous_github -anonymous_github`)])])])])]),f(" Limitations "),o("h4",{class:"faq-cat"},[o("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})]),w("Limitations ")]),o("div",{class:"panel-group",id:"faq-limitations",role:"tablist","aria-multiselectable":"true"},[o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingLimitation"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-limitations",href:"#limitation","aria-expanded":"false","aria-controls":"limitation"}," What are the limitations of Anonymous GitHub? ")])]),o("div",{id:"limitation",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingLimitation"},[o("div",{class:"panel-body p-3"},[o("ul",null,[o("li",null," Anonymous GitHub only anonymizes text-based files. Binary files (compiled executables, archives, etc.) are served as-is without anonymization. "),o("li",null," Files larger than 8 MB are not supported. "),o("li",null," Static site generators (such as Jekyll) used with GitHub Pages are not fully supported, although Markdown files are converted to HTML. "),o("li",null," The anonymization of terms within source code may change the behavior of the program (e.g., if a replaced term appears in a string literal or identifier). ")])])])])]),f(" Privacy & Security "),o("h4",{class:"faq-cat"},[o("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})]),w("Privacy & Security ")]),o("div",{class:"panel-group",id:"faq-privacy",role:"tablist","aria-multiselectable":"true"},[o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingData"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-privacy",href:"#data","aria-expanded":"false","aria-controls":"data"}," How is my data handled? ")])]),o("div",{id:"data",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingData"},[o("div",{class:"panel-body p-3"},[o("p",null," Data stored on Anonymous GitHub is never shared or used for any purpose beyond providing the anonymization service. When a repository is removed or expires, only its configuration is retained \u2014 this makes it easy to restore the repository if needed and ensures that no future repository reuses the same ID. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingPermissions"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-privacy",href:"#permissions","aria-expanded":"false","aria-controls":"permissions"}," Why does GitHub say Anonymous GitHub asks for write access? ")])]),o("div",{id:"permissions",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingPermissions"},[o("div",{class:"panel-body p-3"},[o("p",null,[w("The GitHub App has read-only access to the repositories you choose. You can change repository access on your "),o("a",{href:"/connections"},"GitHub connections"),w(" page.")]),o("p",null,"Legacy GitHub OAuth includes write access to private repositories because GitHub's OAuth scopes do not offer a read-only option for them. Existing OAuth anonymizations and gists can still use this connection."),o("p",null,"Anonymous GitHub reads repository content. It never pushes, modifies, or deletes files on GitHub.")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingViewer"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-privacy",href:"#viewer","aria-expanded":"false","aria-controls":"viewer"}," Can repository owners see who viewed their anonymized repository? ")])]),o("div",{id:"viewer",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingViewer"},[o("div",{class:"panel-body p-3"},[o("p",null," No. Only the total number of views is tracked as an incremental counter. It is not possible for the repository owner or for Anonymous GitHub to identify individual viewers. Reviewer anonymity is fully preserved. ")])])])]),f(" Self-Hosting "),o("h4",{class:"faq-cat"},[o("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[o("use",{href:"#project-icon-storage"})]),w("Self-Hosting ")]),o("div",{class:"panel-group",id:"faq-hosting",role:"tablist","aria-multiselectable":"true"},[o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingDeploy"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-hosting",href:"#deploy","aria-expanded":"false","aria-controls":"deploy"}," Can I deploy my own instance? ")])]),o("div",{id:"deploy",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingDeploy"},[o("div",{class:"panel-body p-3"},[o("p",null,[w(" Yes. Anonymous GitHub is fully open source (GPL-3.0) and supports Docker-based deployment. You will need to configure a GitHub OAuth app and provide a GitHub token. Detailed setup instructions are available on the "),o("a",{href:"https://github.com/tdurieux/anonymous_github/",target:"_blank"},"GitHub repository"),w(". ")]),o("p",null," The basic steps are: "),o("ol",null,[o("li",null,"Clone the repository and install dependencies"),o("li",null,[w("Create a "),o("code",null,".env"),w(" file with your GitHub token, OAuth client ID, and client secret")]),o("li",null,[w("Run "),o("code",null,"docker-compose up -d")])])])])])]),o("div",{class:"text-center mt-5 mb-5 p-4",style:{"background-color":"var(--hover-bg-color)","border-radius":"8px"}},[o("p",{class:"mb-2",style:{"font-size":"1.1rem"}}," Still have questions? "),o("p",{class:"text-muted mb-0"},[w(" Open an issue on the "),o("a",{href:"https://github.com/tdurieux/anonymous_github/issues",target:"_blank"},"GitHub repository"),w(" and we'll be happy to help. ")])])])])],-1)])])}var e3={class:"pr-page"},t3={class:"container paper-page pr-page-inner"},o3={class:"pr-header"},n3={class:"pr-title-row"},s3={class:"paper-page-title pr-title"},r3=["textContent"],i3={key:1,class:"text-muted"},a3=["href"],l3={class:"pr-header-meta"},d3={key:0,class:"pr-meta-item"},u3=["textContent"],c3={key:1,class:"pr-meta-item"},p3=["textContent"],f3={key:2,class:"pr-meta-item"},m3=["textContent"],h3={key:0,class:"paper-tabs",role:"tablist"},v3=["aria-selected","tabindex"],y3=["textContent"],g3=["aria-selected","tabindex"],b3=["textContent"],w3={class:"paper-tab-content"},k3={key:0,role:"tabpanel",id:"gist-files-panel","aria-labelledby":"gist-files-tab"},E3={class:"pr-comments"},C3={class:"pr-comment"},_3={class:"pr-comment-head"},S3=["textContent"],N3={key:0,class:"pr-comment-date"},D3={key:0,class:"paper-table-empty"},R3={key:1,role:"tabpanel",id:"gist-comments-panel","aria-labelledby":"gist-comments-tab"},T3={class:"pr-comments"},A3={class:"pr-comment"},O3={class:"pr-comment-head"},I3={key:0,class:"pr-comment-author"},P3=["textContent"],V3=["textContent"],q3={key:0,class:"pr-comment-body"},M3={key:0,class:"paper-table-empty"};function Bl(e,t){let n=Ge("gist-file"),r=Ge("markdown");return l(),d("div",e3,[o("div",t3,[t[17]||(t[17]=o("div",{class:"paper-crumbs"},[o("a",{href:"/dashboard"},"Reviewer"),w(" \xA0/\xA0 "),o("span",{class:"here"},"Gist")],-1)),o("header",o3,[o("div",n3,[o("h1",s3,[e.details?.description?(l(),d("span",{key:0,textContent:c(e.details?.description)},null,8,r3)):f("v-if",!0),e.details?.description?f("v-if",!0):(l(),d("span",i3,"Untitled gist"))]),e.options?.isAdmin||e.options?.isOwner?(l(),d("a",{key:0,class:"btn btn-sm","aria-label":"Edit",href:e.safeUrl("/gist-anonymize/"+e.gistId)},[...t[4]||(t[4]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),o("span",{class:"d-none d-md-inline"}," Edit",-1)])],8,a3)):f("v-if",!0)]),o("div",l3,[o("span",{class:A(["paper-pill",{good:e.details?.isPublic,warn:!e.details?.isPublic}])},c(e.details?.isPublic?"Public":"Secret"),3),e.details?.ownerLogin?(l(),d("span",d3,[t[5]||(t[5]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user"})],-1)),t[6]||(t[6]=w(" @",-1)),o("span",{textContent:c(e.details?.ownerLogin)},null,8,u3)])):f("v-if",!0),e.details?.updatedDate?(l(),d("span",c3,[t[7]||(t[7]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),t[8]||(t[8]=w()),o("span",{textContent:c(e.fmt?.date(e.details?.updatedDate))},null,8,p3)])):f("v-if",!0),e.details?.anonymizeDate?(l(),d("span",f3,[t[9]||(t[9]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1)),t[10]||(t[10]=w(" Anonymized ",-1)),o("span",{textContent:c(e.fmt?.date(e.details?.anonymizeDate))},null,8,m3)])):f("v-if",!0)])]),e.details?.files&&e.details?.files?.length||e.details?.comments&&e.details?.comments?.length?(l(),d("nav",h3,[e.details?.files?(l(),d("button",{key:0,class:A(["paper-tab",{active:e.tabState?.active=="files"}]),type:"button",role:"tab",id:"gist-files-tab","aria-selected":e.tabState?.active==="files","aria-controls":"gist-files-panel",tabindex:e.tabState?.active==="files"?0:-1,onKeydown:t[0]||(t[0]=s=>e.previewTabKeydown(s)),onClick:t[1]||(t[1]=s=>e.tabState.active="files")},[t[11]||(t[11]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-type-gist"})],-1)),o("span",{textContent:c(e.fmt.plural(e.details?.files?.length,{0:"No files",one:"1 file",other:"{} files"}))},null,8,y3)],42,v3)):f("v-if",!0),e.details?.comments?(l(),d("button",{key:1,class:A(["paper-tab",{active:e.tabState?.active=="comments"}]),type:"button",role:"tab",id:"gist-comments-tab","aria-selected":e.tabState?.active==="comments","aria-controls":"gist-comments-panel",tabindex:e.tabState?.active==="comments"?0:-1,onKeydown:t[2]||(t[2]=s=>e.previewTabKeydown(s)),onClick:t[3]||(t[3]=s=>e.tabState.active="comments")},[t[12]||(t[12]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-comment"})],-1)),o("span",{textContent:c(e.fmt.plural(e.details?.comments?.length,{0:"No comments",one:"1 comment",other:"{} comments"}))},null,8,b3)],42,g3)):f("v-if",!0)])):f("v-if",!0),o("div",w3,[e.details?.files&&e.tabState?.active=="files"?(l(),d("div",k3,[o("ul",E3,[(l(!0),d(K,null,oe(e.details?.files,(s,i)=>(l(),d("li",C3,[o("div",_3,[o("strong",{textContent:c(s?.filename)},null,8,S3),s?.language?(l(),d("span",N3,c(s?.language),1)):f("v-if",!0)]),Ce(n,{file:s},null,8,["file"])]))),256)),e.details?.files?.length?f("v-if",!0):(l(),d("li",D3,[...t[13]||(t[13]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-file"})],-1),o("span",null,"No files in this gist.",-1)])]))])])):f("v-if",!0),e.details?.comments&&e.tabState?.active=="comments"?(l(),d("div",R3,[o("ul",T3,[(l(!0),d(K,null,oe(e.details?.comments,(s,i)=>(l(),d("li",A3,[o("div",O3,[s?.author?(l(),d("span",I3,[t[14]||(t[14]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user"})],-1)),t[15]||(t[15]=w(" @",-1)),o("span",{textContent:c(s?.author)},null,8,P3)])):f("v-if",!0),s?.updatedDate?(l(),d("span",{key:1,class:"pr-comment-date",textContent:c(e.fmt?.date(s?.updatedDate))},null,8,V3)):f("v-if",!0)]),s?.body?(l(),d("div",q3,[Ce(r,{content:s?.body},null,8,["content"])])):f("v-if",!0)]))),256)),e.details?.comments?.length?f("v-if",!0):(l(),d("li",M3,[...t[16]||(t[16]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-comment"})],-1),o("span",null,"No comments on this gist.",-1)])]))])])):f("v-if",!0)])])])}var U3={class:"collapse navbar-collapse",id:"navbarSupportedContent"},$3={class:"navbar-nav mr-auto smooth-scroll"},L3={key:0,class:"nav-item"},F3={key:1,class:"nav-item"},z3={key:2,class:"nav-item"},H3={key:3,class:"nav-item"},B3={class:"nav-item"},j3={key:4,class:"nav-item"},G3={class:"navbar-nav"},W3={key:0,class:"nav-item"},K3={key:1,class:"nav-item"},Y3={key:2,class:"nav-item"},J3={key:3,class:"nav-item"},Q3={key:4,class:"nav-item dropdown user-chip-wrap"},X3={class:"nav-link user-chip dropdown-toggle",href:"#",id:"navbarDropdownMenuLink",role:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},Z3=["src"],x3={class:"user-chip-name"},eP={class:"dropdown-menu dropdown-menu-right user-menu","aria-labelledby":"navbarDropdownMenuLink"},tP={class:"dropdown-header"},oP=["innerHTML"],nP=["disabled"],sP={key:0,class:"paper-inline-alert paper-inline-alert-error",role:"alert"},rP={class:"email-prompt-actions"},iP=["disabled"],aP=["disabled"],lP=["disabled"];function jl(e,t){return l(),d(K,null,[o("nav",{class:A(["navbar navbar-expand-lg",{"navbar-dark":e.isDarkMode}])},[t[18]||(t[18]=ue('Anonymous GitHubSupport',3)),o("div",U3,[o("ul",$3,[e.user?f("v-if",!0):(l(),d("li",L3,[o("a",{class:A(["nav-link",{active:e.path=="/"}]),href:"/"}," Home ",2)])),e.user?(l(),d("li",F3,[o("a",{class:A(["nav-link",{active:e.path=="/dashboard"}]),href:"/dashboard"},[...t[7]||(t[7]=[o("svg",{class:"ui-icon d-lg-none mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-grid"})],-1),w(" My work ",-1)])],2)])):f("v-if",!0),e.user?(l(),d("li",z3,[o("a",{class:A(["nav-link",{active:e.path=="/anonymize"||e.path=="/pull-request-anonymize"}]),href:"/anonymize"},[...t[8]||(t[8]=[o("svg",{class:"ui-icon d-lg-none mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),w(" Anonymize ",-1)])],2)])):f("v-if",!0),e.user?(l(),d("li",H3,[o("a",{class:A(["nav-link",{active:e.path=="/conferences"}]),href:"/conferences"},[...t[9]||(t[9]=[o("svg",{class:"ui-icon d-lg-none mr-1","aria-hidden":"true"},[o("use",{href:"#project-icon-conference"})],-1),w(" Conferences ",-1)])],2)])):f("v-if",!0),o("li",B3,[o("a",{class:A(["nav-link",{active:e.path=="/faq"}]),href:"/faq"},[...t[10]||(t[10]=[o("svg",{class:"ui-icon d-lg-none mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-help"})],-1),w("FAQ",-1)])],2)]),e.user&&e.user?.isAdmin?(l(),d("li",j3,[o("a",{class:A(["nav-link",{active:e.path?.indexOf("/admin")===0}]),href:"/admin/"},[...t[11]||(t[11]=[o("svg",{class:"ui-icon d-lg-none mr-1","aria-hidden":"true"},[o("use",{href:"#project-icon-filter"})],-1),w(" Admin ",-1)])],2)])):f("v-if",!0)]),o("ul",G3,[e.user||!e.isReviewerRoute?(l(),d("li",W3,[...t[12]||(t[12]=[o("a",{class:"nav-link nav-icon",target:"_blank",href:"https://github.com/tdurieux/anonymous_github/",title:"Anonymous GitHub source code","aria-label":"Anonymous GitHub source code on GitHub",rel:"noopener","data-offset":"30"},[o("i",{class:"fab fa-github","aria-hidden":"true"})],-1)])])):f("v-if",!0),f(` "Report a bug" is about this service. Reviewers who land on an +`+JSON.stringify(t):""}`},[Be.NAVIGATION_GUARD_REDIRECT]({from:e,to:t}){return`Redirected from "${e.fullPath}" to "${ep(t)}" via a navigation guard.`},[Be.NAVIGATION_ABORTED]({from:e,to:t}){return`Navigation aborted from "${e.fullPath}" to "${t.fullPath}" via a navigation guard.`},[Be.NAVIGATION_CANCELLED]({from:e,to:t}){return`Navigation cancelled from "${e.fullPath}" to "${t.fullPath}" with a new navigation.`},[Be.NAVIGATION_DUPLICATED]({from:e,to:t}){return`Avoided redundant navigation to current location: "${e.fullPath}".`}};function fo(e,t){return Te(new Error,{type:e,[Oa]:!0},t)}function Ht(e,t){return e instanceof Error&&Oa in e&&(t==null||!!(e.type&t))}var xc=["params","query","hash"];function ep(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;let t={};for(let n of xc)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function Ia(e){let t={};if(e===""||e==="?")return t;let n=(e[0]==="?"?e.slice(1):e).split("&");for(let r=0;rs&&Zs(s)):[r&&Zs(r)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+n,s!=null&&(t+="="+s))})}return t}function Pa(e){let t={};for(let n in e){let r=e[n];r!==void 0&&(t[n]=wt(r)?r.map(s=>s==null?null:""+s):r==null?r:""+r)}return t}var Va=Symbol(""),ar=Symbol(""),os=Symbol(""),ns=Symbol(""),ss=Symbol("");function Po(){let e=[];function t(r){return e.push(r),()=>{let s=e.indexOf(r);s>-1&&e.splice(s,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Qt(e,t,n,r,s,i=a=>a()){let a=r&&(r.enterCallbacks[s]=r.enterCallbacks[s]||[]);return()=>new Promise((u,m)=>{let w=h=>{h===!1?m(fo(Be.NAVIGATION_ABORTED,{from:n,to:t})):h instanceof Error?m(h):Zc(h)?m(fo(Be.NAVIGATION_GUARD_REDIRECT,{from:t,to:h})):(a&&r.enterCallbacks[s]===a&&typeof h=="function"&&a.push(h),u())},g=i(()=>e.call(r&&r.instances[s],t,n,w)),k=Promise.resolve(g);e.length<3&&(k=k.then(w)),k.catch(h=>m(h))})}function rs(e,t,n,r,s=i=>i()){let i=[];for(let a of e)for(let u in a.components){let m=a.components[u];if(!(t!=="beforeRouteEnter"&&!a.instances[u]))if(va(m)){let w=(m.__vccOpts||m)[t];w&&i.push(Qt(w,n,r,a,u,s))}else{let w=m();i.push(()=>w.then(g=>{if(!g)throw new Error(`Couldn't resolve component "${u}" at "${a.path}"`);let k=Vc(g)?g.default:g;a.mods[u]=g,a.components[u]=k;let h=(k.__vccOpts||k)[t];return h&&Qt(h,n,r,a,u,s)()}))}}return i}function qa(e,t){let n=[],r=[],s=[],i=Math.max(t.matched.length,e.matched.length);for(let a=0;apo(w,u))?r.push(u):n.push(u));let m=e.matched[a];m&&(t.matched.find(w=>po(w,m))||s.push(m))}return[n,r,s]}var tp=()=>location.protocol+"//"+location.host;function Wa(e,t){let{pathname:n,search:r,hash:s}=t,i=e.indexOf("#");if(i>-1){let a=s.includes(e.slice(i))?e.slice(i).length:1,u=s.slice(a);return u[0]!=="/"&&(u="/"+u),or(u,"")}return or(n,e)+r+s}function op(e,t,n,r){let s=[],i=[],a=null,u=({state:h})=>{let E=Wa(e,location),S=n.value,v=t.value,_=0;if(h){if(n.value=E,t.value=h,a&&a===S){a=null;return}_=v?h.position-v.position:0}else r(E);s.forEach(N=>{N(n.value,S,{delta:_,type:es.pop,direction:_?_>0?ts.forward:ts.back:ts.unknown})})};function m(){a=n.value}function w(h){s.push(h);let E=()=>{let S=s.indexOf(h);S>-1&&s.splice(S,1)};return i.push(E),E}function g(){if(document.visibilityState==="hidden"){let{history:h}=window;if(!h.state)return;h.replaceState(Te({},h.state,{scroll:vn()}),"")}}function k(){for(let h of i)h();i=[],window.removeEventListener("popstate",u),window.removeEventListener("pagehide",g),document.removeEventListener("visibilitychange",g)}return window.addEventListener("popstate",u),window.addEventListener("pagehide",g),document.addEventListener("visibilitychange",g),{pauseListeners:m,listen:w,destroy:k}}function Ma(e,t,n,r=!1,s=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:s?vn():null}}function np(e){let{history:t,location:n}=window,r={value:Wa(e,n)},s={value:t.state};s.value||i(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(m,w,g){let k=e.indexOf("#"),h=k>-1?(n.host&&document.querySelector("base")?e:e.slice(k))+m:tp()+e+m;try{t[g?"replaceState":"pushState"](w,"",h),s.value=w}catch(E){console.error(E),n[g?"replace":"assign"](h)}}function a(m,w){i(m,Te({},t.state,Ma(s.value.back,m,s.value.forward,!0),w,{position:s.value.position}),!0),r.value=m}function u(m,w){let g=Te({},s.value,t.state,{forward:m,scroll:vn()});i(g.current,g,!0),i(m,Te({},Ma(r.value,m,null),{position:g.position+1},w),!1),r.value=m}return{location:r,state:s,push:u,replace:a}}function Ka(e){e=Na(e);let t=np(e),n=op(e,t.state,t.location,t.replace);function r(i,a=!0){a||n.pauseListeners(),history.go(i)}let s=Te({location:"",base:e,go:r,createHref:Ra.bind(null,e)},t,n);return Object.defineProperty(s,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(s,"state",{enumerable:!0,get:()=>t.state.value}),s}var ho=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({}),Qe=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(Qe||{}),sp={type:ho.Static,value:""},rp=/[a-zA-Z0-9_]/;function ip(e){if(!e)return[[]];if(e==="/")return[[sp]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(E){throw new Error(`ERR (${n})/"${w}": ${E}`)}let n=Qe.Static,r=n,s=[],i;function a(){i&&s.push(i),i=[]}let u=0,m,w="",g="";function k(){w&&(n===Qe.Static?i.push({type:ho.Static,value:w}):n===Qe.Param||n===Qe.ParamRegExp||n===Qe.ParamRegExpEnd?(i.length>1&&(m==="*"||m==="+")&&t(`A repeatable param (${w}) must be alone in its segment. eg: '/:ids+.`),i.push({type:ho.Param,value:w,regexp:g,repeatable:m==="*"||m==="+",optional:m==="*"||m==="?"})):t("Invalid state to consume buffer"),w="")}function h(){w+=m}for(;ut.length?t.length===1&&t[0]===rt.Static+rt.Segment?1:-1:0}function Ya(e,t){let n=0,r=e.score,s=t.score;for(;n0&&t[t.length-1]<0}var cp={strict:!1,end:!0,sensitive:!1};function pp(e,t,n){let r=dp(ip(e.path),n),s=Te(r,{record:e,parent:t,children:[],alias:[]});return t&&!s.record.aliasOf==!t.record.aliasOf&&t.children.push(s),s}function fp(e,t){let n=[],r=new Map;t=er(cp,t);function s(k){return r.get(k)}function i(k,h,E){let S=!E,v=Fa(k);v.aliasOf=E&&E.record;let _=er(t,k),N=[v];if("alias"in k){let M=typeof k.alias=="string"?[k.alias]:k.alias;for(let q of M)N.push(Fa(Te({},v,{components:E?E.record.components:v.components,path:q,aliasOf:E?E.record:v})))}let T,V;for(let M of N){let{path:q}=M;if(h&&q[0]!=="/"){let z=h.record.path,ne=z[z.length-1]==="/"?"":"/";M.path=h.record.path+(q&&ne+q)}if(T=pp(M,h,_),E?E.alias.push(T):(V=V||T,V!==T&&V.alias.push(T),S&&k.name&&!za(T)&&a(k.name)),Ja(T)&&m(T),v.children){let z=v.children;for(let ne=0;ne{a(V)}:Io}function a(k){if(rr(k)){let h=r.get(k);h&&(r.delete(k),n.splice(n.indexOf(h),1),h.children.forEach(a),h.alias.forEach(a))}else{let h=n.indexOf(k);h>-1&&(n.splice(h,1),k.record.name&&r.delete(k.record.name),k.children.forEach(a),k.alias.forEach(a))}}function u(){return n}function m(k){let h=vp(k,n);n.splice(h,0,k),k.record.name&&!za(k)&&r.set(k.record.name,k)}function w(k,h){let E,S={},v,_;if("name"in k&&k.name){if(E=r.get(k.name),!E)throw fo(Be.MATCHER_NOT_FOUND,{location:k});_=E.record.name,S=Te(La(h.params,E.keys.filter(V=>!V.optional).concat(E.parent?E.parent.keys.filter(V=>V.optional):[]).map(V=>V.name)),k.params&&La(k.params,E.keys.map(V=>V.name))),v=E.stringify(S)}else if(k.path!=null)v=k.path,E=n.find(V=>V.re.test(v)),E&&(S=E.parse(v),_=E.record.name);else{if(E=h.name?r.get(h.name):n.find(V=>V.re.test(h.path)),!E)throw fo(Be.MATCHER_NOT_FOUND,{location:k,currentLocation:h});_=E.record.name,S=Te({},h.params,k.params),v=E.stringify(S)}let N=[],T=E;for(;T;)N.unshift(T.record),T=T.parent;return{name:_,path:v,params:S,matched:N,meta:hp(N)}}e.forEach(k=>i(k));function g(){n.length=0,r.clear()}return{addRoute:i,resolve:w,removeRoute:a,clearRoutes:g,getRoutes:u,getRecordMatcher:s}}function La(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}function Fa(e){let t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:mp(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function mp(e){let t={},n=e.props||!1;if("component"in e)t.default=n;else for(let r in e.components)t[r]=typeof n=="object"?n[r]:n;return t}function za(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function hp(e){return e.reduce((t,n)=>Te(t,n.meta),{})}function vp(e,t){let n=0,r=t.length;for(;n!==r;){let i=n+r>>1;Ya(e,t[i])<0?r=i:n=i+1}let s=yp(e);return s&&(r=t.lastIndexOf(s,r-1)),r}function yp(e){let t=e;for(;t=t.parent;)if(Ja(t)&&Ya(e,t)===0)return t}function Ja({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Ha(e){let t=dt(os),n=dt(ns),r=!1,s=null,i=tt(()=>{let g=Wt(e.to);return t.resolve(g)}),a=tt(()=>{let{matched:g}=i.value,{length:k}=g,h=g[k-1],E=n.matched;if(!h||!E.length)return-1;let S=E.findIndex(po.bind(null,h));if(S>-1)return S;let v=Ba(g[k-2]);return k>1&&Ba(h)===v&&E[E.length-1].path!==v?E.findIndex(po.bind(null,g[k-2])):S}),u=tt(()=>a.value>-1&&Ep(n.params,i.value.params)),m=tt(()=>a.value>-1&&a.value===n.matched.length-1&&nr(n.params,i.value.params));function w(g={}){if(kp(g)){let k=t[Wt(e.replace)?"replace":"push"](Wt(e.to)).catch(Io);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>k),k}return Promise.resolve()}return{route:i,href:tt(()=>i.value.href),isActive:u,isExactActive:m,navigate:w}}function gp(e){return e.length===1?e[0]:e}var bp=un({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:Ha,setup(e,{slots:t}){let n=Fe(Ha(e)),{options:r}=dt(os),s=tt(()=>({[ja(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[ja(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{let i=t.default&&gp(t.default(n));return e.custom?i:be("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:s.value},i)}}}),wp=bp;function kp(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){let t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Ep(e,t){for(let n in t){let r=t[n],s=e[n];if(typeof r=="string"){if(r!==s)return!1}else if(!wt(s)||s.length!==r.length||r.some((i,a)=>i.valueOf()!==s[a].valueOf()))return!1}return!0}function Ba(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}var ja=(e,t,n)=>e??t??n,Cp=un({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){let r=dt(ss),s=tt(()=>e.route||r.value),i=dt(ar,0),a=tt(()=>{let w=Wt(i),{matched:g}=s.value,k;for(;(k=g[w])&&!k.components;)w++;return w}),u=tt(()=>s.value.matched[a.value]);uo(ar,tt(()=>a.value+1)),uo(Va,u),uo(ss,s);let m=xe();return He(()=>[m.value,u.value,e.name],([w,g,k],[h,E,S])=>{g&&(g.instances[k]=w,E&&E!==g&&w&&w===h&&(g.leaveGuards.size||(g.leaveGuards=E.leaveGuards),g.updateGuards.size||(g.updateGuards=E.updateGuards))),w&&g&&(!E||!po(g,E)||!h)&&(g.enterCallbacks[k]||[]).forEach(v=>v(w))},{flush:"post"}),()=>{let w=s.value,g=e.name,k=u.value,h=k&&k.components[g];if(!h)return Ga(n.default,{Component:h,route:w});let E=k.props[g],S=E?E===!0?w.params:typeof E=="function"?E(w):E:null,_=be(h,Te({},S,t,{onVnodeUnmounted:N=>{N.component.isUnmounted&&(k.instances[g]=null)},ref:m}));return Ga(n.default,{Component:_,route:w})||_}}});function Ga(e,t){if(!e)return null;let n=e(t);return n.length===1?n[0]:n}var lr=Cp;function Qa(e){let t=fp(e.routes,e),n=e.parseQuery||Ia,r=e.stringifyQuery||ir,s=e.history,i=Po(),a=Po(),u=Po(),m=In(Xt),w=Xt;mo&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");let g=Zn.bind(null,F=>""+F),k=Zn.bind(null,Ca),h=Zn.bind(null,Oo);function E(F,Z){let Q,te;return rr(F)?(Q=t.getRecordMatcher(F),te=Z):te=F,t.addRoute(te,Q)}function S(F){let Z=t.getRecordMatcher(F);Z&&t.removeRoute(Z)}function v(){return t.getRoutes().map(F=>F.record)}function _(F){return!!t.getRecordMatcher(F)}function N(F,Z){if(Z=Te({},Z||m.value),typeof F=="string"){let y=xn(n,F,Z.path),D=t.resolve({path:y.path},Z),O=s.createHref(y.fullPath);return Te(y,D,{params:h(D.params),hash:Oo(y.hash),redirectedFrom:void 0,href:O})}let Q;if(F.path!=null)Q=Te({},F,{path:xn(n,F.path,Z.path).path});else{let y=Te({},F.params);for(let D in y)y[D]==null&&delete y[D];Q=Te({},F,{params:k(y)}),Z.params=k(Z.params)}let te=t.resolve(Q,Z),ye=F.hash||"";te.params=g(h(te.params));let Ee=_a(r,Te({},F,{hash:Ea(ye),path:te.path})),p=s.createHref(Ee);return Te({fullPath:Ee,hash:ye,query:r===ir?Pa(F.query):F.query||{}},te,{redirectedFrom:void 0,href:p})}function T(F){return typeof F=="string"?xn(n,F,m.value.path):Te({},F)}function V(F,Z){if(w!==F)return fo(Be.NAVIGATION_CANCELLED,{from:Z,to:F})}function M(F){return ne(F)}function q(F){return M(Te(T(F),{replace:!0}))}function z(F,Z){let Q=F.matched[F.matched.length-1];if(Q&&Q.redirect){let{redirect:te}=Q,ye=typeof te=="function"?te(F,Z):te;return typeof ye=="string"&&(ye=ye.includes("?")||ye.includes("#")?ye=T(ye):{path:ye},ye.params={}),Te({query:F.query,hash:F.hash,params:ye.path!=null?{}:F.params},ye)}}function ne(F,Z){let Q=w=N(F),te=m.value,ye=F.state,Ee=F.force,p=F.replace===!0,y=z(Q,te);if(y)return ne(Te(T(y),{state:typeof y=="object"?Te({},ye,y.state):ye,force:Ee,replace:p}),Z||Q);let D=Q;D.redirectedFrom=Z;let O;return!Ee&&Sa(r,te,Q)&&(O=fo(Be.NAVIGATION_DUPLICATED,{to:D,from:te}),Me(te,te,!0,!1)),(O?Promise.resolve(O):P(D,te)).catch(I=>Ht(I)?Ht(I,Be.NAVIGATION_GUARD_REDIRECT)?I:qe(I):re(I,D,te)).then(I=>{if(I){if(Ht(I,Be.NAVIGATION_GUARD_REDIRECT))return ne(Te({replace:p},T(I.to),{state:typeof I.to=="object"?Te({},ye,I.to.state):ye,force:Ee}),Z||D)}else I=J(D,te,!0,p,ye);return G(D,te,I),I})}function ee(F,Z){let Q=V(F,Z);return Q?Promise.reject(Q):Promise.resolve()}function C(F){let Z=ze.values().next().value;return Z&&typeof Z.runWithContext=="function"?Z.runWithContext(F):F()}function P(F,Z){let Q,[te,ye,Ee]=qa(F,Z);Q=rs(te.reverse(),"beforeRouteLeave",F,Z);for(let y of te)y.leaveGuards.forEach(D=>{Q.push(Qt(D,F,Z))});let p=ee.bind(null,F,Z);return Q.push(p),ke(Q).then(()=>{Q=[];for(let y of i.list())Q.push(Qt(y,F,Z));return Q.push(p),ke(Q)}).then(()=>{Q=rs(ye,"beforeRouteUpdate",F,Z);for(let y of ye)y.updateGuards.forEach(D=>{Q.push(Qt(D,F,Z))});return Q.push(p),ke(Q)}).then(()=>{Q=[];for(let y of Ee)if(y.beforeEnter)if(wt(y.beforeEnter))for(let D of y.beforeEnter)Q.push(Qt(D,F,Z));else Q.push(Qt(y.beforeEnter,F,Z));return Q.push(p),ke(Q)}).then(()=>(F.matched.forEach(y=>y.enterCallbacks={}),Q=rs(Ee,"beforeRouteEnter",F,Z,C),Q.push(p),ke(Q))).then(()=>{Q=[];for(let y of a.list())Q.push(Qt(y,F,Z));return Q.push(p),ke(Q)}).catch(y=>Ht(y,Be.NAVIGATION_CANCELLED)?y:Promise.reject(y))}function G(F,Z,Q){u.list().forEach(te=>C(()=>te(F,Z,Q)))}function J(F,Z,Q,te,ye){let Ee=V(F,Z);if(Ee)return Ee;let p=Z===Xt,y=mo?history.state:{};Q&&(te||p?s.replace(F.fullPath,Te({scroll:p&&y&&y.scroll},ye)):s.push(F.fullPath,ye)),m.value=F,Me(F,Z,Q,p),qe()}let X;function K(){X||(X=s.listen((F,Z,Q)=>{if(!Ue.listening)return;let te=N(F),ye=z(te,Ue.currentRoute.value);if(ye){ne(Te(ye,{replace:!0,force:!0}),te).catch(Io);return}w=te;let Ee=m.value;mo&&Ta(sr(Ee.fullPath,Q.delta),vn()),P(te,Ee).catch(p=>Ht(p,Be.NAVIGATION_ABORTED|Be.NAVIGATION_CANCELLED)?p:Ht(p,Be.NAVIGATION_GUARD_REDIRECT)?(ne(Te(T(p.to),{force:!0}),te).then(y=>{Ht(y,Be.NAVIGATION_ABORTED|Be.NAVIGATION_DUPLICATED)&&!Q.delta&&Q.type===es.pop&&s.go(-1,!1)}).catch(Io),Promise.reject()):(Q.delta&&s.go(-Q.delta,!1),re(p,te,Ee))).then(p=>{p=p||J(te,Ee,!1),p&&(Q.delta&&!Ht(p,Be.NAVIGATION_CANCELLED)?s.go(-Q.delta,!1):Q.type===es.pop&&Ht(p,Be.NAVIGATION_ABORTED|Be.NAVIGATION_DUPLICATED)&&s.go(-1,!1)),G(te,Ee,p)}).catch(Io)}))}let se=Po(),ce=Po(),ue;function re(F,Z,Q){qe(F);let te=ce.list();return te.length?te.forEach(ye=>ye(F,Z,Q)):console.error(F),Promise.reject(F)}function _e(){return ue&&m.value!==Xt?Promise.resolve():new Promise((F,Z)=>{se.add([F,Z])})}function qe(F){return ue||(ue=!F,K(),se.list().forEach(([Z,Q])=>F?Q(F):Z()),se.reset()),F}function Me(F,Z,Q,te){let{scrollBehavior:ye}=e;if(!mo||!ye)return Promise.resolve();let Ee=!Q&&Aa(sr(F.fullPath,0))||(te||!Q)&&history.state&&history.state.scroll||null;return ot().then(()=>ye(F,Z,Ee)).then(p=>p&&Da(p)).catch(p=>re(p,F,Z))}let Pe=F=>s.go(F),Se,ze=new Set,Ue={currentRoute:m,listening:!0,addRoute:E,removeRoute:S,clearRoutes:t.clearRoutes,hasRoute:_,getRoutes:v,resolve:N,options:e,push:M,replace:q,go:Pe,back:()=>Pe(-1),forward:()=>Pe(1),beforeEach:i.add,beforeResolve:a.add,afterEach:u.add,onError:ce.add,isReady:_e,install(F){F.component("RouterLink",wp),F.component("RouterView",lr),F.config.globalProperties.$router=Ue,Object.defineProperty(F.config.globalProperties,"$route",{enumerable:!0,get:()=>Wt(m)}),mo&&!Se&&m.value===Xt&&(Se=!0,M(s.location).catch(te=>{}));let Z={};for(let te in Xt)Object.defineProperty(Z,te,{get:()=>m.value[te],enumerable:!0});F.provide(os,Ue),F.provide(ns,Yo(Z)),F.provide(ss,m);let Q=F.unmount;ze.add(F),F.unmount=function(){ze.delete(F),ze.size<1&&(w=Xt,X&&X(),X=null,m.value=Xt,Se=!1,ue=!1),Q()}}};function ke(F){return F.reduce((Z,Q)=>Z.then(()=>C(Q)),Promise.resolve())}return Ue}function Xa(e){return dt(ns)}function Za(e,t){return t?.split(".").reduce((n,r)=>n?.[r],e)}function dr(e=null,t=new Map){let n=Fe({}),r=[],s=!1,i=new Proxy(n,{get(a,u){return typeof u=="string"&&u.startsWith("__v_")||Reflect.has(a,u)?Reflect.get(a,u):e?.[u]}});return Object.defineProperty(n,"parent",{value:e,configurable:!0}),Object.defineProperty(n,"viewState",{get:()=>i}),i.watch=(a,u,m=!1,w=!0)=>{let g=typeof a=="function"?()=>a(i):()=>Za(i,a),k=He(g,u,{deep:m,flush:"post"});return r.push(k),w&&ot(()=>{s||u(g(),g())}),k},i.watchGroup=(a,u,m=!0)=>i.watch(()=>a.map(w=>Za(i,w)),u,!0,m),i.on=(a,u)=>{if(a==="dispose")return r.push(u),()=>{};t.has(a)||t.set(a,new Set),t.get(a).add(u);let m=()=>t.get(a)?.delete(u);return r.push(m),m},i.emit=(a,...u)=>{for(let m of[...t.get(a)||[]])m({},...u)},i.dispose=()=>{s=!0,r.splice(0).reverse().forEach(a=>a())},Wo(i.dispose),i}function ut(){let e=new Set,t=new Set,n=!1,r=(i,a=0)=>{if(n)return;let u=setTimeout(()=>{e.delete(u),i()},a);return e.add(u),u};r.cancel=i=>{clearTimeout(i),e.delete(i)};let s=(i,a)=>{if(n)return;let u=setInterval(i,a);return t.add(u),u};return s.cancel=i=>{clearInterval(i),t.delete(i)},Wo(()=>{n=!0,e.forEach(clearTimeout),t.forEach(clearInterval)}),{timeout:r,interval:s}}function Zt(){let e=new Set;return Wo(()=>{e.forEach(t=>t()),e.clear()}),(t,n,r,s)=>{t.addEventListener(n,r,s);let i=()=>{t.removeEventListener(n,r,s),e.delete(i)};return e.add(i),i}}function ur(e,t,n){let r,s=!1,i="form-draft:"+n,a=()=>Object.fromEntries(t.map(h=>[h,e[h]])),u=()=>JSON.stringify(a()),m=h=>{for(let E of t)Object.prototype.hasOwnProperty.call(h,E)&&(e[E]=h[E]);e.options?.expirationDate&&(e.options.expirationDate=new Date(e.options.expirationDate))},w=()=>{try{window.sessionStorage.removeItem(i)}catch{}},g=(h=!1)=>{if(r!==void 0){if(h&&document.querySelectorAll("input, select, textarea").forEach(E=>{E._field?.binding.state===e&&E._field.timer&&E._field.commit()}),e.unsavedChanges=u()!==r,e.draftSaved=!1,!e.unsavedChanges){w();return}try{window.sessionStorage.setItem(i,JSON.stringify({account:e.user?.username||null,savedAt:Date.now(),values:a()})),e.draftSaved=!0}catch{}}},k=()=>g(!0);return e.on("routeLeave",k),window.addEventListener("beforeunload",k),e.on("dispose",()=>window.removeEventListener("beforeunload",k)),{restore(){r=u();let h;try{h=JSON.parse(window.sessionStorage.getItem(i)||"null")}catch{}let E=h&&h.account===(e.user?.username||null)&&Date.now()-h.savedAt<30*6e4&&h.values;return E&&(m(h.values),e.draftRestored=!0),s||(s=!0,e.watch(()=>a(),()=>g(),!0)),e.unsavedChanges=u()!==r,!!E},checkpoint(){return JSON.parse(u())},accept(h){r=JSON.stringify(h),e.draftRestored=!1,g()},discard(){document.querySelectorAll("input, select, textarea").forEach(h=>{h._field?.binding.state!==e||!h._field.timer||(clearTimeout(h._field.timer),h._field.timer=null,h.value=h._field.binding.value??"")}),r!==void 0&&m(JSON.parse(r)),e.draftRestored=!1,g()},clear(){r=u(),e.unsavedChanges=!1,e.draftRestored=!1,e.draftSaved=!1,w()}}}var yn={VIEWER_ERRORS:{title:"Content could not be loaded",access_title:"GitHub access needs attention",reader_help:"Reading this repository? You do not need to sign in. Try again after the owner restores access, or let them know this anonymous link is unavailable.",owner_help:"Own this repository? If your GitHub account was suspended or recently recovered, sign in to Anonymous GitHub again and check the GitHub connection and repository permissions in your dashboard. Then retry this page. Keep the existing anonymous URL; do not delete the repository to restore access.",retry:"Try again",dashboard:"Open owner dashboard"},ERRORS:{cache_busy:"Downloads are busy. Please try again shortly.",invalid_sort:"The selected sort order is invalid.",invalid_cursor:"This project page is no longer valid. Reload the list.",repository_changed:"The repository changed while processing. Please retry.",repository_job_cancelled:"The repository changed or was removed while processing.",storage_delete_failed:"Unable to remove cached files. Please try again later.",unknown_error:"We could not load this content. Try again. If it still fails, contact support with the anonymous URL and the time of the error.",unreachable:"The service could not complete this request. Wait a moment and try again.",request_error:"The connection was interrupted. Check your internet connection and try again.",not_found:"The requested resource could not be found.",not_connected:"You must be logged in to perform this action.",not_authorized:"You do not have permission to perform this action.",unable_to_connect_user:"Unable to connect your account. Please try again later.",user_not_found:"The requested user could not be found.",user_banned:"Your account has been banned. Contact the admin for more information.",repo_access_limited:"GitHub blocked access because the repository's organization restricts third-party OAuth apps. Ask an org owner to approve Anonymous GitHub under Settings \u2192 Third-party Access \u2192 OAuth app policy, or anonymize a personal fork instead.",repo_saml_enforcement:"The repository's organization enforces SAML single sign-on. Authorize your token for that organization (GitHub \u2192 Settings \u2192 Applications, or re-run the org's SSO sign-in), then retry. Alternatively, anonymize a personal fork.",repo_not_found:"Anonymous GitHub cannot access the source repository on GitHub. It may be private, unavailable, or require the owner to reconnect GitHub.",repo_empty:"The selected branch has no commits on GitHub. Push at least one commit, or pick a different branch, then retry.",repo_not_accessible:"Anonymous GitHub cannot access this repository. Verify the repository exists and that Anonymous GitHub has been authorized for the owning organization.",repository_archived:"This repository has been archived and its files are no longer available.",repository_expired:"The repository is expired.",invalid_status:"This action cannot be performed while the resource is in its current state.",repository_not_ready:"Anonymous GitHub is still processing the repository, it can take several minutes.",repository_not_accessible:"This repository is currently not accessible.",repo_is_updating:"Anonymous GitHub is still processing the repository, it can take several minutes.",invalid_repo:"The provided repository is not valid.",invalid_source_repository:"The repository source name is invalid; expected the form 'owner/name'.",repoId_not_defined:"A repository ID must be provided.",repoUrl_not_defined:"The repository URL needs to be defined.",source_not_provided:"A repository source must be provided.",github_rate_limit_exceeded:"GitHub temporarily blocked the request because we hit its API rate limit. Wait a few minutes and try again. If the problem persists and you contact GitHub Support, include the request ID and timestamp shown in GitHub's response (the 'X-GitHub-Request-Id' header).",rate_limited:"GitHub API rate limit reached. The repository will be available shortly \u2014 please wait a moment and refresh.",repoId_already_used:"The repository ID is already used.",invalid_repoId:"The format of the repository ID is invalid.",unsupported_source:"The repository source type is not supported.",branch_not_specified:"The branch is not specified.",branch_not_found:"The branch of the repository cannot be found.",commit_not_specified:"A commit must be specified.",commit_not_found:"The configured commit no longer exists in the source repository. It may have been force-pushed, rebased, or removed.",repo_renamed:"The source repository appears to have been renamed or moved on GitHub. Please refresh and try again \u2014 the cached name has been updated.",invalid_commit_format:"The commit hash format is invalid. It must be a hexadecimal string.",pull_request_not_found:"The requested pull request could not be found.",pull_request_expired:"This pull request has expired and is no longer available.",pull_request_not_ready:"This pull request is still being prepared. Please try again shortly.",pull_request_not_available:"This pull request is currently not available.",invalid_pullRequestId:"The pull request ID is invalid.",pullRequestId_already_used:"This pull request ID is already in use. Please choose a different one.",repository_not_specified:"A repository must be specified for this pull request.",pullRequestId_not_specified:"A pull request ID must be specified.",pullRequestId_is_not_a_number:"The source pull request ID must be a number.",options_not_provided:"Anonymization options are mandatory.",terms_not_specified:"Anonymization terms must be specified.",invalid_terms_format:"Terms are in an invalid format.",missing_content:"No content was provided to the anonymization preview.",unable_to_anonymize:"An error happened during the anonymization process. Please try later or report the issue.",non_supported_mode:"The selected anonymization mode is invalid, only download and stream are supported.",invalid_path:"The provided path is invalid or missing.",path_not_specified:"A file path must be specified.",path_not_defined:"The file path has not been resolved yet.",invalid_file_path:"The requested file path is not valid.",invalid_request:"The request is missing required fields or is malformed.",invalid_project_name:"Use a project name of up to 100 characters without line breaks or control characters.",no_file_selected:"Please select a file.",submodule_not_available:"This public submodule file is no longer available at its recorded commit.",file_not_found:"The requested file is not found.",file_not_accessible:"The requested file is not accessible.",file_not_supported:"The file type is not supported. Anonymous GitHub cannot handle it.",file_too_big:"The file size exceeds the limit of Anonymous GitHub.",is_folder:"The path points to a folder.",folder_not_supported:"The path points to a folder. Please select a file.",unable_to_write_file:"Unable to write file on disk.",download_not_enabled:"Repository downloads are not enabled on this server.",unable_to_download:"The repository could not be downloaded. Please try again later.",s3_config_not_provided:"Object storage has not been configured on this server.",stats_unsupported:"Statistics are only supported in download mode.",branches_not_found:"The requested branch is not found.",readme_not_available:"No README for the repository is found.",page_not_supported_on_different_branch:"GitHub Pages is served from a different branch than the one selected. Pick the branch that GitHub Pages is configured to use.",page_not_activated:"GitHub Pages is not enabled on this repository. Enable it in the repository settings on GitHub before anonymizing.",is_removed:"This resource has been removed and is no longer available.",conf_name_missing:"A conference name is required.",conf_id_missing:"A conference ID is required.",conf_id_used:"This conference ID is already in use. Please choose a different one.",conf_start_date_missing:"A start date is required for the conference.",conf_end_date_missing:"An end date is required for the conference.",conf_start_date_invalid:"The start date must be before the end date.",conf_end_date_invalid:"The end date must be in the future.",invalid_plan:"The selected plan is not valid.",conference_not_found:"The requested conference could not be found.",conf_not_found:"The requested conference could not be found.",conf_not_activated:"The conference is not activated.",billing_missing:"Billing information is required for this plan.",billing_name_missing:"A billing name is required.",billing_email_missing:"A billing email is required.",billing_address_missing:"A billing address is required.",billing_city_missing:"A billing city is required.",billing_zip_missing:"A billing ZIP/postal code is required.",billing_country_missing:"A billing country is required.",queue_not_found:"The specified queue could not be found.",job_not_found:"The specified job could not be found in the queue.",error_retrying_job:"An error occurred while retrying the job.",gist_expired:"The gist is expired.",gist_not_ready:"Anonymous GitHub is still processing the gist, it can take several minutes.",gist_not_found:"The requested gist could not be found.",gist_not_available:"This gist is currently not available.",invalid_gistId:"The format of the gist ID is invalid.",gistId_not_specified:"A gist ID must be provided.",gistId_already_used:"The gist ID is already used.",missing_token:"An authentication token is required.",token_attempts_rate_limited:"Too many token authentication attempts. Wait before trying again.",refresh_rate_limited:"A refresh was already requested for this repository. Wait one minute before trying again.",session_required:"Sign in through your browser to manage maintenance tokens.",invalid_token_options:"Provide a token name, 1 to 20 repository IDs, and an expiration of 1 to 90 days.",token_limit_reached:"You have reached the limit of 50 API tokens. Revoke an unused token before creating another.",invalid_token_id:"The token ID is invalid.",invalid_settings:"Provide supported settings with boolean values, or a list of anonymization terms.",token_scope_forbidden:"This token does not allow this operation or repository.",authentication_unavailable:"Authentication is temporarily unavailable. Try again later.",invalid_token:"The provided authentication token is invalid.",login_failed:"Login failed. Please try again.",server_error:"An unexpected server error occurred. Please try again later.",username_not_defined:"A username must be provided.",github_user_not_found:"The specified GitHub user could not be found.",cannot_coauthor_self:"You cannot add yourself as a co-author.",storage_write_size_mismatch:"The downloaded file was smaller than expected. The upstream source may have returned an incomplete response \u2014 please try again.",storage_read_error:"An error occurred while reading the file from storage \u2014 please try again.",upstream_error:"A temporary error occurred while fetching from GitHub \u2014 please try again.",token_expired:"The repository owner needs to renew their GitHub connection before this content can be loaded.",job_is_active:"This job is currently running \u2014 wait for it to finish or remove it first.",github_app_access_required:"Allow this repository on GitHub using the read-only access button, then retry. Organization access may require administrator approval.",github_app_reconnect_required:"Reconnect your GitHub App account to restore read-only access.",github_app_disabled:"New GitHub App connections are currently unavailable.",github_oauth_required:"Connect legacy GitHub OAuth to use this feature.",github_identity_mismatch:"Use the same GitHub account that you are signed in with here.",github_app_permissions_invalid:"The GitHub App must be configured with read-only permissions.",github_unavailable:"GitHub is temporarily unavailable. Please retry.",connection_changed:"The repository connection changed. Reload and try again.",repository_busy:"Wait for the repository operation to finish before changing its connection.",invalid_connection:"Select a supported GitHub connection.",github_oauth_disabled:"Legacy OAuth sign-in is currently disabled.",invalid_auth_state:"The authorization session expired. Please start again from Anonymous GitHub.",invalid_webhook_signature:"The webhook signature is invalid.",webhook_processing_failed:"Webhook processing failed. Retry the delivery.",github_app_authorization_cancelled:"GitHub authorization was cancelled.",github_account_link_required:"Verify your existing account with your previous GitHub connection. Future sign-ins will use the GitHub App.",github_app_refresh_busy:"GitHub credentials are being renewed. Please retry shortly.",github_grant_revocation_failed:"Unable to revoke the GitHub grant. Please retry.",another_login_required:"Connect and verify another sign-in method before disconnecting OAuth.",oauth_resources_remaining:"Some resources still require OAuth. Migrate or remove them before disconnecting.",invalid_github_path:"The GitHub repository path is invalid."},WARNINGS:{page_not_enabled_on_repo:"GitHub Pages is not enabled on this repository. Enable it in the repository's Settings \u2192 Pages on GitHub, then refresh.",page_branch_mismatch:"GitHub Pages on this repository is served from the '{{pageBranch}}' branch, but you selected '{{selectedBranch}}'. Switch the branch above to '{{pageBranch}}' to anonymize the Pages site.",folder_truncated:"This folder has more than 10,000 entries; only a partial listing is shown.",repo_truncated:"Some folders in this repository have too many files to be fully listed. Affected folders are marked with a warning icon.",submodules_not_included:"Some submodule contents could not be included. Only direct public GitHub submodules within the size limits are supported. Private, external, nested, or unavailable submodules appear as empty folders."}};function cr(e){let t=e?.data;if(typeof t=="string")try{t=JSON.parse(t)}catch{t=null}return typeof t?.error=="string"&&Object.prototype.hasOwnProperty.call(yn.ERRORS,t.error)?t.error:e?.status===-1||e?.status===0?"request_error":[502,503,504].includes(e?.status)?"unreachable":"unknown_error"}var is="XXXX",Sp=e=>{is=e||"XXXX"},xa=(e=is)=>{if(!e)return null;let t=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(t+"(?:-\\d+)?","g")},el=(e,t=is)=>{let n=xa(t);if(!n||!e||!e.textContent.includes(t))return;let r=e.ownerDocument,s=r.createTreeWalker(e,NodeFilter.SHOW_TEXT),i=[];for(;s.nextNode();)i.push(s.currentNode);for(let a of i){let u=a.nodeValue,m=a.parentElement;if(!u.includes(t)||!m||m.closest("script, style, mark.redaction, .mermaid"))continue;let w=m.closest('code[class*="language-"]');if(w&&!w.contains(e))continue;let g=r.createDocumentFragment(),k=0;for(let h of u.matchAll(n)){g.append(u.slice(k,h.index));let E=r.createElement("mark");E.className="redaction",E.title="Redacted by Anonymous GitHub",E.textContent=h[0],g.append(E),k=h.index+h[0].length}g.append(u.slice(k)),a.replaceWith(g)}},tl=(e,t=is)=>{if(!e||!t||!e.includes(t))return e;let n=new DOMParser().parseFromString(""+e+"","text/html");return el(n.body,t),n.body.innerHTML};async function ol(e){if(window.navigator.clipboard?.writeText){await window.navigator.clipboard.writeText(e);return}let t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.style.position="fixed",t.style.opacity="0";let n=document.activeElement;document.body.appendChild(t);try{if(t.select(),!document.execCommand?.("copy"))throw Error("Copy unavailable")}finally{t.remove(),n?.focus()}}function Np(e){if(!["ArrowLeft","ArrowRight","Home","End"].includes(e.key))return;let t=[...e.currentTarget.closest('[role="tablist"]').querySelectorAll('[role="tab"]')],n=t.indexOf(e.currentTarget),r=e.key==="Home"?0:e.key==="End"?t.length-1:(n+(e.key==="ArrowRight"?1:-1)+t.length)%t.length;e.preventDefault(),t[r]?.focus(),t[r]?.click()}var nl=function(e,t,n,r){e.previewTabKeydown=Np,e.title="Main",e.user={status:"connection"},e.site_options,e.toasts=[],e.removeToast=function(g){let k=e.toasts.indexOf(g);k!==-1&&e.toasts.splice(k,1)},e.addToast=function(g){return e.toasts.push(g),r(function(){e.removeToast(g)},8e3),g};let s=/^\/(r|repository|pr|gist)\//;e.path=n.url(),e.paths=n.path().substring(1).split("/"),e.isReviewerRoute=s.test(n.path()),e.darkMode=function(g){localStorage.setItem("darkMode",g),e.isDarkMode=g;let k="/css/prism-okaidia.css",h="/css/prism.css";if(g){$("body").addClass("dark-mode");let S=document.createElement("link");S.href=k,S.rel="stylesheet",document.head.append(S),$(`link[href='${h}']`).remove()}else{$("body").removeClass("dark-mode");let S=document.createElement("link");S.href=h,S.rel="stylesheet",document.head.append(S),$(`link[href='${k}']`).remove()}let E=document.querySelector("[class*='floatingchat-container-wrap'] [class*='floating-chat-kofi-text-container-wrap']");E&&(E.style.backgroundColor=g?"#34312C":"#1A1815",E.style.color="#FAF9F6"),e.emit("dark-mode",g)},e.darkMode(localStorage.getItem("darkMode")=="true"),e.emailPromptOpen=!1,e.emailPromptAddress="",e.emailPromptBusy=!1,e.emailPromptError="";let i;e.respondToEmailPrompt=async g=>{if(!e.emailPromptBusy){e.emailPromptBusy=!0,e.emailPromptError="";try{let k=await t.post("/github/connections/email",{action:g,email:e.emailPromptAddress},{headers:{"X-CSRF-Token":e.user.emailPromptCSRF}});g==="save"&&(e.user.notificationEmail=k.data.notificationEmail),e.emailPromptOpen=!1,e.user.showEmailPrompt=!1,i?.focus()}catch(k){e.emailPromptError=k.data?.error||"Unable to save your preference. Please try again."}finally{e.emailPromptBusy=!1}}};function a(){t.get("/api/user").then(g=>{g&&(e.user=g.data),e.user?.emailNotificationsEnabled&&e.user.showEmailPrompt&&!e.user.notificationEmail&&(i=document.activeElement,e.emailPromptOpen=!0,r(()=>{let k=document.getElementById("email-prompt");k?.showModal?k.showModal():k?.setAttribute("open",""),document.getElementById("email-prompt-address")?.focus()},0))},()=>{e.user=null})}a();function u(){t.get("/api/options").then(g=>{g&&(e.site_options=g.data),Sp(g?.data?.ANONYMIZATION_MASK),e.emit("site-options")},()=>{e.site_options=null})}u();function m(){t.get("/api/message").then(g=>{g&&(e.generalMessage=g.data)},()=>{e.generalMessage=null})}m();function w(g,k){k&&(e.title=k.title),e.path=n.url(),e.paths=n.path().substring(1).split("/"),e.isReviewerRoute=s.test(n.path())}e.on("routeChange",w),e.on("routeUpdate",w)},sl=function(e,t){let n=Zt(),r=ut(),s=()=>{let i=window.location.hash.slice(1),a=document.getElementById(i);if(!a?.classList.contains("panel-collapse"))return;$(a).collapse("show");let u=document.getElementById(a.getAttribute("aria-labelledby"));u?.setAttribute("tabindex","-1"),u?.focus({preventScroll:!0}),u?.scrollIntoView?.({block:"start"})};e.on("routeUpdate",()=>r.timeout(s,0)),n(window,"hashchange",s),r.timeout(s,0)},rl=function(e,t,n,r,s){e.terms="",e.options={expirationMode:"remove",update:!1,image:!0,pdf:!0,notebook:!0,loc:!0,link:!0},e.saving=!1,e.message=null,e.error=null,e.accountEmail="",e.emailLoading=!0,e.emailCSRFReady=!1,e.emailSaving=!1,e.emailSaved=!1,e.emailError="";let i="";e.loadAccountEmail=async()=>{e.emailLoading=!0,e.emailError="";try{let w=await t.get("/github/connections/email");e.accountEmail=w.data.notificationEmail||"",i=w.data.csrf,e.emailCSRFReady=!!i}catch{e.emailError="Unable to load your email address. Please try again."}finally{e.emailLoading=!1}},e.saveAccountEmail=async()=>{if(!(e.emailSaving||e.emailLoading||!i)){e.emailSaving=!0,e.emailSaved=!1,e.emailError="";try{let w=await t.post("/github/connections/email",{email:e.accountEmail},{headers:{"X-CSRF-Token":i}});e.accountEmail=w.data.notificationEmail,e.user&&(e.user.notificationEmail=w.data.notificationEmail),e.emailSaved=!0}catch{e.emailError="Unable to save your email address. Check the address and try again."}finally{e.emailSaving=!1}}},e.loadAccountEmail(),s.load().then(w=>{e.quota=w},console.error);let a=ur(e,["terms","options"],"profile");e.discardDraft=()=>a.discard();function u(){t.get("/api/user/default").then(w=>{let g=w.data||{};g.terms&&(e.terms=g.terms.join(` +`)),e.options=Object.assign({},e.options,g.options),a.restore()})}u();let m=null;e.saveDefault=w=>{if(w&&w.preventDefault&&w.preventDefault(),e.saving)return;let g=a.checkpoint(),k={terms:e.terms.split(` +`).map(h=>h.trim()).filter(h=>h.length>0),options:e.options};e.saving=!0,e.error=null,t.post("/api/user/default",k).then(()=>{a.accept(g),e.saving=!1,e.message=e.unsavedChanges?null:"Saved",m&&r.cancel(m),m=r(()=>{e.message=null},2500)},h=>{e.saving=!1;let E=h&&h.data&&h.data.error,S="Unable to save your defaults. Please try again.";Promise.all([n("ERRORS."+E),n("ERRORS.unknown_error")]).then(([v,_])=>{e.error=E&&v!==_?v:S},()=>{e.error=S})})},e.deleteAccount=()=>{confirm("Delete your account? All your anonymized repositories, gists, and pull requests will be removed, and your personal data will be erased. This cannot be undone.")&&(e.deletingAccount=!0,t.delete("/api/user").then(()=>{window.location.href="/"},()=>{e.deletingAccount=!1,e.deleteError="Unable to delete the account. Please try again."}))}},il=function(e,t,n){e.repoId=null,e.repoUrl=null,e.claim=()=>{t.post("/api/repo/claim",{repoId:e.repoId,repoUrl:e.repoUrl}).then(r=>{n.url("/dashboard")},r=>{e.error=r.data,e.claimForm.repoUrl.setValidity("not_found",!1),e.claimForm.repoId.setValidity("not_found",!1)})}},al=function(e,t,n,r,s){e.user&&!e.user.status&&n.url("/dashboard"),e.watch("user.status",()=>{e.user&&!e.user.status&&n.url("/dashboard")}),e.features=[{key:"anonymize",num:"01",eyebrow:"Anonymize",title:"Double-anonymous,",accent:"your rules.",text:"Choose what reviewers may see: links, images, PDFs, notebooks, GitHub Pages. Add your own terms, with regex if you need it, and pick the expiration date.",cta:"Start an anonymization",href:"/anonymize",url:"anonymous.4open.science/anonymize",img:"/imgs/anonymize.png",alt:"The anonymize form: source repository, terms to redact, options and a live README preview"},{key:"review",num:"02",eyebrow:"Review",title:"Reviewers browse",accent:"the real thing.",text:"Highlighted source code, rendered PDFs, images, and notebooks, in a familiar file explorer. GitHub Pages is also supported.",cta:"Open the example",href:"https://anonymous.4open.science/r/840c8c57-3c32-451e-bf12-0e20be300389/",target:"_self",url:"anonymous.4open.science/r/840c8c57-\u2026",img:"/imgs/explorer.png",alt:"The repository explorer with a file tree and a rendered README"},{key:"manage",num:"03",eyebrow:"Manage",title:"One dashboard,",accent:"until the decision.",text:"Monitor views, edit configuration, remove or update your repository. Program chairs can group submissions under a conference with one shared expiry.",cta:"Open the dashboard",href:"/dashboard",needsUser:!0,url:"anonymous.4open.science/dashboard",img:"/imgs/dashboard.png",alt:"The dashboard listing anonymized repositories with status, views and expiry"}],e.feature=e.features[0].key,e.selectFeature=function(u){e.feature=u},e.featureHref=function(u){return u.needsUser&&!e.user?"/signin":u.href},e.featureTarget=function(u){return u.needsUser&&!e.user?"_self":u.target||void 0},e.featureKeydown=function(u,m){let w={ArrowDown:1,ArrowRight:1,ArrowUp:-1,ArrowLeft:-1,Home:"first",End:"last"}[u.key];if(w===void 0)return;u.preventDefault();let g=e.features.length,k=w==="first"?0:w==="last"?g-1:(m+w+g)%g;e.feature=e.features[k].key,s(()=>{let h=r.document.getElementById("feature-tab-"+e.feature);h&&h.focus()})},e.cards=[{key:"repositories",total:0,label:"repositories anonymized"},{key:"users",total:0,label:"researchers"},{key:"pageViews",total:0,label:"page views"},{key:"pullRequests",total:0,label:"pull requests"}];function i(){t.get("/api/stat/").then(u=>{e.stat=u.data,e.cards[0].total=u.data.nbRepositories,e.cards[1].total=u.data.nbUsers,e.cards[2].total=u.data.nbPageViews,e.cards[3].total=u.data.nbPullRequests})}i();function a(u){let m={series:u,bars:[],viewW:100,deltaToday:0,pctChange:0,pctAbs:0,isUp:!0};if(!u||u.length<2)return m;let w=new Array(u.length-1);for(let v=1;v=2){let v=w[g-2];v&&(m.pctChange=(m.deltaToday-v)/v*100)}return m.pctAbs=Math.round(Math.abs(m.pctChange)),m.isUp=m.pctChange>=0,m}e.history={repositories:a([]),users:a([]),pageViews:a([]),pullRequests:a([])},t.get("/api/stat/history?days=60").then(u=>{let m=u.data||[];e.history={repositories:a(m.map(w=>w.nbRepositories||0)),users:a(m.map(w=>w.nbUsers||0)),pageViews:a(m.map(w=>w.nbPageViews||0)),pullRequests:a(m.map(w=>w.nbPullRequests||0))}})},ll=function(e,t,n,r,s,i){let a=ut();e.on("routeLeave",function(){$('[data-toggle="tooltip"]').tooltip("dispose")}),e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),a.timeout(()=>{$('[data-toggle="tooltip"]').tooltip()},250),e.quotaExpanded=!1,e.closeQuota=()=>{e.quotaExpanded=!1,ot(()=>document.querySelector(".dashboard-quota > summary")?.focus())},Zt()(document,"click",C=>{e.quotaExpanded&&!C.target.closest?.(".dashboard-quota")&&(e.quotaExpanded=!1)}),e.filtersExpanded=!1,e.projectView="all",e.selectedProject=null,e.projectName="",e.nameSaving=!1,e.nameError="",e.nameMessage="",e.needsAttention=C=>C.status==="error"||C._broken||m(C.status)==="progress"&&C._stale,e.attentionCount=()=>e.dashboardTotals?.attention??e.items.filter(e.needsAttention).length,e.hasProjects=()=>(e.dashboardTotals?.total??e.items.length)>0,e.setProjectView=C=>{e.projectView=C,C==="attention"&&(e.filters.status.error=!0,e.filters.status.progress=!0)},e.projectDetailsId=C=>"project-details-"+encodeURIComponent(C._type+":"+(C._id||C._source||"unknown")),e.showProjectDetails=async C=>{e.selectedProject=C,e.projectName=C.projectName||"",e.nameError="",e.nameMessage="",await ot();let P=document.getElementById(e.projectDetailsId(C));P?.focus(),P?.scrollIntoView?.({block:"nearest"})},e.closeProjectDetails=C=>{e.selectedProject=null,ot(()=>document.querySelector(`[data-project-actions="${encodeURIComponent(C._type+":"+C._id)}"]`)?.focus())},e.saveProjectName=async C=>{if(e.nameSaving||!C._id)return;let P=e.projectName.trim();if(P.length>100){e.nameError="Use 100 characters or fewer.";return}e.nameSaving=!0,e.nameError="",e.nameMessage="";try{let G=await t.post("/api/user/project-name",{type:C._type,id:C._id,name:P});C.projectName=G.data.name,C._label=C.projectName||C._fallbackLabel,e.selectedProject===C&&(e.nameMessage=P?"Project name saved.":"Default project name restored."),T||(e.dashboardCursor=null,await M(),e.selectedProject===C&&(e.selectedProject=e.items.find(J=>J._type===C._type&&J._id===C._id)||null))}catch{e.selectedProject===C&&(e.nameError="The project name could not be saved. Try again.")}finally{e.nameSaving=!1}},e.copyingId=null,e.copyLink=async C=>{if(!C._viewUrl||e.copyingId)return;let P=new URL(C._viewUrl,s.location.origin).href;e.copyingId=C._type+":"+C._id;try{await ol(P),e.addToast({title:"Link copied",body:"The anonymous link is ready to share."})}catch{e.addToast({title:"Copy this anonymous link",body:P})}finally{e.copyingId=null}},e.items=[],e.search="",e.loading=!0,e.statusKeyLabels={ready:"Ready",progress:"In progress",error:"Error",expired:"Expired",removed:"Removed"};let u=["queue","download","downloaded","preparing","anonymizing"];function m(C){return C==="ready"||C==="error"?C:C==="expired"||C==="expiring"?"expired":C==="removed"||C==="removing"?"removed":(u.indexOf(C)>-1,"progress")}let w=7200*1e3,g="dashboard.filterPrefs",k={typeFilter:"all",filters:{status:{ready:!0,progress:!0,error:!0,expired:!0,removed:!1}},orderBy:"-anonymizeDate"},h=loadFilterPrefs(g)||{};e.typeFilter=h.typeFilter||k.typeFilter,e.filters={status:Object.assign({},k.filters.status,h.filters&&h.filters.status||{})},e.orderBy=h.orderBy||k.orderBy;let E={_name:{label:"Anonymous ID",defaultDesc:!1},_label:{label:"Project",defaultDesc:!1},anonymizeDate:{label:"Anonymize date",defaultDesc:!0},status:{label:"Status",defaultDesc:!1},lastView:{label:"Last view",defaultDesc:!0},pageView:{label:"Views",defaultDesc:!0},"options.expirationDate":{label:"Expiration",defaultDesc:!1}};e.sortFields=E,e.sortField=()=>e.orderBy.replace(/^-/,""),e.sortDesc=()=>e.orderBy.charAt(0)==="-",e.sortLabel=()=>{let C=E[e.sortField()];return C?C.label:"Custom"},e.isSortedBy=C=>e.sortField()===C,e.setSort=(C,P)=>{typeof P!="boolean"&&(P=e.isSortedBy(C)?!e.sortDesc():!!(E[C]&&E[C].defaultDesc)),e.orderBy=(P?"-":"")+C},e.toggleSortDirection=()=>{e.setSort(e.sortField(),!e.sortDesc())},e.watchGroup(["typeFilter","orderBy"],()=>{saveFilterPrefs(g,{typeFilter:e.typeFilter,filters:e.filters,orderBy:e.orderBy})}),e.watch("filters",()=>{saveFilterPrefs(g,{typeFilter:e.typeFilter,filters:e.filters,orderBy:e.orderBy})},!0),i.load().then(C=>{e.quota=C},console.error);function S(C,P,G,J,X,K){C.pageView||(C.pageView=0),C.lastView||(C.lastView=""),C.options=C.options||{},C.options.terms=(C.options.terms||[]).filter(ce=>ce),C._id=P||"",C._source=J,C._broken=!P,C._name=P||J||"(unnamed)",C._fallbackLabel=C._type==="gist"?"Gist "+(P||J||"without an ID"):J||G||C._name,C._label=C.projectName||C._fallbackLabel,C._editUrl=P?X:null,C._viewUrl=P?K:null,C._broken&&(C.status="error",C.statusMessage="incomplete_record"),C._statusKey=m(C.status);let se=C.anonymizeDate||C.lastView;return C._stale=C._statusKey==="progress"&&!!se&&Date.now()-new Date(se).getTime()>w,C.status==="expired"||C.status==="expiring"?C._expiry={kind:"expired",date:C.options.expirationDate}:C.status!=="ready"?C._expiry={kind:"none"}:C.options.expirationMode==="never"||!C.options.expirationDate?C._expiry={kind:"never"}:C._expiry={kind:"date",date:C.options.expirationDate},C}function v(C){return t.get(C).then(P=>P.data||[],P=>(console.error(P),[]))}function _(){return e.loading=!0,r.all([v("/api/user/anonymized_repositories"),v("/api/user/anonymized_pull_requests"),v("/api/user/anonymized_gists")]).then(C=>{let P=C[0],G=C[1],J=C[2],X=[];P.forEach(K=>{K._type="repo";let se=K.source||{};X.push(S(K,K.repoId,K.repoId,se.fullName,"/anonymize/"+K.repoId,"/r/"+K.repoId+"/"))}),G.forEach(K=>{K._type="pr";let se=K.source||{};X.push(S(K,K.pullRequestId,K.pullRequestId,se.repositoryFullName?se.repositoryFullName+"#"+se.pullRequestId:void 0,"/pull-request-anonymize/"+K.pullRequestId,"/pr/"+K.pullRequestId+"/"))}),J.forEach(K=>{K._type="gist";let se=K.source||{};X.push(S(K,K.gistId,K.gistId,se.gistId,"/gist-anonymize/"+K.gistId,"/gist/"+K.gistId+"/"))}),e.items=X,e.loading=!1})}let N=0,T=!1;e.dashboardCursor=null,e.dashboardError="";function V(C){let P=C.source||{};return C._type==="repo"?S(C,C.repoId,C.repoId,P.fullName,"/anonymize/"+C.repoId,"/r/"+C.repoId+"/"):C._type==="pr"?S(C,C.pullRequestId,C.pullRequestId,P.repositoryFullName?P.repositoryFullName+"#"+P.pullRequestId:void 0,"/pull-request-anonymize/"+C.pullRequestId,"/pr/"+C.pullRequestId+"/"):S(C,C.gistId,C.gistId,P.gistId,"/gist-anonymize/"+C.gistId,"/gist/"+C.gistId+"/")}function M(C=!1){if(T)return _();let P=++N;return e.loading=!C,e.loadingMore=C,e.dashboardError="",t.get("/api/user/dashboard",{params:{q:e.search,type:e.typeFilter,sort:e.orderBy,statuses:Object.keys(e.filters.status).filter(G=>e.filters.status[G]!==!1).join(",")||"none",attention:String(e.projectView==="attention"),cursor:C?e.dashboardCursor:void 0}}).then(G=>{if(P===N){if(!Array.isArray(G.data?.items))return T=!0,_();e.items=(C?e.items:[]).concat(G.data.items.map(V)),e.dashboardCursor=G.data.cursor,e.dashboardTotals=G.data}},G=>{if(P===N){if(G.status===404)return T=!0,_();e.dashboardError="Projects could not be loaded. Please try again."}}).finally(()=>{P===N&&(e.loading=!1,e.loadingMore=!1)})}e.loadMoreProjects=()=>M(!0);let q;e.watchGroup(["search","typeFilter","orderBy","projectView"],()=>{T||(q&&a.timeout.cancel(q),q=a.timeout(()=>M(),150))},!1),e.watch("filters",()=>{T||M()},!0,!1),e.on("dispose",()=>{N++}),M(),e.openItem=(C,P)=>{if(!C._viewUrl)return;let G=P&&P.target;G&&G.closest&&G.closest("a, button, .dropdown, input")||(s.location.href=C._viewUrl)},e.hiddenStatusCount=()=>Object.keys(e.filters.status).filter(C=>e.filters.status[C]===!1).length,e.hasHiddenStatus=()=>e.hiddenStatusCount()>0,e.hasActiveFilters=()=>e.projectView!=="all"||e.typeFilter!=="all"||e.search.trim().length>0||Object.keys(e.filters.status).some(C=>e.filters.status[C]===!1),e.showClearFilters=()=>e.search.trim().length>0||e.typeFilter!=="all"||e.hiddenStatusCount()>1,e.clearFilters=()=>{e.projectView="all",e.typeFilter="all",e.search="",Object.keys(e.filters.status).forEach(C=>{e.filters.status[C]=!0})};function z(C,P,G,J){t.get("/api/repo/"+C).then(async X=>{let K=J!==void 0&&J!==X.data.status;for(let se of e.items)if(se._type==="repo"&&se.repoId==C){K=K||se.status!==X.data.status;let ce=e.needsAttention(se);se.status=X.data.status,se.statusMessage=X.data.statusMessage,se._statusKey=m(se.status),se._statusKey!=="progress"&&(se._stale=!1);let ue=e.needsAttention(se);e.dashboardTotals&&ce!==ue&&(e.dashboardTotals.attention=Math.max(0,e.dashboardTotals.attention+(ue?1:-1)));break}if(K&&!T){e.dashboardCursor=null;let se=e.selectedProject;await M(),se&&e.selectedProject===se&&(e.selectedProject=e.items.find(ce=>ce._type===se._type&&ce._id===se._id)||null)}if(X.data.status=="ready"||X.data.status=="error"||X.data.status=="removed"||X.data.status=="expired"){P(X.data);return}a.timeout(()=>z(C,P,G,X.data.status),2500)},G)}let ne=C=>C==="repo"?"repository":C==="gist"?"gist":"pull request",ee=C=>C==="repo"?"/api/repo":C==="gist"?"/api/gist":"/api/pr";e.removeItem=C=>{let P=ne(C._type);if(confirm(`Are you sure that you want to remove the ${P} ${C._id}?`)){let G=Fe({title:`Removing ${C._id}...`,date:new Date,body:`The ${P} ${C._id} is going to be removed.`});e.addToast(G);let J=`${ee(C._type)}/${C._id}`;t.delete(J).then(()=>{C._type==="repo"?z(C._id,()=>{G.title=`${C._id} is removed.`,G.body=`The ${P} ${C._id} is removed.`},void 0,C.status):(G.title=`${C._id} is removed.`,G.body=`The ${P} ${C._id} is removed.`,M())},X=>{G.title=`Error during the removal of ${C._id}.`,G.body=X.body,M()})}},e.refreshItem=C=>{let P=ne(C._type),G=Fe({title:`Refreshing ${C._id}...`,date:new Date,body:`The ${P} ${C._id} is going to be refreshed.`});e.addToast(G);let J=K=>{G.title=`Error during the refresh of ${C._id}.`,G.body=K.data?.error||K.body||"The refresh could not be completed. Please try again.",M()},X=`${ee(C._type)}/${C._id}/refresh`;t.post(X).then(()=>{C._type==="repo"?z(C._id,K=>{if(K.status!=="ready"){J({body:K.statusMessage||`The repository is ${K.status}.`});return}G.title=`${C._id} is refreshed.`,G.body=`The ${P} ${C._id} is refreshed.`},J,C.status):(G.title=`${C._id} is refreshed.`,G.body=`The ${P} ${C._id} is refreshed.`,M())},J)},e.extendItem=C=>{let P=ne(C._type),G=Fe({title:`Extending ${C._id}...`,date:new Date,body:`The expiration of ${P} ${C._id} is going to be extended by 6 months.`});e.addToast(G);let J=`${ee(C._type)}/${C._id}/extend`;t.post(J).then(()=>{C._type==="repo"?z(C._id,()=>{G.title=`${C._id} is extended.`,G.body=`The expiration of ${P} ${C._id} is extended by 6 months.`},void 0,C.status):(G.title=`${C._id} is extended.`,G.body=`The expiration of ${P} ${C._id} is extended by 6 months.`,M())},X=>{G.title=`Error during the extension of ${C._id}.`,G.body=X.data&&X.data.error||X.body,M()})},e.itemFilter=C=>{if(e.projectView==="attention"&&!e.needsAttention(C)||e.typeFilter!=="all"&&C._type!==e.typeFilter||e.filters.status[C._statusKey]===!1)return!1;let P=e.search.trim().toLowerCase();return!!(P.length==0||C._label&&String(C._label).toLowerCase().indexOf(P)>-1||C._source&&String(C._source).toLowerCase().indexOf(P)>-1||C._id&&String(C._id).toLowerCase().indexOf(P)>-1||C.conference&&String(C.conference).toLowerCase().indexOf(P)>-1)}};var dl=function(e,t,n){let r=ut();e.repoId=n.repoId,e.repo=null,e.progress=0,e.rateLimitResetAt=0,e.rateLimitCountdown="",e.shareUrl=(window.location?.origin||"")+"/r/"+encodeURIComponent(e.repoId)+"/",e.copied=!1;let s=null;e.copyShareUrl=async()=>{try{await ol(e.shareUrl),e.copied=!0,s&&r.timeout.cancel(s),s=r.timeout(()=>{e.copied=!1},2e3)}catch{e.addToast?.({title:"Copy this anonymous link",body:e.shareUrl})}};var i=null;let a=null,u=!1;function m(g){e.rateLimitResetAt=g,i&&r.interval.cancel(i);function k(){var h=Math.max(0,Math.ceil((g-Date.now())/1e3));if(h<=0)e.rateLimitCountdown="",e.rateLimitResetAt=0,r.interval.cancel(i),i=null;else{var E=Math.floor(h/60),S=h%60;e.rateLimitCountdown=E>0?E+"m "+S+"s":S+"s"}}k(),i=r.interval(k,1e3)}e.on("dispose",function(){u=!0,i&&r.interval.cancel(i),a&&r.timeout.cancel(a)});function w(g){if(!g)return g;var k=g.match(/^rate_limited:(\d+)$/);return k?(m(parseInt(k[1],10)),null):(e.rateLimitResetAt=0,g)}e.getStatus=()=>{u||t.get("/api/repo/"+e.repoId,{repoId:e.repoId,repoUrl:e.repoUrl}).then(g=>{if(!u){e.repo=g.data,g.data.rateLimitResetAt?m(g.data.rateLimitResetAt):e.repo.statusMessage=w(e.repo.statusMessage),e.repo.status=="ready"?e.progress=100:e.repo.status=="queue"?e.progress=10:e.repo.status=="downloaded"?e.progress=50:e.repo.status=="download"||e.repo.status=="preparing"?e.progress=25:e.repo.status=="anonymizing"&&(e.progress=75);var k=!["ready","removed","expired"].includes(e.repo.status);e.repo.status=="error"&&!e.rateLimitResetAt&&(k=!1),k&&(a=r.timeout(e.getStatus,2e3))}},g=>{e.error=g.data.error})},e.getStatus()},as=function(e,t,n,r,s,i,a){e.sourceUrl="",e.workspaceOpen=!1,e.sourceUrlError="",e.previewStatus="idle",e.sourceLoading=!1,e.mobilePane="settings";let u=window.matchMedia?.("(max-width: 767px)");e.mobileWorkspace=!!u?.matches,u?.addEventListener&&Zt()(u,"change",p=>{e.mobileWorkspace=p.matches}),e.selectMobilePane=p=>{e.mobilePane=p};let m=0,w=!1,g=new Set,k=(p,y=!1)=>!w&&p.generation===m&&p.url===e.sourceUrl.trim()&&p.connection===e.githubConnection&&(!y||p.branch===e.source.branch),h=()=>{let p={generation:m,url:e.sourceUrl.trim(),connection:e.githubConnection,branch:e.source.branch};return g.add(p),e.sourceLoading=!0,p},E=p=>{g.delete(p),w||(e.sourceLoading=[...g].some(y=>k(y)))};e.on("dispose",()=>{w=!0,m++});let S=null,v=p=>p.gistId&&!p.repo?"gist:"+p.gistId.toLowerCase():(p.owner+"/"+p.repo).toLowerCase()+(p.pullRequestId?"/pull/"+p.pullRequestId:""),_=ur(e,["sourceUrl","terms","repoId","pullRequestId","gistId","source","options","conference","githubConnection"],"anonymize:"+(s.path?.()||""));e.discardDraft=async()=>{_.discard(),e.workspaceOpen=!!e.sourceUrl,e.error=null,e.sourceUrl?await e.urlSelected(!0):(m++,e.sourceLoading=!1,e.detectedType=null,e.details=null,e.sourceUrlError="",re.cancel(),Se.cancel(),F.cancel(),e.previewStatus="idle")},e.githubConnection=void 0,e.githubConnections=null,e.gistOAuthRequired=!1,e.gistAppRequired=!1;let N=()=>{let p={};for(let y of["sourceUrl","terms","repoId","pullRequestId","gistId","source","options","conference","githubConnection"])p[y]=e[y];sessionStorage.setItem("github-access-draft",JSON.stringify({path:s.path(),savedAt:Date.now(),draft:p}))};e.connectGistApp=()=>{N(),window.location.href="/github/app/login?returnTo="+encodeURIComponent(s.path())},e.connectGistOAuth=()=>{N(),window.location.href="/github/login?returnTo="+encodeURIComponent(s.path())},e.grantGitHubAccess=()=>{N();let p=s.path(),y=P(e.sourceUrl)||"",D=e.githubConnections?.appConnected?"/github/app/install":"/github/app/login";window.location.href=D+"?returnTo="+encodeURIComponent(p)+"&repository="+encodeURIComponent(y)+"&install=1"},e.chooseGitHubConnection=async p=>{e.githubConnection=p,e.readme="",e.sourceUrl&&await J()},e.detectedType=null,e.repoId="",e.pullRequestId="",e.gistId="",e.terms="",e.defaultTerms="",e.branches=[],e.source={branch:"",commit:""},e.options={expirationMode:"remove",expirationDate:new Date,update:!1,image:!0,pdf:!0,notebook:!0,link:!0,body:!0,title:!0,origin:!1,diff:!0,content:!0,comments:!0,username:!0,date:!0};function T(){let p=new Date;return p.setMonth(p.getMonth()+6),p}e.options.expirationDate=T();function V(p){let y=p.getFullYear(),D=String(p.getMonth()+1).padStart(2,"0"),O=String(p.getDate()).padStart(2,"0");return`${y}-${D}-${O}`}e.minExpirationDate=V(new Date);let M=new Date;M.setFullYear(M.getFullYear()+1),e.maxExpirationDate=V(M),e.anonymize_readme="",e.readme="",e.html_readme="",e.isUpdate=!1,e.previousConfigurations=[],e.previousConfigurationId="";let q,z=p=>String(p||"").replace(/\/$/,"").replace(/\.git$/i,"").toLowerCase();async function ne(){if(e.isUpdate||r.repoId||r.pullRequestId||r.gistId)return;let p={generation:m,url:e.sourceUrl.trim(),connection:e.githubConnection};try{q||(q=t.get("/api/user/anonymized_repositories").then(O=>O.data));let y=await q;if(!k(p))return;let D=z(P(p.url));e.previousConfigurations=y.filter(O=>O.repoId&&O.options&&z(O.source?.fullName)===D).sort((O,I)=>(Date.parse(I.anonymizeDate)||0)-(Date.parse(O.anonymizeDate)||0)),e.previousConfigurationId=e.previousConfigurations[0]?.repoId||""}catch{q=void 0}}e.existingConfigurationUrl=()=>{let p=e.previousConfigurations.find(y=>y.repoId===e.previousConfigurationId);return p?"/anonymize/"+encodeURIComponent(p.repoId):null};function ee(p){t.get("/api/user/default").then(y=>{let D=y.data;D.terms&&(e.defaultTerms=D.terms.join(` +`)),e.options=Object.assign({},e.options,D.options),e.options.expirationDate=D.options&&D.options.expirationDate?new Date(D.options.expirationDate):T(),!r.repoId&&!r.pullRequestId&&!r.gistId&&!e.anonymize?.terms?.dirty&&(e.terms=e.defaultTerms),p&&p()})}function C(p,y,D){e.anonymize&&e.anonymize[p]&&e.anonymize[p].setValidity(y,D)}function P(p){try{let y=parseGithubUrl(p);if(y&&y.owner&&y.repo)return y.owner+"/"+y.repo}catch{}return null}e.accessRepairAllowed=!1,e.repairingGitHubAccess=!1,e.accessRepairMessage="",e.repairGitHubAccess=async()=>{if(!e.accessRepairAllowed||e.repairingGitHubAccess||!e.githubConnections?.appEnabled||!r.repoId||e.role!=="owner"||e.githubConnection!=="github-app"||P(e.sourceUrl)!==e._originalFullName)return;e.repairingGitHubAccess=!0,e.accessRepairMessage="";let p=h();try{let y=await t.get("/github/connections");if(e.githubConnections=y.data,!y.data.appEnabled)return;let D=await t.post("/github/connections/migrate",{type:"repository",id:r.repoId,connection:"github-app"},{headers:{"X-CSRF-Token":y.data.csrf}});if(!k(p))return;e.error=null,D.data.fullName&&(e._originalFullName=D.data.fullName,e.source.fullName=D.data.fullName,e.sourceUrl="https://github.com/"+D.data.fullName),e.accessRepairMessage="GitHub access repaired. Your anonymous URL and published commit are unchanged.",await e.urlSelected(!0)}catch{k(p)&&(e.accessRepairMessage="Unable to repair GitHub access. Check the App's repository permissions in Manage access, then retry. Your published snapshot has not been replaced.")}finally{e.repairingGitHubAccess=!1,E(p)}},e.reconnectingSource=!1,e.reconnectRepositoryId=void 0,e.reconnectSource=async()=>{if(confirm("Reconnect to the repository currently at this GitHub URL? Review its branch and commit before saving. Saving will replace the published snapshot.")){e.reconnectingSource=!0,e.reconnectRepositoryId=void 0,e.source.commit="",e.source.branch="",e.readme="",e.branches=[];try{await K()}catch{}}};function G(){return e.reconnectingSource||!e.isUpdate||!e._originalRepositoryID?void 0:P(e.sourceUrl)===e._originalFullName?e._originalRepositoryID:void 0}async function J(){e._preservingDraft=!0;try{await e.urlSelected(!0)}finally{e._preservingDraft=!1}}async function X(){let p;try{p=JSON.parse(sessionStorage.getItem("github-access-draft")||"null")}catch{return!1}if(!p||p.path!==s.path()||Date.now()-p.savedAt>=30*6e4)return _.restore()?(e.sourceUrl&&await J(),!0):!1;_.restore();for(let y of["sourceUrl","terms","repoId","pullRequestId","gistId","source","options","conference","githubConnection"])Object.prototype.hasOwnProperty.call(p.draft,y)&&(e[y]=p.draft[y]);return e.options.expirationDate&&(e.options.expirationDate=new Date(e.options.expirationDate)),await J(),sessionStorage.removeItem("github-access-draft"),!0}ee(()=>{!r.repoId&&!r.pullRequestId&&!r.gistId&&a(X,0),r.repoId&&r.repoId!=""&&(e.isUpdate=!0,e.detectedType="repo",e.repoId=r.repoId,t.get("/api/repo/"+e.repoId).then(async p=>{e.accessRepairAllowed=!["removed","archived","preparing","queue","download","removing","expiring"].includes(p.data.status),e.githubConnection=p.data.connection||"oauth",e.sourceUrl="https://github.com/"+p.data.source.fullName,e._originalFullName=p.data.source.fullName,e.terms=p.data.options.terms.filter(y=>y).join(` +`),e.source=p.data.source,e.role=p.data.role||"owner",e.coauthors=p.data.coauthors||[],e._originalBranch=p.data.source.branch,e.options=Object.assign({},e.options,p.data.options),e.conference=p.data.conference,e._originalConference=p.data.conference,e.repositoryID=p.data.source.repositoryID,e._originalRepositoryID=p.data.source.repositoryID,p.data.options.expirationDate&&(e.options.expirationDate=new Date(p.data.options.expirationDate)),S=v(parseGithubUrl(e.sourceUrl)),!await X()&&(await Promise.all([K(),se()]),_e())},()=>{s.url("/404")})),r.pullRequestId&&r.pullRequestId!=""&&(e.isUpdate=!0,e.detectedType="pr",e.pullRequestId=r.pullRequestId,t.get("/api/pr/"+e.pullRequestId).then(async p=>{if(e.githubConnection=p.data.connection||"oauth",e.sourceUrl="https://github.com/"+p.data.source.repositoryFullName+"/pull/"+p.data.source.pullRequestId,e.terms=p.data.options.terms.filter(y=>y).join(` +`),e.source=p.data.source,e.options=Object.assign({},e.options,p.data.options),e.conference=p.data.conference,e._originalConference=p.data.conference,p.data.options.expirationDate&&(e.options.expirationDate=new Date(p.data.options.expirationDate)),S=v(parseGithubUrl(e.sourceUrl)),!await X())try{await qe()}catch{}},()=>{s.url("/404")})),r.gistId&&r.gistId!=""&&(e.isUpdate=!0,e.detectedType="gist",e.gistId=r.gistId,t.get("/api/gist/"+e.gistId).then(async p=>{e.sourceUrl="https://gist.github.com/"+p.data.source.gistId,e.terms=p.data.options.terms.filter(y=>y).join(` +`),e.source=p.data.source,e.options=Object.assign({},e.options,p.data.options),e.conference=p.data.conference,e._originalConference=p.data.conference,p.data.options.expirationDate&&(e.options.expirationDate=new Date(p.data.options.expirationDate)),S=v(parseGithubUrl(e.sourceUrl)),!await X()&&await ze()},()=>{s.url("/404")}))}),t.get("/github/connections").then(p=>{e.githubConnections=p.data,!r.repoId&&!r.pullRequestId&&!r.gistId&&e.githubConnection===void 0&&p.data.appEnabled&&p.data.appConnected&&(e.githubConnection="github-app",e.sourceUrl&&e.workspaceOpen&&J())}).catch(()=>{}),e.urlSelected=async(p=!1)=>{let y=++m;e.previousConfigurations=[],e.previousConfigurationId="";let D;try{D=parseGithubUrl(e.sourceUrl.trim())}catch{e.sourceLoading=!1,re.cancel(),Se.cancel(),F.cancel(),e.previewStatus="idle",e.sourceUrlError=e.sourceUrl?"Please provide a valid GitHub URL.":"",C("sourceUrl","github",!1);return}let O=v(D),I=p||S===O;S=O,e.sourceUrlError="",C("sourceUrl","github",!0);let U=document.activeElement?.id==="sourceUrl-landing";e.workspaceOpen=!0,U&&a(()=>document.getElementById("sourceUrl")?.focus(),0),e.reconnectingSource=!1,e.reconnectRepositoryId=void 0,!I&&!e.isUpdate&&(e.repoId="",e.pullRequestId="",e.gistId=""),e.details=null,e.branches=[],I||(e.source={type:"GitHubStream",branch:"",commit:""}),re.cancel(),Se.cancel(),F.cancel(),Me.clear(),Ue.clear(),e.previewStatus="idle",e.anonymize_readme="",e.readme="",e.html_readme="",e.detectedType=null,e.gistOAuthRequired=!1,e.gistAppRequired=!1,e._preservingDraft=I;try{D.gistId&&!D.repo?(e.detectedType="gist",e.source={gistId:D.gistId},await ze()):D.pullRequestId?(e.detectedType="pr",e.source={repositoryFullName:D.owner+"/"+D.repo,pullRequestId:D.pullRequestId},await qe()):(e.detectedType="repo",ne(),await Promise.all([K(),se()]),_e())}catch{}finally{y===m&&(e._preservingDraft=!1)}$('[data-toggle="tooltip"]').tooltip()},$('[data-toggle="tooltip"]').tooltip(),e.watch("source.branch",async()=>{if(e.detectedType!=="repo")return;let p=e.branches.filter(D=>D.name==e.source.branch)[0];if(!p)return;!(!e.reconnectingSource&&e.isUpdate&&e._originalBranch===e.source.branch&&e.source.commit)&&!(e._preservingDraft&&e.source.commit)&&(e.source.commit=p.commit),e.readme=p.readme,await se(),_e()}),e.getBranches=async p=>{let y=parseGithubUrl(e.sourceUrl),D=h();try{let O=await t.get(`/api/repo/${y.owner}/${y.repo}/branches`,{params:{reconnect:e.reconnectingSource?"1":void 0,anonymizedRepoId:e.isUpdate&&r.repoId&&P(e.sourceUrl)===e._originalFullName?r.repoId:void 0,connection:e.githubConnection,force:p===!0||e.reconnectingSource?"1":"0",repositoryID:G()}});if(!k(D))return;e.branches=O.data,e.sourceUnreachable=!1,e.source.branch||(e.source.branch=e.details.defaultBranch);let I=e.branches.filter(U=>U.name==e.source.branch);I.length>0&&(!(!e.reconnectingSource&&!p&&e.isUpdate&&!e.options.update&&e._originalBranch===e.source.branch&&e.source.commit)&&!(e._preservingDraft&&e.source.commit)&&(e.source.commit=I[0].commit),e.readme=I[0].readme,await se(p))}catch(O){if(!k(D))return;e.branches=[],e.sourceUnreachable=O&&(O.status===404||O.data&&O.data.error==="repo_not_found");let I=O&&O.data&&O.data.error||(O&&O.status===404?"repo_not_found":"unknown_error");i("ERRORS."+I).then(U=>{e.toasts=e.toasts||[],e.addToast({title:"Error",date:new Date,body:U}),e.error=U},console.error),typeof C=="function"&&C("sourceUrl","missing",!1)}finally{E(D)}};async function K(){let p=parseGithubUrl(e.sourceUrl),y=h();try{te();let D=await t.get(`/api/repo/${p.owner}/${p.repo}/`,{params:{reconnect:e.reconnectingSource?"1":void 0,anonymizedRepoId:e.isUpdate&&r.repoId&&P(e.sourceUrl)===e._originalFullName?r.repoId:void 0,connection:e.githubConnection,repositoryID:G(),force:"1"}});if(!k(y))return;e.details=D.data,e.reconnectingSource&&(e.reconnectRepositoryId=e.details.externalId),e.details&&e.details.id&&(e.repositoryID=e.details.id),e.repoId||(e.repoId=e.details.repo+"-"+generateRandomId(4)),await e.getBranches(e.reconnectingSource)}catch(D){if(!k(y))return;throw D.data&&(i("ERRORS."+D.data.error).then(O=>{e.addToast({title:"Error",date:new Date,body:O}),e.error=O},console.error),Ee(D.data.error)),C("sourceUrl","missing",!1),D}finally{E(y)}}async function se(p){if(e.readme&&!p)return e.readme;let y=parseGithubUrl(e.sourceUrl),D=h();try{let O=await t.get(`/api/repo/${y.owner}/${y.repo}/readme`,{params:{reconnect:e.reconnectingSource?"1":void 0,anonymizedRepoId:e.isUpdate&&r.repoId&&P(e.sourceUrl)===e._originalFullName?r.repoId:void 0,connection:e.githubConnection,force:p===!0?"1":"0",branch:e.source.branch,repositoryID:G()}});k(D,!0)&&(e.readme=O.data)}catch{k(D,!0)&&(e.readme="")}finally{E(D)}}function ce(){let p={terms:e.terms?e.terms.split(` +`):[],image:!!e.options.image,link:!!e.options.link,repoId:e.repoId};e.source&&e.source.branch&&(p.branchName=e.source.branch);try{let y=parseGithubUrl(e.sourceUrl);p.repoName=`${y.owner}/${y.repo}`}catch{}return p}function ue(p,y,D){let O=null,I=0,U=()=>{if(e.detectedType!==p)return;O&&a.cancel(O);let L=++I;e.previewStatus="loading",O=a(()=>{O=null;let H=y();if(!H){e.previewStatus="idle";return}t.post("/api/anonymize-preview",H).then(Y=>{L===I&&(D(Y.data,H),e.previewStatus="ready")}).catch(()=>{L===I&&(e.previewStatus="error")})},200)};return U.cancel=()=>{I++,O&&a.cancel(O),O=null},e.on("dispose",U.cancel),U}e.retryPreview=()=>{e.detectedType==="repo"&&re(),e.detectedType==="pr"&&Se(),e.detectedType==="gist"&&F()};let re=ue("repo",()=>e.readme?{content:e.readme,options:ce()}:null,p=>{if(typeof p?.content!="string")throw Error("Invalid preview response");e.anonymize_readme=p.content;let y="";try{let O=parseGithubUrl(e.sourceUrl),I=e.source.branch||e.details&&e.details.defaultBranch||"main";y=`https://github.com/${O.owner}/${O.repo}/raw/${I}/`}catch{}let D=renderMD(e.anonymize_readme,y);e.html_readme=D,a(Prism.highlightAll,150)});function _e(){!e.anonymize||!e.anonymize.terms||(e.termsRegexWarning=!!e.terms&&!!e.terms.match(/[-[\]{}()*+?.,\\^$|#]/g),re())}async function qe(){let p=parseGithubUrl(e.sourceUrl),y=h();try{te();let D=await t.get(`/api/pr/${p.owner}/${p.repo}/${p.pullRequestId}`,{params:{connection:e.githubConnection}});if(!k(y))return;e.details=D.data,e.pullRequestId||(e.pullRequestId=p.repo+"-PR"+p.pullRequestId+"-"+generateRandomId(4))}catch(D){if(!k(y))return;throw D.data&&(i("ERRORS."+D.data.error).then(O=>{e.addToast({title:"Error",date:new Date,body:O}),e.error=O},console.error),Ee(D.data.error)),C("sourceUrl","missing",!1),D}finally{E(y)}}let Me=Fe(new Map);function Pe(){let p=new Set,y=e.details&&e.details.pullRequest;if(!y)return p;typeof y.title=="string"&&p.add(y.title),typeof y.body=="string"&&p.add(y.body),typeof y.diff=="string"&&p.add(y.diff);let D=y.comments||[];for(let O of D)typeof O.author=="string"&&p.add(O.author),typeof O.body=="string"&&p.add(O.body);return p}let Se=ue("pr",()=>{let p=Pe(),y=Array.from(p);return y.length===0?null:{contents:y,options:ce()}},(p,y)=>{if(!Array.isArray(p?.contents)||p.contents.length!==y.contents.length||p.contents.some(I=>typeof I!="string"))throw Error("Invalid preview response");let D=y.contents,O=new Map;for(let I=0;IMe.set(U,I))});e.anonymizePrContent=function(p){return p&&(Me.has(p)?Me.get(p):"")};async function ze(){let p=parseGithubUrl(e.sourceUrl),y=h();try{te(),e.gistOAuthRequired=!1,e.gistAppRequired=!1;let D=await t.get(`/api/gist/source/${p.gistId}`);if(!k(y))return;e.details=D.data,e.gistId||(e.gistId="gist-"+p.gistId.substring(0,6)+"-"+generateRandomId(4))}catch(D){if(!k(y))return;if(D.data?.error==="github_app_reconnect_required"){e.gistAppRequired=!0,C("sourceUrl","missing",!1);return}if(D.data?.error==="github_oauth_required"){e.gistOAuthRequired=!0,C("sourceUrl","missing",!1);return}throw D.data&&(i("ERRORS."+D.data.error).then(O=>{e.addToast({title:"Error",date:new Date,body:O}),e.error=O},console.error),Ee(D.data.error)),C("sourceUrl","missing",!1),D}finally{E(y)}}let Ue=Fe(new Map);function ke(){let p=new Set,y=e.details&&e.details.gist;if(!y)return p;typeof y.description=="string"&&p.add(y.description),typeof y.ownerLogin=="string"&&p.add(y.ownerLogin);let D=y.files||[];for(let I of D)typeof I.filename=="string"&&p.add(I.filename),typeof I.content=="string"&&p.add(I.content);let O=y.comments||[];for(let I of O)typeof I.author=="string"&&p.add(I.author),typeof I.body=="string"&&p.add(I.body);return p}let F=ue("gist",()=>{let p=ke(),y=Array.from(p);return y.length===0?null:{contents:y,options:ce()}},(p,y)=>{if(!Array.isArray(p?.contents)||p.contents.length!==y.contents.length||p.contents.some(I=>typeof I!="string"))throw Error("Invalid preview response");let D=y.contents,O=new Map;for(let I=0;IUe.set(U,I)),Z()});e.anonymizeGistContent=function(p){return p&&(Ue.has(p)?Ue.get(p):"")},e.previewGistFiles=[];function Z(){let p=e.details&&e.details.gist&&e.details.gist.files||[];e.previewGistFiles=p.map(y=>({filename:e.anonymizeGistContent(y.filename),content:e.anonymizeGistContent(y.content),language:y.language}))}e.watch("details.gist.files",Z,!0),e.watch("terms",Z);function Q(){let p=e.conference;if(e.conference_data=null,!p)return;let y=e.isUpdate&&p===e._originalConference;t.get("/api/conferences/"+p).then(D=>{e.conference===p&&(e.conference_data=D.data,e.conference_data.startDate=new Date(e.conference_data.startDate),e.conference_data.endDate=new Date(e.conference_data.endDate),!y&&(e.options.expirationDate=new Date(e.conference_data.endDate),e.options.expirationMode="remove",e.options.update=e.conference_data.options.update,e.options.image=e.conference_data.options.image,e.options.pdf=e.conference_data.options.pdf,e.options.notebook=e.conference_data.options.notebook,e.options.link=e.conference_data.options.link))},()=>{e.conference===p&&(e.conference_data=null)})}function te(){C("repoId","used",!0),C("repoId","format",!0),C("pullRequestId","used",!0),C("pullRequestId","format",!0),C("gistId","used",!0),C("gistId","format",!0),C("sourceUrl","used",!0),C("sourceUrl","missing",!0),C("sourceUrl","access",!0),C("sourceUrl","github",!0),C("commit","exists",!0),C("conference","activated",!0),C("terms","format",!0),e.termsRegexWarning=!1}function ye(){let p=e.anonymize&&e.anonymize.expirationDate;return!e.options.expirationDate||p&&p.invalid?(p&&p.setDirty&&p.setDirty(),e.error="Please choose a valid expiration date.",!0):!1}function Ee(p){let y=e.detectedType==="pr"?"pullRequestId":e.detectedType==="gist"?"gistId":"repoId";switch(p){case"repoId_already_used":C(y,"used",!1);break;case"invalid_repoId":C(y,"format",!1);break;case"options_not_provided":C(y,"format",!1);break;case"repo_already_anonymized":C("sourceUrl","used",!1);break;case"invalid_terms_format":C("terms","format",!1);break;case"repo_not_found":C("sourceUrl","missing",!1);break;case"repo_not_accessible":C("sourceUrl","access",!1);break;case"commit_not_found":C("commit","exists",!1);break;case"conf_not_activated":C("conference","activated",!1);break}}e.coauthors=e.coauthors||[],e.coauthorResults=[],e.coauthorError="",e.searchCoauthors=()=>{let p=(e.coauthorSearch||"").trim();if(e.coauthorError="",p.length<2){e.coauthorResults=[];return}t.get("/api/user/search/github-users",{params:{q:p}}).then(y=>{let D=new Set((e.coauthors||[]).map(O=>(O.username||"").toLowerCase()));e.coauthorResults=(y.data||[]).filter(O=>!D.has((O.username||"").toLowerCase()))},()=>{e.coauthorResults=[]})},e.addCoauthor=(p,y)=>{y&&y.preventDefault(),!(!p||!p.username)&&t.post("/api/repo/"+e.repoId+"/coauthors",{username:p.username}).then(D=>{e.coauthors=D.data||[],e.coauthorResults=[],e.coauthorSearch="",e.coauthorError=""},D=>{let O=D&&D.data&&D.data.error||"unknown_error";e.coauthorError=O})},e.removeCoauthor=p=>{!p||!p.username||confirm("Remove co-author "+p.username+"?")&&t.delete("/api/repo/"+e.repoId+"/coauthors/"+encodeURIComponent(p.username)).then(y=>{e.coauthors=y.data||[]},y=>{let D=y&&y.data&&y.data.error||"unknown_error";e.coauthorError=D})},e.anonymizeRepo=p=>{if(e.sourceLoading){e.error="Wait for the source to finish loading before saving.";return}if(e.reconnectingSource&&!e.reconnectRepositoryId||ye())return;if(e.anonymize?.invalid||e.sourceUrlError){e.error="Please correct the highlighted fields before saving.";return}let y=p.currentTarget||p.target.closest?.("button")||p.target;y.disabled=!0;let D=parseGithubUrl(e.sourceUrl),O={repoId:e.repoId,terms:e.terms.trim().split(` +`).filter(U=>U),connection:e.githubConnection,fullName:`${D.owner}/${D.repo}`,repository:e.sourceUrl,reconnectRepositoryId:e.reconnectRepositoryId,options:e.options,source:e.source,conference:e.conference};e.details&&(O.options.pageSource=e.details.pageSource),te();let I=e.isUpdate?"/api/repo/"+e.repoId:"/api/repo/";t.post(I,O,{headers:{"Content-Type":"application/json"}}).then(()=>{_.clear(),window.location.href="/status/"+e.repoId},U=>{U.data&&(i("ERRORS."+U.data.error).then(L=>{e.error=L},console.error),Ee(U.data.error))}).finally(()=>{y.disabled=!1})},e.anonymizeGist=p=>{if(e.sourceLoading){e.error="Wait for the source to finish loading before saving.";return}if(ye())return;if(e.anonymize?.invalid||e.sourceUrlError){e.error="Please correct the highlighted fields before saving.";return}let y=p.currentTarget||p.target.closest?.("button")||p.target;y.disabled=!0;let D=parseGithubUrl(e.sourceUrl),O={gistId:e.gistId,terms:e.terms.trim().split(` +`).filter(U=>U),source:{gistId:D.gistId},options:e.options,conference:e.conference};te();let I=e.isUpdate?"/api/gist/"+e.gistId:"/api/gist/";t.post(I,O,{headers:{"Content-Type":"application/json"}}).then(()=>{_.clear(),window.location.href="/gist/"+e.gistId},U=>{U.data&&(i("ERRORS."+U.data.error).then(L=>{e.error=L},console.error),Ee(U.data.error))}).finally(()=>{y.disabled=!1})},e.anonymizePullRequest=p=>{if(e.sourceLoading){e.error="Wait for the source to finish loading before saving.";return}if(ye())return;if(e.anonymize?.invalid||e.sourceUrlError){e.error="Please correct the highlighted fields before saving.";return}let y=p.currentTarget||p.target.closest?.("button")||p.target;y.disabled=!0;let D=parseGithubUrl(e.sourceUrl),O={pullRequestId:e.pullRequestId,connection:e.githubConnection,terms:e.terms.trim().split(` +`).filter(U=>U),source:{repositoryFullName:`${D.owner}/${D.repo}`,pullRequestId:D.pullRequestId},options:e.options,conference:e.conference};te();let I=e.isUpdate?"/api/pr/"+e.pullRequestId:"/api/pr/";t.post(I,O,{headers:{"Content-Type":"application/json"}}).then(()=>{_.clear(),window.location.href="/pr/"+e.pullRequestId},U=>{U.data&&(i("ERRORS."+U.data.error).then(L=>{e.error=L},console.error),Ee(U.data.error))}).finally(()=>{y.disabled=!1})},e.watch("conference",()=>{Q()}),e.watch("terms",()=>{e.detectedType==="repo"&&_e(),e.detectedType==="pr"&&Se(),e.detectedType==="gist"&&F()}),e.watch("options.image",()=>{e.detectedType==="repo"&&_e(),e.detectedType==="pr"&&Se(),e.detectedType==="gist"&&F()}),e.watch("options.link",()=>{e.detectedType==="repo"&&_e(),e.detectedType==="pr"&&Se(),e.detectedType==="gist"&&F()}),e.watch("details",()=>{e.detectedType==="pr"&&Se(),e.detectedType==="gist"&&F()},!0)},pr=function(e,t,n,r,s,i){let a=ut();window.Prism?.hooks&&!window.Prism.redactionHook&&(window.Prism.hooks.add("complete",P=>el(P.element)),window.Prism.redactionHook=!0);let u=Zt();e.on("dark-mode",(P,G)=>{e.aceOption&&(G?e.aceOption.theme="nord_dark":e.aceOption.theme="chrome")});let m=0,w=!1;e.on("dispose",()=>{w=!0,m++,g&&g.resolve()}),e.files=[],e.isMac=/Mac|iPhone|iPad|iPod/.test(navigator.platform||navigator.userAgent),e.fileSearchQuery="",e.fileSearchResults=null,e.fileSearchLoading=!1,u(document,"keydown",function(P){if((P.metaKey||P.ctrlKey)&&P.key==="k"){P.preventDefault();var G=document.querySelector(".tree-search-input");G&&(G.focus(),G.select())}});var g=null;e.onFileSearchChange=function(){g&&(g.resolve(),g=null);let P=e.fileSearchQuery;if(!P||P.length<2){e.fileSearchResults=null,e.fileSearchLoading=!1;return}e.fileSearchLoading=!0;let G=i.defer();g=G,t.get(`/api/repo/${e.repoId}/files/search?q=${encodeURIComponent(P)}`,{timeout:G.promise}).then(function(J){if(!(w||g!==G)){g=null,e.fileSearchLoading=!1;var X={};e.files.forEach(function(F){X[(F.path||"")+"/"+F.name]=!0});for(var K=[],se={},ce=0;ce0&&e.files.push.apply(e.files,K);for(var Se=[],ze=0;ze0&&e.files.push.apply(e.files,Se),e.fileSearchResults=J.data}},function(){!w&&g===G&&(g=null,e.fileSearchLoading=!1,e.fileSearchResults=[])})};let k={yml:"yaml",txt:"text",py:"python",js:"javascript",ts:"typescript"},h=["license","txt"],E=["png","jpg","jpeg","gif","svg","ico","bmp","tiff","tif","webp","avif","heif","heic"],S=["wav","mp3","ogg","wma","flac","aac","m4a"],v=["mp4","avi","webm","mov","mpg","mpeg","mkv","flv","wmv","3gp","3g2","m4v","f4v","f4p","f4a","f4b"];e.on("routeUpdate",function(P,G){if(e.repoId!=r.repoId)return C();if((r.path||"")!=e.filePath){e.filePath=r.path||"",e.paths=e.filePath.split("/").filter(J=>J&&J.trim().length>0),ee();for(let J=0;J0?e.paths.slice(0,J).join("/"):"";e.files.some(se=>se.path===X)||e.getFiles(X)}}});function _(){if(e.paths[0]!="")return;let P=["readme.md","readme.txt","readme.org","readme.1st","readme"],G={};for(let X of e.files)X.name.toLowerCase().indexOf("readme")>-1&&(G[X.name.toLowerCase()]=X.name);let J=null;for(let X of P)if(G[X]){J=X;break}if(!J&&Object.keys(G).length>0&&(J=Object.keys(G)[0]),J){let X=n.url();X[X.length-1]!="/"&&(X+="/"),n.url(X+encodePathForUrl(G[J]))}}e.fileCounts=null,e.getFiles=function(P){let G=e.repoId;return t.get(`/api/repo/${e.repoId}/files/?path=${encodeURIComponent(P)}&v=${e.options.lastUpdateDate}`).then(function(J){if(w||G!==e.repoId)return[];let X=P||"";return e.files=e.files.filter(K=>K.path!==X),e.files.push(...J.data),J.data},function(J){if(w||G!==e.repoId)return[];e.type="error",e.content=cr(J),e.files=[]})};function N(){let P=e.repoId;t.get(`/api/repo/${e.repoId}/files/counts`).then(function(G){w||P!==e.repoId||(e.fileCounts=G.data)},function(){e.fileCounts={}})}function T(){return e.files.filter(P=>P.name==e.paths[e.paths.length-1]&&P.path==e.paths.slice(0,e.paths.length-1).join("/"))[0]}var V=null;e.on("dispose",function(){V&&a.interval.cancel(V)});function M(P){if(w)return;let G=e.repoId;t.get(`/api/repo/${e.repoId}/options`).then(J=>{if(!(w||G!==e.repoId)){if(e.options=J.data,e.options.url){window.location=e.options.url;return}P&&P(J.data)}},J=>{if(!(w||G!==e.repoId)){var X=J.data||{};if(X.error==="rate_limited"&&X.resetAt){let se=function(){var ce=Math.max(0,Math.ceil((e.rateLimitResetAt-Date.now())/1e3));if(ce<=0)e.rateLimitCountdown="",e.rateLimitResetAt=0,V&&(a.interval.cancel(V),V=null),M(P);else{var ue=Math.floor(ce/60),re=ce%60;e.rateLimitCountdown=ue>0?ue+"m "+re+"s":re+"s"}};var K=se;e.type="rate_limited",e.rateLimitResetAt=X.resetAt,V&&a.interval.cancel(V),se(),V=a.interval(se,1e3)}else X.error==="repository_not_ready"?(e.type="loading",a.timeout(function(){M(P)},3e3)):(e.type="error",e.content=cr(J))}})}e.toggleSource=function(){e.showSource=!e.showSource},e.toggleAllowScripts=function(){e.allowScripts=!e.allowScripts};function q(P){return k[P]?k[P]:P}function z(P){return P=="pdf"?"pdf":P=="html"||P=="htm"?"html-doc":P=="md"?"md":P=="org"?"org":P=="ipynb"?"IPython":h.indexOf(P)>-1?"text":E.indexOf(P)>-1?"image":v.indexOf(P)>-1?"media":S.indexOf(P)>-1?"audio":"code"}function ne(P,G){let J=m;if(!P){e.type="error",e.content="no_file_selected";return}let X=e.type;e.type="loading",e.content="loading";let K=G&&G.sha||"0";t.get(`/api/repo/${e.repoId}/file/${encodePathForUrl(P)}?v=`+K,{transformResponse:se=>se}).then(se=>{if(!(w||J!==m)){if(e.type=X,e.content=se.data,e.content==""&&(e.content=null),e.type=="md"&&(e.content=renderMD(se.data,n.url()+"/../"),e.type="html"),e.type=="org"){let ue=contentAbs2Relative(se.data);var ce=new Org.Parser().parse(ue).convert(Org.ConverterHTML,{headerOffset:1,exportFromLineNumber:!1,suppressSubScriptHandling:!0,suppressAutoLink:!1});e.content=DOMPurify.sanitize(ce.toString()),e.type="html"}e.type=="code"&&se.headers("content-type")=="application/octet-stream"&&(e.type="binary",e.content="binary"),a.timeout(()=>{Prism.highlightAll()},50)}},se=>{w||J!==m||(e.type="error",e.content=cr(se))})}function ee(){m++,e.content="",e.file=T();let P="0";e.file&&e.file.sha&&(P=e.file.sha),e.url=`/api/repo/${e.repoId}/file/${encodePathForUrl(e.filePath)}?v=${P}`;let G=e.filePath.substring(0,e.filePath.lastIndexOf("/")+1);e.fileBaseUrl=`/api/repo/${e.repoId}/file/${G?encodePathForUrl(G):""}`,e.showSource=!1,e.allowScripts=!1;let J=e.filePath.toLowerCase(),X=J.lastIndexOf(".");if(X>-1&&(J=J.substring(X+1)),e.aceOption={readOnly:!0,useWrapMode:!0,showGutter:!0,theme:"chrome",useSoftTab:!0,tabSize:2,fontSize:13,keyBinding:"vscode",fullLineSelection:!0,highlightActiveLine:!1,highlightGutterLine:!1,cursor:"hide",showInvisibles:!1,showIndentGuides:!0,showPrintMargin:!1,highlightSelectedWord:!1,enableBehaviours:!0,fadeFoldWidgets:!1,mode:q(J),onLoad:function(K){let se=ace.require("ace/range").Range,ce=null;function ue(ke,F){ce!==null&&(K.session.removeMarker(ce),ce=null),ke!=null&&(ce=K.session.addMarker(new se(ke,0,F,1),"highlighted-line","fullLine"))}function re(ke){let F=window.location.hash.match(/^#L(\d+)(?:-L(\d+))?/);if(!F){ue(null);return}let Z=parseInt(F[1])-1,Q=F[2]?parseInt(F[2])-1:Z;ue(Z,Q),ke&&a.timeout(()=>{K.scrollToLine(Z,!0,!0,function(){})},100)}re(!0);let _e=null;K.on("guttermousedown",function(ke){let F=ke.getDocumentPosition().row,Z=ke.domEvent&&ke.domEvent.shiftKey,Q=F,te=F;Z&&_e!==null?(Q=Math.min(_e,F),te=Math.max(_e,F)):_e=F;let ye=Q===te?`#L${Q+1}`:`#L${Q+1}-L${te+1}`,Ee=window.location.pathname+window.location.search+ye;window.history.replaceState(null,"",Ee),ue(Q,te),ke.stop()});let qe=u(window,"hashchange",()=>re(!1));K.setFontSize(e.aceOption.fontSize),K.setReadOnly(e.aceOption.readOnly),K.setKeyboardHandler(e.aceOption.keyBinding),K.setSelectionStyle(e.aceOption.fullLineSelection?"line":"text"),K.setOption("displayIndentGuides",!0),K.setHighlightActiveLine(e.aceOption.highlightActiveLine),e.aceOption.cursor=="hide"&&(K.renderer.$cursorLayer.element.style.display="none"),K.setHighlightGutterLine(e.aceOption.highlightGutterLine),K.setShowInvisibles(e.aceOption.showInvisibles),K.setDisplayIndentGuides(e.aceOption.showIndentGuides),K.renderer.setShowPrintMargin(e.aceOption.showPrintMargin),K.setHighlightSelectedWord(e.aceOption.highlightSelectedWord),K.session.setUseSoftTabs(e.aceOption.useSoftTab),K.session.setTabSize(e.aceOption.tabSize);let Me=window.matchMedia("(max-width: 991px)"),Pe=()=>K.session.setUseWrapMode(e.aceOption.useWrapMode&&Me.matches);Pe(),Me.addEventListener?.("change",Pe),K.setBehavioursEnabled(e.aceOption.enableBehaviours),K.setFadeFoldWidgets(e.aceOption.fadeFoldWidgets);let Se=[],ze=()=>{Se.forEach(Z=>K.session.removeMarker(Z)),Se=[];let ke=xa();if(!ke)return;K.session.getDocument().getAllLines().forEach((Z,Q)=>{for(let te of Z.matchAll(ke))Se.push(K.session.addMarker(new se(Q,te.index,Q,te.index+te[0].length),"ace_redaction","text"))})};ze(),K.session.on("change",()=>a.timeout(ze,0));let Ue=e.on("site-options",ze);return()=>{qe(),Ue(),Me.removeEventListener?.("change",Pe)}}},e.isDarkMode&&(e.aceOption.theme="nord_dark"),e.type=z(J),e.type=="pdf"){e.content="pdf";return}ne(e.filePath,e.file)}e.isSourceAccessError=()=>["repo_not_found","token_expired","github_app_access_required","github_app_reconnect_required","repo_saml_enforcement","repo_access_limited"].includes(e.content),e.retryContent=()=>C();function C(){m++,e.files=[],e.content=null,e.fileCounts=null,e.fileSearchQuery="",e.onFileSearchChange(),e.repoId=r.repoId,e.type="loading",e.filePath=r.path||"",e.paths=e.filePath.split("/");let P=e.repoId;M(function(G){N();var J=i.resolve();for(let X=0;X0?e.paths.slice(0,X).join("/"):"";J=J.then(function(){return e.getFiles(K)}).then(function(){if(e.type==="error")return i.reject("error")})}J.then(function(){w||P!==e.repoId||(e.files.length==1&&e.files[0].name==""?(e.files=[],e.type="empty"):(_(),ee()))})})}C()},ul=function(e,t,n,r,s){async function i(m){t.get(`/api/pr/${e.pullRequestId}/options`).then(w=>{if(e.options=w.data,e.options.url){window.location=e.options.url;return}m&&m(w.data)},w=>{e.type="error",e.content=w.data.error})}async function a(m){t.get(`/api/pr/${e.pullRequestId}/content`).then(w=>{e.details=w.data,e.tabState={active:w.data.diff?"diff":"comments"},m&&m(w.data)},w=>{e.type="error",e.content=w.data.error})}function u(){e.pullRequestId=r.pullRequestId,e.type="loading",i(m=>{a()})}u()},cl=function(e,t,n,r,s){async function i(m){t.get(`/api/gist/${e.gistId}/options`).then(w=>{if(e.options=w.data,e.options.url){window.location=e.options.url;return}m&&m(w.data)},w=>{e.type="error",e.content=w.data.error})}async function a(m){t.get(`/api/gist/${e.gistId}/content`).then(w=>{e.details=w.data;let g=w.data&&w.data.files&&w.data.files.length;e.tabState={active:g?"files":"comments"},m&&m(w.data)},w=>{e.type="error",e.content=w.data.error})}function u(){e.gistId=r.gistId,e.type="loading",i(()=>{a()})}u()},pl=function(e,t,n){e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.conferences=[],e.loading=!0,e.error="",e.search="";let r="conferences.filterPrefs",s={filters:{status:{ready:!0,expired:!1,removed:!1}},orderBy:"name"},i=loadFilterPrefs(r)||{};e.filters={status:Object.assign({},s.filters.status,i.filters&&i.filters.status||{})},e.orderBy=i.orderBy||s.orderBy,e.watch("orderBy",()=>{saveFilterPrefs(r,{filters:e.filters,orderBy:e.orderBy})}),e.watch("filters",()=>{saveFilterPrefs(r,{filters:e.filters,orderBy:e.orderBy})},!0),e.removeConference=function(a){if(!a.removing&&confirm(`Are you sure that you want to remove the conference ${a.name}? All the repositories linked to this conference will expire.`)){a.removing=!0;let u=Fe({title:`Removing ${a.name}...`,date:new Date,body:`The conference ${a.name} is going to be removed.`});e.addToast(u),t.delete(`/api/conferences/${a.conferenceID}`).then(()=>{u.title=`${a.name} is removed.`,u.body=`The conference ${a.name} is removed.`,e.loadConferences()}).catch(()=>{u.title="Unable to remove conference",u.body="Please try again. The conference has not been removed."}).finally(()=>{a.removing=!1})}},e.loadConferences=()=>(e.loading=!0,e.error="",t.get("/api/conferences/").then(a=>{e.conferences=a.data||[]},a=>{e.error="Unable to load your conferences. Please try again."}).finally(()=>{e.loading=!1})),e.loadConferences(),e.conferenceFilter=a=>{if(e.filters.status[a.status]==!1)return!1;let u=e.search.trim().toLowerCase();return!!(!u||(a.name||"").toLowerCase().includes(u)||(a.conferenceID||"").toLowerCase().includes(u))}},fr=function(e,t,n,r){e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.plans=[],e.editionMode=!1,e.saving=!1,e.error="";function s(){t.get("/api/conferences/"+r.conferenceId).then(g=>{e.options={...e.options,...g.data,billing:g.data.billing||{}},e.options.startDate=new Date(e.options.startDate),e.options.endDate=new Date(e.options.endDate)})}r.conferenceId&&(e.editionMode=!0,s());function i(){t.get("/api/conferences/plans").then(g=>{e.plans=g.data,e.plan=e.plans.filter(k=>k.id==e.options.plan.planID)[0]})}i();let a=new Date;a.setDate(1),a.setMonth(a.getMonth()+1);let u=new Date(a);u.setMonth(a.getMonth()+7,0),e.options={billing:{},startDate:a,endDate:u,plan:{planID:"free_conference"},options:{link:!0,image:!0,pdf:!0,notebook:!0,update:!0,page:!0}},e.plan=null,e.watch("options.plan.planID",()=>{e.plan=e.plans.filter(g=>g.id==e.options.plan.planID)[0]});function m(){e.conference.name.setValidity("required",!0),e.conference.conferenceID.setValidity("pattern",!0),e.conference.conferenceID.setValidity("required",!0),e.conference.conferenceID.setValidity("used",!0),e.conference.startDate.setValidity("required",!0),e.conference.startDate.setValidity("invalid",!0),e.conference.endDate.setValidity("required",!0),e.conference.endDate.setValidity("invalid",!0),e.conference.setValidity("error",!0)}function w(g){switch(g){case"conf_name_missing":e.conference.name.setValidity("required",!1);break;case"conf_id_missing":e.conference.conferenceID.setValidity("required",!1);break;case"conf_id_format":e.conference.conferenceID.setValidity("pattern",!1);break;case"conf_id_used":e.conference.conferenceID.setValidity("used",!1);break;case"conf_start_date_missing":e.conference.startDate.setValidity("required",!1);break;case"conf_end_date_missing":e.conference.endDate.setValidity("required",!1);break;case"conf_start_date_invalid":e.conference.startDate.setValidity("invalid",!1);break;case"conf_end_date_invalid":e.conference.endDate.setValidity("invalid",!1);break;default:e.conference.setValidity("error",!1);break}}e.submit=function(){if(e.saving)return;e.saving=!0,e.error="";let g=JSON.parse(JSON.stringify(e.options)),k=Fe({title:`Creating ${g.name}...`,date:new Date,body:`The conference ${g.conferenceID} is in creation.`});e.editionMode&&(k.title=`Updating ${g.name}...`,k.body=`The conference '${g.conferenceID}' is updating.`),e.addToast(k),m(),t.post("/api/conferences/"+(e.editionMode?g.conferenceID:""),g).then(()=>{e.editionMode?(k.title=`${g.name} updated`,k.body=`The conference '${g.conferenceID}' is updated.`):(k.title=`${g.name} created`,k.body=`The conference '${g.conferenceID}' is created.`),n.url("/conference/"+g.conferenceID)},h=>{w(h.data?.error),e.error="Unable to save the conference. Please correct any highlighted fields and try again.",e.removeToast(k)}).finally(()=>{e.saving=!1})}},fl=function(e,t,n,r){e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.conference=null,e.search="",e.filters={status:{ready:!0,expired:!1,removed:!1}},e.orderBy="-anonymizeDate",e.repoFiler=i=>{if(e.filters.status[i.status]==!1)return!1;let a=e.search.trim().toLowerCase();return!!(!a||(i.source?.fullName||"").toLowerCase().includes(a)||(i.repoId||"").toLowerCase().includes(a))};function s(){t.get("/api/conferences/"+r.conferenceId).then(i=>{e.conference=i.data})}s()},ml=function(e,t){e.notificationEmail="",e.emailSaved=!1,e.saveNotificationEmail=async()=>{e.busy=!0,e.emailSaved=!1,e.connectionError="";try{let n=await t.post("/github/connections/email",{email:e.notificationEmail},{headers:{"X-CSRF-Token":e.connections.csrf}});e.notificationEmail=n.data.notificationEmail,e.user&&(e.user.notificationEmail=n.data.notificationEmail),e.emailSaved=!0}catch(n){e.connectionError=n.data?.error||"Unable to save email address."}finally{e.busy=!1}},e.connections=null,e.connectionError="",e.busy=!1,e.loadConnections=()=>t.get("/github/connections").then(n=>{e.connections=n.data,e.notificationEmail=n.data.notificationEmail||""}).catch(n=>{e.connectionError=n.data?.error||"Unable to load connections."}),e.changeConnection=async(n,r,s)=>{e.busy=!0,e.connectionError="";try{let i=await t.post("/github/connections/migrate",{type:n.type,id:n.id,connection:r,preview:s},{headers:{"X-CSRF-Token":e.connections.csrf}});s?n.eligible=i.data.eligible:await e.loadConnections()}catch(i){e.connectionError=i.data?.error||"Unable to change connection."}finally{e.busy=!1}},e.disconnectOAuth=async()=>{e.busy=!0;try{await t.post("/github/connections/disconnect-oauth",{},{headers:{"X-CSRF-Token":e.connections.csrf}}),await e.loadConnections()}catch(n){e.connectionError=n.data?.error||"Unable to disconnect OAuth."}finally{e.busy=!1}},e.loadConnections()},hl=function(e,t){e.accountRecovery=!1,t.get("/github/account-recovery").then(n=>{e.accountRecovery=n.data.required}).catch(()=>{})};var vl=function(e,t,n){let r=ut(),s=Zt();e.Math=Math,e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.repositories=[],e.total=-1,e.totalPage=0,e.statusCounts=[],e.totalSize=0,e.selected={},e.allSelected=!1;let i=S=>{if(S.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement?.tagName)){S.preventDefault();let v=document.querySelector('.admin-filter-toolbar input[type="search"]');v&&v.focus()}};s(document,"keydown",i),e.on("dispose",()=>document.removeEventListener("keydown",i)),e.clearFilter=S=>{S==="dateRange"?(e.query.dateFrom="",e.query.dateTo=""):e.query[S]="",e.query.page=1},e.chips=[];let a=()=>{let S=[];e.query.owner&&S.push({key:"owner",label:"Owner",value:e.query.owner}),e.query.conference&&S.push({key:"conference",label:"Conference",value:e.query.conference}),e.chips=S};e.showStatusMessage=S=>{let v=S.statusMessage||"(no message)";window.prompt(`Status message for ${S.repoId} (${S.status}):`,v)},e.fetchGithubInfo=S=>{let v=window.open("","_blank");v&&v.document.write("
Loading GitHub info for "+S.repoId+"...
"),t.get("/api/admin/repos/"+S.repoId+"/github").then(_=>{v&&(v.document.open(),v.document.write('
'+JSON.stringify(_.data,null,2).replace(/[<>]/g,N=>N==="<"?"<":">")+"
"),v.document.close())},_=>{let N=_&&_.data?JSON.stringify(_.data,null,2):String(_);v&&(v.document.body.innerHTML='
'+N+"
")})},e.statusCountFor=S=>{let v=(e.statusCounts||[]).find(_=>_._id===S);return v?v.count:0},e.statusStorageFor=S=>{let v=(e.statusCounts||[]).find(_=>_._id===S);return v?v.storage:0},e.isErrorsOnly=()=>e.query&&e.query.error&&!e.query.ready&&!e.query.preparing&&!e.query.expired&&!e.query.removed,e.toggleErrorsOnly=()=>{e.isErrorsOnly()?Object.assign(e.query,{ready:!1,preparing:!0,expired:!1,removed:!1,error:!0}):Object.assign(e.query,{ready:!1,preparing:!1,expired:!1,removed:!1,error:!0}),e.query.page=1},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=S=>{e.query.sort===S?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=S,e.query.direction="desc"),e.query.page=1},e.sortIcon=S=>e.query.sort===S?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let u="admin.repos.filterPrefs",m={page:1,limit:25,sort:"lastView",direction:"desc",search:"",owner:"",conference:"",dateFrom:"",dateTo:"",ready:!1,expired:!1,removed:!1,error:!0,preparing:!0},w=loadFilterPrefs(u)||{};e.query=Object.assign({},m,w,{page:1,search:""});let g=n.search();g.owner&&(e.query.owner=g.owner),g.conference&&(e.query.conference=g.conference),g.search&&(e.query.search=g.search);let k="admin.repos.presets";e.presets=JSON.parse(localStorage.getItem(k)||"[]"),e.savePreset=()=>{let S=window.prompt("Preset name:");if(!S)return;let v=Object.assign({},e.query);delete v.page,e.presets=(e.presets||[]).filter(_=>_.name!==S),e.presets.push({name:S,query:v}),localStorage.setItem(k,JSON.stringify(e.presets))},e.applyPreset=S=>{Object.assign(e.query,S.query,{page:1})},e.deletePreset=S=>{e.presets=(e.presets||[]).filter(v=>v.name!==S.name),localStorage.setItem(k,JSON.stringify(e.presets))},e.selectAllOnPage=()=>{e.allSelected=!e.allSelected,e.repositories.forEach(S=>{e.selected[S.repoId]=e.allSelected})},e.selectedCount=()=>Object.values(e.selected||{}).filter(Boolean).length,e.selectedRepos=()=>e.repositories.filter(S=>e.selected[S.repoId]),e.bulkRefresh=()=>{let S=e.selectedRepos();S.length&&confirm(`Force refresh ${S.length} repositories?`)&&S.forEach(v=>e.updateRepository(v))},e.bulkRemoveCache=()=>{let S=e.selectedRepos();S.length&&confirm(`Purge cache for ${S.length} repositories?`)&&S.forEach(v=>e.removeCache(v))},e.clearSelection=()=>{e.selected={},e.allSelected=!1},e.exportCsv=()=>{let S=new URLSearchParams(Object.entries(e.query).filter(([,v])=>v!==""&&v!==!1&&v!=null));S.set("format","csv"),S.set("limit","10000"),window.open("/api/admin/repos?"+S.toString(),"_blank")},e.removeCache=S=>{confirm("Remove cached files for "+S.repoId+"?")&&t.delete("/api/admin/repos/"+S.repoId).then(()=>h(),v=>console.error(v))},e.removeRepository=S=>{confirm("Remove repository "+S.repoId+"?")&&t.delete("/api/repo/"+S.repoId+"/").then(()=>h(),v=>console.error(v))},e.updateRepository=S=>{let v=Fe({title:`Refreshing ${S.repoId}...`,date:new Date,body:`The repository ${S.repoId} is going to be refreshed.`});e.toasts.push(v),t.post(`/api/repo/${S.repoId}/refresh`).then(_=>{_.data.status=="ready"?v.title=`${S.repoId} is refreshed.`:v.title=`Refreshing of ${S.repoId}.`},_=>{v.title=`Error during the refresh of ${S.repoId}.`,v.body=_.body})},e.fetchError=null;function h(){e.fetchError=null,t.get("/api/admin/repos",{params:e.query}).then(S=>{e.total=S.data.total,e.totalPage=Math.ceil(S.data.total/e.query.limit),e.repositories=S.data.results,e.statusCounts=S.data.statusCounts||[],e.totalSize=S.data.totalSize||0,e.allSelected=!1},S=>{e.fetchError=S&&S.data&&S.data.error||"Failed to load repositories",console.error(S)})}h();let E=null;e.watch("query",()=>{r.timeout.cancel(E),E=r.timeout(h,500);let{page:S,search:v,..._}=e.query;saveFilterPrefs(u,_),a()},!0),a()},yl=function(e,t,n){let r=ut(),s=Zt();e.Math=Math,e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.users=[],e.total=-1,e.totalPage=0,e.statusCounts=[],e.selected={},e.allSelected=!1;let i=h=>{if(h.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement?.tagName)){h.preventDefault();let E=document.querySelector('.admin-filter-toolbar input[type="search"]');E&&E.focus()}};s(document,"keydown",i),e.on("dispose",()=>document.removeEventListener("keydown",i)),e.clearFilter=h=>{h==="dateRange"?(e.query.dateFrom="",e.query.dateTo=""):e.query[h]="",e.query.page=1},e.chips=[];let a=()=>{let h=[];e.query.role&&h.push({key:"role",label:"Role",value:e.query.role}),e.chips=h};e.statusCountFor=h=>{let E=(e.statusCounts||[]).find(S=>S._id===h);return E?E.count:0},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=h=>{e.query.sort===h?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=h,e.query.direction="desc"),e.query.page=1},e.sortIcon=h=>e.query.sort===h?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let u="admin.users.filterPrefs",m={page:1,limit:25,sort:"username",direction:"asc",search:"",status:"",role:"",dateFrom:"",dateTo:""},w=loadFilterPrefs(u)||{};e.query=Object.assign({},m,w,{page:1,search:""}),e.selectAllOnPage=()=>{e.allSelected=!e.allSelected,e.users.forEach(h=>{e.selected[h.username]=e.allSelected})},e.selectedCount=()=>Object.values(e.selected||{}).filter(Boolean).length,e.selectedUsers=()=>e.users.filter(h=>e.selected[h.username]),e.banUser=h=>{confirm(`Ban user ${h.username}?`)&&t.post(`/api/admin/users/${h.username}/ban`).then(g,E=>console.error(E))},e.activateUser=h=>{t.post(`/api/admin/users/${h.username}/activate`).then(g,E=>console.error(E))},e.bulkBan=()=>{let h=e.selectedUsers();h.length&&confirm(`Ban ${h.length} users?`)&&h.forEach(E=>e.banUser(E))},e.exportCsv=()=>{let h=new URLSearchParams(Object.entries(e.query).filter(([,E])=>E!==""&&E!==!1&&E!=null));h.set("format","csv"),h.set("limit","10000"),window.open("/api/admin/users?"+h.toString(),"_blank")},e.fetchError=null;function g(){e.fetchError=null,t.get("/api/admin/users",{params:e.query}).then(h=>{e.total=h.data.total,e.totalPage=Math.ceil(h.data.total/e.query.limit),e.users=h.data.results,e.statusCounts=h.data.statusCounts||[],e.allSelected=!1},h=>{e.fetchError=h&&h.data&&h.data.error||"Failed to load users",console.error(h)})}g();let k=null;e.watch("query",()=>{r.timeout.cancel(k),k=r.timeout(g,500);let{page:h,search:E,...S}=e.query;saveFilterPrefs(u,S),a()},!0),a()},gl=function(e,t,n,r){let s=ut();e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.userInfo,e.repositories=[],e.search="",e.selected={},e.allSelected=!1;let i="admin.user.filterPrefs",a={filters:{status:{ready:!0,expired:!0,removed:!0,error:!0,preparing:!0}},sort:"anonymizeDate",direction:"desc"},u=loadFilterPrefs(i)||{};e.filters={status:Object.assign({},a.filters.status,u.filters&&u.filters.status||{})},e.query={sort:u.sort||a.sort,direction:u.direction||a.direction},e.orderBy=(e.query.direction==="asc"?"":"-")+e.query.sort,e.sortBy=h=>{e.query.sort===h?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=h,e.query.direction="desc"),e.orderBy=(e.query.direction==="asc"?"":"-")+e.query.sort},e.sortIcon=h=>e.query.sort===h?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"",e.watch("query",()=>{saveFilterPrefs(i,{filters:e.filters,sort:e.query.sort,direction:e.query.direction})},!0),e.watch("filters",()=>{saveFilterPrefs(i,{filters:e.filters,sort:e.query.sort,direction:e.query.direction})},!0),e.statusCountFor=h=>(e.repositories||[]).filter(E=>E.status===h).length,e.repoFiler=h=>e.filters.status[h.status]==!1?!1:!!(e.search.trim().length==0||h.source.fullName.indexOf(e.search)>-1||h.repoId.indexOf(e.search)>-1||h.statusMessage&&h.statusMessage.indexOf(e.search)>-1||h.conference&&h.conference.indexOf(e.search)>-1),e.selectAllOnPage=()=>{e.allSelected=!e.allSelected,(e.filteredRepositories||e.repositories).forEach(h=>{e.selected[h.repoId]=e.allSelected})},e.selectedCount=()=>Object.values(e.selected||{}).filter(Boolean).length,e.selectedRepos=()=>e.repositories.filter(h=>e.selected[h.repoId]),e.bulkRefresh=()=>{let h=e.selectedRepos();h.length&&confirm(`Force refresh ${h.length} repositories?`)&&h.forEach(E=>e.updateRepository(E))},e.bulkRemoveCache=()=>{let h=e.selectedRepos();h.length&&confirm(`Purge cache for ${h.length} repositories?`)&&h.forEach(E=>e.removeCache(E))},e.clearSelection=()=>{e.selected={},e.allSelected=!1},e.exportCsv=()=>{let h=e.filteredRepositories||e.repositories,S=["repoId","status","statusMessage","pageView","anonymizeDate","source.fullName","conference","size.storage"].join(","),v=h.map(T=>[T.repoId,T.status,T.statusMessage||"",T.pageView||0,T.anonymizeDate||"",T.source&&T.source.fullName||"",T.conference||"",T.size&&T.size.storage||0].map(V=>{let M=String(V??"");return/[",\n\r]/.test(M)?'"'+M.replace(/"/g,'""')+'"':M}).join(",")),_=new Blob([S+` +`+v.join(` +`)],{type:"text/csv"}),N=document.createElement("a");N.href=URL.createObjectURL(_),N.download=r.username+"-repositories.csv",N.click()},e.showStatusMessage=h=>{let E=h.statusMessage||"(no message)";window.prompt(`Status message for ${h.repoId} (${h.status}):`,E)},e.fetchGithubInfo=h=>{let E=window.open("","_blank");E&&E.document.write("
Loading GitHub info for "+h.repoId+"...
"),t.get("/api/admin/repos/"+h.repoId+"/github").then(S=>{E&&(E.document.open(),E.document.write('
'+JSON.stringify(S.data,null,2).replace(/[<>]/g,v=>v==="<"?"<":">")+"
"),E.document.close())},S=>{let v=S&&S.data?JSON.stringify(S.data,null,2):String(S);E&&(E.document.body.innerHTML='
'+v+"
")})};function m(h){t.get("/api/admin/users/"+h+"/repos",{}).then(E=>{e.repositories=E.data},E=>{console.error(E)})}function w(h){t.get("/api/admin/users/"+h,{}).then(E=>{e.userInfo=E.data},E=>{console.error(E)})}w(r.username),m(r.username),e.banUser=()=>{confirm(`Ban user ${r.username}?`)&&t.post(`/api/admin/users/${r.username}/ban`).then(()=>w(r.username),h=>console.error(h))},e.activateUser=()=>{t.post(`/api/admin/users/${r.username}/activate`).then(()=>w(r.username),h=>console.error(h))},e.promoteUser=()=>{confirm(`Promote ${r.username} to admin?`)&&t.post(`/api/admin/users/${r.username}/promote`).then(()=>w(r.username),h=>console.error(h))},e.demoteUser=()=>{confirm(`Remove admin privileges from ${r.username}?`)&&t.post(`/api/admin/users/${r.username}/demote`).then(()=>w(r.username),h=>console.error(h))},e.tokens=[],e.tokenForm={name:"",plaintext:null};function g(){t.get("/api/admin/tokens").then(h=>{e.tokens=h.data||[]},h=>{h.status!==401&&h.status!==403&&console.error(h)})}g(),e.createToken=()=>{e.tokenForm.name&&t.post("/api/admin/tokens",{name:e.tokenForm.name}).then(h=>{e.tokenForm.plaintext=h.data.token,e.tokenForm.name="",g()},h=>console.error(h))},e.revokeToken=h=>{confirm(`Revoke token "${h.name}"?`)&&t.delete("/api/admin/tokens/"+h.id).then(()=>g(),E=>console.error(E))},e.removeCache=h=>{confirm("Remove cached files for "+h.repoId+"?")&&t.delete("/api/admin/repos/"+h.repoId).then(()=>m(r.username),E=>console.error(E))},e.removeRepository=h=>{confirm("Remove repository "+h.repoId+"?")&&t.delete("/api/repo/"+h.repoId+"/").then(()=>m(r.username),E=>console.error(E))},e.updateRepository=h=>{let E=Fe({title:`Refreshing ${h.repoId}...`,date:new Date,body:`The repository ${h.repoId} is going to be refreshed.`});e.toasts.push(E),t.post(`/api/repo/${h.repoId}/refresh`).then(S=>{S.data.status=="ready"?E.title=`${h.repoId} is refreshed.`:E.title=`Refreshing of ${h.repoId}.`},S=>{E.title=`Error during the refresh of ${h.repoId}.`,E.body=S.body})},e.getGitHubRepositories=h=>{t.get(`/api/user/${e.userInfo.username}/all_repositories`,{params:{force:"1"}}).then(E=>{e.userInfo.repositories=E.data})};let k=null;e.watch("query",()=>{s.timeout.cancel(k),k=s.timeout(()=>{m(r.username)},500)},!0)},bl=function(e,t,n){let r=ut(),s=Zt();e.Math=Math,e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.conferences=[],e.total=-1,e.totalPage=0,e.statusCounts=[];let i=S=>{if(S.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement?.tagName)){S.preventDefault();let v=document.querySelector('.admin-filter-toolbar input[type="search"]');v&&v.focus()}};s(document,"keydown",i),e.on("dispose",()=>document.removeEventListener("keydown",i)),e.clearFilter=S=>{S==="dateRange"?(e.query.dateFrom="",e.query.dateTo=""):e.query[S]="",e.query.page=1},e.chips=[];let a=()=>{let S=[];(e.query.dateFrom||e.query.dateTo)&&S.push({key:"dateRange",label:"Date",value:(e.query.dateFrom||"\u2026")+" \u2013 "+(e.query.dateTo||"\u2026")}),e.chips=S};e.statusCountFor=S=>{let v=(e.statusCounts||[]).find(_=>_._id===S);return v?v.count:0},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=S=>{e.query.sort===S?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=S,e.query.direction="desc"),e.query.page=1},e.sortIcon=S=>e.query.sort===S?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let u="admin.conferences.filterPrefs",m={page:1,limit:25,sort:"name",direction:"asc",search:"",dateFrom:"",dateTo:"",ready:!1,expired:!1,removed:!1,error:!0,preparing:!0},w=loadFilterPrefs(u)||{};e.query=Object.assign({},m,w,{page:1,search:""});let g=n.search();g.search&&(e.query.search=g.search);let k="admin.conferences.presets";e.presets=JSON.parse(localStorage.getItem(k)||"[]"),e.savePreset=()=>{let S=window.prompt("Preset name:");if(!S)return;let v=Object.assign({},e.query);delete v.page,e.presets=(e.presets||[]).filter(_=>_.name!==S),e.presets.push({name:S,query:v}),localStorage.setItem(k,JSON.stringify(e.presets))},e.applyPreset=S=>{Object.assign(e.query,S.query,{page:1})},e.deletePreset=S=>{e.presets=(e.presets||[]).filter(v=>v.name!==S.name),localStorage.setItem(k,JSON.stringify(e.presets))},e.removeConference=S=>{confirm("Remove conference "+S.conferenceID+"?")&&t.delete("/api/admin/conferences/"+S.conferenceID).then(()=>h(),v=>console.error(v))},e.exportCsv=()=>{let S=new URLSearchParams(Object.entries(e.query).filter(([,v])=>v!==""&&v!==!1&&v!=null));S.set("format","csv"),S.set("limit","10000"),window.open("/api/admin/conferences?"+S.toString(),"_blank")},e.fetchError=null;function h(){e.fetchError=null,t.get("/api/admin/conferences",{params:e.query}).then(S=>{e.total=S.data.total,e.totalPage=Math.ceil(S.data.total/e.query.limit),e.conferences=S.data.results,e.statusCounts=S.data.statusCounts||[]},S=>{e.fetchError=S&&S.data&&S.data.error||"Failed to load conferences",console.error(S)})}h();let E=null;e.watch("query",()=>{r.timeout.cancel(E),E=r.timeout(h,500);let{page:S,search:v,..._}=e.query;saveFilterPrefs(u,_),a()},!0),a()},wl=function(e,t,n,r,s){let i=ut();e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.queueList=[],e.jobs=[],e.selectedQueue="download",e.selectedStats=null,e.range="1h",e.allStates=["active","waiting","delayed","failed","completed"],e.stateFilter={active:!0,waiting:!0,delayed:!0,failed:!0,completed:!0},e.query={search:"",autoRefresh:!0},e.filteredJobs=()=>(e.jobs||[]).filter(v=>e.stateFilter[v._state]),e.jobProgressPct=v=>v&&v.progress&&typeof v.progress=="object"&&typeof v.progress.percent=="number"?Math.max(0,Math.min(100,Math.round(v.progress.percent))):typeof v.progress=="number"?Math.max(0,Math.min(100,Math.round(v.progress))):null,e.jobDuration=v=>{if(!v.processedOn)return"-";let N=(v.finishedOn||Date.now())-v.processedOn;return N<1e3?N+"ms":(N/1e3).toFixed(1)+"s"},e.metricsPoints=[],e.selectQueue=v=>{e.selectedQueue=v,a(),u()},e.setRange=v=>{e.range=v,u()};function a(){let v={queue:e.selectedQueue,search:e.query.search};t.get("/api/admin/queues",{params:v}).then(_=>{e.queueList=_.data.queues||[],e.jobs=_.data.jobs||[],e.selectedStats=e.queueList.find(N=>N.key===e.selectedQueue)||e.queueList[0]||null},_=>console.error(_))}function u(){t.get("/api/admin/queues/metrics",{params:{queue:e.selectedQueue,range:e.range}}).then(v=>{e.metricsPoints=v.data.points||[],s(h,0)},v=>console.error(v))}a(),u();let m=r(()=>{e.query.autoRefresh&&(a(),u())},15e3);e.on("dispose",()=>r.cancel(m)),e.refreshNow=function(){a(),u()};function w(v){let _=v&&v.data&&(v.data.message||v.data.error)||"Request failed";e.actionError=_,s(()=>{e.actionError=null},5e3),console.error(v)}e.actionError=null,e.removeJob=v=>{t.delete(`/api/admin/queue/${e.selectedQueue}/${v.id}`).then(a,w)},e.retryJob=v=>{t.post(`/api/admin/queue/${e.selectedQueue}/${v.id}`).then(a,w)},e.retryFailed=()=>{confirm(`Retry all failed jobs in ${e.selectedQueue}?`)&&t.post(`/api/admin/queue/${e.selectedQueue}/retry-failed`).then(a,v=>console.error(v))},e.drainSelected=()=>{confirm(`Drain the ${e.selectedQueue} queue?`)&&t.post(`/api/admin/queue/${e.selectedQueue}/drain`).then(a,v=>console.error(v))},e.togglePause=()=>{let v=e.selectedStats&&e.selectedStats.paused?"resume":"pause";t.post(`/api/admin/queue/${e.selectedQueue}/${v}`).then(a,_=>console.error(_))},e.emptyQueue=()=>{confirm(`Empty the ${e.selectedQueue} queue? This removes ALL jobs.`)&&t.post(`/api/admin/queue/${e.selectedQueue}/empty`).then(a,v=>console.error(v))},e.pauseAll=()=>{confirm("Pause all queues?")&&t.post("/api/admin/queues/pause-all").then(a,v=>console.error(v))};let g=null;e.watch("query.search",()=>{i.timeout.cancel(g),g=i.timeout(a,350)}),e.expanded={},e.toggleJob=v=>{e.expanded[v.id]=!e.expanded[v.id]},e.humanTime=v=>{if(!v)return"";let _=new Date(v);return _.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})+" "+_.toLocaleDateString([],{month:"short",day:"numeric"})},e.delayCountdown=v=>{if(!v)return"";var _=Math.max(0,Math.ceil((v-Date.now())/1e3));if(_<=0)return"resuming soon";var N=Math.floor(_/60),T=_%60;return"in "+(N>0?N+"m "+T+"s":T+"s")};function k(v){if(v<=0)return{ticks:[0],niceMax:1};let _=Math.pow(10,Math.floor(Math.log10(v))),N=_;v/N<2?N=_/2:v/N>5&&(N=_*2);let T=Math.ceil(v/N)*N,V=[];for(let M=0;M<=T;M+=N)V.push(M);return{ticks:V,niceMax:T}}function h(){var v=document.getElementById("q-throughput-chart");if(!v)return;var _=v.getContext("2d"),N=window.devicePixelRatio||1,T=v.parentElement.getBoundingClientRect(),V=44,M=50,q=20,z=T.width-40,ne=180,ee=z-V-M,C=ne-q;v.width=z*N,v.height=ne*N,v.style.width=z+"px",v.style.height=ne+"px",_.setTransform(N,0,0,N,0,0);var P=document.body.classList.contains("dark-mode"),G="#8A857C",J=P?"rgba(255,255,255,0.06)":"rgba(0,0,0,0.06)",X=P?"#A7B2FF":"#3B4AD6",K=P?"rgba(167,178,255,0.12)":"rgba(59,74,214,0.08)",se=P?"#F08A82":"#B42318",ce=P?"rgba(240,138,130,0.08)":"rgba(180,35,24,0.06)",ue=P?"#F5C842":"#B8860B",re=e.metricsPoints||[];if(re.length===0){_.fillStyle=G,_.font="12px monospace",_.textAlign="center",_.fillText("No metrics data yet",z/2,ne/2),E=null;return}var _e=re.map(function(L){return L.completed}),qe=re.map(function(L){return L.failed}),Me=re.map(function(L){return L.avgMs}),Pe=re.length,Se=ee/(Pe-1||1),ze=Math.max(1,Math.max.apply(null,_e),Math.max.apply(null,qe)),Ue=k(ze),ke=Math.max.apply(null,Me),F=ke>0?k(ke):{ticks:[0],niceMax:1},Z=function(L){return C-L/Ue.niceMax*(C-10)},Q=function(L){return C-L/F.niceMax*(C-10)},te=function(L){return V+L*Se};_.textAlign="right",_.textBaseline="middle",_.font="10px monospace",Ue.ticks.forEach(function(L){var H=Z(L);_.strokeStyle=J,_.lineWidth=1,_.beginPath(),_.moveTo(V,H),_.lineTo(z-M,H),_.stroke(),_.fillStyle=G,_.fillText(L>=1e3?(L/1e3).toFixed(1)+"k":String(L),V-6,H)}),ke>0&&(_.textAlign="left",F.ticks.forEach(function(L){var H=Q(L);_.fillStyle=ue,_.fillText(L>=1e3?(L/1e3).toFixed(1)+"s":L+"ms",z-M+6,H)}));var ye=Date.now(),Ee=Math.min(6,Pe);_.textAlign="center",_.textBaseline="top";for(var p=0;p0&&(_.beginPath(),Me.forEach(function(L,H){var Y=te(H),B=Q(L);if(H===0)_.moveTo(Y,B);else{var le=(te(H-1)+Y)/2;_.bezierCurveTo(le,Q(Me[H-1]),le,B,Y,B)}}),_.strokeStyle=ue,_.lineWidth=1,_.setLineDash([4,3]),_.stroke(),_.setLineDash([])),E={pts:re,maxLen:Pe,marginLeft:V,step:Se,totalW:z,toX:te}}var E=null;function S(){var v=document.getElementById("q-throughput-chart");if(!(!v||v._tipBound)){v._tipBound=!0;var _=document.getElementById("q-chart-tooltip"),N=document.getElementById("q-chart-crosshair");v.addEventListener("mousemove",function(T){if(!(!E||!_||!N)){var V=E,M=v.getBoundingClientRect(),q=T.clientX-M.left,z=Math.round((q-V.marginLeft)/V.step);if(z<0||z>=V.maxLen){_.style.display="none",N.style.display="none";return}var ne=V.pts[z],ee=Date.now(),C=Math.round((ee-ne.ts)/6e4),P;if(C<=0)P="now";else if(C<60)P=C+"m ago";else if(C<1440){var G=Math.floor(C/60),J=C%60;P=G+"h"+(J?" "+J+"m":"")+" ago"}else P=Math.round(C/1440)+"d ago";var X='
'+P+'
● completed: '+ne.completed+'/min
● failed: '+ne.failed+"/min
";if(ne.avgMs>0){var K=ne.avgMs>=1e3?(ne.avgMs/1e3).toFixed(1)+"s":ne.avgMs+"ms";X+='
● avg time: '+K+"
"}_.innerHTML=X;var se=V.toX(z),ce=_.offsetWidth,ue=se+10;ue+ce>V.totalW&&(ue=se-ce-10),_.style.display="block",_.style.left=ue+"px",_.style.top="8px",N.style.display="block",N.style.left=se+"px"}}),v.addEventListener("mouseleave",function(){_&&(_.style.display="none"),N&&(N.style.display="none")})}}e.watch("metricsPoints",function(){s(S,50)})},kl=function(e,t,n,r){let s=ut();e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null&&n.url("/"),e.entries=[],e.visible=[],e.available=!0,e.cap=1e3,e.total=0,e.pageSize=250,e.expanded={},e.detailTab={},e.copyHint="",e.parsedFilterCount=0,e.stats={last24h:0,prev24h:0,delta:0,severity:{error:0,warn:0,info:0},unique:{error:0,warn:0,info:0},buckets:[],dropped:0},e.query={search:"",bucket:"",sort:"recent",group:"code",autoRefresh:!0},e.relTime=N=>{if(!N)return"";let T=new Date(N).getTime();if(isNaN(T))return N;let V=Math.max(0,Date.now()-T),M=Math.floor(V/1e3);if(M<5)return"just now";if(M<60)return`${M}s ago`;let q=Math.floor(M/60);if(q<60)return`${q}m ago`;let z=Math.floor(q/60);if(z<24)return`${z}h ago`;let ne=Math.floor(z/24);return ne<7?`${ne}d ago`:new Date(N).toLocaleDateString()},e.absTime=N=>{if(!N)return"";let T=new Date(N);return isNaN(T.getTime())?N:T.toLocaleString()},e.absTimeShort=N=>{if(!N)return"";let T=new Date(N);return isNaN(T.getTime())?N:T.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})};let i=/^[a-zA-Z][a-zA-Z0-9]*(?:_[a-zA-Z0-9]+)+$/;function a(N,T){let V=N&&(N.httpStatus||N.status)||null;if(typeof V=="number"){if(V>=500)return"error";if(V===401||V===403||V===404)return"info";if(V>=400)return"warn"}return T==="error"?"error":T==="warn"?"warn":"info"}function u(N){let T=(N.raw||[]).find(z=>z&&typeof z=="object"&&!Array.isArray(z));if(T){T.message&&i.test(T.message)?(N.displayMessage=T.message,N.displayContext=N.message):T.code&&i.test(String(T.code))?(N.displayMessage=String(T.code),N.displayContext=N.message):T.name&&T.name!=="AnonymousError"&&T.name!=="Error"?(N.displayMessage=T.name,N.displayContext=T.message||N.message):N.displayMessage=N.message,N._status=T.httpStatus||T.status||null,N._url=T.url||null,N._method=T.method||null,N._repoId=T.repoId||T.detail||null,N._detail=T.detail&&T.detail!==N._repoId?T.detail:null;let z=typeof T.stack=="string"?T.stack:null;for(var V=[T.cause,T.err].filter(Boolean),M=0;!z&&M{C==null||C===""||V.push([ee,C])};M("name",T&&T.name),M("code",N.displayMessage||T&&T.message),N._bucket&&M("kind",N._bucket),M("httpStatus",T&&T.httpStatus),T&&T.status&&!T.httpStatus&&M("status",T.status),M("module",N.module);let q=T&&T.detail;if(typeof q=="string"){let ee=q.trim();if(ee[0]==="{"||ee[0]==="[")try{q=JSON.parse(q)}catch{}}if(M("detail",q),M("repoId",T&&T.repoId),M("filePath",T&&T.filePath),M("upstreamStatus",T&&T.upstreamStatus),M("upstreamBody",T&&T.upstreamBody),M("url",N._url),M("err",T&&T.err),M("cause",T&&!T.err&&T.cause),M("ts",N.ts),!V.length)return JSON.stringify(N,null,2);let z=V.reduce((ee,C)=>Math.max(ee,C[0].length),0),ne=["{"];return V.forEach(([ee,C],P)=>{let J=` ${`"${ee}":`.padEnd(z+3," ")} `,X=Pue===0?ce:se+ce).join(` +`)}else typeof C=="number"||typeof C=="boolean"?K=String(C):K=JSON.stringify(C);ne.push(`${J}${K}${X}`)}),ne.push("}"),ne.join(` +`)}function w(N){let T=[],V="",M=/(\w+):(>=|<=|!=|>|<|=)?([^\s]+)/g,q=0,z;for(;z=M.exec(N);)V+=N.slice(q,z.index),q=M.lastIndex,T.push({key:z[1],op:z[2]||"=",val:z[3]});return V+=N.slice(q),{filters:T,free:V.trim().toLowerCase()}}function g(N,T){for(let V of T.filters){let M=(z,ne,ee)=>{let C=parseFloat(z),P=parseFloat(ne);return ee==="="?String(z)===String(ne):ee==="!="?String(z)!==String(ne):ee===">="?C>=P:ee==="<="?C<=P:ee===">"?C>P:ee==="<"?CT&&q._bucket!==T?!1:g(q,N)),M=e.query.group;if(M){let q=ee=>M==="module"?ee.module:ee.displayMessage||ee.message||"_",z=new Map;for(let ee of V){let C=q(ee);if(z.has(C)){let P=z.get(C);P.count++,P._related.push(ee),new Date(ee.ts)>new Date(P.ts)&&(P.ts=ee.ts,P._url=ee._url,P._status=ee._status),new Date(ee.ts)new Date(C.ts).getTime()>=ne).length;V=Array.from(z.values())}else V=V.map((q,z)=>(q._key="row:"+z+":"+q.ts,q._related=[q],q._firstSeen=q.ts,q._lastHourCount=0,q.count=1,q));e.query.sort==="count"?V.sort((q,z)=>z.count-q.count||new Date(z.ts)-new Date(q.ts)):V.sort((q,z)=>new Date(z.ts)-new Date(q.ts)),e.visible=V}function h(N){let T=N?e.entries.length:0,V=N?e.pageSize:Math.max(e.pageSize,e.entries.length||e.pageSize);t.get("/api/admin/errors",{params:{offset:T,limit:V}}).then(M=>{let q=(M.data.entries||[]).map(u);e.entries=N?e.entries.concat(q):q,e.available=!!M.data.available,e.cap=M.data.max||e.cap,e.total=M.data.total||e.entries.length,k()},M=>console.error(M))}e.loadMore=()=>h(!0),e.canLoadMore=()=>e.entries.length{let T=N.data||{},V=T.prev24h?Math.round((T.last24h-T.prev24h)/T.prev24h*100):0;e.stats={last24h:T.last24h||0,prev24h:T.prev24h||0,delta:V,severity:T.severity||{error:0,warn:0,info:0},unique:T.unique||{error:0,warn:0,info:0},buckets:T.buckets||[],dropped:T.dropped||0}},N=>console.error(N))}function S(){h(),E()}e.barPx=(N,T)=>{let V=e.stats.buckets||[],M=0;for(let ee of V)M=Math.max(M,(ee.error||0)+(ee.warn||0)+(ee.info||0));if(!M)return 0;let q=(N.error||0)+(N.warn||0)+(N.info||0);if(!q)return 0;let z=Math.round(q/M*60),ne=N[T]||0;return Math.round(ne/q*z)},e.bucketTitle=N=>`${new Date(N.hour).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})} \xB7 ${N.error||0} err \xB7 ${N.warn||0} warn \xB7 ${N.info||0} info`,e.toggle=N=>{e.expanded[N._key]=!e.expanded[N._key]},e.setBucket=N=>{e.query.bucket=N},e.refreshNow=S,e.clearAll=()=>{confirm("Clear all captured errors?")&&t.delete("/api/admin/errors").then(S,N=>console.error(N))},e.exportCsv=()=>{let N=["ts","level","module","displayMessage","_status","_url","_repoId"],T=[N.join(",")];for(let z of e.visible)T.push(N.map(ne=>{let ee=z[ne]==null?"":String(z[ne]);return/[",\n]/.test(ee)?`"${ee.replace(/"/g,'""')}"`:ee}).join(","));let V=new Blob([T.join(` +`)],{type:"text/csv;charset=utf-8"}),M=URL.createObjectURL(V),q=document.createElement("a");q.href=M,q.download=`errors-${new Date().toISOString().slice(0,19)}.csv`,document.body.appendChild(q),q.click(),document.body.removeChild(q),URL.revokeObjectURL(M)};function v(N){e.copyHint=`${N} copied`,s.timeout(()=>{e.copyHint=""},1500)}e.copyJson=N=>{navigator.clipboard.writeText(N._detailJson).then(()=>v("JSON"))},e.copyCurl=N=>{if(!N._url)return;let V=`curl -X ${N._method||"GET"} '${window.location.origin}${N._url}'`;navigator.clipboard.writeText(V).then(()=>v("curl"))},S();let _=r(()=>{e.query.autoRefresh&&S()},15e3);e.on("dispose",()=>r.cancel(_)),e.watch("query.search",k),e.watch("query.bucket",k),e.watch("query.sort",k),e.watch("query.group",k)},El=function(e,t,n,r){if(e.Math=Math,e.watch("user.status",()=>{e.user==null&&n.url("/")}),e.user==null){n.url("/");return}e.data=null,e.loading=!0,e.error=null,e.performance=null,e.performanceMinutes=15,e.performanceTab="routes",e.cacheReport=null,e.cacheError=null,e.cacheMinutes=60,e.cacheTraffic="all";var s=!1;e.loadCache=function(){if(!s){s=!0;var v=e.cacheMinutes;t.get("/api/admin/cache",{params:{minutes:v}}).then(function(_){v===e.cacheMinutes&&(e.cacheReport=_.data,e.cacheError=_.data.available?null:_.data.reason||"Cache monitoring is unavailable.")},function(){e.cacheError="Could not refresh cache monitoring. Displayed values may be stale."}).finally(function(){s=!1,v!==e.cacheMinutes&&e.loadCache()})}},e.cacheRows=function(){return(e.cacheReport?.rows||[]).filter(function(v){return e.cacheTraffic==="all"||v.traffic===e.cacheTraffic})},e.cacheRate=function(v,_){var N=e.cacheRows(),T=function(q){return N.filter(function(z){return z.name===q}).reduce(function(z,ne){return z+ne[_]},0)},V=T(v+"_hit"),M=T(v+"_miss");return V+M?(100*V/(V+M)).toFixed(1)+"%":"No samples"},e.cacheEventName=function(v){return v.replaceAll("_"," ")},e.cacheP95=function(v){var _=0,N=e.cacheReport?.latencyBucketsMs||[];if(!v.count)return"No samples";if(!v.ms)return"Not timed";for(var T=0;T<=N.length;T++)if(_+=v["b"+T]||0,_>=Math.ceil(v.count*.95))return T 10 s";return"No samples"},e.performanceError=null,e.formatMs=function(v){return v==null?"":v<1e3?v+" ms":+(v/1e3).toFixed(1)+" s"},e.latencyBound=function(v,_){return v.count?v[_]==null?"> 60 s":"\u2264 "+e.formatMs(v[_]):"No samples"},e.firstByteBound=function(v){return e.latencyBound({count:v.firstByteCount,p95UpperMs:v.firstByteP95UpperMs},"p95UpperMs")},e.sampleAge=function(v){return Math.max(0,Math.round((Date.now()-v.sampledAt)/1e3))},e.peakRss=function(v){return(e.performance.runtimeSeries||[]).filter(function(_){return _.instance===v.instance}).reduce(function(_,N){return Math.max(_,N.rss)},v.memory.rss)},e.performanceWarning=function(v){return e.sampleAge(v)>45||v.droppedBatches||v.droppedMetrics||v.sockets?.closeWait>0||v.eventLoop.p95Ms>100||v.memoryLimitBytes&&v.memory.rss>v.memoryLimitBytes*.8};var i=!1;e.loadPerformance=function(){var v=e.performanceMinutes;e.performance?.windowMinutes&&e.performance.windowMinutes!==v&&(e.performance=null),!i&&(i=!0,t.get("/api/admin/performance",{params:{minutes:v}}).then(function(_){v===e.performanceMinutes&&(e.performance=_.data,e.performanceError=_.data.available?null:"Performance monitoring is unavailable. Request history may be incomplete.")},function(){v===e.performanceMinutes&&(e.performanceError="Could not refresh performance monitoring. Displayed samples may be stale.")}).finally(function(){i=!1,v!==e.performanceMinutes&&e.loadPerformance()}))};function a(v){if(v==null)return"\u2014";for(var _=["B","KB","MB","GB","TB"],N=0,T=v;T>=1024&&N<_.length-1;)T/=1024,N++;return T.toFixed(N>0?1:0)+" "+_[N]}e.humanBytes=a;function u(v){if(!v)return"\u2014";var _=Math.floor(v/86400),N=Math.floor(v%86400/3600),T=Math.floor(v%3600/60);return _>0?_+"d "+(N<10?"0":"")+N+"h":N>0?N+"h "+(T<10?"0":"")+T+"m":T+"m"}e.humanDuration=u;function m(v){return v==null?"\u2014":v>=1e6?(v/1e6).toFixed(1)+"M":v>=1e3?(v/1e3).toFixed(1)+"K":String(v)}e.humanNum=m,e.queueTotal=function(v){return v?(v.waiting||0)+(v.active||0)+(v.delayed||0)+(v.failed||0):0},e.statusCount=function(v){if(!e.data||!e.data.repos)return 0;for(var _=e.data.repos.statusBreakdown||[],N=0;N<_.length;N++)if(_[N]._id===v)return _[N].count;return 0},e.barPct=function(v){var _=e.data&&e.data.repos?e.data.repos.total:0;if(!_)return 0;var N=[v];v==="expired"&&N.push("expiring"),v==="removed"&&N.push("removing"),v==="preparing"&&N.push("download");var T=0;return N.forEach(function(V){T+=e.statusCount(V)}),Math.max(.4,T/_*100)},e.errPct=function(v){if(!e.data||!e.data.errors)return 0;var _=Math.max(e.data.errors.severity.error,e.data.errors.severity.warn,e.data.errors.severity.info,1);return e.data.errors.severity[v]/_*100};function w(v){var _=v||[];return _.map(function(N,T){var V=_[T-1]||{},M=Object.assign({},N);return M.dailyRepositories=T?Math.max(0,(N.nbRepositories||0)-(V.nbRepositories||0)):0,M.dailyUsers=T?Math.max(0,(N.nbUsers||0)-(V.nbUsers||0)):0,M.dailyPageViews=T?Math.max(0,(N.nbPageViews||0)-(V.nbPageViews||0)):0,M})}function g(v){var _=v&&v.length?v[v.length-1]:{};return{repositories:_.dailyRepositories||0,users:_.dailyUsers||0,pageViews:_.dailyPageViews||0}}var k={},h={};e.historyBarH=function(v,_){return!v||!k[_]?0:Math.max(1,Math.round(v[_]/k[_]*140))},e.historyRangeH=function(v,_){if(!v||k[_]==null)return 0;var N=k[_]-h[_];return N?Math.round(8+(v[_]-h[_])/N*132):70},e.historyRange=function(v){return{min:h[v],max:k[v]}},e.historyLabel=function(v){if(!v||!v.date)return"";var _=new Date(v.date);return _.getUTCMonth()+1+"/"+_.getUTCDate()};function E(){e.loadPerformance(),e.loadCache(),t.get("/api/admin/overview").then(function(v){v.data.history=w(v.data.history),v.data.daily={today:g(v.data.history)},e.data=v.data,e.loading=!1,e.error=null,k={},h={},(v.data.history||[]).forEach(function(_){["dailyPageViews","dailyRepositories","dailyUsers","nbUsers"].forEach(function(N){(!k[N]||_[N]>k[N])&&(k[N]=_[N]),(h[N]==null||_[N]wr(e,t)},{path:"/connections",template:"partials/connections.htm",title:"GitHub connections \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>ml(e,t.http)},{path:"/signin",template:"partials/signin.htm",title:"Sign in \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>hl(e,t.http)},{path:"/",template:"partials/home.htm",title:"Anonymous GitHub \u2013 Share the code, not the author",preserveExplorer:!1,setup:(e,t)=>al(e,t.http,t.location,t.window,t.timeout)},{path:"/dashboard",template:"partials/dashboard.htm",title:"Your anonymizations \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>ll(e,t.http,t.location,t.promises,t.window,t.quotaService)},{path:"/pr-dashboard",redirect:"/dashboard"},{path:"/anonymize/:repoId?",template:"partials/anonymize.htm",title:"New anonymization \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>as(e,t.http,t.html,t.params,t.location,t.translate,t.timeout)},{path:"/pull-request-anonymize/:pullRequestId?",template:"partials/anonymize.htm",title:"Anonymize a pull request \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>as(e,t.http,t.html,t.params,t.location,t.translate,t.timeout)},{path:"/gist-anonymize/:gistId?",template:"partials/anonymize.htm",title:"Anonymize a gist \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>as(e,t.http,t.html,t.params,t.location,t.translate,t.timeout)},{path:"/status/:repoId",template:"partials/status.htm",title:"Repository status \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>dl(e,t.http,t.params)},{path:"/conferences",template:"partials/conferences.htm",title:"Your conferences \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>pl(e,t.http,t.location)},{path:"/conference/new",template:"partials/newConference.htm",title:"New conference \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>fr(e,t.http,t.location,t.params)},{path:"/conference/:conferenceId/edit",template:"partials/newConference.htm",title:"Edit conference \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>fr(e,t.http,t.location,t.params)},{path:"/conference/:conferenceId",template:"partials/conference.htm",title:"Conference \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>fl(e,t.http,t.location,t.params)},{path:"/faq",template:"partials/faq.htm",title:"FAQ \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>sl(e,t.http)},{path:"/profile",template:"partials/profile.htm",title:"Your settings \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>rl(e,t.http,t.translate,t.timeout,t.quotaService)},{path:"/claim",template:"partials/claim.htm",title:"Claim an anonymization \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>il(e,t.http,t.location)},{path:"/pr/:pullRequestId/:path(.*)*",template:"partials/pullRequest.htm",title:"Anonymous pull request \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>ul(e,t.http,t.location,t.params,t.html)},{path:"/gist/:gistId/:path(.*)*",template:"partials/gist.htm",title:"Anonymous gist \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>cl(e,t.http,t.location,t.params,t.html)},{path:"/r/:repoId/:path(.*)*",template:"partials/explorer.htm",title:"Anonymous repository \u2013 Anonymous GitHub",preserveExplorer:!0,setup:(e,t)=>pr(e,t.http,t.location,t.params,t.html,t.promises)},{path:"/repository/:repoId/:path(.*)*",template:"partials/explorer.htm",title:"Anonymous repository \u2013 Anonymous GitHub",preserveExplorer:!0,setup:(e,t)=>pr(e,t.http,t.location,t.params,t.html,t.promises)},{path:"/admin/",template:"partials/admin/overview.htm",title:"Admin \xB7 Overview \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>El(e,t.http,t.location,t.interval)},{path:"/admin/repositories",template:"partials/admin/repositories.htm",title:"Admin \xB7 Repositories \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>vl(e,t.http,t.location)},{path:"/admin/users",template:"partials/admin/users.htm",title:"Admin \xB7 Users \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>yl(e,t.http,t.location)},{path:"/admin/users/:username",template:"partials/admin/user.htm",title:"Admin \xB7 User details \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>gl(e,t.http,t.location,t.params)},{path:"/admin/conferences",template:"partials/admin/conferences.htm",title:"Admin \xB7 Conferences \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>bl(e,t.http,t.location)},{path:"/admin/queues",template:"partials/admin/queues.htm",title:"Admin \xB7 Queues \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>wl(e,t.http,t.location,t.interval,t.timeout)},{path:"/admin/errors",template:"partials/admin/errors.htm",title:"Admin \xB7 Errors \u2013 Anonymous GitHub",preserveExplorer:!1,setup:(e,t)=>kl(e,t.http,t.location,t.interval)},{path:"/404",template:"partials/404.htm",title:"Page not found \u2013 Anonymous GitHub",preserveExplorer:!1,setup:()=>{}},{path:"/:pathMatch(.*)*",template:"partials/404.htm",title:"Page not found \u2013 Anonymous GitHub",setup:()=>{}}];var Tp={class:"container py-4",style:{"max-width":"48rem","overflow-wrap":"anywhere"}},Ap={key:0},Op={key:1,role:"alert"},Ip={key:2,role:"status"},Pp={key:0},Vp={key:1},qp=["disabled"],Mp=["disabled"],Up=["disabled"],$p={key:5,class:"mt-4","aria-labelledby":"review-policy-title"},Lp={id:"review-policy-title"},Fp={key:0,role:"alert"},zp=["disabled"],Hp=["disabled"],Bp=["disabled"],jp={key:6,role:"status"};function _l(e,t){return l(),d("section",Tp,[t[12]||(t[12]=o("a",{href:"/"},"Anonymous GitHub",-1)),t[13]||(t[13]=o("h1",{class:"mt-3"},"Approve artifact access",-1)),t[14]||(t[14]=o("p",null,"This records your approval as the repository owner or an authorized coauthor.",-1)),e.user?.username?f("v-if",!0):(l(),d("p",Ap,[...t[6]||(t[6]=[b("Sign in first, then reopen the artifact link from your submission. ",-1),o("a",{href:"/signin"},"Sign in",-1)])])),e.error?(l(),d("p",Op,c(e.error),1)):f("v-if",!0),e.saved?(l(),d("p",Ip,[t[7]||(t[7]=b("Consent recorded. ",-1)),e.handoffEnabled?(l(),d("span",Pp,"Continue to review to finish linking.")):(l(),d("span",Vp,"Artifact linking is not complete. Return to your submission to check its status."))])):f("v-if",!0),e.saved&&e.handoffEnabled?(l(),d("button",{key:3,class:"btn btn-primary",type:"button",onClick:t[0]||(t[0]=(...n)=>e.continueReview&&e.continueReview(...n)),disabled:e.busy},"Continue to review",8,qp)):f("v-if",!0),e.user?.username&&!e.saved?(l(),d("form",{key:4,onSubmit:t[2]||(t[2]=ie((...n)=>e.loadPreview&&e.loadPreview(...n),["prevent"]))},[t[8]||(t[8]=o("label",{for:"review-repository"},"Anonymous repository ID",-1)),R(o("input",{id:"review-repository",class:"form-control","onUpdate:modelValue":t[1]||(t[1]=n=>e.repositoryId=n),maxlength:"128",autocomplete:"off",disabled:e.busy||e.uncertain,"aria-describedby":"review-repository-help"},null,8,Mp),[[zt,e.repositoryId]]),t[9]||(t[9]=o("p",{id:"review-repository-help"},"Use the ID after /r/ in the anonymous repository URL.",-1)),o("button",{type:"submit",class:"btn btn-primary",disabled:e.busy||e.uncertain},"Preview access and retention",8,Up)],32)):f("v-if",!0),e.preview&&!e.saved?(l(),d("section",$p,[o("h2",Lp,c(e.preview.repositoryName),1),o("p",null,"Access: "+c(e.preview.policy.access==="anonymous-link"?"Anyone with the anonymous link":"Restricted review access")+".",1),o("p",null,"Retain until "+c(e.preview.policy.retainUntil)+". Policy version "+c(e.preview.policy.version)+".",1),e.expired?(l(),d("p",Fp,"This preview expired. Open a new artifact link from your submission.")):f("v-if",!0),o("div",null,[o("label",null,[R(o("input",{type:"checkbox","onUpdate:modelValue":t[3]||(t[3]=n=>e.acceptAccess=n),disabled:e.busy||e.uncertain||e.expired},null,8,zp),[[Xs,e.acceptAccess]]),t[10]||(t[10]=b(" I approve the access policy above.",-1))])]),o("div",null,[o("label",null,[R(o("input",{type:"checkbox","onUpdate:modelValue":t[4]||(t[4]=n=>e.acceptRetention=n),disabled:e.busy||e.uncertain||e.expired},null,8,Hp),[[Xs,e.acceptRetention]]),t[11]||(t[11]=b(" I approve retention until the date above.",-1))])]),o("button",{class:"btn btn-primary",type:"button",onClick:t[5]||(t[5]=(...n)=>e.confirmConsent&&e.confirmConsent(...n)),disabled:e.busy||e.expired||!e.acceptAccess||!e.acceptRetention},c(e.uncertain?"Retry confirmation":"Confirm consent"),9,Bp)])):f("v-if",!0),e.busy?(l(),d("p",jp,"Waiting for the server\u2026")):f("v-if",!0)])}var Gp={class:"container paper-page connections-page"},Wp={key:0,class:"paper-inline-alert paper-inline-alert-error",role:"alert"},Kp={key:1,role:"status"},Yp=["disabled"],Jp={key:3},Qp={key:0,class:"connection-resources"},Xp=["disabled"],Zp=["disabled"],xp={key:0,role:"status"},ef={class:"connections-grid"},tf={key:0},of={class:"connection-title"},nf={key:0,class:"paper-inline-alert paper-inline-alert-error",role:"alert"},sf={class:"connection-actions"},rf={key:0,class:"btn btn-ink",target:"_self",href:"/github/app/install"},af={key:1,class:"connection-installations"},lf={key:0},df=["href"],uf={class:"sr-only"},cf=["disabled"],pf={class:"connection-title"},ff={key:0,target:"_self",href:"/github/login",class:"btn btn-outline-ink"},mf={key:1,class:"connection-revoke"},hf={key:0},vf=["disabled"],yf={class:"connection-resources"},gf={class:"connection-title"},bf={class:"connection-count"},wf={key:0,class:"connection-empty"},kf={class:"connection-resource-name"},Ef={key:0,class:"connection-resource-actions"},Cf=["disabled","onClick"],_f=["disabled","onClick"],Sf={key:1,class:"connection-help",role:"status"},Nf=["disabled","onClick"];function Sl(e,t){return l(),d("div",Gp,[t[25]||(t[25]=de('
My work / GitHub connections

GitHub connections

Manage how GitHub shares your code. Your anonymizations and URLs stay the same.

',2)),e.connectionError?(l(),d("p",Wp,c(e.connectionError),1)):f("v-if",!0),!e.connections&&!e.connectionError?(l(),d("p",Kp,"Loading your connections\u2026")):f("v-if",!0),!e.connections&&e.connectionError?(l(),d("button",{key:2,class:"btn btn-outline-ink",disabled:e.busy,onClick:t[0]||(t[0]=n=>e.loadConnections())},"Try again",8,Yp)):f("v-if",!0),e.connections?(l(),d("div",Jp,[e.connections.emailNotificationsEnabled?(l(),d("section",Qp,[t[6]||(t[6]=o("h2",null,"Email alerts",-1)),t[7]||(t[7]=o("p",null,"We will email you if your GitHub connection stops working or a repository becomes inaccessible. Your address is never shown on anonymous pages.",-1)),o("form",{onSubmit:t[2]||(t[2]=ie(n=>e.saveNotificationEmail(),["prevent"]))},[t[5]||(t[5]=o("label",{for:"notification-email"},"Email address",-1)),R(o("input",{id:"notification-email",class:"form-control",type:"email",autocomplete:"email",maxlength:"254",required:"","onUpdate:modelValue":t[1]||(t[1]=n=>e.notificationEmail=n),disabled:e.busy},null,8,Xp),[[zt,e.notificationEmail]]),o("button",{class:"btn btn-ink mt-2",type:"submit",disabled:e.busy},"Save email address",8,Zp),e.emailSaved?(l(),d("p",xp,"Email address saved.")):f("v-if",!0)],32)])):f("v-if",!0),o("div",ef,[e.connections.appEnabled?(l(),d("section",tf,[t[13]||(t[13]=o("div",{class:"connection-top"},[o("i",{class:"fab fa-github","aria-hidden":"true"}),o("span",{class:"connection-badge"},"Recommended")],-1)),o("div",of,[t[8]||(t[8]=o("h2",null,"GitHub App",-1)),o("span",{class:A(["connection-status",{"is-connected":e.connections.appConnected&&!e.connections.appError}])},c(e.connections.appError?"Needs attention":e.connections.appConnected?"Connected":"Not connected"),3)]),t[14]||(t[14]=o("p",null,"Read-only access to gists and the repositories you choose.",-1)),e.connections.appError?(l(),d("p",nf,c(e.connections.appError)+". Reconnect to restore access.",1)):f("v-if",!0),o("div",sf,[e.connections.appConnected&&!e.connections.appError?(l(),d("a",rf,[...t[9]||(t[9]=[b("Manage repository access ",-1),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-external-link"})],-1)])])):f("v-if",!0),o("a",{class:A(e.connections.appConnected&&!e.connections.appError?"connection-link":"btn btn-ink"),target:"_self",href:"/github/app/login"},c(e.connections.appConnected?"Reconnect account":"Connect GitHub account"),3)]),t[15]||(t[15]=o("p",{class:"connection-help"},"Choose repositories on GitHub. Organization access may need an administrator's approval.",-1)),e.connections.installations?.length?(l(),d("ul",af,[(l(!0),d(W,null,oe(e.connections.installations,n=>(l(),d("li",{key:n.id},[o("div",null,[o("strong",null,c(n.account),1),n.suspended?(l(),d("span",lf," \xB7 Suspended")):f("v-if",!0)]),o("a",{target:"_self",href:"/github/app/install?installationId="+n.id},[t[10]||(t[10]=b("Manage access ",-1)),o("span",uf,"for "+c(n.account),1),t[11]||(t[11]=b(" \u2192",-1))],8,df)]))),128))])):f("v-if",!0),o("button",{class:"connection-link",disabled:e.busy,onClick:t[3]||(t[3]=n=>e.loadConnections())},[...t[12]||(t[12]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),b(" Refresh access",-1)])],8,cf)])):f("v-if",!0),o("section",null,[t[18]||(t[18]=o("div",{class:"connection-top"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-key"})]),o("span",{class:"connection-badge connection-badge-muted"},"Legacy")],-1)),o("div",pf,[t[16]||(t[16]=o("h2",null,"GitHub OAuth",-1)),o("span",{class:A(["connection-status",{"is-connected":e.connections.oauthConnected}])},c(e.connections.oauthConnected?"Connected":"Not connected"),3)]),t[19]||(t[19]=o("p",null,"For existing OAuth anonymizations.",-1)),t[20]||(t[20]=o("p",{class:"connection-help"},"This connection uses GitHub's broader repository permissions. Existing work keeps using it until you switch below.",-1)),e.connections.oauthEnabled?(l(),d("a",ff,c(e.connections.oauthConnected?"Reconnect OAuth":"Connect legacy OAuth"),1)):f("v-if",!0),e.connections.oauthConnected?(l(),d("div",mf,[e.connections.gistCount?(l(),d("p",hf,c(e.connections.gistCount)+" gist(s) use your GitHub App connection when available.",1)):f("v-if",!0),t[17]||(t[17]=o("p",null,"Switch all dependent repositories before revoking access. Gists can use your GitHub App connection.",-1)),e.connections.appConnected?(l(),d("button",{key:1,class:"connection-link connection-danger",disabled:e.busy||e.connections.resources.some(n=>n.connection==="oauth"),onClick:t[4]||(t[4]=n=>e.disconnectOAuth())},"Revoke OAuth access",8,vf)):f("v-if",!0)])):f("v-if",!0)])]),o("section",yf,[o("div",gf,[t[21]||(t[21]=o("h2",null,"Repository connections",-1)),o("span",bf,c(e.connections.resources?.length||0)+" resources",1)]),t[23]||(t[23]=o("p",null,"Check access, then switch each resource to the GitHub App. After reinstalling the App, reconnect existing resources here to keep their anonymous URLs and published snapshots.",-1)),e.connections.resources?.length?f("v-if",!0):(l(),d("div",wf,[...t[22]||(t[22]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1),o("div",null,[o("h3",null,"No repository connections yet"),o("p",null,"Your repositories and pull requests will appear here once you anonymize them.")],-1),o("a",{class:"connection-link",href:"/anonymize"},"New anonymization \u2192",-1)])])),(l(!0),d(W,null,oe(e.connections.resources,n=>(l(),d("div",{class:"connection-resource",key:n.type+n.id},[o("div",kf,[o("strong",null,c(n.name||n.id),1),o("small",null,c(n.type)+" \xB7 "+c(n.id),1)]),o("span",{class:A(["connection-badge",{"connection-badge-muted":n.connection==="oauth"}])},c(n.connection==="github-app"?"Read-only App":"Legacy OAuth"),3),!["archived","removed","preparing","queue","removing","expiring"].includes(n.status)&&(n.status!=="download"||n.type==="pull-request"&&(!n.statusDate||new Date(n.statusDate).getTime()<=Date.now()-3e5))&&e.connections.appEnabled&&e.connections.appConnected?(l(),d("div",Ef,[o("button",{class:"btn btn-outline-ink",disabled:e.busy,onClick:r=>e.changeConnection(n,"github-app",!0)},"Check read-only access",8,Cf),n.eligible?(l(),d("button",{key:0,class:"btn btn-ink",disabled:e.busy,onClick:r=>e.changeConnection(n,"github-app",!1)},c(n.connection==="github-app"?"Reconnect read-only access":"Switch to read-only access"),9,_f)):f("v-if",!0),n.eligible===!1?(l(),d("span",Sf,"Access unavailable. Allow this repository on GitHub, then check again.")):f("v-if",!0)])):f("v-if",!0),!["archived","removed","preparing","queue","removing","expiring"].includes(n.status)&&(n.status!=="download"||n.type==="pull-request"&&(!n.statusDate||new Date(n.statusDate).getTime()<=Date.now()-3e5))&&n.connection==="github-app"&&e.connections.oauthConnected?(l(),d("button",{key:1,class:"connection-link",disabled:e.busy,onClick:r=>e.changeConnection(n,"oauth",!1)},"Use OAuth",8,Nf)):f("v-if",!0)]))),128)),t[24]||(t[24]=o("p",{class:"connection-footnote"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})]),b(" Removing access stops new fetches from GitHub. Published content keeps its current expiration and removal settings.")],-1))])])):f("v-if",!0)])}var Rf={class:"container paper-page auth-page"},Df={class:"auth-layout"},Tf={class:"auth-options"},Af={key:0},Of={key:0,class:"btn btn-ink auth-continue",target:"_self",href:"/github/login?recover=1"},If={key:1},Pf={key:1},Vf={key:2,class:"auth-legacy"},qf={key:3,role:"status"};function Nl(e,t){return l(),d("div",Rf,[t[5]||(t[5]=o("a",{class:"auth-back",href:"/"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-arrow-left"})]),b(" Anonymous GitHub")],-1)),o("div",Df,[t[4]||(t[4]=de('
Your research, ready for review

Your code.
Your identity,
protected.
Sign in to GitHub

Sign in to create and manage your anonymizations.

',1)),o("div",Tf,[e.accountRecovery?(l(),d("section",Af,[t[0]||(t[0]=o("h2",null,"Verify your existing account",-1)),t[1]||(t[1]=o("p",null,"We found an existing account. Verify it with your previous GitHub connection to keep your anonymizations. Future sign-ins will use the GitHub App.",-1)),e.site_options?.GITHUB_OAUTH_ENABLED?(l(),d("a",Of,"Verify with previous GitHub connection")):(l(),d("p",If,"Account verification is currently unavailable. Please try again later."))])):f("v-if",!0),e.site_options?.GITHUB_APP_ENABLED&&!e.accountRecovery?(l(),d("section",Pf,[...t[2]||(t[2]=[de('
Read-only access

Continue with GitHub

Connect through the GitHub App with read-only repository access.

  • You choose which repositories to share
  • No permission to write to your code
Sign in with GitHub Your existing anonymizations and connections stay with your account.',6)])])):f("v-if",!0),!e.site_options?.GITHUB_APP_ENABLED&&e.site_options?.GITHUB_OAUTH_ENABLED&&!e.accountRecovery?(l(),d("section",Vf,[...t[3]||(t[3]=[o("div",{class:"connection-title"},[o("h2",null,"Continue with GitHub")],-1),o("p",null,"Sign in to access your account. GitHub OAuth includes write access to private repositories.",-1),o("a",{class:"connection-link",target:"_self",href:"/github/login"},[b("Sign in with GitHub "),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-arrow-right"})])],-1)])])):f("v-if",!0),e.site_options&&!e.site_options.GITHUB_APP_ENABLED&&!e.site_options.GITHUB_OAUTH_ENABLED?(l(),d("p",qf,"GitHub sign-in is currently unavailable. Please try again later.")):f("v-if",!0)])])])}var Mf={class:"paper-empty"};function Rl(e,t){return l(),d("div",Mf,[...t[0]||(t[0]=[de('
Error \xB7 404

This link
isn\u2019t here.

The anonymous mirror you\u2019re looking for has expired, been removed by its owner, or never existed. If you received this URL from an author, ask them to re-issue it.

',1)])])}var Uf={class:"container paper-page admin-page"},$f={class:"admin-summary"},Lf={class:"summary-total"},Ff=["aria-pressed"],zf={class:"count"},Hf=["aria-pressed"],Bf={class:"count"},jf=["aria-pressed"],Gf={class:"count"},Wf=["aria-pressed"],Kf={class:"count"},Yf=["aria-pressed"],Jf={class:"count"},Qf={key:0,class:"alert alert-danger",style:{margin:"8px 0"}},Xf={class:"w-100 admin-filter-toolbar","aria-label":"Conferences","accept-charset":"UTF-8"},Zf={class:"admin-filter-row"},xf={class:"search-wrap"},em={type:"search",class:"form-control",placeholder:"Search conferences\u2026",autocomplete:"off"},tm={key:0,class:"admin-search-hint"},om={class:"admin-filter-inline","aria-label":"Pagination"},nm=["disabled"],sm={style:{"font-family":"var(--font-mono)","font-size":"12px",color:"var(--ink-muted)"}},rm=["disabled"],im={key:0,class:"admin-filter-row"},am={class:"admin-active-chips"},lm={class:"key"},dm=["onClick"],um={class:"paper-table paper-table-conferences w-100",role:"table","aria-label":"Conferences"},cm={class:"paper-table-head",role:"row"},pm={role:"columnheader"},fm={role:"columnheader"},mm={role:"columnheader"},hm={class:"paper-table-row",role:"row"},vm={class:"cell-anon",role:"cell"},ym={class:"anon-text"},gm=["textContent","href"],bm={class:"anon-sub"},wm={class:"cell-status",role:"cell"},km=["textContent"],Em={class:"cell-views num",role:"cell"},Cm=["textContent","href"],_m={class:"cell-expires",role:"cell"},Sm={class:"cell-actions",role:"cell"},Nm={class:"dropdown"},Rm={class:"dropdown-menu dropdown-menu-right"},Dm=["href"],Tm=["href"],Am=["href"],Om=["onClick"],Im={key:0,class:"paper-table-empty"},Pm={class:"admin-toolbar",style:{"justify-content":"space-between","border-bottom":"none"}},Vm={style:{"font-size":"12px",color:"var(--ink-muted)"}},qm={key:0,class:"pagination-compact"},Mm=["disabled"],Um=["max"],$m=["disabled"],Lm={class:"admin-filter-inline"},Fm={class:"form-control form-control-sm"};function Dl(e,t){let n=ve("field"),r=ve("form");return l(),d("div",Uf,[t[47]||(t[47]=de('
Admin \xA0/\xA0 Conferences

Conferences

',3)),o("div",$f,[o("span",Lf,c(e.total>=0?e.fmt.number(e.total):"\u2026"),1),o("button",{type:"button",class:A(["summary-pill ok",{active:e.query?.ready}]),title:"Toggle ready filter",onClick:t[0]||(t[0]=s=>{e.query.ready=!e.query.ready,e.query.page=1}),"aria-pressed":!!e.query?.ready},[t[13]||(t[13]=b("Ready ",-1)),o("span",zf,c(e.fmt?.number(e.statusCountFor("ready"))),1)],10,Ff),o("button",{type:"button",class:A(["summary-pill warn",{active:e.query?.preparing}]),title:"Toggle preparing filter",onClick:t[1]||(t[1]=s=>{e.query.preparing=!e.query.preparing,e.query.page=1}),"aria-pressed":!!e.query?.preparing},[t[14]||(t[14]=b("Preparing ",-1)),o("span",Bf,c(e.fmt?.number(e.statusCountFor("preparing"))),1)],10,Hf),o("button",{type:"button",class:A(["summary-pill error",{active:e.query?.error}]),title:"Toggle errored filter",onClick:t[2]||(t[2]=s=>{e.query.error=!e.query.error,e.query.page=1}),"aria-pressed":!!e.query?.error},[t[15]||(t[15]=b("Errored ",-1)),o("span",Gf,c(e.fmt?.number(e.statusCountFor("error"))),1)],10,jf),o("button",{type:"button",class:A(["summary-pill",{active:e.query?.expired}]),title:"Toggle expired filter",onClick:t[3]||(t[3]=s=>{e.query.expired=!e.query.expired,e.query.page=1}),"aria-pressed":!!e.query?.expired},[t[16]||(t[16]=b("Expired ",-1)),o("span",Kf,c(e.fmt?.number(e.statusCountFor("expired"))),1)],10,Wf),o("button",{type:"button",class:A(["summary-pill",{active:e.query?.removed}]),title:"Toggle removed filter",onClick:t[4]||(t[4]=s=>{e.query.removed=!e.query.removed,e.query.page=1}),"aria-pressed":!!e.query?.removed},[t[17]||(t[17]=b("Removed ",-1)),o("span",Jf,c(e.fmt?.number(e.statusCountFor("removed"))),1)],10,Yf)]),e.fetchError?(l(),d("div",Qf,[t[18]||(t[18]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),b(" "+c(e.fetchError),1)])):f("v-if",!0),R((l(),d("form",Xf,[o("div",Zf,[o("div",xf,[R(o("input",em,null,512),[[n,{state:e.viewState,set:s=>{e.query.search=s},value:e.query?.search,form:null,options:{}}]]),e.query?.search?f("v-if",!0):(l(),d("span",tm,"/"))]),t[22]||(t[22]=o("span",{class:"admin-filter-spacer"},null,-1)),o("button",{class:"btn btn-sm",type:"button",onClick:t[5]||(t[5]=s=>e.exportCsv())},[...t[19]||(t[19]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-export"})],-1),b(" Export",-1)])]),o("span",om,[o("button",{class:"btn btn-sm btn-icon",type:"button",onClick:t[6]||(t[6]=s=>e.query.page=Math.max(1,e.query.page-1)),disabled:e.query?.page<=1,"aria-label":"Previous page"},[...t[20]||(t[20]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-left"})],-1)])],8,nm),o("span",sm,c(e.query?.page)+"/"+c(e.totalPage||1),1),o("button",{class:"btn btn-sm btn-icon",type:"button",onClick:t[7]||(t[7]=s=>e.query.page=Math.min(e.totalPage,e.query.page+1)),disabled:e.query?.page>=e.totalPage,"aria-label":"Next page"},[...t[21]||(t[21]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-right"})],-1)])],8,rm)])]),e.chips?.length?(l(),d("div",im,[o("div",am,[(l(!0),d(W,null,oe(e.chips,(s,i)=>(l(),d("span",{class:"admin-active-chip",key:s?.key},[o("span",lm,c(s?.label),1),o("span",null,c(s?.value),1),o("button",{type:"button",onClick:a=>e.clearFilter(s.key),"aria-label":"Clear filter"},[...t[23]||(t[23]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])],8,dm)]))),128))])])):f("v-if",!0)])),[[r,e.viewState]]),o("div",um,[o("div",cm,[o("div",pm,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="name"}]),onClick:t[8]||(t[8]=s=>e.sortBy("name"))},[t[25]||(t[25]=b("Conference ",-1)),e.sortIcon("name")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("name")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[24]||(t[24]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)]),o("div",fm,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="status"}]),onClick:t[9]||(t[9]=s=>e.sortBy("status"))},[t[27]||(t[27]=b("Status ",-1)),e.sortIcon("status")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("status")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[26]||(t[26]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)]),t[30]||(t[30]=o("div",{role:"columnheader",class:"num"},"Repos",-1)),o("div",mm,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="startDate"}]),onClick:t[10]||(t[10]=s=>e.sortBy("startDate"))},[t[29]||(t[29]=b("Window ",-1)),e.sortIcon("startDate")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("startDate")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[28]||(t[28]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)]),t[31]||(t[31]=o("div",{role:"columnheader","aria-label":"Actions"},null,-1))]),(l(!0),d(W,null,oe(e.filteredConferences,(s,i)=>(l(),d("div",hm,[o("div",vm,[t[33]||(t[33]=o("svg",{class:"ui-icon record-type-icon",role:"img","aria-label":"Conference"},[o("use",{href:"#project-icon-conference"})],-1)),o("div",ym,[o("a",{class:"repo-name",textContent:c(s?.name),href:e.safeUrl("/conference/"+s?.conferenceID)},null,8,gm),o("div",bm,[o("span",null,c(s?.conferenceID),1),t[32]||(t[32]=b("\xA0\xB7\xA0",-1)),o("span",null,c(e.fmt?.number(s?.price||0))+" \u20AC",1)])])]),o("div",wm,[o("span",{class:A(["status-dot",{"status-removed":s?.status=="removed"||s?.status=="expired","status-ready":s?.status=="ready","status-error":s?.status=="error","status-preparing":s?.status=="preparing"}])},null,2),o("span",{textContent:c(e.fmt?.title(s?.status))},null,8,km)]),o("div",Em,[t[34]||(t[34]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1)),o("a",{title:"Show repositories in this conference",textContent:c(e.fmt?.number(s?.repositories?.length||0)),href:e.safeUrl("/admin/?conference="+s?.conferenceID)},null,8,Cm)]),o("div",_m,[t[35]||(t[35]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),b(" "+c(e.fmt?.date(s?.startDate))+" \u2013 "+c(e.fmt?.date(s?.endDate)),1)]),o("div",Sm,[o("div",Nm,[t[41]||(t[41]=o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"Actions"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})])],-1)),o("div",Rm,[o("a",{class:"dropdown-item",href:e.safeUrl("/conference/"+s?.conferenceID+"/edit")},[...t[36]||(t[36]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),b(" Edit",-1)])],8,Dm),o("a",{class:"dropdown-item",href:e.safeUrl("/conference/"+s?.conferenceID+"/")},[...t[37]||(t[37]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),b(" View",-1)])],8,Tm),o("a",{class:"dropdown-item",href:e.safeUrl("/admin/?conference="+s?.conferenceID)},[...t[38]||(t[38]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1),b(" View repositories",-1)])],8,Am),t[40]||(t[40]=o("div",{class:"dropdown-divider"},null,-1)),R(o("a",{class:"dropdown-item text-danger",href:"#",onClick:ie(a=>e.removeConference(s),["prevent"])},[...t[39]||(t[39]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),b(" Remove",-1)])],8,Om),[[j,s?.status!="removed"]])])])])]))),256)),e.filteredConferences?.length==0?(l(),d("div",Im,[...t[42]||(t[42]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1),o("span",null,"No conferences match the current filters.",-1)])])):f("v-if",!0)]),o("div",Pm,[o("span",Vm,c(e.fmt?.number(e.total))+" results",1),e.totalPage>1?(l(),d("div",qm,[o("button",{class:"btn btn-sm",onClick:t[11]||(t[11]=s=>e.query.page=Math.max(1,e.query.page-1)),disabled:e.query?.page<=1},[...t[43]||(t[43]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-left"})],-1),b(" Previous",-1)])],8,Mm),R(o("input",{type:"number",class:"form-control form-control-sm",min:"1",style:{width:"56px"},max:e.totalPage},null,8,Um),[[n,{state:e.viewState,set:s=>{e.query.page=s},value:e.query?.page,form:null,options:{}}]]),o("span",null,"of "+c(e.totalPage),1),o("button",{class:"btn btn-sm",onClick:t[12]||(t[12]=s=>e.query.page=Math.min(e.totalPage,e.query.page+1)),disabled:e.query?.page>=e.totalPage},[...t[44]||(t[44]=[b("Next ",-1),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-right"})],-1)])],8,$m)])):f("v-if",!0),o("span",Lm,[t[46]||(t[46]=o("label",null,"Per page",-1)),R((l(),d("select",Fm,[...t[45]||(t[45]=[de('',5)])])),[[n,{state:e.viewState,set:s=>{e.query.limit=s},value:e.query?.limit,form:null,options:{}}]])])])])}var zm={class:"container paper-page admin-page errors-page"},Hm={class:"errors-header"},Bm={class:"errors-actions"},jm={class:"kpi-grid"},Gm={class:"kpi-card"},Wm={class:"kpi-value"},Km={key:0},Ym={key:1},Jm={class:"kpi-card kpi-error"},Qm={class:"kpi-value"},Xm={class:"kpi-sub"},Zm={class:"kpi-card kpi-warn"},xm={class:"kpi-value"},eh={class:"kpi-sub"},th={class:"kpi-card kpi-info"},oh={class:"kpi-value"},nh={class:"kpi-sub"},sh={class:"kpi-value"},rh={class:"kpi-sub"},ih={key:0,class:"dropped-warn"},ah={class:"volume-chart"},lh={class:"volume-bars"},dh=["title"],uh={class:"errors-toolbar","aria-label":"Error filters"},ch={class:"seg-tabs"},ph={class:"search-wrap"},fh={type:"search",class:"form-control",placeholder:"code:repo_not_found module:route status:>=400",autocomplete:"off"},mh={key:0,class:"filter-count"},hh={class:"select-wrap"},vh={class:"form-control form-control-sm"},yh={class:"select-wrap"},gh={class:"form-control form-control-sm"},bh={class:"autoref"},wh={type:"checkbox"},kh={key:0,class:"admin-empty"},Eh={key:1,class:"errors-pager"},Ch={key:2,class:"errors-list"},_h=["onClick"],Sh={class:"col-when"},Nh={class:"when-rel"},Rh={class:"when-abs"},Dh={class:"col-sev"},Th={class:"sev-label"},Ah={class:"col-mod"},Oh={class:"pill pill-module"},Ih={class:"col-msg"},Ph={class:"msg-code"},Vh={key:0,class:"msg-context"},qh={key:1,class:"msg-detail"},Mh={key:2,class:"msg-url"},Uh={class:"col-count"},$h={key:0,class:"count-pill"},Lh={key:1,class:"count-pill count-pill-muted"},Fh={class:"col-status"},zh={key:0,class:"errors-row-detail"},Hh={class:"detail-tabs"},Bh=["onClick"],jh=["onClick"],Gh=["onClick"],Wh={class:"detail-body"},Kh={class:"detail-main"},Yh={key:0},Jh={key:1,class:"stack-pre"},Qh={key:2,class:"related-list"},Xh={class:"when-abs"},Zh={class:"msg-url"},xh={class:"detail-actions"},ev=["onClick"],tv=["onClick"],ov={key:0,class:"copy-hint"},nv={class:"detail-aside"},sv={class:"aside-block"},rv=["title"],iv={class:"aside-block"},av=["title"],lv={class:"aside-block"},dv={class:"aside-value"},uv={key:0,class:"aside-sub"},cv={key:0,class:"aside-block"},pv=["href"],fv={key:1,class:"aside-block"},mv={class:"aside-value mono"};function Tl(e,t){let n=ve("field"),r=ve("form");return l(),d("div",zm,[t[32]||(t[32]=o("div",{class:"paper-crumbs"},[b("Admin \xA0/\xA0 "),o("span",{class:"here"},"Errors")],-1)),o("header",Hm,[t[10]||(t[10]=o("h1",{class:"paper-page-title"},"Errors",-1)),o("div",Bm,[o("button",{class:"btn btn-sm",type:"button",onClick:t[0]||(t[0]=s=>e.exportCsv())},[...t[8]||(t[8]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-export"})],-1),b(" Export CSV",-1)])]),o("button",{class:"btn btn-sm btn-danger-soft",type:"button",onClick:t[1]||(t[1]=s=>e.clearAll())},[...t[9]||(t[9]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),b(" Clear all",-1)])])])]),t[33]||(t[33]=de('',1)),o("section",jm,[o("div",Gm,[t[11]||(t[11]=o("div",{class:"kpi-label"},"Last 24h",-1)),o("div",Wm,c(e.stats?.last24h),1),o("div",{class:A(["kpi-sub",{up:e.stats?.delta>0,down:e.stats?.delta<0}])},[e.stats?.prev24h?(l(),d("span",Km,c(e.stats?.delta>0?"+":"")+c(e.stats?.delta)+"% vs yesterday",1)):f("v-if",!0),e.stats?.prev24h?f("v-if",!0):(l(),d("span",Ym,"no prior baseline"))],2)]),o("div",Jm,[t[12]||(t[12]=o("div",{class:"kpi-label"},"Errors (5xx)",-1)),o("div",Qm,c(e.stats?.severity?.error),1),o("div",Xm,c(e.stats?.unique?.error)+" unique",1)]),o("div",Zm,[t[13]||(t[13]=o("div",{class:"kpi-label"},"Warnings (4xx)",-1)),o("div",xm,c(e.stats?.severity?.warn),1),o("div",eh,c(e.stats?.unique?.warn)+" unique",1)]),o("div",th,[t[14]||(t[14]=o("div",{class:"kpi-label"},"Info (auth, 404)",-1)),o("div",oh,c(e.stats?.severity?.info),1),o("div",nh,c(e.stats?.unique?.info)+" unique",1)]),o("div",{class:A(["kpi-card",{"kpi-error":e.stats?.dropped>0}])},[t[15]||(t[15]=o("div",{class:"kpi-label"},"Captured",-1)),o("div",sh,c(e.total),1),o("div",rh,[b(" cap "+c(e.cap)+" \xB7 "+c(e.available?"live":"redis off")+" ",1),e.stats?.dropped>0?(l(),d("span",ih," \xB7 "+c(e.stats?.dropped)+" dropped",1)):f("v-if",!0)])],2)]),o("section",ah,[t[16]||(t[16]=de('
Volume \xB7 24h \xB7 1h bucketserror warn info
',1)),o("div",lh,[(l(!0),d(W,null,oe(e.stats?.buckets,(s,i)=>(l(),d("div",{class:"volume-bar",key:i,title:e.bucketTitle(s)},[o("span",{class:"seg seg-error",style:Ie({height:e.barPx(s,"error")+"px"})},null,4),o("span",{class:"seg seg-warn",style:Ie({height:e.barPx(s,"warn")+"px"})},null,4),o("span",{class:"seg seg-info",style:Ie({height:e.barPx(s,"info")+"px"})},null,4)],8,dh))),128))])]),R((l(),d("form",uh,[o("div",ch,[o("button",{type:"button",class:A({active:e.query?.bucket===""}),onClick:t[2]||(t[2]=s=>e.setBucket(""))},"All",2),o("button",{type:"button",class:A({active:e.query?.bucket==="error"}),onClick:t[3]||(t[3]=s=>e.setBucket("error"))},"5xx",2),o("button",{type:"button",class:A({active:e.query?.bucket==="warn"}),onClick:t[4]||(t[4]=s=>e.setBucket("warn"))},"4xx",2),o("button",{type:"button",class:A({active:e.query?.bucket==="info"}),onClick:t[5]||(t[5]=s=>e.setBucket("info"))},"Info",2)]),o("div",ph,[t[17]||(t[17]=o("svg",{class:"ui-icon search-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-search"})],-1)),R(o("input",fh,null,512),[[n,{state:e.viewState,set:s=>{e.query.search=s},value:e.query?.search,form:null,options:{}}]]),e.parsedFilterCount?(l(),d("span",mh,c(e.parsedFilterCount)+" filter"+c(e.parsedFilterCount>1?"s":""),1)):f("v-if",!0)]),o("div",hh,[t[19]||(t[19]=o("label",null,"Sort",-1)),R((l(),d("select",vh,[...t[18]||(t[18]=[o("option",{value:"recent"},"Most recent",-1),o("option",{value:"count"},"Most frequent",-1)])])),[[n,{state:e.viewState,set:s=>{e.query.sort=s},value:e.query?.sort,form:null,options:{}}]])]),o("div",yh,[t[21]||(t[21]=o("label",null,"Group",-1)),R((l(),d("select",gh,[...t[20]||(t[20]=[o("option",{value:""},"Off",-1),o("option",{value:"code"},"By code",-1),o("option",{value:"module"},"By module",-1)])])),[[n,{state:e.viewState,set:s=>{e.query.group=s},value:e.query?.group,form:null,options:{}}]])]),o("label",bh,[R(o("input",wh,null,512),[[n,{state:e.viewState,set:s=>{e.query.autoRefresh=s},value:e.query?.autoRefresh,form:null,options:{}}]]),t[22]||(t[22]=b(" Auto-refresh ",-1))]),o("button",{class:"btn btn-sm btn-icon",type:"button",title:"Refresh now",onClick:t[6]||(t[6]=s=>e.refreshNow()),"aria-label":"Refresh"},[...t[23]||(t[23]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1)])])])),[[r,e.viewState]]),e.visible?.length?f("v-if",!0):(l(),d("div",kh,"No errors captured.")),e.canLoadMore()&&e.visible?.length?(l(),d("div",Eh,[o("span",null,"Showing "+c(e.entries?.length)+" of "+c(e.total)+" captured",1),o("button",{class:"btn btn-sm",type:"button",onClick:t[7]||(t[7]=s=>e.loadMore())},"Load older")])):f("v-if",!0),e.visible?.length?(l(),d("div",Ch,[t[31]||(t[31]=de('
WhenSeverityModuleMessageCountStatus
',1)),(l(!0),d(W,null,oe(e.visible,(s,i)=>(l(),d("div",{class:A(["errors-row",{open:e.expanded[s?._key]}]),key:s?._key},[o("div",{class:"errors-row-main",onClick:a=>e.toggle(s)},[o("div",Sh,[o("div",Nh,c(e.relTime(s?.ts)),1),o("div",Rh,c(e.absTimeShort(s?.ts)),1)]),o("div",Dh,[o("span",{class:A(["sev-dot","sev-"+s?._bucket])},null,2),o("span",Th,c(e.fmt?.title(s?._bucket)),1)]),o("div",Ah,[o("span",Oh,c(s?.module),1)]),o("div",Ih,[o("strong",Ph,c(s?.displayMessage),1),s?.displayContext&&s?.displayContext!==s?.displayMessage?(l(),d("span",Vh,c(s?.displayContext),1)):f("v-if",!0),s?._detail?(l(),d("span",qh,c(s?._detail),1)):f("v-if",!0),s?._url?(l(),d("div",Mh,c(s?._url),1)):f("v-if",!0)]),o("div",Uh,[s?.count>1?(l(),d("span",$h,"\xD7"+c(s?.count),1)):f("v-if",!0),s?.count===1?(l(),d("span",Lh,"\xD71")):f("v-if",!0)]),o("div",Fh,[s?._status?(l(),d("span",{key:0,class:A(["status-pill","status-"+s?._bucket])},c(s?._status),3)):f("v-if",!0)])],8,_h),e.expanded[s?._key]?(l(),d("div",zh,[o("div",Hh,[o("button",{type:"button",class:A({active:e.detailTab[s?._key]==="raw"||!e.detailTab[s?._key]}),onClick:a=>e.detailTab[s._key]="raw"},"Raw",10,Bh),s?._stack?(l(),d("button",{key:0,type:"button",class:A({active:e.detailTab[s?._key]==="stack"}),onClick:a=>e.detailTab[s._key]="stack"},"Stack",10,jh)):f("v-if",!0),s?.count>1?(l(),d("button",{key:1,type:"button",class:A({active:e.detailTab[s?._key]==="related"}),onClick:a=>e.detailTab[s._key]="related"},"Related ("+c(s?.count)+")",11,Gh)):f("v-if",!0)]),o("div",Wh,[o("div",Kh,[(e.detailTab[s?._key]||"raw")==="raw"?(l(),d("pre",Yh,c(s?._detailJson),1)):f("v-if",!0),e.detailTab[s?._key]==="stack"?(l(),d("pre",Jh,c(s?._stack),1)):f("v-if",!0),e.detailTab[s?._key]==="related"?(l(),d("div",Qh,[(l(!0),d(W,null,oe(s?._related,(a,u)=>(l(),d("div",{class:"related-row",key:u},[o("span",Xh,c(e.absTimeShort(a?.ts)),1),o("span",Zh,c(a?._url),1),a?._status?(l(),d("span",{key:0,class:A(["status-pill","status-"+a?._bucket])},c(a?._status),3)):f("v-if",!0)]))),128))])):f("v-if",!0),o("div",xh,[o("button",{class:"btn btn-sm",type:"button",title:"Copy a curl that reproduces the request",onClick:a=>e.copyCurl(s)},[...t[24]||(t[24]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-code"})],-1),b(" Copy curl",-1)])],8,ev),o("button",{class:"btn btn-sm",type:"button",onClick:a=>e.copyJson(s)},[...t[25]||(t[25]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-clipboard"})],-1),b(" Copy JSON",-1)])],8,tv),e.copyHint?(l(),d("span",ov,c(e.copyHint),1)):f("v-if",!0)])]),o("aside",nv,[o("div",sv,[t[26]||(t[26]=o("div",{class:"aside-label"},"First seen",-1)),o("div",{class:"aside-value",title:e.absTime(s?._firstSeen)},c(e.relTime(s?._firstSeen)),9,rv)]),o("div",iv,[t[27]||(t[27]=o("div",{class:"aside-label"},"Last seen",-1)),o("div",{class:"aside-value",title:e.absTime(s?.ts)},c(e.relTime(s?.ts)),9,av)]),o("div",lv,[t[28]||(t[28]=o("div",{class:"aside-label"},"Occurrences",-1)),o("div",dv,[b(c(s?.count),1),s?._lastHourCount?(l(),d("span",uv," \xB7 "+c(s?._lastHourCount)+" this hour",1)):f("v-if",!0)])]),s?._repoId?(l(),d("div",cv,[t[29]||(t[29]=o("div",{class:"aside-label"},"Repository",-1)),o("a",{class:"aside-value",href:e.safeUrl("/r/"+s?._repoId)},c(s?._repoId),9,pv)])):f("v-if",!0),s?._url?(l(),d("div",fv,[t[30]||(t[30]=o("div",{class:"aside-label"},"URL",-1)),o("div",mv,c(s?._url),1)])):f("v-if",!0)])])])):f("v-if",!0)],2))),128))])):f("v-if",!0)])}var hv={class:"container paper-page admin-page overview-page"},vv={key:0,class:"admin-empty"},yv={key:1,class:"alert alert-danger",style:{margin:"12px 0"}},gv={key:2},bv={class:"ov-kpi-row"},wv={class:"ov-kpi-card"},kv={class:"ov-kpi-value"},Ev={class:"ov-kpi-sub"},Cv={class:"ov-kpi-card"},_v={class:"ov-kpi-sub"},Sv={class:"ov-kpi-card"},Nv={class:"ov-kpi-sub"},Rv={class:"ov-kpi-card"},Dv={class:"ov-kpi-sub"},Tv={class:"ov-kpi-card"},Av={class:"ov-kpi-value"},Ov={class:"ov-kpi-sub"},Iv={class:"ov-daily-row"},Pv={class:"ov-daily-card"},Vv={class:"ov-daily-value"},qv={class:"ov-daily-card"},Mv={class:"ov-daily-value"},Uv={class:"ov-daily-sub"},$v={class:"ov-daily-card"},Lv={class:"ov-daily-value"},Fv={class:"ov-chart-row"},zv={class:"ov-chart-card"},Hv={key:0,class:"ov-spark-bars"},Bv=["data-tip","aria-label"],jv={key:1,class:"ov-spark-x"},Gv={class:"ov-chart-card"},Wv={key:0,class:"ov-spark-bars"},Kv=["data-tip","aria-label"],Yv={key:1,class:"ov-spark-x"},Jv={class:"ov-chart-card"},Qv={class:"ov-chart-head"},Xv={class:"ov-chart-legend"},Zv={key:0,class:"ov-spark-bars"},xv=["data-tip","aria-label"],ey={key:1,class:"ov-spark-x"},ty={class:"ov-chart-card"},oy={key:0,class:"ov-spark-bars"},ny=["data-tip","aria-label"],sy={key:1,class:"ov-spark-x"},ry={class:"ov-triple-row"},iy={class:"ov-panel-card"},ay={class:"ov-panel-head"},ly={class:"ov-panel-meta"},dy={class:"ov-stacked-bar"},uy={class:"ov-bar-legend"},cy={href:"/admin/repositories",class:"ov-legend-item"},py={class:"ov-legend-n"},fy={href:"/admin/repositories",class:"ov-legend-item"},my={class:"ov-legend-n"},hy={href:"/admin/repositories",class:"ov-legend-item"},vy={class:"ov-legend-n"},yy={href:"/admin/repositories",class:"ov-legend-item"},gy={class:"ov-legend-n"},by={href:"/admin/repositories",class:"ov-legend-item"},wy={class:"ov-legend-n"},ky={class:"ov-panel-card"},Ey={class:"ov-panel-head"},Cy={class:"ov-panel-meta"},_y={class:"ov-error-bars"},Sy={class:"ov-ebar-row"},Ny={class:"ov-ebar-track"},Ry={class:"ov-ebar-n"},Dy={class:"ov-ebar-row"},Ty={class:"ov-ebar-track"},Ay={class:"ov-ebar-n"},Oy={class:"ov-ebar-row"},Iy={class:"ov-ebar-track"},Py={class:"ov-ebar-n"},Vy={key:0,class:"ov-panel-foot"},qy={href:"/admin/errors"},My={class:"ov-panel-card"},Uy={class:"ov-routes-table"},$y={class:"ov-route-row",href:"/admin/queues"},Ly={class:"ov-route-n"},Fy={class:"ov-route-n"},zy={class:"ov-route-row",href:"/admin/queues"},Hy={class:"ov-route-n"},By={class:"ov-route-n"},jy={class:"ov-route-row",href:"/admin/queues"},Gy={class:"ov-route-n"},Wy={class:"ov-route-n"},Ky={class:"ov-services-card"},Yy={class:"ov-services-head"},Jy={class:"ov-panel-meta"},Qy={class:"ov-services-grid"},Xy={class:"ov-svc"},Zy={class:"ov-svc-info"},xy={class:"ov-svc-meta"},eg={class:"ov-svc-detail"},tg={class:"ov-svc"},og={class:"ov-svc-info"},ng={key:0,class:"ov-svc-meta"},sg={key:1,class:"ov-svc-meta"},rg={class:"ov-svc"},ig={class:"ov-svc-info"},ag={key:0,class:"ov-svc-meta"},lg={key:1,class:"ov-svc-meta"},dg={class:"ov-svc"},ug={class:"ov-svc-info"},cg={key:0,class:"ov-svc-meta"},pg={key:1,class:"ov-svc-meta"},fg={class:"ov-svc"},mg={class:"ov-svc-info"},hg={class:"ov-svc-meta"},vg={class:"ov-panel-card ov-cache","aria-labelledby":"cache-heading"},yg={class:"ov-panel-head ov-performance-head"},gg={class:"ov-performance-window"},bg={key:0,class:"ov-performance-message ov-performance-warning",role:"alert"},wg={key:1,class:"ov-performance-empty",role:"status"},kg={key:0,class:"ov-performance-note"},Eg={key:1,class:"ov-performance-note"},Cg={key:2,class:"ov-performance-message ov-performance-warning",role:"status"},_g={key:3,class:"ov-metrics-scroll",tabindex:"0",role:"region","aria-label":"Cache storage budgets"},Sg={class:"ov-metrics-table"},Ng={scope:"row"},Rg={key:4,class:"ov-performance-note"},Dg={key:5,class:"ov-metrics-scroll",tabindex:"0",role:"region","aria-label":"Cache events and processing durations"},Tg={class:"ov-metrics-table"},Ag={scope:"row"},Og={key:6,class:"ov-performance-empty",role:"status"},Ig={class:"ov-performance-note"},Pg={class:"ov-panel-card ov-performance","aria-labelledby":"performance-heading"},Vg={class:"ov-panel-head ov-performance-head"},qg={class:"ov-performance-window"},Mg={key:0,class:"ov-performance-message ov-performance-warning",role:"alert"},Ug={key:1,class:"ov-performance-empty",role:"status"},$g={key:2},Lg={class:"paper-tabs ov-performance-tabs",role:"tablist","aria-label":"Performance metrics"},Fg=["aria-selected","tabindex"],zg=["aria-selected","tabindex"],Hg=["aria-selected","tabindex"],Bg={id:"performance-routes",role:"tabpanel","aria-labelledby":"performance-routes-tab"},jg={key:0,class:"ov-metrics-scroll",tabindex:"0",role:"region","aria-label":"Route latency metrics, scroll for more columns"},Gg={class:"ov-metrics-table"},Wg={scope:"row",class:"ov-metric-name"},Kg={class:"num"},Yg={class:"num"},Jg={class:"num"},Qg={class:"num"},Xg={class:"num"},Zg={key:1,class:"ov-performance-empty"},xg={id:"performance-processes",role:"tabpanel","aria-labelledby":"performance-processes-tab"},eb={key:0,class:"ov-performance-message ov-performance-warning",role:"status"},tb={key:1,class:"ov-metrics-scroll",tabindex:"0",role:"region","aria-label":"Process resource metrics, scroll for more columns"},ob={class:"ov-metrics-table"},sb={scope:"row",class:"ov-metric-name"},rb={key:0,class:"ov-metric-warn"},ib={class:"num"},ab={class:"num"},lb={class:"num"},db={class:"num"},ub={class:"num"},cb={class:"num"},pb={class:"num"},fb={class:"num"},mb={id:"performance-stages",role:"tabpanel","aria-labelledby":"performance-stages-tab"},hb={key:0,class:"ov-metrics-scroll",tabindex:"0",role:"region","aria-label":"Work stage metrics, scroll for more columns"},vb={class:"ov-metrics-table"},yb={scope:"row",class:"ov-metric-name"},gb={class:"num"},bb={class:"num"},wb={class:"num"},kb={key:1,class:"ov-performance-empty"};function Al(e,t){return l(),d("div",hv,[t[79]||(t[79]=de('
Admin \xA0/\xA0 Overview

Overview

',3)),e.loading?(l(),d("div",vv,"Loading overview\u2026")):f("v-if",!0),e.error?(l(),d("div",yv,[t[13]||(t[13]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),b(" "+c(e.error),1)])):f("v-if",!0),e.data?(l(),d("div",gv,[f(" \u2500\u2500 Top KPI row \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 "),o("section",bv,[o("div",wv,[t[14]||(t[14]=o("div",{class:"ov-kpi-label"},[b("Repositories "),o("span",{class:"ov-dot ov-dot-ok"})],-1)),o("div",kv,c(e.humanNum(e.data?.repos?.total)),1),o("div",Ev,"+"+c(e.data?.repos?.newRepos24h)+" \xB7 last 24h",1)]),o("div",Cv,[t[15]||(t[15]=o("div",{class:"ov-kpi-label"},"CPU",-1)),o("div",{class:A(["ov-kpi-value",{"ov-val-warn":e.data?.system?.cpuPercent>80}])},c(e.data?.system?.cpuPercent)+"%",3),o("div",_v,c(e.data?.system?.cpuCount)+" cores \xB7 load "+c(e.data?.system?.loadAvg?.[0]?.toFixed(1)),1)]),o("div",Sv,[t[16]||(t[16]=o("div",{class:"ov-kpi-label"},"Memory",-1)),o("div",{class:A(["ov-kpi-value",{"ov-val-warn":e.data?.system?.memPercent>85}])},c(e.data?.system?.memPercent)+"%",3),o("div",Nv,c(e.humanBytes(e.data?.system?.memUsed))+" / "+c(e.humanBytes(e.data?.system?.memTotal)),1)]),o("div",Rv,[t[17]||(t[17]=o("div",{class:"ov-kpi-label"},"Disk",-1)),o("div",{class:A(["ov-kpi-value",{"ov-val-warn":e.data?.system?.diskPercent>85}])},c(e.data?.system?.diskPercent)+"%",3),o("div",Dv,c(e.humanBytes(e.data?.system?.diskUsed))+" / "+c(e.humanBytes(e.data?.system?.diskTotal))+" \xB7 "+c(e.data?.system?.diskMount),1)]),o("div",Tv,[t[18]||(t[18]=o("div",{class:"ov-kpi-label"},"Uptime",-1)),o("div",Av,c(e.humanDuration(e.data?.system?.uptime)),1),o("div",Ov,c(e.data?.system?.nodeVersion)+" \xB7 "+c(e.data?.system?.platform),1)])]),f(" \u2500\u2500 Daily activity highlights \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 "),o("section",Iv,[o("div",Pv,[t[19]||(t[19]=o("div",{class:"ov-daily-label"},"New repos today",-1)),o("div",Vv,"+"+c(e.fmt?.number(e.data?.daily?.today?.repositories)),1),t[20]||(t[20]=o("div",{class:"ov-daily-sub"},"since yesterday",-1))]),o("div",qv,[t[21]||(t[21]=o("div",{class:"ov-daily-label"},"New users today",-1)),o("div",Mv,"+"+c(e.fmt?.number(e.data?.daily?.today?.users)),1),o("div",Uv,c(e.fmt?.number(e.data?.users?.total))+" total users",1)]),o("div",$v,[t[22]||(t[22]=o("div",{class:"ov-daily-label"},"Page views today",-1)),o("div",Lv,"+"+c(e.fmt?.number(e.data?.daily?.today?.pageViews)),1),t[23]||(t[23]=o("div",{class:"ov-daily-sub"},"since yesterday",-1))])]),f(" \u2500\u2500 Daily charts \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 "),o("section",Fv,[o("div",zv,[t[24]||(t[24]=o("div",{class:"ov-chart-head"},[o("span",{class:"ov-chart-title"},"Daily page views \xB7 30d"),o("span",{class:"ov-chart-legend"},[o("span",{class:"ov-dot-legend ov-dot-accent"}),b("views/day")])],-1)),e.data?.history?.length?(l(),d("div",Hv,[(l(!0),d(W,null,oe(e.data?.history,(n,r)=>(l(),d("div",{class:"ov-spark-col has-tip",key:r,"data-tip":e.historyLabel(n)+": +"+e.fmt?.number(n?.dailyPageViews)+" views","aria-label":e.historyLabel(n)+": +"+e.fmt?.number(n?.dailyPageViews)+" views"},[o("span",{class:"ov-spark-fill",style:Ie({height:e.historyBarH(n,"dailyPageViews")+"px"})},null,4)],8,Bv))),128))])):f("v-if",!0),e.data?.history?.length?(l(),d("div",jv,[o("span",null,c(e.historyLabel(e.data?.history[0])),1),o("span",null,c(e.historyLabel(e.data?.history[Math?.floor(e.data?.history?.length/2)])),1),o("span",null,c(e.historyLabel(e.data?.history[e.data?.history?.length-1])),1)])):f("v-if",!0)]),o("div",Gv,[t[25]||(t[25]=o("div",{class:"ov-chart-head"},[o("span",{class:"ov-chart-title"},"New repos \xB7 30d"),o("span",{class:"ov-chart-legend"},[o("span",{class:"ov-dot-legend ov-dot-ok-fill"}),b("repos/day")])],-1)),e.data?.history?.length?(l(),d("div",Wv,[(l(!0),d(W,null,oe(e.data?.history,(n,r)=>(l(),d("div",{class:"ov-spark-col has-tip",key:r,"data-tip":e.historyLabel(n)+": +"+e.fmt?.number(n?.dailyRepositories)+" repos","aria-label":e.historyLabel(n)+": +"+e.fmt?.number(n?.dailyRepositories)+" repos"},[o("span",{class:"ov-spark-fill ov-spark-fill-alt",style:Ie({height:e.historyBarH(n,"dailyRepositories")+"px"})},null,4)],8,Kv))),128))])):f("v-if",!0),e.data?.history?.length?(l(),d("div",Yv,[o("span",null,c(e.historyLabel(e.data?.history[0])),1),o("span",null,c(e.historyLabel(e.data?.history[Math?.floor(e.data?.history?.length/2)])),1),o("span",null,c(e.historyLabel(e.data?.history[e.data?.history?.length-1])),1)])):f("v-if",!0)]),o("div",Jv,[o("div",Qv,[t[27]||(t[27]=o("span",{class:"ov-chart-title"},"Users \xB7 30d",-1)),o("span",Xv,[t[26]||(t[26]=o("span",{class:"ov-dot-legend ov-dot-user-fill"},null,-1)),b("total users \xB7 "+c(e.fmt?.number(e.historyRange("nbUsers").min))+"\u2013"+c(e.fmt?.number(e.historyRange("nbUsers").max)),1)])]),e.data?.history?.length?(l(),d("div",Zv,[(l(!0),d(W,null,oe(e.data?.history,(n,r)=>(l(),d("div",{class:"ov-spark-col has-tip",key:r,"data-tip":e.historyLabel(n)+": "+e.fmt?.number(n?.nbUsers)+" users","aria-label":e.historyLabel(n)+": "+e.fmt?.number(n?.nbUsers)+" users"},[o("span",{class:"ov-spark-fill ov-spark-fill-user",style:Ie({height:e.historyRangeH(n,"nbUsers")+"px"})},null,4)],8,xv))),128))])):f("v-if",!0),e.data?.history?.length?(l(),d("div",ey,[o("span",null,c(e.historyLabel(e.data?.history[0])),1),o("span",null,c(e.historyLabel(e.data?.history[Math?.floor(e.data?.history?.length/2)])),1),o("span",null,c(e.historyLabel(e.data?.history[e.data?.history?.length-1])),1)])):f("v-if",!0)]),o("div",ty,[t[28]||(t[28]=o("div",{class:"ov-chart-head"},[o("span",{class:"ov-chart-title"},"New users \xB7 30d"),o("span",{class:"ov-chart-legend"},[o("span",{class:"ov-dot-legend ov-dot-new-user-fill"}),b("users/day")])],-1)),e.data?.history?.length?(l(),d("div",oy,[(l(!0),d(W,null,oe(e.data?.history,(n,r)=>(l(),d("div",{class:"ov-spark-col has-tip",key:r,"data-tip":e.historyLabel(n)+": +"+e.fmt?.number(n?.dailyUsers)+" users","aria-label":e.historyLabel(n)+": +"+e.fmt?.number(n?.dailyUsers)+" users"},[o("span",{class:"ov-spark-fill ov-spark-fill-new-user",style:Ie({height:e.historyBarH(n,"dailyUsers")+"px"})},null,4)],8,ny))),128))])):f("v-if",!0),e.data?.history?.length?(l(),d("div",sy,[o("span",null,c(e.historyLabel(e.data?.history[0])),1),o("span",null,c(e.historyLabel(e.data?.history[Math?.floor(e.data?.history?.length/2)])),1),o("span",null,c(e.historyLabel(e.data?.history[e.data?.history?.length-1])),1)])):f("v-if",!0)])]),f(" \u2500\u2500 Three-panel row: Status / Errors / Queues \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 "),o("section",ry,[f(" Repo status breakdown "),o("div",iy,[o("div",ay,[t[29]||(t[29]=o("span",{class:"ov-panel-title"},"Repo status",-1)),o("span",ly,c(e.fmt?.number(e.data?.repos?.total))+" total",1)]),o("div",dy,[o("span",{class:"ov-bar-seg ov-bar-ready",title:"Ready",style:Ie({width:e.barPct("ready")+"%"})},null,4),o("span",{class:"ov-bar-seg ov-bar-preparing",title:"Preparing",style:Ie({width:e.barPct("preparing")+"%"})},null,4),o("span",{class:"ov-bar-seg ov-bar-error",title:"Error",style:Ie({width:e.barPct("error")+"%"})},null,4),o("span",{class:"ov-bar-seg ov-bar-expired",title:"Expired",style:Ie({width:e.barPct("expired")+"%"})},null,4),o("span",{class:"ov-bar-seg ov-bar-removed",title:"Removed",style:Ie({width:e.barPct("removed")+"%"})},null,4)]),o("div",uy,[o("a",cy,[t[30]||(t[30]=o("span",{class:"ov-swatch ov-bar-ready"},null,-1)),t[31]||(t[31]=b(" ready ",-1)),o("span",py,c(e.fmt?.number(e.statusCount("ready"))),1)]),o("a",fy,[t[32]||(t[32]=o("span",{class:"ov-swatch ov-bar-preparing"},null,-1)),t[33]||(t[33]=b(" preparing ",-1)),o("span",my,c(e.fmt?.number(e.statusCount("preparing")+e.statusCount("download"))),1)]),o("a",hy,[t[34]||(t[34]=o("span",{class:"ov-swatch ov-bar-error"},null,-1)),t[35]||(t[35]=b(" error ",-1)),o("span",vy,c(e.fmt?.number(e.statusCount("error"))),1)]),o("a",yy,[t[36]||(t[36]=o("span",{class:"ov-swatch ov-bar-expired"},null,-1)),t[37]||(t[37]=b(" expired ",-1)),o("span",gy,c(e.fmt?.number(e.statusCount("expired")+e.statusCount("expiring"))),1)]),o("a",by,[t[38]||(t[38]=o("span",{class:"ov-swatch ov-bar-removed"},null,-1)),t[39]||(t[39]=b(" removed ",-1)),o("span",wy,c(e.fmt?.number(e.statusCount("removed")+e.statusCount("removing"))),1)])])]),f(" Error breakdown "),o("div",ky,[o("div",Ey,[t[40]||(t[40]=o("span",{class:"ov-panel-title"},"Errors \xB7 24h",-1)),o("span",Cy,c(e.data?.errors?.last24h)+" total",1)]),o("div",_y,[o("div",Sy,[t[41]||(t[41]=o("span",{class:"ov-ebar-label"},"5xx",-1)),o("span",Ny,[o("span",{class:"ov-ebar-fill ov-ebar-error",style:Ie({width:e.errPct("error")+"%"})},null,4)]),o("span",Ry,c(e.data?.errors?.severity?.error),1)]),o("div",Dy,[t[42]||(t[42]=o("span",{class:"ov-ebar-label"},"4xx",-1)),o("span",Ty,[o("span",{class:"ov-ebar-fill ov-ebar-warn",style:Ie({width:e.errPct("warn")+"%"})},null,4)]),o("span",Ay,c(e.data?.errors?.severity?.warn),1)]),o("div",Oy,[t[43]||(t[43]=o("span",{class:"ov-ebar-label"},"Info",-1)),o("span",Iy,[o("span",{class:"ov-ebar-fill ov-ebar-info",style:Ie({width:e.errPct("info")+"%"})},null,4)]),o("span",Py,c(e.data?.errors?.severity?.info),1)])]),e.data?.repos?.recentErrors24h?(l(),d("div",Vy,[o("a",qy,c(e.data?.repos?.recentErrors24h)+" repos in error state \u2192",1)])):f("v-if",!0)]),f(" Top routes / queues "),o("div",My,[t[48]||(t[48]=o("div",{class:"ov-panel-head"},[o("span",{class:"ov-panel-title"},"Queues"),o("span",{class:"ov-panel-meta"},"by state")],-1)),o("div",Uy,[t[47]||(t[47]=de('
QueueActiveWaitFailed
',1)),o("a",$y,[t[44]||(t[44]=o("span",{class:"ov-route-name"},"download",-1)),o("span",Ly,c(e.data?.queues?.download?.active),1),o("span",Fy,c(e.data?.queues?.download?.waiting),1),o("span",{class:A(["ov-route-n ov-route-lat",{"ov-n-bad":e.data?.queues?.download?.failed>0}])},c(e.data?.queues?.download?.failed),3)]),o("a",zy,[t[45]||(t[45]=o("span",{class:"ov-route-name"},"remove",-1)),o("span",Hy,c(e.data?.queues?.remove?.active),1),o("span",By,c(e.data?.queues?.remove?.waiting),1),o("span",{class:A(["ov-route-n ov-route-lat",{"ov-n-bad":e.data?.queues?.remove?.failed>0}])},c(e.data?.queues?.remove?.failed),3)]),o("a",jy,[t[46]||(t[46]=o("span",{class:"ov-route-name"},"cache",-1)),o("span",Gy,c(e.data?.queues?.cache?.active),1),o("span",Wy,c(e.data?.queues?.cache?.waiting),1),o("span",{class:A(["ov-route-n ov-route-lat",{"ov-n-bad":e.data?.queues?.cache?.failed>0}])},c(e.data?.queues?.cache?.failed),3)])])])]),f(" \u2500\u2500 Services bar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 "),o("section",Ky,[o("div",Yy,[t[49]||(t[49]=o("span",{class:"ov-panel-title"},"Services",-1)),o("span",Jy,c(e.fmt?.number(e.data?.users?.total))+" users \xB7 "+c(e.data?.conferences?.total)+" conferences",1)]),o("div",Qy,[o("div",Xy,[t[51]||(t[51]=o("span",{class:"ov-svc-dot ov-dot-ok"},null,-1)),o("div",Zy,[t[50]||(t[50]=o("span",{class:"ov-svc-name"},"web",-1)),o("span",xy,c(e.data?.system?.nodeVersion),1)]),o("span",eg,"uptime "+c(e.humanDuration(e.data?.system?.uptime)),1)]),o("div",tg,[o("span",{class:A(["ov-svc-dot",e.queueTotal(e.data?.queues?.download)>0?"ov-dot-ok":"ov-dot-idle"])},null,2),o("div",og,[t[52]||(t[52]=o("span",{class:"ov-svc-name"},"download",-1)),e.queueTotal(e.data?.queues?.download)?(l(),d("span",ng,c(e.queueTotal(e.data?.queues?.download))+" jobs",1)):f("v-if",!0),e.queueTotal(e.data?.queues?.download)?f("v-if",!0):(l(),d("span",sg,"idle"))])]),o("div",rg,[o("span",{class:A(["ov-svc-dot",e.queueTotal(e.data?.queues?.cache)>0?"ov-dot-ok":"ov-dot-idle"])},null,2),o("div",ig,[t[53]||(t[53]=o("span",{class:"ov-svc-name"},"cache",-1)),e.queueTotal(e.data?.queues?.cache)?(l(),d("span",ag,c(e.queueTotal(e.data?.queues?.cache))+" jobs",1)):f("v-if",!0),e.queueTotal(e.data?.queues?.cache)?f("v-if",!0):(l(),d("span",lg,"idle"))])]),o("div",dg,[o("span",{class:A(["ov-svc-dot",e.queueTotal(e.data?.queues?.remove)>0?"ov-dot-ok":"ov-dot-idle"])},null,2),o("div",ug,[t[54]||(t[54]=o("span",{class:"ov-svc-name"},"remove",-1)),e.queueTotal(e.data?.queues?.remove)?(l(),d("span",cg,c(e.queueTotal(e.data?.queues?.remove))+" jobs",1)):f("v-if",!0),e.queueTotal(e.data?.queues?.remove)?f("v-if",!0):(l(),d("span",pg,"idle"))])]),o("div",fg,[o("span",{class:A(["ov-svc-dot",e.data?.repos?.recentErrors24h>10?"ov-dot-warn":"ov-dot-ok"])},null,2),o("div",mg,[t[55]||(t[55]=o("span",{class:"ov-svc-name"},"errors",-1)),o("span",hg,c(e.data?.errors?.last24h)+" / 24h",1)])])])])])):f("v-if",!0),o("section",vg,[o("div",yg,[t[60]||(t[60]=o("div",null,[o("h2",{class:"ov-panel-title",id:"cache-heading"},"Cache"),o("p",{class:"ov-performance-note"},"Shared storage, repeated reads and anonymization work \xB7 refreshes every 30 seconds")],-1)),o("div",gg,[t[58]||(t[58]=o("label",{for:"cache-window"},"Time range",-1)),R(o("select",{id:"cache-window",class:"form-control form-control-sm","onUpdate:modelValue":t[0]||(t[0]=n=>e.cacheMinutes=n),onChange:t[1]||(t[1]=n=>e.loadCache())},[...t[56]||(t[56]=[o("option",{value:15},"Last 15 minutes",-1),o("option",{value:60},"Last hour",-1),o("option",{value:1440},"Last 24 hours",-1),o("option",{value:10080},"Last 7 days",-1)])],544),[[To,e.cacheMinutes,void 0,{number:!0}]]),t[59]||(t[59]=o("label",{for:"cache-traffic"},"Traffic",-1)),R(o("select",{id:"cache-traffic",class:"form-control form-control-sm","onUpdate:modelValue":t[2]||(t[2]=n=>e.cacheTraffic=n)},[...t[57]||(t[57]=[de('',6)])],512),[[To,e.cacheTraffic]])])]),e.cacheError?(l(),d("div",bg,[o("span",null,c(e.cacheError),1),o("button",{type:"button",class:"btn btn-sm",onClick:t[3]||(t[3]=n=>e.loadCache())},"Retry")])):f("v-if",!0),!e.cacheReport&&!e.cacheError?(l(),d("p",wg,"Loading cache monitoring\u2026")):f("v-if",!0),e.cacheReport?.available?(l(),d(W,{key:2},[e.cacheReport.enabled?f("v-if",!0):(l(),d("p",kg,"Shared blob storage is disabled. Inspection and legacy-cache activity are still measured.")),e.cacheReport.filesystemSupported?f("v-if",!0):(l(),d("p",Eg,"Shared blobs require a local filesystem. The configured storage continues to use its existing cache.")),e.cacheReport.dropped?(l(),d("p",Cg,c(e.cacheReport.dropped)+" telemetry events were dropped. Totals may be incomplete.",1)):f("v-if",!0),e.cacheReport.source?(l(),d("div",_g,[o("table",Sg,[t[61]||(t[61]=o("caption",{class:"sr-only"},"Current shared-cache storage and byte budgets",-1)),t[62]||(t[62]=o("thead",null,[o("tr",null,[o("th",{scope:"col"},"Pool"),o("th",{scope:"col"},"Allocated / budget"),o("th",{scope:"col"},"Reserved for fills"),o("th",{scope:"col"},"Original bytes"),o("th",{scope:"col"},"Blobs"),o("th",{scope:"col"},"Active readers")])],-1)),o("tbody",null,[(l(!0),d(W,null,oe([{name:"Source blobs",data:e.cacheReport.source},{name:"Transformed output",data:e.cacheReport.results}],n=>R((l(),d("tr",{key:n.name},[o("th",Ng,c(n.name),1),o("td",null,c(e.humanBytes(n.data?.allocatedBytes))+" / "+c(e.humanBytes(n.data?.budgetBytes)),1),o("td",null,c(e.humanBytes(n.data?.reservedBytes)),1),o("td",null,c(e.humanBytes(n.data?.originalBytes)),1),o("td",null,c(n.data?.blobs),1),o("td",null,c(n.data?.activeReaders),1)])),[[j,n.data]])),128))])])])):f("v-if",!0),e.cacheReport.source?(l(),d("p",Rg,"Source request hit rate: "+c(e.cacheRate("source","count"))+" \xB7 Source byte hit rate: "+c(e.cacheRate("source","bytes"))+" \xB7 Decision hit rate: "+c(e.cacheRate("decision","count")),1)):f("v-if",!0),t[65]||(t[65]=o("p",{class:"ov-performance-note"},"Reuse counts measure consecutive reads of the same blob within each interval. Codec timings are elapsed stream time, not CPU time; eviction times measure how long a blob was idle. Known monitors are identified by request metadata; other automation may remain in file reads.",-1)),e.cacheRows().length?(l(),d("div",Dg,[o("table",Tg,[t[63]||(t[63]=o("caption",{class:"sr-only"},"Cache events for the selected time range and traffic",-1)),t[64]||(t[64]=o("thead",null,[o("tr",null,[o("th",{scope:"col"},"Event"),o("th",{scope:"col"},"Traffic"),o("th",{scope:"col"},"Count"),o("th",{scope:"col"},"Bytes"),o("th",{scope:"col"},"Mean measured time"),o("th",{scope:"col"},"p95 bound")])],-1)),o("tbody",null,[(l(!0),d(W,null,oe(e.cacheRows(),n=>(l(),d("tr",{key:n.name+":"+n.traffic},[o("th",Ag,c(e.cacheEventName(n.name)),1),o("td",null,c(n.traffic),1),o("td",null,c(n.count),1),o("td",null,c(e.humanBytes(n.bytes)),1),o("td",null,c(n.ms?(n.ms/n.count).toFixed(2)+" ms":"Not timed"),1),o("td",null,c(e.cacheP95(n)),1)]))),128))])])])):(l(),d("p",Og,"No cache events in this time range for the selected traffic.")),o("p",Ig,"Updated "+c(e.sampleAge(e.cacheReport))+" seconds ago. Minute history is retained for 48 hours; hourly history for 30 days.",1)],64)):f("v-if",!0)]),o("section",Pg,[o("div",Vg,[t[68]||(t[68]=o("div",null,[o("h2",{class:"ov-panel-title",id:"performance-heading"},"Request performance"),o("p",{class:"ov-performance-note"},"Request latency and process health \xB7 refreshes every 30 seconds")],-1)),o("div",qg,[t[67]||(t[67]=o("label",{for:"performance-window"},"Time range",-1)),R(o("select",{id:"performance-window",class:"form-control form-control-sm","onUpdate:modelValue":t[4]||(t[4]=n=>e.performanceMinutes=n),onChange:t[5]||(t[5]=n=>e.loadPerformance()),"aria-label":"Performance time range"},[...t[66]||(t[66]=[o("option",{value:15},"Last 15 minutes",-1),o("option",{value:60},"Last hour",-1)])],544),[[To,e.performanceMinutes,void 0,{number:!0}]])])]),e.performanceError?(l(),d("div",Mg,[t[69]||(t[69]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),o("span",null,c(e.performanceError),1),o("button",{type:"button",class:"btn btn-sm",onClick:t[6]||(t[6]=n=>e.loadPerformance())},"Retry")])):f("v-if",!0),!e.performance&&!e.performanceError?(l(),d("p",Ug,"Loading performance monitoring\u2026")):f("v-if",!0),e.performance?.available?(l(),d("div",$g,[o("div",Lg,[o("button",{id:"performance-routes-tab",type:"button",class:A(["paper-tab",{active:e.performanceTab==="routes"}]),role:"tab","aria-selected":e.performanceTab==="routes",tabindex:e.performanceTab==="routes"?0:-1,"aria-controls":"performance-routes",onClick:t[7]||(t[7]=n=>e.performanceTab="routes"),onKeydown:t[8]||(t[8]=n=>e.previewTabKeydown(n))},"Routes",42,Fg),o("button",{id:"performance-processes-tab",type:"button",class:A(["paper-tab",{active:e.performanceTab==="processes"}]),role:"tab","aria-selected":e.performanceTab==="processes",tabindex:e.performanceTab==="processes"?0:-1,"aria-controls":"performance-processes",onClick:t[9]||(t[9]=n=>e.performanceTab="processes"),onKeydown:t[10]||(t[10]=n=>e.previewTabKeydown(n))},"Processes",42,zg),o("button",{id:"performance-stages-tab",type:"button",class:A(["paper-tab",{active:e.performanceTab==="stages"}]),role:"tab","aria-selected":e.performanceTab==="stages",tabindex:e.performanceTab==="stages"?0:-1,"aria-controls":"performance-stages",onClick:t[11]||(t[11]=n=>e.performanceTab="stages"),onKeydown:t[12]||(t[12]=n=>e.previewTabKeydown(n))},"Work stages",42,Hg)]),R(o("div",Bg,[e.performance.routes?.length?(l(),d("div",jg,[o("table",Gg,[t[70]||(t[70]=o("caption",{class:"sr-only"},"Route latency for the selected time range",-1)),t[71]||(t[71]=o("thead",null,[o("tr",null,[o("th",{scope:"col"},"Route"),o("th",{scope:"col",class:"num"},"Requests"),o("th",{scope:"col",class:"num"},"Average"),o("th",{scope:"col",class:"num"},"First byte p95"),o("th",{scope:"col",class:"num"},"p95"),o("th",{scope:"col",class:"num"},"p99"),o("th",{scope:"col",class:"num"},"Interrupted"),o("th",{scope:"col",class:"num"},"5xx"),o("th",{scope:"col",class:"num"},"Slow")])],-1)),o("tbody",null,[(l(!0),d(W,null,oe(e.performance.routes,n=>(l(),d("tr",{key:n.service+n.method+n.route},[o("th",Wg,[o("span",null,c(n.route),1),o("small",null,c(n.service)+" \xB7 "+c(n.method),1)]),o("td",Kg,c(e.fmt.number(n.count)),1),o("td",Yg,c(e.formatMs(n.avgMs)),1),o("td",Jg,c(e.firstByteBound(n)),1),o("td",Qg,c(e.latencyBound(n,"p95UpperMs")),1),o("td",Xg,c(e.latencyBound(n,"p99UpperMs")),1),o("td",{class:A(["num",{"ov-metric-warn":n.aborted>0}])},c(e.fmt.number(n.aborted)),3),o("td",{class:A(["num",{"ov-metric-warn":n.errors>0}])},c(e.fmt.number(n.errors)),3),o("td",{class:A(["num",{"ov-metric-warn":n.slow>0}])},c(e.fmt.number(n.slow)),3)]))),128))])])])):(l(),d("p",Zg,"No recorded requests in this time range yet."))],512),[[j,e.performanceTab==="routes"]]),R(o("div",xg,[t[75]||(t[75]=o("p",{class:"ov-performance-note"},"API and streamer processes \xB7 latest sample per instance",-1)),e.performance.instances?.length?(l(),d("div",tb,[o("table",ob,[t[73]||(t[73]=o("caption",{class:"sr-only"},"API and streamer process resource usage",-1)),t[74]||(t[74]=o("thead",null,[o("tr",null,[o("th",{scope:"col"},"Process"),o("th",{scope:"col",class:"num"},"RSS / limit"),o("th",{scope:"col",class:"num"},"CPU"),o("th",{scope:"col",class:"num"},"Event loop p95"),o("th",{scope:"col",class:"num"},"Active requests"),o("th",{scope:"col",class:"num"},"Sockets / CLOSE_WAIT"),o("th",{scope:"col",class:"num"},"Workers / waiting"),o("th",{scope:"col",class:"num"},"Sample age"),o("th",{scope:"col",class:"num"},"Dropped batches / metrics")])],-1)),o("tbody",null,[(l(!0),d(W,null,oe(e.performance.instances,n=>(l(),d("tr",{key:n.instance,class:A({"ov-metric-warning-row":e.performanceWarning(n)})},[o("th",sb,[o("span",null,c(n.instance),1),e.performanceWarning(n)?(l(),d("small",rb,[...t[72]||(t[72]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1),b(" Needs attention",-1)])])):f("v-if",!0)]),o("td",ib,[b(c(e.humanBytes(n.memory.rss))+" / "+c(e.humanBytes(n.memoryLimitBytes)),1),o("small",null,"Peak "+c(e.humanBytes(e.peakRss(n))),1)]),o("td",ab,c(n.cpuPercent.toFixed(1))+"%",1),o("td",lb,c(n.eventLoop.p95Ms.toFixed(1))+" ms",1),o("td",db,c(n.activeRequests),1),o("td",ub,c(n.sockets?.descriptors??"Unavailable")+" / "+c(n.sockets?.closeWait??"Unavailable"),1),o("td",cb,c(n.workers?.running??0)+" / "+c(n.workers?.waiting??0),1),o("td",pb,c(e.sampleAge(n))+" s",1),o("td",fb,c(n.droppedBatches)+" / "+c(n.droppedMetrics),1)],2))),128))])])])):(l(),d("div",eb,"No recent process samples. Monitoring coverage is incomplete."))],512),[[j,e.performanceTab==="processes"]]),R(o("div",mb,[e.performance.stages?.some(n=>n.metric!=="first_byte")?(l(),d("div",hb,[o("table",vb,[t[76]||(t[76]=o("caption",{class:"sr-only"},"Work stages and cache results",-1)),t[77]||(t[77]=o("thead",null,[o("tr",null,[o("th",{scope:"col"},"Work stage"),o("th",{scope:"col",class:"num"},"Samples"),o("th",{scope:"col",class:"num"},"Average"),o("th",{scope:"col",class:"num"},"p95")])],-1)),o("tbody",null,[(l(!0),d(W,null,oe(e.performance.stages.filter(n=>n.metric!=="first_byte"),n=>(l(),d("tr",{key:n.service+n.metric},[o("th",yb,[o("span",null,c(n.metric),1),o("small",null,c(n.service),1)]),o("td",gb,c(e.fmt.number(n.count)),1),o("td",bb,c(e.formatMs(n.avgMs)),1),o("td",wb,c(e.latencyBound(n,"p95UpperMs")),1)]))),128))])])])):(l(),d("p",kb,"No recorded work stages or cache results in this time range yet."))],512),[[j,e.performanceTab==="stages"]]),t[78]||(t[78]=o("details",{class:"ov-performance-help"},[o("summary",null,"How to read these metrics"),o("p",null,"Latency includes upstream waits and response transfer. Percentiles show histogram bucket upper bounds, not exact timings. Process rows marked \u201CNeeds attention\u201D have stale samples, dropped monitoring data, CLOSE_WAIT sockets, high event loop delay, or high memory usage.")],-1))])):f("v-if",!0)])])}var Eb={class:"container paper-page admin-page"},Cb={class:"q-header"},_b={class:"q-header-actions"},Sb={class:"q-range-btns"},Nb={class:"q-cards"},Rb=["aria-pressed","onKeydown","onClick"],Db={class:"q-card-head"},Tb=["textContent"],Ab=["textContent"],Ob={class:"q-card-sub"},Ib={key:0,class:"q-card-bar"},Pb={key:0,class:"q-detail"},Vb={class:"q-throughput"},qb={class:"q-section-label"},Mb={class:"q-section-right"},Ub={class:"q-stats-panel"},$b={class:"q-section-label"},Lb={class:"q-stats-grid"},Fb={class:"q-stat"},zb=["textContent"],Hb={class:"q-stat"},Bb=["textContent"],jb={class:"q-stat"},Gb=["textContent"],Wb={class:"q-stat"},Kb=["textContent"],Yb={class:"q-stat"},Jb=["textContent"],Qb={class:"q-stat"},Xb=["textContent"],Zb={class:"q-stats-actions"},xb=["disabled"],e1={class:"q-jobs"},t1={class:"q-jobs-header"},o1={class:"q-section-label"},n1={class:"q-state-filters"},s1={class:"q-state-toggle"},r1={type:"checkbox"},i1={class:"q-search-row"},a1={type:"search",class:"form-control",placeholder:"Search by job/repo id\u2026",autocomplete:"off"},l1={class:"q-auto-refresh"},d1={type:"checkbox"},u1={key:0,class:"q-table"},c1=["onClick"],p1={class:"q-cell-state"},f1=["textContent"],m1=["textContent"],h1={class:"q-cell-id"},v1=["textContent","href"],y1={class:"q-cell-payload"},g1=["textContent"],b1={key:0,class:"q-payload-detail"},w1=["textContent"],k1=["textContent"],E1={class:"q-cell-progress"},C1={key:0,class:"q-progress-wrap"},_1=["textContent"],S1={class:"q-cell-actions"},N1=["onClick"],R1=["onClick"],D1={key:0,class:"q-detail-row"},T1={colspan:"7"},A1={class:"q-job-detail"},O1={class:"q-job-detail-grid"},I1={class:"q-job-detail-item"},P1={class:"q-job-detail-value"},V1=["textContent","href"],q1={class:"q-job-detail-item"},M1={class:"q-job-detail-value"},U1=["textContent"],$1={key:0,class:"q-job-detail-item"},L1=["textContent"],F1={key:1,class:"q-job-detail-item"},z1=["textContent"],H1={key:2,class:"q-job-detail-item"},B1={class:"q-job-detail-value"},j1={key:3,class:"q-job-detail-item"},G1=["textContent"],W1={key:4,class:"q-job-detail-item"},K1=["textContent"],Y1={key:5,class:"q-job-detail-item"},J1=["textContent"],Q1={key:6,class:"q-job-detail-item"},X1=["textContent"],Z1={key:7,class:"q-job-detail-item"},x1=["textContent"],ew={key:0,class:"q-job-detail-error"},tw=["textContent"],ow={key:1},nw=["textContent"],sw={class:"q-job-detail-actions"},rw=["onClick"],iw=["onClick"],aw=["href"],lw={key:1,class:"paper-table-empty",style:{border:"1px solid var(--border-color)","border-radius":"10px",background:"var(--paper-card)"}},dw={key:0},uw={key:1};function Ol(e,t){let n=ve("field");return l(),d("div",Eb,[t[48]||(t[48]=o("div",{class:"paper-crumbs"},[b("Admin \xA0/\xA0 "),o("span",{class:"here"},"Queues")],-1)),o("div",Cb,[t[12]||(t[12]=o("h1",{class:"paper-page-title"},"Queues",-1)),o("div",_b,[o("div",Sb,[o("button",{class:A(["btn btn-sm",{active:e.range=="1h"}]),onClick:t[0]||(t[0]=r=>e.setRange("1h"))},"1h",2),o("button",{class:A(["btn btn-sm",{active:e.range=="6h"}]),onClick:t[1]||(t[1]=r=>e.setRange("6h"))},"6h",2),o("button",{class:A(["btn btn-sm",{active:e.range=="24h"}]),onClick:t[2]||(t[2]=r=>e.setRange("24h"))},"24h",2),o("button",{class:A(["btn btn-sm",{active:e.range=="7d"}]),onClick:t[3]||(t[3]=r=>e.setRange("7d"))},"7d",2)]),o("button",{class:"btn btn-sm",onClick:t[4]||(t[4]=r=>e.pauseAll())},"Pause all"),o("button",{class:"btn btn-sm btn-danger-soft",onClick:t[5]||(t[5]=r=>e.drainSelected())},"Drain "+c(e.selectedQueue),1)])]),t[49]||(t[49]=de('',1)),f(" Queue overview cards "),o("div",Nb,[(l(!0),d(W,null,oe(e.queueList,(r,s)=>(l(),d("div",{class:A(["q-card",{selected:e.selectedQueue==r?.key,paused:r?.paused}]),role:"button",tabindex:"0","aria-pressed":e.selectedQueue===r.key,onKeydown:[Ao(ie(i=>e.selectQueue(r.key),["prevent"]),["enter"]),Ao(ie(i=>e.selectQueue(r.key),["prevent"]),["space"])],onClick:i=>e.selectQueue(r.key)},[o("div",Db,[o("span",{class:A(["q-dot",{"q-dot-red":r?.paused||r?.counts?.failed>0}])},null,2),o("span",{class:"q-card-name",textContent:c(r?.label)},null,8,Tb)]),o("div",{class:"q-card-count",textContent:c((r?.counts?.waiting||0)+(r?.counts?.active||0)+(r?.counts?.delayed||0))},null,8,Ab),o("div",Ob,[o("span",null,"waiting \xB7 "+c(r?.counts?.active||0)+" active",1),r?.counts?.active?(l(),d("div",Ib,[o("div",{class:"q-card-bar-fill",style:Ie({width:r?.counts?.active/((r?.counts?.waiting||0)+(r?.counts?.active||0)+(r?.counts?.delayed||0)||1)*100+"%"})},null,4)])):f("v-if",!0)])],42,Rb))),256))]),f(" Detail: throughput chart + stats panel "),e.selectedStats?(l(),d("div",Pb,[o("div",Vb,[o("div",qb,[b(c(e.selectedQueue)+" \xB7 throughput ",1),o("span",Mb,[t[13]||(t[13]=o("span",{class:"q-legend-completed"},"\u25CF",-1)),t[14]||(t[14]=b(" completed ",-1)),t[15]||(t[15]=o("span",{class:"q-legend-failed"},"\u25CF",-1)),t[16]||(t[16]=b(" failed ",-1)),t[17]||(t[17]=o("span",{class:"q-legend-exec"},"- -",-1)),b(" avg time \xB7 "+c(e.range),1)])]),t[18]||(t[18]=o("div",{class:"q-chart-wrap"},[o("canvas",{id:"q-throughput-chart",height:"180"}),o("div",{id:"q-chart-tooltip",class:"q-chart-tooltip",style:{display:"none"}}),o("div",{id:"q-chart-crosshair",class:"q-chart-crosshair",style:{display:"none"}})],-1))]),o("div",Ub,[o("div",$b,c(e.selectedQueue)+" \xB7 stats",1),o("div",Lb,[o("div",Fb,[t[19]||(t[19]=o("div",{class:"q-stat-label"},"Waiting",-1)),o("div",{class:"q-stat-value",textContent:c(e.selectedStats?.counts?.waiting||0)},null,8,zb)]),o("div",Hb,[t[20]||(t[20]=o("div",{class:"q-stat-label"},"Active",-1)),o("div",{class:"q-stat-value",textContent:c(e.selectedStats?.counts?.active||0)},null,8,Bb)]),o("div",jb,[t[21]||(t[21]=o("div",{class:"q-stat-label"},"Completed (24h)",-1)),o("div",{class:"q-stat-value",textContent:c(e.fmt?.number(e.selectedStats?.completed24h))},null,8,Gb)]),o("div",Wb,[t[22]||(t[22]=o("div",{class:"q-stat-label"},"Failed (24h)",-1)),o("div",{class:"q-stat-value",textContent:c(e.selectedStats?.failed24h||0)},null,8,Kb)]),o("div",Yb,[t[23]||(t[23]=o("div",{class:"q-stat-label"},"Delayed",-1)),o("div",{class:"q-stat-value",textContent:c(e.selectedStats?.counts?.delayed||0)},null,8,Jb)]),o("div",Qb,[t[24]||(t[24]=o("div",{class:"q-stat-label"},"Workers",-1)),o("div",{class:"q-stat-value",textContent:c(e.selectedStats?.workers||0)},null,8,Xb)])]),o("div",Zb,[o("button",{class:"btn btn-sm",onClick:t[6]||(t[6]=r=>e.togglePause())},c(e.selectedStats?.paused?"Resume":"Pause"),1),o("button",{class:"btn btn-sm",onClick:t[7]||(t[7]=r=>e.retryFailed()),disabled:!e.selectedStats?.counts?.failed},"Retry failed",8,xb),o("button",{class:"btn btn-sm",onClick:t[8]||(t[8]=r=>e.emptyQueue())},"Empty")])])])):f("v-if",!0),e.actionError?(l(),d("div",{key:1,class:"q-toast-error",onClick:t[9]||(t[9]=r=>e.actionError=null)},[t[25]||(t[25]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})],-1)),b(" "+c(e.actionError),1)])):f("v-if",!0),f(" Jobs table "),o("div",e1,[o("div",t1,[o("div",o1,"All jobs \xB7 "+c(e.selectedQueue),1),o("div",n1,[(l(!0),d(W,null,oe(e.allStates,(r,s)=>(l(),d("label",s1,[R(o("input",r1,null,512),[[n,{state:e.viewState,set:i=>{e.stateFilter[r]=i},value:e.stateFilter[r],form:null,options:{}}]]),o("span",{class:A("q-state-chip q-state-"+r)},c(r),3)]))),256))])]),o("div",i1,[R(o("input",a1,null,512),[[n,{state:e.viewState,set:r=>{e.query.search=r},value:e.query?.search,form:null,options:{}}]]),o("label",l1,[R(o("input",d1,null,512),[[n,{state:e.viewState,set:r=>{e.query.autoRefresh=r},value:e.query?.autoRefresh,form:null,options:{}}]]),t[26]||(t[26]=b(" Auto-refresh ",-1))]),o("button",{class:"btn btn-sm btn-icon",type:"button",title:"Refresh now",onClick:t[10]||(t[10]=r=>e.refreshNow()),"aria-label":"Refresh"},[...t[27]||(t[27]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1)])])]),e.filteredJobs().length>0?(l(),d("table",u1,[t[46]||(t[46]=o("thead",null,[o("tr",null,[o("th",null,"State"),o("th",null,"Job id"),o("th",null,"Payload"),o("th",null,"Attempts"),o("th",null,"Duration"),o("th",null,"Progress"),o("th")])],-1)),(l(!0),d(W,null,oe(e.filteredJobs(),(r,s)=>(l(),d("tbody",null,[o("tr",{style:{cursor:"pointer"},class:A({"q-row-failed":r?._state=="failed","q-row-expanded":e.expanded[r?.id]}),onClick:i=>e.toggleJob(r)},[o("td",p1,[o("span",{textContent:c(r?._state),class:A("q-state-badge q-state-"+r?._state)},null,10,f1),r?._state=="delayed"&&r?.delayUntil?(l(),d("span",{key:0,class:"q-delay-hint",textContent:c(e.delayCountdown(r?.delayUntil))},null,8,m1)):f("v-if",!0)]),o("td",h1,[(l(),d("svg",{class:A(["ui-icon q-chevron",{"q-chevron-open":e.expanded[r?.id]}]),"aria-hidden":"true"},[...t[28]||(t[28]=[o("use",{href:"#ui-icon-chevron-right"},null,-1)])],2)),o("a",{target:"_blank",textContent:c("job:"+e.fmt.limitTo(r?.id,6)),onClick:t[11]||(t[11]=i=>i.stopPropagation()),href:e.safeUrl("/r/"+r?.id)},null,8,v1)]),o("td",y1,[o("span",{textContent:c(r?.name||"anonymize")},null,8,g1),r?.data?.repoId&&r?.data?.repoId!==r?.name?(l(),d("span",b1," \xB7 "+c(r?.data?.repoId),1)):f("v-if",!0)]),o("td",{class:"q-cell-num",textContent:c(r?.attemptsMade||1)},null,8,w1),o("td",{class:"q-cell-num",textContent:c(e.jobDuration(r))},null,8,k1),o("td",E1,[e.jobProgressPct(r)!==null?(l(),d("div",C1,[o("div",{class:"q-progress-bar",style:Ie({"--pct":e.jobProgressPct(r)+"%"})},null,4),o("span",{class:"q-progress-label",textContent:c(e.jobProgressPct(r)+"%")},null,8,_1)])):f("v-if",!0)]),o("td",S1,[r?._state=="failed"?(l(),d("button",{key:0,class:"btn btn-sm btn-icon",title:"Retry",onClick:i=>{e.retryJob(r),i.stopPropagation()},"aria-label":"Retry job"},[...t[29]||(t[29]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1)])],8,N1)):f("v-if",!0),o("button",{class:"btn btn-sm btn-icon",title:"Remove","aria-label":"Remove job",onClick:i=>{e.removeJob(r),i.stopPropagation()}},[...t[30]||(t[30]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1)])],8,R1)])],10,c1),e.expanded[r?.id]?(l(),d("tr",D1,[o("td",T1,[o("div",A1,[o("div",O1,[o("div",I1,[t[31]||(t[31]=o("span",{class:"q-job-detail-label"},"Job id",-1)),o("span",P1,[o("a",{target:"_blank",textContent:c(r?.id),href:e.safeUrl("/r/"+r?.id)},null,8,V1)])]),o("div",q1,[t[32]||(t[32]=o("span",{class:"q-job-detail-label"},"State",-1)),o("span",M1,[o("span",{textContent:c(r?._state),class:A("q-state-badge q-state-"+r?._state)},null,10,U1)])]),r?.data?.repoId?(l(),d("div",$1,[t[33]||(t[33]=o("span",{class:"q-job-detail-label"},"Repo ID",-1)),o("span",{class:"q-job-detail-value",textContent:c(r?.data?.repoId)},null,8,L1)])):f("v-if",!0),r?.timestamp?(l(),d("div",F1,[t[34]||(t[34]=o("span",{class:"q-job-detail-label"},"Created",-1)),o("span",{class:"q-job-detail-value",textContent:c(e.humanTime(r?.timestamp))},null,8,z1)])):f("v-if",!0),r?._state=="delayed"&&r?.delayUntil?(l(),d("div",H1,[t[35]||(t[35]=o("span",{class:"q-job-detail-label"},"Retry at",-1)),o("span",B1,c(e.humanTime(r?.delayUntil))+" ("+c(e.delayCountdown(r?.delayUntil))+")",1)])):f("v-if",!0),r?.processedOn?(l(),d("div",j1,[t[36]||(t[36]=o("span",{class:"q-job-detail-label"},"Processed",-1)),o("span",{class:"q-job-detail-value",textContent:c(e.humanTime(r?.processedOn))},null,8,G1)])):f("v-if",!0),r?.finishedOn?(l(),d("div",W1,[t[37]||(t[37]=o("span",{class:"q-job-detail-label"},"Finished",-1)),o("span",{class:"q-job-detail-value",textContent:c(e.humanTime(r?.finishedOn))},null,8,K1)])):f("v-if",!0),r?.attemptsMade?(l(),d("div",Y1,[t[38]||(t[38]=o("span",{class:"q-job-detail-label"},"Attempts",-1)),o("span",{class:"q-job-detail-value",textContent:c(r?.attemptsMade)},null,8,J1)])):f("v-if",!0),r?.progress&&r?.progress?.status?(l(),d("div",Q1,[t[39]||(t[39]=o("span",{class:"q-job-detail-label"},"Status",-1)),o("span",{class:"q-job-detail-value",textContent:c(r?.progress?.status)},null,8,X1)])):f("v-if",!0),e.jobProgressPct(r)!==null?(l(),d("div",Z1,[t[40]||(t[40]=o("span",{class:"q-job-detail-label"},"Progress",-1)),o("span",{class:"q-job-detail-value",textContent:c(e.jobProgressPct(r)+"%")},null,8,x1)])):f("v-if",!0)]),r?.failedReason?(l(),d("div",ew,[t[41]||(t[41]=o("span",{class:"q-job-detail-label"},"Error",-1)),o("div",{class:"q-error-reason",textContent:c(r?.failedReason)},null,8,tw)])):f("v-if",!0),r?.stacktrace?.length?(l(),d("div",ow,[t[42]||(t[42]=o("span",{class:"q-job-detail-label"},"Stacktrace",-1)),(l(!0),d(W,null,oe(r?.stacktrace,(i,a)=>(l(),d("pre",{class:"q-error-stack",key:a},[o("code",{textContent:c(i)},null,8,nw)]))),128))])):f("v-if",!0),o("div",sw,[r?._state=="failed"?(l(),d("button",{key:0,class:"btn btn-sm",onClick:i=>e.retryJob(r)},[...t[43]||(t[43]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),b(" Retry",-1)])],8,rw)):f("v-if",!0),o("button",{class:"btn btn-sm",onClick:i=>e.removeJob(r)},[...t[44]||(t[44]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),b(" Remove",-1)])],8,iw),o("a",{class:"btn btn-sm",target:"_blank",href:e.safeUrl("/r/"+r?.id)},[...t[45]||(t[45]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-external-link"})],-1),b(" View repo",-1)])],8,aw)])])])])):f("v-if",!0)]))),256))])):f("v-if",!0),e.filteredJobs().length==0?(l(),d("div",lw,[t[47]||(t[47]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-check-circle"})],-1)),e.query?.search?f("v-if",!0):(l(),d("span",dw,"No jobs in the "+c(e.selectedQueue)+" queue.",1)),e.query?.search?(l(),d("span",uw,"No jobs match the current filters.")):f("v-if",!0)])):f("v-if",!0)])])}var cw={class:"container paper-page admin-page"},pw={class:"admin-summary"},fw={class:"summary-total"},mw={class:"summary-meta"},hw=["aria-pressed"],vw={class:"count"},yw=["aria-pressed"],gw={class:"count"},bw=["aria-pressed"],ww={class:"count"},kw=["aria-pressed"],Ew={class:"count"},Cw=["aria-pressed"],_w={class:"count"},Sw={key:0,class:"alert alert-danger",style:{margin:"8px 0"}},Nw={class:"w-100 admin-filter-toolbar","aria-label":"Repositories","accept-charset":"UTF-8"},Rw={class:"admin-filter-row"},Dw={class:"search-wrap"},Tw={type:"search",class:"form-control","aria-label":"Search repositories",placeholder:"Search repoId, source repo, error message\u2026",autocomplete:"off"},Aw={key:0,class:"admin-search-hint"},Ow={class:"admin-filter-inline"},Iw={type:"text",class:"form-control form-control-sm",placeholder:"username"},Pw={class:"admin-filter-inline"},Vw={type:"text",class:"form-control form-control-sm",placeholder:"ID"},qw={class:"admin-filter-inline","aria-label":"Pagination"},Mw=["disabled"],Uw={style:{"font-family":"var(--font-mono)","font-size":"12px",color:"var(--ink-muted)"}},$w=["disabled"],Lw={key:0,class:"admin-filter-row"},Fw={class:"admin-active-chips"},zw={class:"key"},Hw=["onClick"],Bw={key:1,class:"bulk-bar"},jw={class:"paper-table paper-table-repos has-bulk w-100",role:"table","aria-label":"Repositories"},Gw={class:"paper-table-head",role:"row"},Ww={role:"columnheader",style:{width:"28px"}},Kw=["checked"],Yw={role:"columnheader"},Jw={role:"columnheader"},Qw={role:"columnheader",class:"num"},Xw={role:"columnheader"},Zw={role:"cell",style:{width:"28px"}},xw={type:"checkbox","aria-label":"Select repository"},ek={class:"cell-anon",role:"cell"},tk={class:"anon-text"},ok=["textContent","href"],nk={class:"anon-sub"},sk=["textContent","href"],rk={key:0},ik=["textContent","href"],ak={key:1},lk=["textContent","href"],dk={key:2},uk={class:"cell-status",role:"cell"},ck={class:"status-line"},pk=["textContent"],fk=["textContent","title"],mk={class:"cell-views num",role:"cell"},hk=["textContent"],vk={class:"cell-expires",role:"cell"},yk=["textContent"],gk={class:"cell-actions",role:"cell"},bk={class:"dropdown"},wk={class:"dropdown-menu dropdown-menu-right"},kk=["href"],Ek=["href"],Ck=["href"],_k=["onClick"],Sk=["onClick"],Nk=["onClick"],Rk=["onClick"],Dk=["onClick"],Tk=["onClick"],Ak={key:0,class:"paper-table-empty"},Ok={class:"admin-toolbar",style:{"justify-content":"space-between","border-bottom":"none"}},Ik={style:{"font-size":"12px",color:"var(--ink-muted)"}},Pk={key:0,class:"pagination-compact"},Vk=["disabled"],qk=["max"],Mk=["disabled"],Uk={class:"admin-filter-inline"},$k={class:"form-control form-control-sm"};function Il(e,t){let n=ve("field"),r=ve("form");return l(),d("div",cw,[t[69]||(t[69]=de('
Admin \xA0/\xA0 Repositories

Repositories

',3)),o("div",pw,[o("span",fw,c(e.total>=0?e.fmt.number(e.total):"\u2026"),1),o("span",mw,c(e.fmt?.humanFileSize(e.totalSize))+" on disk",1),o("button",{type:"button",class:A(["summary-pill ok",{active:e.query?.ready}]),title:"Toggle ready filter",onClick:t[0]||(t[0]=s=>{e.query.ready=!e.query.ready,e.query.page=1}),"aria-pressed":!!e.query?.ready},[t[18]||(t[18]=b("Ready ",-1)),o("span",vw,c(e.fmt?.number(e.statusCountFor("ready"))),1)],10,hw),o("button",{type:"button",class:A(["summary-pill warn",{active:e.query?.preparing}]),title:"Toggle preparing filter",onClick:t[1]||(t[1]=s=>{e.query.preparing=!e.query.preparing,e.query.page=1}),"aria-pressed":!!e.query?.preparing},[t[19]||(t[19]=b("Preparing ",-1)),o("span",gw,c(e.fmt?.number(e.statusCountFor("preparing")+e.statusCountFor("download"))),1)],10,yw),o("button",{type:"button",class:A(["summary-pill error",{active:e.query?.error}]),title:"Toggle errored filter",onClick:t[2]||(t[2]=s=>{e.query.error=!e.query.error,e.query.page=1}),"aria-pressed":!!e.query?.error},[t[20]||(t[20]=b("Errored ",-1)),o("span",ww,c(e.fmt?.number(e.statusCountFor("error"))),1)],10,bw),o("button",{type:"button",class:A(["summary-pill",{active:e.query?.expired}]),title:"Toggle expired filter",onClick:t[3]||(t[3]=s=>{e.query.expired=!e.query.expired,e.query.page=1}),"aria-pressed":!!e.query?.expired},[t[21]||(t[21]=b("Expired ",-1)),o("span",Ew,c(e.fmt?.number(e.statusCountFor("expired")+e.statusCountFor("expiring"))),1)],10,kw),o("button",{type:"button",class:A(["summary-pill",{active:e.query?.removed}]),title:"Toggle removed filter",onClick:t[4]||(t[4]=s=>{e.query.removed=!e.query.removed,e.query.page=1}),"aria-pressed":!!e.query?.removed},[t[22]||(t[22]=b("Removed ",-1)),o("span",_w,c(e.fmt?.number(e.statusCountFor("removed")+e.statusCountFor("removing"))),1)],10,Cw)]),e.fetchError?(l(),d("div",Sw,[t[23]||(t[23]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),b(" "+c(e.fetchError),1)])):f("v-if",!0),R((l(),d("form",Nw,[f(" Row 1: search + scoped inputs + headline actions "),o("div",Rw,[o("div",Dw,[R(o("input",Tw,null,512),[[n,{state:e.viewState,set:s=>{e.query.search=s},value:e.query?.search,form:null,options:{}}]]),e.query?.search?f("v-if",!0):(l(),d("span",Aw,"/"))]),o("span",Ow,[t[24]||(t[24]=o("label",null,"Owner",-1)),R(o("input",Iw,null,512),[[n,{state:e.viewState,set:s=>{e.query.owner=s},value:e.query?.owner,form:null,options:{}}]])]),o("span",Pw,[t[25]||(t[25]=o("label",null,"Conference",-1)),R(o("input",Vw,null,512),[[n,{state:e.viewState,set:s=>{e.query.conference=s},value:e.query?.conference,form:null,options:{}}]])]),t[29]||(t[29]=o("span",{class:"admin-filter-spacer"},null,-1)),o("button",{class:"btn btn-sm",type:"button",title:"Export current view to CSV",onClick:t[5]||(t[5]=s=>e.exportCsv())},[...t[26]||(t[26]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-export"})],-1),b(" Export",-1)])]),o("span",qw,[o("button",{class:"btn btn-sm btn-icon",type:"button",onClick:t[6]||(t[6]=s=>e.query.page=Math.max(1,e.query.page-1)),disabled:e.query?.page<=1,"aria-label":"Previous page"},[...t[27]||(t[27]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-left"})],-1)])],8,Mw),o("span",Uw,c(e.query?.page)+"/"+c(e.totalPage||1),1),o("button",{class:"btn btn-sm btn-icon",type:"button",onClick:t[7]||(t[7]=s=>e.query.page=Math.min(e.totalPage,e.query.page+1)),disabled:e.query?.page>=e.totalPage,"aria-label":"Next page"},[...t[28]||(t[28]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-right"})],-1)])],8,$w)])]),f(" Row 2: appears only when there are active filter chips "),e.chips?.length?(l(),d("div",Lw,[o("div",Fw,[(l(!0),d(W,null,oe(e.chips,(s,i)=>(l(),d("span",{class:"admin-active-chip",key:s?.key},[o("span",zw,c(s?.label),1),o("span",null,c(s?.value),1),o("button",{type:"button","aria-label":"Remove filter",onClick:a=>e.clearFilter(s.key)},[...t[30]||(t[30]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])],8,Hw)]))),128))])])):f("v-if",!0)])),[[r,e.viewState]]),e.selectedCount()>0?(l(),d("div",Bw,[o("span",null,[o("strong",null,c(e.selectedCount()),1),t[31]||(t[31]=b(" selected",-1))]),o("button",{class:"btn btn-sm",type:"button",onClick:t[8]||(t[8]=s=>e.bulkRefresh())},[...t[32]||(t[32]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),b(" Force refresh",-1)])]),o("button",{class:"btn btn-sm text-danger",type:"button",onClick:t[9]||(t[9]=s=>e.bulkRemoveCache())},[...t[33]||(t[33]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-broom"})],-1),b(" Remove cache",-1)])]),o("button",{class:"btn btn-sm",type:"button",onClick:t[10]||(t[10]=s=>e.clearSelection())},"Clear")])):f("v-if",!0),o("div",jw,[o("div",Gw,[o("div",Ww,[o("input",{type:"checkbox","aria-label":"Select all on page",onClick:t[11]||(t[11]=s=>e.selectAllOnPage()),checked:e.allSelected},null,8,Kw)]),o("div",Yw,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="source.repositoryName"}]),onClick:t[12]||(t[12]=s=>e.sortBy("source.repositoryName"))},[t[35]||(t[35]=b("Repository ",-1)),e.sortIcon("source.repositoryName")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("source.repositoryName")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[34]||(t[34]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)]),o("div",Jw,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="status"}]),onClick:t[13]||(t[13]=s=>e.sortBy("status"))},[t[37]||(t[37]=b("Status ",-1)),e.sortIcon("status")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("status")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[36]||(t[36]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)]),o("div",Qw,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="pageView"}]),onClick:t[14]||(t[14]=s=>e.sortBy("pageView"))},[t[39]||(t[39]=b("Views ",-1)),e.sortIcon("pageView")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("pageView")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[38]||(t[38]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)]),o("div",Xw,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="anonymizeDate"}]),onClick:t[15]||(t[15]=s=>e.sortBy("anonymizeDate"))},[t[41]||(t[41]=b("Anonymized ",-1)),e.sortIcon("anonymizeDate")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("anonymizeDate")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[40]||(t[40]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)]),t[42]||(t[42]=o("div",{role:"columnheader","aria-label":"Actions"},null,-1))]),(l(!0),d(W,null,oe(e.filteredRepositories,(s,i)=>(l(),d("div",{class:A(["paper-table-row",{"repo-inactive":s?.status=="expired"||s?.status=="removed","repo-error":s?.status=="error","row-selected":e.selected[s?.repoId]}]),role:"row"},[o("div",Zw,[R(o("input",xw,null,512),[[n,{state:e.viewState,set:a=>{e.selected[s.repoId]=a},value:e.selected[s?.repoId],form:null,options:{}}]])]),o("div",ek,[t[47]||(t[47]=o("svg",{class:"ui-icon record-type-icon",role:"img","aria-label":"Repository"},[o("use",{href:"#project-type-repo"})],-1)),o("div",tk,[o("a",{class:"repo-name",target:"_blank",textContent:c(s?.repoId),href:e.safeUrl("/r/"+s?.repoId)},null,8,ok),o("div",nk,[o("a",{textContent:c(s?.source?.repositoryName),href:e.safeUrl("https://github.com/"+s?.source?.repositoryName+"/")},null,8,sk),s?.options?.update?(l(),d("span",rk,[t[43]||(t[43]=b("\xA0\xB7\xA0",-1)),o("a",{textContent:c(s?.source?.branch),href:e.safeUrl("https://github.com/"+s?.source?.fullName+"/tree/"+s?.source?.branch)},null,8,ik)])):f("v-if",!0),s?.options?.update?f("v-if",!0):(l(),d("span",ak,[t[44]||(t[44]=b("\xA0\xB7\xA0@",-1)),o("a",{textContent:c(s?.source?.commit?.substring(0,8)),href:e.safeUrl("https://github.com/"+s?.source?.fullName+"/tree/"+s?.source?.commit)},null,8,lk)])),s?.conference?(l(),d("span",dk,[t[45]||(t[45]=b("\xA0\xB7\xA0",-1)),t[46]||(t[46]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-conference"})],-1)),b(" "+c(s?.conference),1)])):f("v-if",!0),o("span",null,"\xA0\xB7\xA0"+c(e.fmt?.humanFileSize(s?.size?.storage)),1),o("span",null,"\xA0\xB7\xA0"+c(e.fmt?.number(s?.options?.terms?.length))+" "+c(s?.options?.terms?.length===1?"term":"terms"),1)])])]),o("div",uk,[o("span",ck,[o("span",{class:A(["status-dot",{"status-removed":s?.status=="removed"||s?.status=="expired","status-ready":s?.status=="ready","status-error":s?.status=="error","status-preparing":s?.status=="preparing"}])},null,2),o("span",{textContent:c(e.fmt?.title(s?.status))},null,8,pk)]),s?.statusMessage?(l(),d("span",{key:0,class:"status-sub",textContent:c(e.fmt?.statusMsg(s?.statusMessage)),title:s?.statusMessage},null,8,fk)):f("v-if",!0)]),o("div",mk,[t[48]||(t[48]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1)),t[49]||(t[49]=b()),o("span",{textContent:c(e.fmt?.number(s?.pageView||0))},null,8,hk)]),o("div",vk,[t[50]||(t[50]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),t[51]||(t[51]=b()),o("span",{textContent:c(e.fmt?.humanTime(s?.anonymizeDate))},null,8,yk)]),o("div",gk,[o("div",bk,[t[63]||(t[63]=o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"Actions"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})])],-1)),o("div",wk,[o("a",{class:"dropdown-item",href:e.safeUrl("/anonymize/"+s?.repoId)},[...t[52]||(t[52]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),b(" Edit",-1)])],8,kk),o("a",{class:"dropdown-item",href:e.safeUrl("/r/"+s?.repoId+"/")},[...t[53]||(t[53]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),b(" View repo",-1)])],8,Ek),s?.options?.page&&s?.status=="ready"?(l(),d("a",{key:0,class:"dropdown-item",target:"_self",href:e.safeUrl("/w/"+s?.repoId+"/")},[...t[54]||(t[54]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-globe"})],-1),b(" View page",-1)])],8,Ck)):f("v-if",!0),o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.fetchGithubInfo(s),["prevent"])},[...t[55]||(t[55]=[o("i",{class:"fab fa-github"},null,-1),b(" Live GitHub info",-1)])],8,_k),t[61]||(t[61]=o("div",{class:"dropdown-divider"},null,-1)),R(o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.updateRepository(s),["prevent"])},[...t[56]||(t[56]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),b(" Force update",-1)])],8,Sk),[[j,s?.status=="ready"||s?.status=="error"]]),R(o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.updateRepository(s),["prevent"])},[...t[57]||(t[57]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-check-circle"})],-1),b(" Enable",-1)])],8,Nk),[[j,s?.status=="removed"]]),R(o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.showStatusMessage(s),["prevent"])},[...t[58]||(t[58]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1),b(" View status message",-1)])],8,Rk),[[j,s?.statusMessage]]),t[62]||(t[62]=o("div",{class:"dropdown-divider"},null,-1)),o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.removeCache(s),["prevent"])},[...t[59]||(t[59]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-broom"})],-1),b(" Remove cache",-1)])],8,Dk),R(o("a",{class:"dropdown-item text-danger",href:"#",onClick:ie(a=>e.removeRepository(s),["prevent"])},[...t[60]||(t[60]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),b(" Remove",-1)])],8,Tk),[[j,s?.status=="ready"]])])])])],2))),256)),e.filteredRepositories?.length==0?(l(),d("div",Ak,[...t[64]||(t[64]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1),o("span",null,"No repositories match the current filters.",-1)])])):f("v-if",!0)]),o("div",Ok,[o("span",Ik,c(e.fmt?.number(e.total))+" results",1),e.totalPage>1?(l(),d("div",Pk,[o("button",{class:"btn btn-sm",onClick:t[16]||(t[16]=s=>e.query.page=Math.max(1,e.query.page-1)),disabled:e.query?.page<=1},[...t[65]||(t[65]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-left"})],-1),b(" Previous ",-1)])],8,Vk),R(o("input",{type:"number",class:"form-control form-control-sm",min:"1",style:{width:"56px"},"aria-label":"Page",max:e.totalPage},null,8,qk),[[n,{state:e.viewState,set:s=>{e.query.page=s},value:e.query?.page,form:null,options:{}}]]),o("span",null,"of "+c(e.totalPage),1),o("button",{class:"btn btn-sm",onClick:t[17]||(t[17]=s=>e.query.page=Math.min(e.totalPage,e.query.page+1)),disabled:e.query?.page>=e.totalPage},[...t[66]||(t[66]=[b(" Next ",-1),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-right"})],-1)])],8,Mk)])):f("v-if",!0),o("span",Uk,[t[68]||(t[68]=o("label",null,"Per page",-1)),R((l(),d("select",$k,[...t[67]||(t[67]=[de('',5)])])),[[n,{state:e.viewState,set:s=>{e.query.limit=s},value:e.query?.limit,form:null,options:{}}]])])])])}var Lk={class:"container paper-page admin-page"},Fk={class:"paper-crumbs"},zk={class:"here"},Hk={class:"paper-page-title"},Bk={key:0,class:"user-detail-card"},jk={class:"user-header"},Gk=["src"],Wk={class:"status-dot-wrap"},Kk=["textContent"],Yk={key:0,class:"type-badge type-repo"},Jk={class:"user-actions",style:{"margin-top":"4px"}},Qk={class:"user-detail-grid"},Xk={class:"detail-value"},Zk={class:"detail-value"},xk={key:0,class:"detail-value",style:{"font-family":"var(--font-mono)","font-size":"0.85rem"}},e0={key:1,class:"detail-value text-muted"},t0={class:"detail-value"},o0=["href"],n0={class:"detail-value"},s0={class:"detail-value"},r0={key:0},i0={key:1,class:"text-muted"},a0={class:"detail-value"},l0={key:0,style:{"margin-top":"20px"}},d0={class:"paper-table w-100",style:{"margin-top":"10px"}},u0={class:"paper-table-row",style:{"grid-template-columns":"1fr 160px"}},c0={class:"cell-anon",role:"cell"},p0={class:"anon-text"},f0=["textContent"],m0={class:"cell-expires",role:"cell"},h0={key:1,class:"admin-section-header"},v0={class:"section-count"},y0={key:2,class:"user-detail-card"},g0={type:"text",class:"form-control",placeholder:"Token name (e.g. dev-laptop)",required:""},b0={key:0,class:"alert alert-warning",role:"alert"},w0={style:{"white-space":"pre-wrap","word-break":"break-all",margin:"8px 0 0","font-family":"var(--font-mono)","font-size":"0.85rem"}},k0={key:1,class:"paper-table w-100"},E0={class:"paper-table-row",role:"row",style:{"grid-template-columns":"1fr 200px 200px 80px"}},C0=["textContent"],_0=["textContent"],S0={role:"cell"},N0={key:0},R0={key:1,class:"text-muted"},D0={role:"cell"},T0=["onClick"],A0={key:2,class:"paper-table-empty"},O0={class:"admin-section-header"},I0={class:"section-count"},P0={class:"admin-summary"},V0={class:"summary-total"},q0=["aria-pressed"],M0={class:"count"},U0=["aria-pressed"],$0={class:"count"},L0=["aria-pressed"],F0={class:"count"},z0=["aria-pressed"],H0={class:"count"},B0=["aria-pressed"],j0={class:"count"},G0={class:"w-100 admin-filter-toolbar","aria-label":"Repositories","accept-charset":"UTF-8"},W0={class:"admin-filter-row"},K0={class:"search-wrap"},Y0={type:"search",class:"form-control","aria-label":"Search repositories",placeholder:"Search repoId, source repo, error message\u2026",autocomplete:"off"},J0={key:3,class:"bulk-bar"},Q0={class:"paper-table paper-table-repos has-bulk w-100",role:"table","aria-label":"Repositories"},X0={class:"paper-table-head",role:"row"},Z0={role:"columnheader",style:{width:"28px"}},x0=["checked"],eE={role:"columnheader"},tE={role:"columnheader"},oE={role:"columnheader",class:"num"},nE={role:"columnheader"},sE={role:"cell",style:{width:"28px"}},rE={type:"checkbox","aria-label":"Select repository"},iE={class:"cell-anon",role:"cell"},aE={class:"anon-text"},lE=["textContent","href"],dE={class:"anon-sub"},uE=["textContent","href"],cE={key:0},pE=["textContent","href"],fE={key:1},mE=["textContent","href"],hE={key:2},vE={class:"cell-status",role:"cell"},yE={class:"status-line"},gE=["textContent"],bE=["textContent","title"],wE=["textContent"],kE=["textContent"],EE={class:"cell-actions",role:"cell"},CE={class:"dropdown"},_E={class:"dropdown-menu dropdown-menu-right"},SE=["href"],NE=["href"],RE=["href"],DE=["onClick"],TE=["onClick"],AE=["onClick"],OE=["onClick"],IE=["onClick"],PE=["onClick"],VE={key:0,class:"paper-table-empty"};function Pl(e,t){let n=ve("field"),r=ve("form");return l(),d("div",Lk,[o("div",Fk,[t[22]||(t[22]=o("a",{href:"/admin/"},"Admin",-1)),t[23]||(t[23]=b(" \xA0/\xA0 ",-1)),t[24]||(t[24]=o("a",{href:"/admin/users"},"Users",-1)),t[25]||(t[25]=b(" \xA0/\xA0 ",-1)),o("span",zk,c(e.userInfo?.username||"Profile"),1)]),o("h1",Hk,c(e.userInfo?.username||"User"),1),t[87]||(t[87]=de('',1)),e.userInfo?(l(),d("div",Bk,[o("div",jk,[e.userInfo?.photo?(l(),d("img",{key:0,width:"56",height:"56",src:e.safeUrl(e.userInfo?.photo)},null,8,Gk)):f("v-if",!0),o("div",null,[o("h2",null,[b(c(e.userInfo?.username)+" ",1),o("span",Wk,[o("span",{class:A(["status-dot",{"status-ready":e.userInfo?.status=="active","status-removed":e.userInfo?.status!="active"}])},null,2),o("span",{textContent:c(e.fmt?.title(e.userInfo?.status))},null,8,Kk)]),e.userInfo?.isAdmin?(l(),d("span",Yk,"Admin")):f("v-if",!0)]),o("div",Jk,[e.userInfo?.status!=="banned"?(l(),d("button",{key:0,class:"btn btn-sm text-danger",onClick:t[0]||(t[0]=s=>e.banUser())},[...t[26]||(t[26]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-ban"})],-1),b(" Ban",-1)])])):f("v-if",!0),e.userInfo?.status==="banned"||e.userInfo?.status==="removed"?(l(),d("button",{key:1,class:"btn btn-sm",onClick:t[1]||(t[1]=s=>e.activateUser())},[...t[27]||(t[27]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-check-circle"})],-1),b(" Activate",-1)])])):f("v-if",!0),e.userInfo?.isAdmin?f("v-if",!0):(l(),d("button",{key:2,class:"btn btn-sm",onClick:t[2]||(t[2]=s=>e.promoteUser())},[...t[28]||(t[28]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user-shield"})],-1),b(" Promote to admin",-1)])])),e.userInfo?.isAdmin?(l(),d("button",{key:3,class:"btn btn-sm text-danger",onClick:t[3]||(t[3]=s=>e.demoteUser())},[...t[29]||(t[29]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user-minus"})],-1),b(" Remove admin",-1)])])):f("v-if",!0)])])]),o("div",Qk,[t[32]||(t[32]=o("div",{class:"detail-label"},"ID",-1)),o("div",Xk,c(e.userInfo?._id),1),t[33]||(t[33]=o("div",{class:"detail-label"},"Email",-1)),o("div",Zk,c(e.userInfo?.emails?.[0]?.email),1),t[34]||(t[34]=o("div",{class:"detail-label"},"Access token",-1)),e.userInfo?.accessTokens?.github?(l(),d("div",xk,c(e.userInfo?.accessTokens?.github),1)):f("v-if",!0),e.userInfo?.accessTokens?.github?f("v-if",!0):(l(),d("div",e0,"None stored")),t[35]||(t[35]=o("div",{class:"detail-label"},"GitHub",-1)),o("div",t0,[o("a",{target:"_blank",href:e.safeUrl("https://github.com/"+e.userInfo?.username)},[t[30]||(t[30]=o("i",{class:"fab fa-github"},null,-1)),b(" "+c(e.userInfo?.username),1)],8,o0)]),t[36]||(t[36]=o("div",{class:"detail-label"},"Created",-1)),o("div",n0,c(e.fmt?.humanTime(e.userInfo?.dateOfEntry)),1),t[37]||(t[37]=o("div",{class:"detail-label"},"Last connection",-1)),o("div",s0,[e.userInfo?.accessTokenDates?.github?(l(),d("span",r0,c(e.fmt?.humanTime(e.userInfo?.accessTokenDates?.github)),1)):f("v-if",!0),e.userInfo?.accessTokenDates?.github?f("v-if",!0):(l(),d("span",i0,"never"))]),t[38]||(t[38]=o("div",{class:"detail-label"},"GitHub repos",-1)),o("div",a0,[b(c(e.userInfo?.repositories?.length)+" repositories ",1),o("button",{class:"btn btn-sm ml-2",onClick:t[4]||(t[4]=s=>e.showRepos=!e.showRepos)},c(e.showRepos?"Hide":"Show"),1),o("button",{class:"btn btn-sm ml-1",onClick:t[5]||(t[5]=s=>e.getGitHubRepositories())},[...t[31]||(t[31]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),b(" Refresh ",-1)])])])]),e.showRepos?(l(),d("div",l0,[t[41]||(t[41]=o("div",{class:"paper-section-eyebrow"},"GitHub repositories",-1)),o("div",d0,[(l(!0),d(W,null,oe(e.userInfo?.repositories,(s,i)=>(l(),d("div",u0,[o("div",c0,[t[39]||(t[39]=o("svg",{class:"ui-icon record-type-icon",role:"img","aria-label":"Repository"},[o("use",{href:"#project-type-repo"})],-1)),o("div",p0,[o("span",{class:"repo-name",textContent:c(s?.name)},null,8,f0)])]),o("div",m0,[t[40]||(t[40]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-database"})],-1)),b(" "+c(e.fmt?.humanFileSize(s?.size)),1)])]))),256))])])):f("v-if",!0)])):f("v-if",!0),e.userInfo&&e.userInfo?.isAdmin&&e.user&&e.user?.username==e.userInfo?.username?(l(),d("div",h0,[t[42]||(t[42]=o("h2",null,[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-key"})]),b(" API tokens")],-1)),o("span",v0,c(e.tokens?.length),1)])):f("v-if",!0),e.userInfo&&e.userInfo?.isAdmin&&e.user&&e.user?.username==e.userInfo?.username?(l(),d("div",y0,[t[48]||(t[48]=o("p",{class:"paper-page-lede"},[b("Personal API tokens for this admin account. Send as "),o("code",null,"Authorization: Bearer "),b(" to authenticate without GitHub OAuth (useful for development).")],-1)),R((l(),d("form",{class:"d-flex",style:{gap:"8px","margin-bottom":"12px"},onSubmit:t[6]||(t[6]=ie(s=>e.submitForm(s,()=>{e.createToken()}),["prevent"]))},[R(o("input",g0,null,512),[[n,{state:e.viewState,set:s=>{e.tokenForm.name=s},value:e.tokenForm?.name,form:null,options:{}}]]),t[43]||(t[43]=o("button",{type:"submit",class:"btn btn-ink"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-plus"})]),b(" Generate")],-1))],32)),[[r,e.viewState]]),e.tokenForm?.plaintext?(l(),d("div",b0,[t[44]||(t[44]=o("strong",null,"Copy this token now \u2014 it will not be shown again:",-1)),o("pre",w0,c(e.tokenForm?.plaintext),1),o("button",{class:"btn btn-sm",onClick:t[7]||(t[7]=s=>e.tokenForm.plaintext=null)},"Dismiss")])):f("v-if",!0),e.tokens?.length?(l(),d("div",k0,[t[46]||(t[46]=o("div",{class:"paper-table-head",role:"row",style:{"grid-template-columns":"1fr 200px 200px 80px"}},[o("div",{role:"columnheader"},"Name"),o("div",{role:"columnheader"},"Created"),o("div",{role:"columnheader"},"Last used"),o("div",{role:"columnheader","aria-label":"Actions"})],-1)),(l(!0),d(W,null,oe(e.tokens,(s,i)=>(l(),d("div",E0,[o("div",{role:"cell",textContent:c(s?.name)},null,8,C0),o("div",{role:"cell",textContent:c(e.fmt?.humanTime(s?.createdAt))},null,8,_0),o("div",S0,[s?.lastUsedAt?(l(),d("span",N0,c(e.fmt?.humanTime(s?.lastUsedAt)),1)):f("v-if",!0),s?.lastUsedAt?f("v-if",!0):(l(),d("span",R0,"never"))]),o("div",D0,[o("button",{class:"btn btn-sm text-danger btn-icon",title:"Revoke","aria-label":"Revoke token",onClick:a=>e.revokeToken(s)},[...t[45]||(t[45]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1)])],8,T0)])]))),256))])):f("v-if",!0),e.tokens?.length?f("v-if",!0):(l(),d("div",A0,[...t[47]||(t[47]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1),o("span",null,"No tokens yet.",-1)])]))])):f("v-if",!0),o("div",O0,[t[49]||(t[49]=o("h2",null,[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})]),b(" Anonymized repositories")],-1)),o("span",I0,c(e.repositories?.length),1)]),o("div",P0,[o("span",V0,c(e.fmt?.number(e.repositories?.length)),1),o("button",{type:"button",class:A(["summary-pill ok",{active:e.filters?.status?.ready===!1}]),title:"Toggle ready filter",onClick:t[8]||(t[8]=s=>e.filters.status.ready=!e.filters.status.ready),"aria-pressed":e.filters?.status?.ready===!1},[t[50]||(t[50]=b("Ready ",-1)),o("span",M0,c(e.fmt?.number(e.statusCountFor("ready"))),1)],10,q0),o("button",{type:"button",class:A(["summary-pill warn",{active:e.filters?.status?.preparing===!1}]),title:"Toggle preparing filter",onClick:t[9]||(t[9]=s=>e.filters.status.preparing=!e.filters.status.preparing),"aria-pressed":e.filters?.status?.preparing===!1},[t[51]||(t[51]=b("Preparing ",-1)),o("span",$0,c(e.fmt?.number(e.statusCountFor("preparing"))),1)],10,U0),o("button",{type:"button",class:A(["summary-pill error",{active:e.filters?.status?.error===!1}]),title:"Toggle errored filter",onClick:t[10]||(t[10]=s=>e.filters.status.error=!e.filters.status.error),"aria-pressed":e.filters?.status?.error===!1},[t[52]||(t[52]=b("Errored ",-1)),o("span",F0,c(e.fmt?.number(e.statusCountFor("error"))),1)],10,L0),o("button",{type:"button",class:A(["summary-pill",{active:e.filters?.status?.expired===!1}]),title:"Toggle expired filter",onClick:t[11]||(t[11]=s=>e.filters.status.expired=!e.filters.status.expired),"aria-pressed":e.filters?.status?.expired===!1},[t[53]||(t[53]=b("Expired ",-1)),o("span",H0,c(e.fmt?.number(e.statusCountFor("expired"))),1)],10,z0),o("button",{type:"button",class:A(["summary-pill",{active:e.filters?.status?.removed===!1}]),title:"Toggle removed filter",onClick:t[12]||(t[12]=s=>e.filters.status.removed=!e.filters.status.removed),"aria-pressed":e.filters?.status?.removed===!1},[t[54]||(t[54]=b("Removed ",-1)),o("span",j0,c(e.fmt?.number(e.statusCountFor("removed"))),1)],10,B0)]),R((l(),d("form",G0,[o("div",W0,[o("div",K0,[R(o("input",Y0,null,512),[[n,{state:e.viewState,set:s=>{e.search=s},value:e.search,form:null,options:{}}]])]),t[56]||(t[56]=o("span",{class:"admin-filter-spacer"},null,-1)),o("button",{class:"btn btn-sm",type:"button",title:"Export current view to CSV",onClick:t[13]||(t[13]=s=>e.exportCsv())},[...t[55]||(t[55]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-export"})],-1),b(" Export",-1)])])])])),[[r,e.viewState]]),e.selectedCount()>0?(l(),d("div",J0,[o("span",null,[o("strong",null,c(e.selectedCount()),1),t[57]||(t[57]=b(" selected",-1))]),o("button",{class:"btn btn-sm",type:"button",onClick:t[14]||(t[14]=s=>e.bulkRefresh())},[...t[58]||(t[58]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),b(" Force refresh",-1)])]),o("button",{class:"btn btn-sm text-danger",type:"button",onClick:t[15]||(t[15]=s=>e.bulkRemoveCache())},[...t[59]||(t[59]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-broom"})],-1),b(" Remove cache",-1)])]),o("button",{class:"btn btn-sm",type:"button",onClick:t[16]||(t[16]=s=>e.clearSelection())},"Clear")])):f("v-if",!0),o("div",Q0,[o("div",X0,[o("div",Z0,[o("input",{type:"checkbox","aria-label":"Select all on page",onClick:t[17]||(t[17]=s=>e.selectAllOnPage()),checked:e.allSelected},null,8,x0)]),o("div",eE,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="source.repositoryName"}]),onClick:t[18]||(t[18]=s=>e.sortBy("source.repositoryName"))},[t[61]||(t[61]=b("Repository ",-1)),e.sortIcon("source.repositoryName")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("source.repositoryName")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[60]||(t[60]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)]),o("div",tE,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="status"}]),onClick:t[19]||(t[19]=s=>e.sortBy("status"))},[t[63]||(t[63]=b("Status ",-1)),e.sortIcon("status")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("status")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[62]||(t[62]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)]),o("div",oE,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="pageView"}]),onClick:t[20]||(t[20]=s=>e.sortBy("pageView"))},[t[65]||(t[65]=b("Views ",-1)),e.sortIcon("pageView")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("pageView")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[64]||(t[64]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)]),o("div",nE,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="anonymizeDate"}]),onClick:t[21]||(t[21]=s=>e.sortBy("anonymizeDate"))},[t[67]||(t[67]=b("Anonymized ",-1)),e.sortIcon("anonymizeDate")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("anonymizeDate")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[66]||(t[66]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)]),t[68]||(t[68]=o("div",{role:"columnheader","aria-label":"Actions"},null,-1))]),(l(!0),d(W,null,oe(e.filteredRepositories,(s,i)=>(l(),d("div",{class:A(["paper-table-row",{"repo-inactive":s?.status=="expired"||s?.status=="removed","repo-error":s?.status=="error","row-selected":e.selected[s?.repoId]}]),role:"row"},[o("div",sE,[R(o("input",rE,null,512),[[n,{state:e.viewState,set:a=>{e.selected[s.repoId]=a},value:e.selected[s?.repoId],form:null,options:{}}]])]),o("div",iE,[t[73]||(t[73]=o("svg",{class:"ui-icon record-type-icon",role:"img","aria-label":"Repository"},[o("use",{href:"#project-type-repo"})],-1)),o("div",aE,[o("a",{class:"repo-name",target:"_blank",textContent:c(s?.repoId),href:e.safeUrl("/r/"+s?.repoId)},null,8,lE),o("div",dE,[o("a",{textContent:c(s?.source?.fullName),href:e.safeUrl("https://github.com/"+s?.source?.fullName+"/")},null,8,uE),s?.options?.update?(l(),d("span",cE,[t[69]||(t[69]=b("\xA0\xB7\xA0",-1)),o("a",{textContent:c(s?.source?.branch),href:e.safeUrl("https://github.com/"+s?.source?.fullName+"/tree/"+s?.source?.branch)},null,8,pE)])):f("v-if",!0),s?.options?.update?f("v-if",!0):(l(),d("span",fE,[t[70]||(t[70]=b("\xA0\xB7\xA0@",-1)),o("a",{textContent:c(s?.source?.commit?.substring(0,8)),href:e.safeUrl("https://github.com/"+s?.source?.fullName+"/tree/"+s?.source?.commit)},null,8,mE)])),s?.conference?(l(),d("span",hE,[t[71]||(t[71]=b("\xA0\xB7\xA0",-1)),t[72]||(t[72]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-conference"})],-1)),b(" "+c(s?.conference),1)])):f("v-if",!0),o("span",null,"\xA0\xB7\xA0"+c(e.fmt?.humanFileSize(s?.size?.storage)),1),o("span",null,"\xA0\xB7\xA0"+c(e.fmt?.number(s?.options?.terms?.length))+" "+c(s?.options?.terms?.length===1?"term":"terms"),1)])])]),o("div",vE,[o("span",yE,[o("span",{class:A(["status-dot",{"status-removed":s?.status=="removed"||s?.status=="expired","status-ready":s?.status=="ready","status-error":s?.status=="error","status-preparing":s?.status=="preparing"}])},null,2),o("span",{textContent:c(e.fmt?.title(s?.status))},null,8,gE)]),s?.statusMessage?(l(),d("span",{key:0,class:"status-sub",textContent:c(e.fmt?.statusMsg(s?.statusMessage)),title:s?.statusMessage},null,8,bE)):f("v-if",!0)]),o("div",{class:"cell-views num",role:"cell",textContent:c(e.fmt?.number(s?.pageView||0))},null,8,wE),o("div",{class:"cell-expires",role:"cell",textContent:c(e.fmt?.humanTime(s?.anonymizeDate))},null,8,kE),o("div",EE,[o("div",CE,[t[85]||(t[85]=o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"Actions"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})])],-1)),o("div",_E,[o("a",{class:"dropdown-item",href:e.safeUrl("/anonymize/"+s?.repoId)},[...t[74]||(t[74]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),b(" Edit",-1)])],8,SE),o("a",{class:"dropdown-item",href:e.safeUrl("/r/"+s?.repoId+"/")},[...t[75]||(t[75]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),b(" View repo",-1)])],8,NE),s?.options?.page&&s?.status=="ready"?(l(),d("a",{key:0,class:"dropdown-item",target:"_self",href:e.safeUrl("/w/"+s?.repoId+"/")},[...t[76]||(t[76]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-globe"})],-1),b(" View page",-1)])],8,RE)):f("v-if",!0),o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.fetchGithubInfo(s),["prevent"])},[...t[77]||(t[77]=[o("i",{class:"fab fa-github"},null,-1),b(" Live GitHub info",-1)])],8,DE),t[83]||(t[83]=o("div",{class:"dropdown-divider"},null,-1)),R(o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.updateRepository(s),["prevent"])},[...t[78]||(t[78]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),b(" Force update",-1)])],8,TE),[[j,s?.status=="ready"||s?.status=="error"]]),R(o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.updateRepository(s),["prevent"])},[...t[79]||(t[79]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-check-circle"})],-1),b(" Enable",-1)])],8,AE),[[j,s?.status=="removed"]]),R(o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.showStatusMessage(s),["prevent"])},[...t[80]||(t[80]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1),b(" View status message",-1)])],8,OE),[[j,s?.statusMessage]]),t[84]||(t[84]=o("div",{class:"dropdown-divider"},null,-1)),o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.removeCache(s),["prevent"])},[...t[81]||(t[81]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-broom"})],-1),b(" Remove cache",-1)])],8,IE),R(o("a",{class:"dropdown-item text-danger",href:"#",onClick:ie(a=>e.removeRepository(s),["prevent"])},[...t[82]||(t[82]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),b(" Remove",-1)])],8,PE),[[j,s?.status=="ready"]])])])])],2))),256)),e.filteredRepositories?.length==0?(l(),d("div",VE,[...t[86]||(t[86]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1),o("span",null,"No repositories match the current filters.",-1)])])):f("v-if",!0)])])}var qE={class:"container paper-page admin-page"},ME={class:"admin-summary"},UE={class:"summary-total"},$E=["aria-pressed"],LE={class:"count"},FE=["aria-pressed"],zE={class:"count"},HE=["aria-pressed"],BE={class:"count"},jE={key:0,class:"alert alert-danger",style:{margin:"8px 0"}},GE={class:"w-100 admin-filter-toolbar","aria-label":"Users","accept-charset":"UTF-8"},WE={class:"admin-filter-row"},KE={class:"search-wrap"},YE={type:"search",class:"form-control","aria-label":"Search users",placeholder:"Search username or email\u2026",autocomplete:"off"},JE={key:0,class:"admin-search-hint"},QE={class:"admin-filter-inline"},XE={class:"form-control form-control-sm"},ZE={class:"admin-filter-inline","aria-label":"Pagination"},xE=["disabled"],eC={style:{"font-family":"var(--font-mono)","font-size":"12px",color:"var(--ink-muted)"}},tC=["disabled"],oC={key:0,class:"admin-filter-row"},nC={class:"admin-active-chips"},sC={class:"key"},rC=["onClick"],iC={key:1,class:"bulk-bar"},aC={class:"paper-table w-100",role:"table","aria-label":"Users",style:{"--cols":"28px minmax(280px, 2.4fr) 100px 140px 140px 52px"}},lC={class:"paper-table-head admin-users-row",role:"row"},dC={role:"columnheader",style:{width:"28px"}},uC=["checked"],cC={role:"columnheader"},pC={role:"columnheader"},fC={role:"cell",style:{width:"28px"}},mC={type:"checkbox","aria-label":"Select user"},hC={class:"cell-anon",role:"cell"},vC=["src"],yC={class:"anon-text"},gC=["textContent","href"],bC={class:"anon-sub"},wC={key:0},kC=["href"],EC={key:1},CC={class:"cell-views num",role:"cell"},_C=["textContent","href"],SC={class:"cell-status",role:"cell"},NC=["textContent"],RC={class:"cell-status",role:"cell"},DC={key:0,class:"type-badge type-repo"},TC={key:1,class:"empty-dash"},AC={class:"cell-actions",role:"cell"},OC={class:"dropdown"},IC={class:"dropdown-menu dropdown-menu-right"},PC=["href"],VC=["href"],qC=["onClick"],MC=["onClick"],UC={key:0,class:"paper-table-empty"},$C={class:"admin-toolbar",style:{"justify-content":"space-between","border-bottom":"none"}},LC={style:{"font-size":"12px",color:"var(--ink-muted)"}},FC={key:0,class:"pagination-compact"},zC=["disabled"],HC=["max"],BC=["disabled"],jC={class:"admin-filter-inline"},GC={class:"form-control form-control-sm"};function Vl(e,t){let n=ve("field"),r=ve("form");return l(),d("div",qE,[t[46]||(t[46]=de('
Admin \xA0/\xA0 Users

Users

',3)),o("div",ME,[o("span",UE,c(e.total>=0?e.fmt.number(e.total):"\u2026"),1),o("button",{type:"button",class:A(["summary-pill ok",{active:e.query?.status=="active"}]),onClick:t[0]||(t[0]=s=>{e.query.status=e.query.status=="active"?"":"active",e.query.page=1}),"aria-pressed":e.query?.status=="active"},[t[13]||(t[13]=b("Active ",-1)),o("span",LE,c(e.fmt?.number(e.statusCountFor("active"))),1)],10,$E),o("button",{type:"button",class:A(["summary-pill error",{active:e.query?.status=="banned"}]),onClick:t[1]||(t[1]=s=>{e.query.status=e.query.status=="banned"?"":"banned",e.query.page=1}),"aria-pressed":e.query?.status=="banned"},[t[14]||(t[14]=b("Banned ",-1)),o("span",zE,c(e.fmt?.number(e.statusCountFor("banned"))),1)],10,FE),o("button",{type:"button",class:A(["summary-pill",{active:e.query?.status=="removed"}]),onClick:t[2]||(t[2]=s=>{e.query.status=e.query.status=="removed"?"":"removed",e.query.page=1}),"aria-pressed":e.query?.status=="removed"},[t[15]||(t[15]=b("Removed ",-1)),o("span",BE,c(e.fmt?.number(e.statusCountFor("removed"))),1)],10,HE)]),e.fetchError?(l(),d("div",jE,[t[16]||(t[16]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),b(" "+c(e.fetchError),1)])):f("v-if",!0),R((l(),d("form",GE,[o("div",WE,[o("div",KE,[R(o("input",YE,null,512),[[n,{state:e.viewState,set:s=>{e.query.search=s},value:e.query?.search,form:null,options:{}}]]),e.query?.search?f("v-if",!0):(l(),d("span",JE,"/"))]),o("span",QE,[t[18]||(t[18]=o("label",null,"Role",-1)),R((l(),d("select",XE,[...t[17]||(t[17]=[o("option",{value:""},"Any",-1),o("option",{value:"admin"},"Admin",-1)])])),[[n,{state:e.viewState,set:s=>{e.query.role=s},value:e.query?.role,form:null,options:{}}]])]),t[22]||(t[22]=o("span",{class:"admin-filter-spacer"},null,-1)),o("button",{class:"btn btn-sm",type:"button",onClick:t[3]||(t[3]=s=>e.exportCsv())},[...t[19]||(t[19]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-export"})],-1),b(" Export",-1)])]),o("span",ZE,[o("button",{class:"btn btn-sm btn-icon",type:"button",onClick:t[4]||(t[4]=s=>e.query.page=Math.max(1,e.query.page-1)),disabled:e.query?.page<=1,"aria-label":"Previous page"},[...t[20]||(t[20]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-left"})],-1)])],8,xE),o("span",eC,c(e.query?.page)+"/"+c(e.totalPage||1),1),o("button",{class:"btn btn-sm btn-icon",type:"button",onClick:t[5]||(t[5]=s=>e.query.page=Math.min(e.totalPage,e.query.page+1)),disabled:e.query?.page>=e.totalPage,"aria-label":"Next page"},[...t[21]||(t[21]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-right"})],-1)])],8,tC)])]),e.chips?.length?(l(),d("div",oC,[o("div",nC,[(l(!0),d(W,null,oe(e.chips,(s,i)=>(l(),d("span",{class:"admin-active-chip",key:s?.key},[o("span",sC,c(s?.label),1),o("span",null,c(s?.value),1),o("button",{type:"button",onClick:a=>e.clearFilter(s.key),"aria-label":"Clear filter"},[...t[23]||(t[23]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])],8,rC)]))),128))])])):f("v-if",!0)])),[[r,e.viewState]]),e.selectedCount()>0?(l(),d("div",iC,[o("span",null,[o("strong",null,c(e.selectedCount()),1),t[24]||(t[24]=b(" selected",-1))]),o("button",{class:"btn btn-sm text-danger",type:"button",onClick:t[6]||(t[6]=s=>e.bulkBan())},[...t[25]||(t[25]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-ban"})],-1),b(" Ban",-1)])]),o("button",{class:"btn btn-sm",type:"button",onClick:t[7]||(t[7]=s=>{e.selected={},e.allSelected=!1})},"Clear")])):f("v-if",!0),o("div",aC,[o("div",lC,[o("div",dC,[o("input",{type:"checkbox","aria-label":"Select all on page",onClick:t[8]||(t[8]=s=>e.selectAllOnPage()),checked:e.allSelected},null,8,uC)]),o("div",cC,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="username"}]),onClick:t[9]||(t[9]=s=>e.sortBy("username"))},[t[27]||(t[27]=b("User ",-1)),e.sortIcon("username")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("username")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[26]||(t[26]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)]),t[30]||(t[30]=o("div",{role:"columnheader",class:"num"},"Repos",-1)),o("div",pC,[o("button",{type:"button",class:A(["sortable",{active:e.query?.sort=="status"}]),onClick:t[10]||(t[10]=s=>e.sortBy("status"))},[t[29]||(t[29]=b("Status ",-1)),e.sortIcon("status")?(l(),d("svg",{key:0,class:A(["ui-icon sort-direction",{ascending:e.sortIcon("status")==="fa-arrow-up"}]),"aria-hidden":"true"},[...t[28]||(t[28]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)]),t[31]||(t[31]=o("div",{role:"columnheader"},"Role",-1)),t[32]||(t[32]=o("div",{role:"columnheader","aria-label":"Actions"},null,-1))]),(l(!0),d(W,null,oe(e.filteredUsers,(s,i)=>(l(),d("div",{class:A(["paper-table-row admin-users-row",{"row-selected":e.selected[s?.username]}]),role:"row"},[o("div",fC,[R(o("input",mC,null,512),[[n,{state:e.viewState,set:a=>{e.selected[s.username]=a},value:e.selected[s?.username],form:null,options:{}}]])]),o("div",hC,[s?.photo?(l(),d("img",{key:0,width:"28",height:"28",class:"rounded-circle",style:{"flex-shrink":"0"},src:e.safeUrl(s?.photo)},null,8,vC)):f("v-if",!0),o("div",yC,[o("a",{class:"repo-name",textContent:c(s?.username),href:e.safeUrl("/admin/users/"+s?.username)},null,8,gC),o("div",bC,[s?.emails?.[0]?.email?(l(),d("span",wC,c(s?.emails?.[0]?.email)+" \xB7 ",1)):f("v-if",!0),o("a",{target:"_blank",href:e.safeUrl("https://github.com/"+s?.username)},[t[33]||(t[33]=o("i",{class:"fab fa-github"},null,-1)),b(" "+c(s?.username),1)],8,kC),s?.dateOfEntry?(l(),d("span",EC,"\xA0\xB7\xA0Joined "+c(e.fmt?.humanTime(s?.dateOfEntry)),1)):f("v-if",!0)])])]),o("div",CC,[t[34]||(t[34]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1)),o("a",{title:"Show this user's repositories",textContent:c(e.fmt?.number(s?.repoCount||0)),href:e.safeUrl("/admin/repositories?owner="+s?.username)},null,8,_C)]),o("div",SC,[o("span",{class:A(["status-dot",{"status-ready":s?.status=="active","status-removed":s?.status=="removed"||s?.status=="banned"}])},null,2),o("span",{textContent:c(e.fmt?.title(s?.status))},null,8,NC)]),o("div",RC,[s?.isAdmin?(l(),d("span",DC,"Admin")):f("v-if",!0),s?.isAdmin?f("v-if",!0):(l(),d("span",TC,"\u2014"))]),o("div",AC,[o("div",OC,[t[40]||(t[40]=o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"Actions"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})])],-1)),o("div",IC,[o("a",{class:"dropdown-item",href:e.safeUrl("/admin/users/"+s?.username)},[...t[35]||(t[35]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),b(" View details",-1)])],8,PC),o("a",{class:"dropdown-item",href:e.safeUrl("/admin/repositories?owner="+s?.username)},[...t[36]||(t[36]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1),b(" View repositories",-1)])],8,VC),t[39]||(t[39]=o("div",{class:"dropdown-divider"},null,-1)),R(o("a",{class:"dropdown-item text-danger",href:"#",onClick:ie(a=>e.banUser(s),["prevent"])},[...t[37]||(t[37]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-ban"})],-1),b(" Ban",-1)])],8,qC),[[j,s?.status=="active"]]),R(o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.activateUser(s),["prevent"])},[...t[38]||(t[38]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-check-circle"})],-1),b(" Activate",-1)])],8,MC),[[j,s?.status=="removed"||s?.status=="banned"]])])])])],2))),256)),e.filteredUsers?.length==0?(l(),d("div",UC,[...t[41]||(t[41]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1),o("span",null,"No users match the current filters.",-1)])])):f("v-if",!0)]),o("div",$C,[o("span",LC,c(e.fmt?.number(e.total))+" results",1),e.totalPage>1?(l(),d("div",FC,[o("button",{class:"btn btn-sm",onClick:t[11]||(t[11]=s=>e.query.page=Math.max(1,e.query.page-1)),disabled:e.query?.page<=1},[...t[42]||(t[42]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-left"})],-1),b(" Previous",-1)])],8,zC),R(o("input",{type:"number",class:"form-control form-control-sm",min:"1",style:{width:"56px"},max:e.totalPage},null,8,HC),[[n,{state:e.viewState,set:s=>{e.query.page=s},value:e.query?.page,form:null,options:{}}]]),o("span",null,"of "+c(e.totalPage),1),o("button",{class:"btn btn-sm",onClick:t[12]||(t[12]=s=>e.query.page=Math.min(e.totalPage,e.query.page+1)),disabled:e.query?.page>=e.totalPage},[...t[43]||(t[43]=[b("Next ",-1),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-chevron-right"})],-1)])],8,BC)])):f("v-if",!0),o("span",jC,[t[45]||(t[45]=o("label",null,"Per page",-1)),R((l(),d("select",GC,[...t[44]||(t[44]=[o("option",{value:"10"},"10",-1),o("option",{value:"25"},"25",-1),o("option",{value:"50"},"50",-1),o("option",{value:"100"},"100",-1)])])),[[n,{state:e.viewState,set:s=>{e.query.limit=s},value:e.query?.limit,form:null,options:{}}]])])])])}var WC={class:"anonymize-landing"},KC={class:"anonymize-landing-inner"},YC={class:"form-group mt-4 mb-2"},JC={class:"source-url-label-row"},QC={key:0,class:"repo-access","aria-label":"GitHub access"},XC={key:0,class:"repo-access-switch",role:"group","aria-label":"Repository connection"},ZC=["aria-pressed","disabled"],xC=["aria-pressed","disabled"],e2={key:1,class:"connection-badge"},t2={id:"sourceUrl-landing",type:"text",class:"form-control form-control-lg",placeholder:"https://github.com/owner/repository"},o2={key:0,class:"draft-status",role:"status"},n2={key:1,class:"text-danger",role:"alert"},s2={key:2,class:"repo-access-details","aria-label":"GitHub access"},r2={class:"repo-access-main"},i2={class:"repo-access-controls"},a2={key:1,class:"connection-link",href:"/connections"},l2={class:"repo-access-note"},d2={key:0},u2={class:"anonymize-workspace"},c2={class:"anonymize-topbar"},p2={class:"anonymize-topbar-inner"},f2={class:"paper-crumbs"},m2={class:"here"},h2={class:"anonymize-topbar-head"},v2={class:"paper-page-title anonymize-topbar-title"},y2={key:0},g2={key:1},b2={key:0,class:"alert alert-info",role:"status"},w2={key:1,class:"alert alert-info",role:"status"},k2={key:1},E2={class:"anonymize-mobile-tabs",role:"tablist","aria-label":"Anonymization workspace"},C2=["aria-selected","tabindex"],_2=["aria-selected","tabindex"],S2={key:2,class:"anonymize-preview-empty",id:"workspace-preview",role:"status"},N2={class:"anonymize-split"},R2=["role","aria-labelledby"],D2={class:"form needs-validation paper-settings-main",name:"anonymize",novalidate:""},T2={class:"paper-settings-section"},A2={class:"form-group"},O2={class:"source-url-label-row"},I2={key:0,class:"repo-access","aria-label":"GitHub access"},P2={key:0,class:"repo-access-switch",role:"group","aria-label":"Repository connection"},V2=["aria-pressed","disabled"],q2=["aria-pressed","disabled"],M2={key:1,class:"connection-badge"},U2=["disabled"],$2={class:"invalid-feedback"},L2={class:"invalid-feedback"},F2={class:"invalid-feedback"},z2={class:"invalid-feedback"},H2={key:0,class:"repo-access-details","aria-label":"Previous repository configuration"},B2={key:0,class:"form-group"},j2=["value"],G2={key:1},W2={class:"repo-access-controls"},K2=["href"],Y2={key:1,class:"repo-access-details","aria-label":"GitHub access"},J2={class:"repo-access-main"},Q2={class:"repo-access-controls"},X2={key:1,class:"connection-link",href:"/connections"},Z2={class:"repo-access-note"},x2={key:0},e_={key:2,class:"repo-access-details"},t_=["disabled"],o_={key:0,role:"status"},n_={key:3,class:"repo-access-details"},s_={key:0,role:"status"},r_={key:4,class:"form-grid-2"},i_={class:"form-group"},a_={class:"input-group"},l_={class:"form-control",id:"branch",name:"branch"},d_=["textContent","value"],u_={class:"input-group-append"},c_={class:"form-group"},p_=["disabled"],f_={class:"invalid-feedback"},m_={class:"invalid-feedback"},h_={class:"form-check"},v_={class:"form-check-input",type:"checkbox",id:"update",name:"update"},y_={class:"paper-settings-section"},g_={class:"form-group"},b_=["disabled"],w_={class:"form-text text-muted"},k_={class:"invalid-feedback"},E_={class:"form-group"},C_=["disabled"],__={class:"form-text text-muted"},S_={class:"invalid-feedback"},N_={class:"form-group"},R_=["disabled"],D_={class:"form-text text-muted"},T_={class:"invalid-feedback"},A_={class:"form-group"},O_={class:"form-text text-muted"},I_=["href"],P_={class:"invalid-feedback"},V_={class:"form-text text-muted"},q_={class:"paper-settings-section"},M_={class:"form-group"},U_={class:"form-text text-muted"},$_={class:"warning-feedback"},L_={class:"invalid-feedback"},F_={class:"paper-settings-section"},z_={class:"form-check"},H_={class:"form-check-input",type:"checkbox",id:"link",name:"link"},B_={class:"form-check"},j_={class:"form-check-input",type:"checkbox",id:"image",name:"image"},G_={class:"form-check"},W_={class:"form-check-input",type:"checkbox",id:"pdf",name:"pdf"},K_={class:"form-check"},Y_={class:"form-check-input",type:"checkbox",id:"notebook",name:"notebook"},J_={class:"form-check"},Q_=["disabled"],X_={key:0,class:"form-text text-muted"},Z_={key:1,class:"form-text text-muted"},x_={class:"form-check"},eS={class:"form-check-input",type:"checkbox",id:"title-gist",name:"title-gist"},tS={class:"form-check"},oS={class:"form-check-input",type:"checkbox",id:"content-gist",name:"content-gist"},nS={class:"form-check"},sS={class:"form-check-input",type:"checkbox",id:"comments-gist",name:"comments-gist"},rS={class:"form-check"},iS={class:"form-check-input",type:"checkbox",id:"username-gist",name:"username-gist"},aS={class:"form-check"},lS={class:"form-check-input",type:"checkbox",id:"date-gist",name:"date-gist"},dS={class:"form-check"},uS={class:"form-check-input",type:"checkbox",id:"origin-gist",name:"origin-gist"},cS={class:"form-check"},pS={class:"form-check-input",type:"checkbox",id:"title",name:"title"},fS={class:"form-check"},mS={class:"form-check-input",type:"checkbox",id:"body",name:"body"},hS={class:"form-check"},vS={class:"form-check-input",type:"checkbox",id:"diff",name:"diff"},yS={class:"form-check"},gS={class:"form-check-input",type:"checkbox",id:"comments",name:"comments"},bS={class:"form-check"},wS={class:"form-check-input",type:"checkbox",id:"username",name:"username"},kS={class:"form-check"},ES={class:"form-check-input",type:"checkbox",id:"date",name:"date"},CS={class:"form-check"},_S={class:"form-check-input",type:"checkbox",id:"origin",name:"origin"},SS={class:"paper-settings-section"},NS={class:"form-grid-2"},RS={class:"form-group"},DS={class:"form-control",id:"expiration",name:"expiration"},TS={class:"form-group"},AS=["min","max"],OS={class:"invalid-feedback"},IS={class:"invalid-feedback"},PS={class:"paper-settings-section"},VS={class:"form-group"},qS={style:{position:"relative"}},MS={type:"text",id:"coauthorSearch",class:"form-control",placeholder:"Search GitHub username\u2026",autocomplete:"off"},US={class:"dropdown-menu show",style:{display:"block","max-height":"220px","overflow-y":"auto",width:"100%"}},$S=["onClick"],LS=["src"],FS=["textContent"],zS=["textContent"],HS={class:"coauthor-list"},BS={class:"coauthor-row d-flex align-items-center",style:{padding:"6px 0",gap:"8px"}},jS=["src"],GS=["textContent","href"],WS=["onClick"],KS={class:"form-text text-muted"},YS=["textContent"],JS={key:1,class:"draft-status",role:"status"},QS={key:2,class:"draft-status"},XS={key:3,class:"anonymize-review-note"},ZS={class:"anonymize-submit-bar"},xS=["disabled"],eN=["disabled"],tN=["disabled"],oN=["disabled"],nN=["disabled"],sN=["disabled"],rN=["role","aria-labelledby"],iN={class:"anonymize-preview-head"},aN={class:"anonymize-preview-sub"},lN={key:0,class:"anonymize-preview-status",role:"status"},dN={key:1,class:"anonymize-preview-status",role:"status"},uN={key:2,class:"anonymize-preview-status",role:"alert"},cN={key:3,class:"anonymize-preview-status"},pN=["innerHTML"],fN=["role","aria-labelledby"],mN={class:"anonymize-preview-head"},hN={class:"anonymize-preview-sub"},vN={key:0,class:"anonymize-preview-status",role:"status"},yN={key:1,class:"anonymize-preview-status",role:"status"},gN={key:2,class:"anonymize-preview-status",role:"alert"},bN={key:3,class:"anonymize-preview-body"},wN={class:"d-flex w-100 justify-content-between align-items-center flex-wrap"},kN={class:"pr-title mb-1"},EN={key:0},CN=["textContent"],_N={key:0},SN={key:1},NN={key:2},RN={class:"pr-comments mt-3"},DN={class:"pr-comment"},TN={class:"pr-comment-head"},AN=["textContent"],ON={key:0,class:"pr-comment-date"},IN={key:3},PN={class:"pr-comments"},VN={class:"pr-comment"},qN={class:"pr-comment-head"},MN={key:0,class:"pr-comment-author"},UN=["textContent"],$N=["textContent"],LN={key:0,class:"pr-comment-body"},FN=["role","aria-labelledby"],zN={class:"anonymize-preview-head"},HN={class:"anonymize-preview-sub"},BN={key:0,class:"anonymize-preview-status",role:"status"},jN={key:1,class:"anonymize-preview-status",role:"status"},GN={key:2,class:"anonymize-preview-status",role:"alert"},WN={key:3,class:"anonymize-preview-body"},KN={class:"d-flex w-100 justify-content-between align-items-center flex-wrap"},YN={class:"pr-title mb-1"},JN={key:0},QN=["textContent"],XN={key:0},ZN={key:1,class:"pr-body shadow-sm p-3 mb-4 rounded",style:{background:"var(--paper-bg-alt)"}},xN={key:2,class:"paper-tabs",role:"tablist"},eR=["aria-selected","tabindex"],tR=["aria-selected","tabindex"],oR=["textContent"],nR={key:3,class:"anonymize-preview-status"},sR={class:"paper-tab-content"},rR={key:0,role:"tabpanel",id:"preview-pr-diff-panel","aria-labelledby":"preview-pr-diff-tab"},iR=["innerHTML"],aR={key:1,role:"tabpanel",id:"preview-pr-comments-panel","aria-labelledby":"preview-pr-comments-tab"},lR={class:"pr-comments"},dR={class:"pr-comment"},uR={class:"pr-comment-head"},cR={key:0,class:"pr-comment-author"},pR=["textContent"],fR=["textContent"],mR={key:0,class:"pr-comment-body"};function ql(e,t){let n=Ge("gist-file"),r=Ge("markdown"),s=ve("field"),i=ve("form");return l(),d("div",{class:A(["anonymize-page h-100",{"mobile-preview-active":e.mobilePane==="preview"}])},[f(" ===== STATE 1: No URL \u2014 centered input ===== "),R(o("div",WC,[o("div",KC,[t[40]||(t[40]=o("div",{class:"paper-crumbs"},[b("My work \xA0/\xA0 "),o("span",{class:"here"},"New anonymization")],-1)),t[41]||(t[41]=o("h1",{class:"paper-page-title"},[b("New "),o("em",null,"anonymization")],-1)),t[42]||(t[42]=o("p",{class:"paper-page-lede"}," Paste a GitHub repository, pull-request, or gist URL. We\u2019ll fetch it, redact the terms you choose in text files, and give you a share link. Images and PDFs are served unchanged when enabled. Review them before sharing. ",-1)),o("div",YC,[o("div",JC,[t[36]||(t[36]=o("label",{class:"paper-field-label",for:"sourceUrl-landing"},"Source URL",-1)),!e.sourceUrl&&e.githubConnections?.appEnabled&&e.githubConnections.appConnected&&e.githubConnections.oauthConnected?(l(),d("aside",QC,[!e.isUpdate&&e.detectedType!=="gist"?(l(),d("div",XC,[o("button",{type:"button","aria-pressed":e.githubConnection==="github-app",disabled:e.githubConnection==="github-app",onClick:t[0]||(t[0]=a=>e.chooseGitHubConnection("github-app"))},[...t[35]||(t[35]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),b(),o("span",{class:"sr-only"},"Read-only ",-1),b("GitHub App",-1)])],8,ZC),o("button",{type:"button","aria-pressed":e.githubConnection==="oauth",disabled:e.githubConnection==="oauth",onClick:t[1]||(t[1]=a=>e.chooseGitHubConnection("oauth"))},"Legacy OAuth",8,xC)])):f("v-if",!0),e.isUpdate||e.detectedType==="gist"?(l(),d("span",e2,c((e.detectedType==="gist"?e.githubConnections?.gistConnection==="github-app":e.githubConnection==="github-app")?"Read-only GitHub App":"Legacy OAuth"),1)):f("v-if",!0)])):f("v-if",!0)]),R(o("input",t2,null,512),[[s,{state:e.viewState,set:a=>{e.sourceUrl=a},value:e.sourceUrl,form:null,options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"},change:()=>{e.urlSelected()}}]])]),e.draftRestored?(l(),d("div",o2,[t[37]||(t[37]=b("Your unsaved draft was restored. ",-1)),o("button",{type:"button",class:"draft-discard",onClick:t[2]||(t[2]=a=>e.discardDraft())},"Discard draft")])):f("v-if",!0),e.sourceUrlError?(l(),d("p",n2,c(e.sourceUrlError),1)):f("v-if",!0),t[43]||(t[43]=o("small",{class:"form-text",style:{color:"var(--ink-muted)"}}," Repository, pull request (\u2026/pull/42) and gist (gist.github.com/\u2026) URLs are all accepted. ",-1)),!e.sourceUrl&&e.githubConnections?.appEnabled&&e.githubConnections.appConnected?(l(),d("aside",s2,[o("div",r2,[o("div",i2,[e.detectedType!=="gist"&&e.githubConnection!=="oauth"?(l(),d("button",{key:0,type:"button",class:"btn btn-outline-ink",onClick:t[3]||(t[3]=a=>e.grantGitHubAccess())},[...t[38]||(t[38]=[b("Manage access ",-1),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-external-link"})],-1)])])):f("v-if",!0),e.isUpdate||e.detectedType==="gist"||e.githubConnection==="oauth"?(l(),d("a",a2,c(e.isUpdate?"Change connection":"Manage connections")+" \u2192",1)):f("v-if",!0)])]),o("div",l2,[e.detectedType!=="gist"&&e.githubConnection!=="oauth"?(l(),d("span",d2,"Signing in does not grant access to private repositories. Use Manage access to install or configure the GitHub App, select this repository, then return here. Organization access may require administrator approval.")):f("v-if",!0),t[39]||(t[39]=o("span",null,[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})]),b(" Selected content will be published, including content from private repositories.")],-1))])])):f("v-if",!0)])],512),[[j,!e.workspaceOpen&&!e.isUpdate]]),f(" ===== STATE 2: URL provided \u2014 form (left) + preview (right) ===== "),R(o("div",u2,[o("header",c2,[o("div",p2,[o("div",f2,[t[44]||(t[44]=o("a",{href:"/dashboard"},"My work",-1)),t[45]||(t[45]=b(" \xA0/\xA0 ",-1)),o("span",m2,c(e.isUpdate?"Edit anonymization":"New anonymization"),1)]),o("div",h2,[o("h1",v2,[e.isUpdate?f("v-if",!0):(l(),d("span",y2,[...t[46]||(t[46]=[b("New ",-1),o("em",null,"anonymization",-1)])])),e.isUpdate?(l(),d("span",g2,[...t[47]||(t[47]=[b("Edit ",-1),o("em",null,"anonymization",-1)])])):f("v-if",!0)]),R(o("span",{class:A(["type-badge",{"type-repo":e.detectedType==="repo","type-pr":e.detectedType==="pr","type-gist":e.detectedType==="gist"}])},c(e.detectedType==="repo"?"Repo":e.detectedType==="pr"?"PR":"Gist"),3),[[j,e.detectedType]])])])]),e.detectedType==="gist"&&e.gistAppRequired?(l(),d("aside",b2,[t[48]||(t[48]=o("p",null,"Reconnect your GitHub account to read this gist. Your draft will be restored when you return.",-1)),o("button",{type:"button",class:"btn btn-ink",onClick:t[4]||(t[4]=a=>e.connectGistApp())},"Connect GitHub App to access gists")])):f("v-if",!0),e.detectedType==="gist"&&e.gistOAuthRequired?(l(),d("aside",w2,[t[49]||(t[49]=o("p",null,"Connect GitHub OAuth to access gists. Your account and existing anonymizations stay the same, and your draft will be restored when you return.",-1)),t[50]||(t[50]=o("p",null,"GitHub's legacy OAuth connection includes write access to private repositories.",-1)),e.githubConnections?.oauthEnabled?(l(),d("button",{key:0,type:"button",class:"btn btn-ink",onClick:t[5]||(t[5]=a=>e.connectGistOAuth())},"Connect GitHub OAuth to access gists")):(l(),d("p",k2,"GitHub OAuth is currently unavailable. Please try again later."))])):f("v-if",!0),o("nav",E2,[o("button",{id:"workspace-settings-tab",role:"tab",type:"button","aria-selected":e.mobilePane==="settings","aria-controls":"workspace-settings",tabindex:e.mobilePane==="settings"?0:-1,onKeydown:t[6]||(t[6]=a=>e.previewTabKeydown(a)),onClick:t[7]||(t[7]=a=>e.selectMobilePane("settings"))},"Settings",40,C2),o("button",{id:"workspace-preview-tab",role:"tab",type:"button","aria-selected":e.mobilePane==="preview","aria-controls":"workspace-preview",tabindex:e.mobilePane==="preview"?0:-1,onKeydown:t[8]||(t[8]=a=>e.previewTabKeydown(a)),onClick:t[9]||(t[9]=a=>e.selectMobilePane("preview"))},"Reviewer preview",40,_2)]),e.detectedType!=="repo"&&!e.details?(l(),d("div",S2,c(e.sourceLoading?"Loading source\u2026":"Choose an accessible source to see its preview."),1)):f("v-if",!0),o("div",N2,[f(" Form column (left) "),o("div",{id:"workspace-settings",role:e.mobileWorkspace?"tabpanel":null,"aria-labelledby":e.mobileWorkspace?"workspace-settings-tab":null,class:"anonymize-form-col overflow-auto"},[R((l(),d("form",D2,[o("section",T2,[t[65]||(t[65]=o("div",{class:"paper-section-eyebrow"},"Source",-1)),o("div",A2,[o("div",O2,[t[52]||(t[52]=o("label",{class:"paper-field-label",for:"sourceUrl"},"GitHub URL",-1)),e.sourceUrl&&e.githubConnections?.appEnabled&&e.githubConnections.appConnected&&e.githubConnections.oauthConnected?(l(),d("aside",I2,[!e.isUpdate&&e.detectedType!=="gist"?(l(),d("div",P2,[o("button",{type:"button","aria-pressed":e.githubConnection==="github-app",disabled:e.githubConnection==="github-app",onClick:t[10]||(t[10]=a=>e.chooseGitHubConnection("github-app"))},[...t[51]||(t[51]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),b(),o("span",{class:"sr-only"},"Read-only ",-1),b("GitHub App",-1)])],8,V2),o("button",{type:"button","aria-pressed":e.githubConnection==="oauth",disabled:e.githubConnection==="oauth",onClick:t[11]||(t[11]=a=>e.chooseGitHubConnection("oauth"))},"Legacy OAuth",8,q2)])):f("v-if",!0),e.isUpdate||e.detectedType==="gist"?(l(),d("span",M2,c((e.detectedType==="gist"?e.githubConnections?.gistConnection==="github-app":e.githubConnection==="github-app")?"Read-only GitHub App":"Legacy OAuth"),1)):f("v-if",!0)])):f("v-if",!0)]),R(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.anonymize?.sourceUrl?.invalid}]),name:"sourceUrl",id:"sourceUrl",disabled:e.isUpdate&&e.detectedType!=="repo",placeholder:"Paste a GitHub repo or pull request URL"},null,10,U2),[[s,{state:e.viewState,set:a=>{e.sourceUrl=a},value:e.sourceUrl,form:"anonymize",options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"},change:()=>{e.urlSelected()}}]]),R(o("div",$2," Please provide a valid GitHub URL. ",512),[[j,e.anonymize?.sourceUrl?.errors?.github]]),R(o("div",L2," Not accessible. The organization may restrict access. ",512),[[j,e.anonymize?.sourceUrl?.errors?.access]]),R(o("div",F2," Does not exist or is not accessible. ",512),[[j,e.anonymize?.sourceUrl?.errors?.missing]]),R(o("div",z2," Already anonymized. ",512),[[j,e.anonymize?.sourceUrl?.errors?.used]])]),!e.isUpdate&&e.previousConfigurations.length?(l(),d("aside",H2,[t[54]||(t[54]=o("p",{role:"status"},"You have already anonymized this repository. Use the existing configuration to keep its anonymous link and avoid creating another repository.",-1)),e.previousConfigurations.length>1?(l(),d("div",B2,[t[53]||(t[53]=o("label",{class:"paper-field-label",for:"previousConfiguration"},"Previous anonymization",-1)),R(o("select",{id:"previousConfiguration",class:"form-control","onUpdate:modelValue":t[12]||(t[12]=a=>e.previousConfigurationId=a)},[(l(!0),d(W,null,oe(e.previousConfigurations,a=>(l(),d("option",{key:a.repoId,value:a.repoId},c(a.repoId),9,j2))),128))],512),[[To,e.previousConfigurationId]])])):(l(),d("p",G2,c(e.previousConfigurationId),1)),t[55]||(t[55]=o("p",null,"You can review and update its settings before saving.",-1)),o("div",W2,[o("a",{class:"btn btn-ink",href:e.existingConfigurationUrl()},"Use existing configuration",8,K2),o("button",{type:"button",class:"btn btn-link",onClick:t[13]||(t[13]=a=>e.previousConfigurations=[])},"Create a separate anonymization")])])):f("v-if",!0),e.sourceUrl&&e.githubConnections?.appEnabled&&e.githubConnections.appConnected?(l(),d("aside",Y2,[o("div",J2,[o("div",Q2,[e.detectedType!=="gist"&&e.githubConnection!=="oauth"?(l(),d("button",{key:0,type:"button",class:"btn btn-outline-ink",onClick:t[14]||(t[14]=a=>e.grantGitHubAccess())},[...t[56]||(t[56]=[b("Manage access ",-1),o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-external-link"})],-1)])])):f("v-if",!0),e.isUpdate||e.detectedType==="gist"||e.githubConnection==="oauth"?(l(),d("a",X2,c(e.isUpdate?"Change connection":"Manage connections")+" \u2192",1)):f("v-if",!0)])]),o("div",Z2,[e.detectedType!=="gist"&&e.githubConnection!=="oauth"?(l(),d("span",x2,"Signing in does not grant access to private repositories. Use Manage access to install or configure the GitHub App, select this repository, then return here. Organization access may require administrator approval.")):f("v-if",!0),t[57]||(t[57]=o("span",null,[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})]),b(" Selected content will be published, including content from private repositories.")],-1))])])):f("v-if",!0),e.isUpdate&&e.detectedType==="repo"&&e.role==="owner"&&e.accessRepairAllowed&&e.githubConnections?.appEnabled&&e.githubConnection==="github-app"&&e.sourceUrl==="https://github.com/"+e._originalFullName?(l(),d("aside",e_,[t[58]||(t[58]=o("p",null,"If this repository became private or its App installation changed, repair its access here. This keeps the same anonymous URL and published commit.",-1)),o("button",{type:"button",class:"btn btn-outline-ink",disabled:e.repairingGitHubAccess,onClick:t[15]||(t[15]=a=>e.repairGitHubAccess())},"Repair GitHub access",8,t_),o("button",{type:"button",class:"btn btn-outline-ink",onClick:t[16]||(t[16]=a=>e.grantGitHubAccess())},"Manage access"),e.accessRepairMessage?(l(),d("p",o_,c(e.accessRepairMessage),1)):f("v-if",!0)])):f("v-if",!0),e.isUpdate&&e.detectedType==="repo"&&e.role==="owner"&&e.sourceUrl==="https://github.com/"+e._originalFullName?(l(),d("aside",n_,[t[59]||(t[59]=o("p",null,"If you deleted and recreated this repository, reconnect it before choosing a branch.",-1)),o("button",{type:"button",class:"btn btn-outline-ink",onClick:t[17]||(t[17]=a=>e.reconnectSource())},"Reconnect source repository"),e.reconnectRepositoryId?(l(),d("p",s_,"Source reloaded. Review the branch, commit, and anonymization preview, then save to replace the published snapshot.")):f("v-if",!0)])):f("v-if",!0),e.detectedType==="repo"?(l(),d("div",r_,[o("div",i_,[t[61]||(t[61]=o("label",{class:"paper-field-label",for:"branch"},"Branch",-1)),o("div",a_,[R((l(),d("select",l_,[(l(!0),d(W,null,oe(e.branches,(a,u)=>(l(),d("option",{textContent:c(a?.name),value:a?.name},null,8,d_))),256))])),[[s,{state:e.viewState,set:a=>{e.source.branch=a},value:e.source?.branch,form:"anonymize",options:{}}]]),o("div",u_,[o("button",{class:"btn btn-icon",type:"button",title:"Refresh","data-toggle":"tooltip","data-placement":"bottom",onClick:t[18]||(t[18]=a=>e.getBranches(!0)),"aria-label":"Refresh"},[...t[60]||(t[60]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1)])])])])]),o("div",c_,[t[62]||(t[62]=o("label",{class:"paper-field-label",for:"commit"},"Commit",-1)),R(o("input",{class:A(["form-control",{"is-invalid":e.anonymize?.commit?.invalid}]),id:"commit",disabled:e.options.update,name:"commit",pattern:"[a-fA-Z0-9]{6,}",required:""},null,10,p_),[[s,{state:e.viewState,set:a=>{e.source.commit=a},value:e.source?.commit,form:"anonymize",options:{}}]]),R(o("div",f_," The commit SHA is not valid. ",512),[[j,e.anonymize?.commit?.errors?.pattern||e.anonymize?.commit?.errors?.required]]),R(o("div",m_," This commit no longer exists in the repository. Click refresh to get the latest. ",512),[[j,e.anonymize?.commit?.errors?.exists]])])])):f("v-if",!0),R(o("div",h_,[R(o("input",v_,null,512),[[s,{state:e.viewState,set:a=>{e.options.update=a},value:e.options?.update,form:"anonymize",options:{}}]]),t[63]||(t[63]=o("label",{class:"form-check-label",for:"update"},"Auto-update from GitHub",-1)),t[64]||(t[64]=o("small",{class:"form-text text-muted"},"Follow the branch and pull the latest commit automatically, at most once an hour.",-1))],512),[[j,e.detectedType]])]),R(o("section",y_,[t[76]||(t[76]=o("div",{class:"paper-section-eyebrow"},"Identity",-1)),R(o("div",g_,[t[68]||(t[68]=o("label",{class:"paper-field-label",for:"repoId"},"Anonymized repository ID",-1)),R(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.anonymize?.repoId?.invalid}]),name:"repoId",id:"repoId",disabled:e.isUpdate},null,10,b_),[[s,{state:e.viewState,set:a=>{e.repoId=a},value:e.repoId,form:"anonymize",options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"}}]]),o("small",w_,[t[66]||(t[66]=b("Your share link will be ",-1)),o("code",null,"anonymous.4open.science/r/"+c(e.repoId),1),t[67]||(t[67]=b(".",-1))]),R(o("div",k_,"ID can only contain letters and numbers.",512),[[j,e.anonymize?.repoId?.errors?.format]]),R(o("div",{class:"invalid-feedback"},c(e.repoId)+" is already used.",513),[[j,e.anonymize?.repoId?.errors?.used]])],512),[[j,e.detectedType==="repo"]]),R(o("div",E_,[t[71]||(t[71]=o("label",{class:"paper-field-label",for:"pullRequestId"},"Anonymized pull request ID",-1)),R(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.anonymize?.pullRequestId?.invalid}]),name:"pullRequestId",id:"pullRequestId",disabled:e.isUpdate},null,10,C_),[[s,{state:e.viewState,set:a=>{e.pullRequestId=a},value:e.pullRequestId,form:"anonymize",options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"}}]]),o("small",__,[t[69]||(t[69]=b("Your share link will be ",-1)),o("code",null,"anonymous.4open.science/pr/"+c(e.pullRequestId),1),t[70]||(t[70]=b(".",-1))]),R(o("div",S_,"ID can only contain letters and numbers.",512),[[j,e.anonymize?.pullRequestId?.errors?.format]]),R(o("div",{class:"invalid-feedback"},c(e.pullRequestId)+" is already used.",513),[[j,e.anonymize?.pullRequestId?.errors?.used]])],512),[[j,e.detectedType==="pr"]]),R(o("div",N_,[t[74]||(t[74]=o("label",{class:"paper-field-label",for:"gistId"},"Anonymized gist ID",-1)),R(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.anonymize?.gistId?.invalid}]),name:"gistId",id:"gistId",disabled:e.isUpdate},null,10,R_),[[s,{state:e.viewState,set:a=>{e.gistId=a},value:e.gistId,form:"anonymize",options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"}}]]),o("small",D_,[t[72]||(t[72]=b("Your share link will be ",-1)),o("code",null,"anonymous.4open.science/gist/"+c(e.gistId),1),t[73]||(t[73]=b(".",-1))]),R(o("div",T_,"ID can only contain letters and numbers.",512),[[j,e.anonymize?.gistId?.errors?.format]]),R(o("div",{class:"invalid-feedback"},c(e.gistId)+" is already used.",513),[[j,e.anonymize?.gistId?.errors?.used]])],512),[[j,e.detectedType==="gist"]]),o("div",A_,[t[75]||(t[75]=o("label",{class:"paper-field-label",for:"conference"},[b("Conference "),o("span",{class:"paper-optional"},"(optional)")],-1)),R(o("input",{class:A(["form-control",{"is-invalid":e.anonymize?.conference?.invalid}]),id:"conference",name:"conference"},null,2),[[s,{state:e.viewState,set:a=>{e.conference=a},value:e.conference,form:"anonymize",options:{debounce:{default:800,blur:0},updateOn:"default blur"}}]]),R(o("small",O_,[o("a",{target:"_blank",href:e.safeUrl(e.conference_data?.url)},c(e.conference_data?.name),9,I_),b(" expires "+c(e.fmt?.date(e.conference_data?.endDate))+". ",1)],512),[[j,e.conference_data]]),R(o("div",P_,"The conference is not activated.",512),[[j,e.anonymize?.conference?.errors?.activated]]),R(o("small",V_,"Link to a conference to apply its shared defaults.",512),[[j,!e.conference_data]])])],512),[[j,e.detectedType]]),R(o("section",q_,[t[84]||(t[84]=o("div",{class:"paper-section-eyebrow"},"Anonymization",-1)),o("div",M_,[t[83]||(t[83]=o("label",{class:"paper-field-label",for:"terms"},"Terms to redact",-1)),R(o("textarea",{class:A(["form-control",{"is-invalid":e.anonymize?.terms?.invalid}]),id:"terms",name:"terms",rows:"4"},null,2),[[s,{state:e.viewState,set:a=>{e.terms=a},value:e.terms,form:"anonymize",options:{debounce:250}}]]),o("small",U_,[t[77]||(t[77]=b("One term per line (regex allowed). Replaced by ",-1)),o("code",null,c(e.site_options?.ANONYMIZATION_MASK)+"-[N]",1),t[78]||(t[78]=b(", or use ",-1)),t[79]||(t[79]=o("code",null,"term=>replacement",-1)),t[80]||(t[80]=b(" to pick your own (e.g. ",-1)),t[81]||(t[81]=o("code",null,"Anonymous=>ABC",-1)),t[82]||(t[82]=b(").",-1))]),R(o("div",$_,"Regex characters detected. Escape them if unintentional.",512),[[j,e.termsRegexWarning]]),R(o("div",L_,"Terms are in an invalid format.",512),[[j,e.anonymize?.terms?.errors?.format]])])],512),[[j,e.detectedType]]),R(o("section",F_,[t[105]||(t[105]=o("div",{class:"paper-section-eyebrow"},"Display",-1)),R(o("div",null,[o("div",z_,[R(o("input",H_,null,512),[[s,{state:e.viewState,set:a=>{e.options.link=a},value:e.options?.link,form:"anonymize",options:{}}]]),t[85]||(t[85]=o("label",{class:"form-check-label",for:"link"},"Keep links",-1))]),o("div",B_,[R(o("input",j_,null,512),[[s,{state:e.viewState,set:a=>{e.options.image=a},value:e.options?.image,form:"anonymize",options:{}}]]),t[86]||(t[86]=o("label",{class:"form-check-label",for:"image"},"Display images",-1)),t[87]||(t[87]=o("small",{class:"form-text text-muted"},"Images are served unchanged and may contain names or affiliations.",-1))]),o("div",G_,[R(o("input",W_,null,512),[[s,{state:e.viewState,set:a=>{e.options.pdf=a},value:e.options?.pdf,form:"anonymize",options:{}}]]),t[88]||(t[88]=o("label",{class:"form-check-label",for:"pdf"},"Display PDFs",-1)),t[89]||(t[89]=o("small",{class:"form-text text-muted"},[b("PDF contents and metadata are served unchanged. "),o("a",{href:"/faq#formats"},"About supported formats")],-1))]),o("div",K_,[R(o("input",Y_,null,512),[[s,{state:e.viewState,set:a=>{e.options.notebook=a},value:e.options?.notebook,form:"anonymize",options:{}}]]),t[90]||(t[90]=o("label",{class:"form-check-label",for:"notebook"},"Display Notebooks",-1))]),o("div",J_,[R(o("input",{class:"form-check-input",type:"checkbox",id:"page",name:"page",disabled:!e.details?.hasPage||e.details?.pageSource&&e.details?.pageSource?.branch!==e.source?.branch},null,8,Q_),[[s,{state:e.viewState,set:a=>{e.options.page=a},value:e.options?.page,form:"anonymize",options:{}}]]),t[91]||(t[91]=o("label",{class:"form-check-label",for:"page"},"GitHub Pages",-1)),e.details?.hasPage?f("v-if",!0):(l(),d("small",X_,c(e.fmt?.translate("WARNINGS.page_not_enabled_on_repo")),1)),e.details?.hasPage&&e.details?.pageSource?.branch&&e.source?.branch&&e.details.pageSource.branch!==e.source.branch?(l(),d("small",Z_,c(e.fmt?.translate("WARNINGS.page_branch_mismatch",{pageBranch:e.details?.pageSource?.branch,selectedBranch:e.source?.branch})),1)):f("v-if",!0)])],512),[[j,e.detectedType==="repo"]]),R(o("div",null,[o("div",x_,[R(o("input",eS,null,512),[[s,{state:e.viewState,set:a=>{e.options.title=a},value:e.options?.title,form:"anonymize",options:{}}]]),t[92]||(t[92]=o("label",{class:"form-check-label",for:"title-gist"},"Gist description",-1))]),o("div",tS,[R(o("input",oS,null,512),[[s,{state:e.viewState,set:a=>{e.options.content=a},value:e.options?.content,form:"anonymize",options:{}}]]),t[93]||(t[93]=o("label",{class:"form-check-label",for:"content-gist"},"File contents",-1))]),o("div",nS,[R(o("input",sS,null,512),[[s,{state:e.viewState,set:a=>{e.options.comments=a},value:e.options?.comments,form:"anonymize",options:{}}]]),t[94]||(t[94]=o("label",{class:"form-check-label",for:"comments-gist"},"Comments",-1))]),o("div",rS,[R(o("input",iS,null,512),[[s,{state:e.viewState,set:a=>{e.options.username=a},value:e.options?.username,form:"anonymize",options:{}}]]),t[95]||(t[95]=o("label",{class:"form-check-label",for:"username-gist"},"Usernames",-1))]),o("div",aS,[R(o("input",lS,null,512),[[s,{state:e.viewState,set:a=>{e.options.date=a},value:e.options?.date,form:"anonymize",options:{}}]]),t[96]||(t[96]=o("label",{class:"form-check-label",for:"date-gist"},"Dates",-1))]),o("div",dS,[R(o("input",uS,null,512),[[s,{state:e.viewState,set:a=>{e.options.origin=a},value:e.options?.origin,form:"anonymize",options:{}}]]),t[97]||(t[97]=o("label",{class:"form-check-label",for:"origin-gist"},"Source gist ID",-1))])],512),[[j,e.detectedType==="gist"]]),R(o("div",null,[o("div",cS,[R(o("input",pS,null,512),[[s,{state:e.viewState,set:a=>{e.options.title=a},value:e.options?.title,form:"anonymize",options:{}}]]),t[98]||(t[98]=o("label",{class:"form-check-label",for:"title"},"PR title",-1))]),o("div",fS,[R(o("input",mS,null,512),[[s,{state:e.viewState,set:a=>{e.options.body=a},value:e.options?.body,form:"anonymize",options:{}}]]),t[99]||(t[99]=o("label",{class:"form-check-label",for:"body"},"PR body",-1))]),o("div",hS,[R(o("input",vS,null,512),[[s,{state:e.viewState,set:a=>{e.options.diff=a},value:e.options?.diff,form:"anonymize",options:{}}]]),t[100]||(t[100]=o("label",{class:"form-check-label",for:"diff"},"Diff",-1))]),o("div",yS,[R(o("input",gS,null,512),[[s,{state:e.viewState,set:a=>{e.options.comments=a},value:e.options?.comments,form:"anonymize",options:{}}]]),t[101]||(t[101]=o("label",{class:"form-check-label",for:"comments"},"Comments",-1))]),o("div",bS,[R(o("input",wS,null,512),[[s,{state:e.viewState,set:a=>{e.options.username=a},value:e.options?.username,form:"anonymize",options:{}}]]),t[102]||(t[102]=o("label",{class:"form-check-label",for:"username"},"Usernames",-1))]),o("div",kS,[R(o("input",ES,null,512),[[s,{state:e.viewState,set:a=>{e.options.date=a},value:e.options?.date,form:"anonymize",options:{}}]]),t[103]||(t[103]=o("label",{class:"form-check-label",for:"date"},"Dates",-1))]),o("div",CS,[R(o("input",_S,null,512),[[s,{state:e.viewState,set:a=>{e.options.origin=a},value:e.options?.origin,form:"anonymize",options:{}}]]),t[104]||(t[104]=o("label",{class:"form-check-label",for:"origin"},"Project name",-1))])],512),[[j,e.detectedType==="pr"]])],512),[[j,e.detectedType]]),R(o("section",SS,[t[109]||(t[109]=o("div",{class:"paper-section-eyebrow"},"Expiration",-1)),o("div",NS,[o("div",RS,[t[107]||(t[107]=o("label",{class:"paper-field-label",for:"expiration"},"Strategy",-1)),R((l(),d("select",DS,[...t[106]||(t[106]=[o("option",{value:"redirect"},"Redirect to GitHub when expired",-1),o("option",{value:"remove",selected:""},"Remove when expired",-1)])])),[[s,{state:e.viewState,set:a=>{e.options.expirationMode=a},value:e.options?.expirationMode,form:"anonymize",options:{}}]])]),o("div",TS,[t[108]||(t[108]=o("label",{class:"paper-field-label",for:"expirationDate"},"Expiration date",-1)),R(o("input",{class:A(["form-control",{"is-invalid":e.anonymize?.expirationDate?.invalid}]),type:"date",name:"expirationDate",id:"expirationDate",required:"",min:e.minExpirationDate,max:e.maxExpirationDate},null,10,AS),[[s,{state:e.viewState,set:a=>{e.options.expirationDate=a},value:e.options?.expirationDate,form:"anonymize",options:{}}]]),R(o("div",OS,"Pick a date in the future.",512),[[j,e.anonymize?.expirationDate?.errors?.min]]),R(o("div",{class:"invalid-feedback"},"Pick a date on or before "+c(e.fmt?.date(e.maxExpirationDate))+".",513),[[j,e.anonymize?.expirationDate?.errors?.max]]),R(o("div",IS,"Enter a valid expiration date.",512),[[j,e.anonymize?.expirationDate?.errors?.required||e.anonymize?.expirationDate?.errors?.date]])])]),R(o("small",{class:"form-text text-muted"},"After "+c(e.fmt?.date(e.options?.expirationDate))+", the content will be removed.",513),[[j,e.options?.expirationMode=="remove"&&e.options?.expirationDate]]),R(o("small",{class:"form-text text-muted"},"After "+c(e.fmt?.date(e.options?.expirationDate))+", visitors will be redirected to GitHub.",513),[[j,e.options?.expirationMode=="redirect"&&e.options?.expirationDate]])],512),[[j,e.detectedType]]),R(o("section",PS,[t[113]||(t[113]=o("div",{class:"paper-section-eyebrow"},"Co-authors",-1)),t[114]||(t[114]=o("p",{class:"form-text text-muted",style:{"margin-bottom":"8px"}}," Co-authors can view and edit these settings. They cannot delete the anonymization or manage co-authors. ",-1)),R(o("div",VS,[t[110]||(t[110]=o("label",{class:"paper-field-label",for:"coauthorSearch"},"Add a GitHub user",-1)),o("div",qS,[R(o("input",MS,null,512),[[s,{state:e.viewState,set:a=>{e.coauthorSearch=a},value:e.coauthorSearch,form:"anonymize",options:{debounce:300},change:()=>{e.searchCoauthors()}}]]),R(o("div",US,[(l(!0),d(W,null,oe(e.coauthorResults,(a,u)=>(l(),d("a",{href:"#",class:"dropdown-item d-flex align-items-center",onClick:ie(m=>e.addCoauthor(a,m),["prevent"])},[o("img",{alt:"",style:{width:"22px",height:"22px","border-radius":"50%","margin-right":"8px"},src:e.safeUrl(a?.photo)},null,8,LS),o("span",{textContent:c(a?.username)},null,8,FS)],8,$S))),256))],512),[[j,e.coauthorResults?.length>0]])]),R(o("small",{class:"form-text text-muted",textContent:c(e.coauthorError)},null,8,zS),[[j,e.coauthorError]])],512),[[j,e.role==="owner"||e.role==="admin"]]),o("div",HS,[(l(!0),d(W,null,oe(e.coauthors,(a,u)=>(l(),d("div",BS,[a?.photo?(l(),d("img",{key:0,alt:"",style:{width:"24px",height:"24px","border-radius":"50%"},src:e.safeUrl(a?.photo)},null,8,jS)):f("v-if",!0),o("a",{target:"_blank",textContent:c(a?.username),href:e.safeUrl("https://github.com/"+a?.username)},null,8,GS),t[112]||(t[112]=o("span",{class:"type-badge type-coauthor"},"Co-author",-1)),R(o("button",{type:"button",class:"btn btn-sm btn-icon",style:{"margin-left":"auto"},title:"Remove co-author",onClick:m=>e.removeCoauthor(a),"aria-label":"Remove co-author"},[...t[111]||(t[111]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])],8,WS),[[j,e.role==="owner"||e.role==="admin"]])]))),256)),R(o("div",KS," No co-authors yet. ",512),[[j,!e.coauthors||e.coauthors?.length===0]])])],512),[[j,e.isUpdate&&e.detectedType==="repo"]]),e.error?(l(),d("div",{key:0,class:"alert alert-danger",role:"alert",textContent:c(e.error)},null,8,YS)):f("v-if",!0),e.draftRestored?(l(),d("div",JS,[t[115]||(t[115]=b("Your unsaved draft was restored. ",-1)),o("button",{type:"button",class:"draft-discard",onClick:t[19]||(t[19]=a=>e.discardDraft())},"Discard draft")])):e.unsavedChanges?(l(),d("div",QS,[b(c(e.draftSaved?"Draft saved in this tab for 30 minutes.":"Unsaved changes. Keep this tab open until you save.")+" ",1),o("button",{type:"button",class:"draft-discard",onClick:t[20]||(t[20]=a=>e.discardDraft())},c(e.isUpdate?"Restore saved settings":"Discard changes"),1)])):f("v-if",!0),e.detectedType==="repo"&&(e.options.image||e.options.pdf)?(l(),d("p",XS,"Review enabled images and PDFs before sharing. Their contents are not anonymized.")):f("v-if",!0),o("button",{type:"button",class:"btn btn-outline-ink mobile-preview-jump",onClick:t[21]||(t[21]=a=>e.selectMobilePane("preview"))},[...t[116]||(t[116]=[b("Review preview ",-1),o("span",{"aria-hidden":"true"},"\u2192",-1)])]),R(o("div",ZS,[e.detectedType==="repo"&&!e.isUpdate?(l(),d("button",{key:0,type:"submit",disabled:e.sourceLoading,class:"btn btn-ink",onClick:t[22]||(t[22]=ie(a=>e.submitForm(a,()=>{e.anonymizeRepo(a)}),["prevent"]))},[...t[117]||(t[117]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),b(" Anonymize Repository ",-1)])],8,xS)):f("v-if",!0),e.detectedType==="repo"&&e.isUpdate?(l(),d("button",{key:1,type:"submit",disabled:e.sourceLoading,class:"btn btn-ink",onClick:t[23]||(t[23]=ie(a=>e.submitForm(a,()=>{e.anonymizeRepo(a)}),["prevent"]))},[...t[118]||(t[118]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-save"})],-1),b(" Update Repository ",-1)])],8,eN)):f("v-if",!0),e.detectedType==="pr"&&!e.isUpdate?(l(),d("button",{key:2,type:"submit",disabled:e.sourceLoading,class:"btn btn-ink",onClick:t[24]||(t[24]=ie(a=>e.submitForm(a,()=>{e.anonymizePullRequest(a)}),["prevent"]))},[...t[119]||(t[119]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),b(" Anonymize Pull Request ",-1)])],8,tN)):f("v-if",!0),e.detectedType==="pr"&&e.isUpdate?(l(),d("button",{key:3,type:"submit",disabled:e.sourceLoading,class:"btn btn-ink",onClick:t[25]||(t[25]=ie(a=>e.submitForm(a,()=>{e.anonymizePullRequest(a)}),["prevent"]))},[...t[120]||(t[120]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-save"})],-1),b(" Update Pull Request ",-1)])],8,oN)):f("v-if",!0),e.detectedType==="gist"&&!e.isUpdate?(l(),d("button",{key:4,type:"submit",disabled:e.sourceLoading,class:"btn btn-ink",onClick:t[26]||(t[26]=ie(a=>e.submitForm(a,()=>{e.anonymizeGist(a)}),["prevent"]))},[...t[121]||(t[121]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),b(" Anonymize Gist ",-1)])],8,nN)):f("v-if",!0),e.detectedType==="gist"&&e.isUpdate?(l(),d("button",{key:5,type:"submit",disabled:e.sourceLoading,class:"btn btn-ink",onClick:t[27]||(t[27]=ie(a=>e.submitForm(a,()=>{e.anonymizeGist(a)}),["prevent"]))},[...t[122]||(t[122]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-save"})],-1),b(" Update Gist ",-1)])],8,sN)):f("v-if",!0)],512),[[j,e.detectedType]])])),[[i,e.viewState]])],8,R2),f(" Preview column (right) "),e.detectedType==="repo"?(l(),d("div",{key:0,id:"workspace-preview",role:e.mobileWorkspace?"tabpanel":null,"aria-labelledby":e.mobileWorkspace?"workspace-preview-tab":null,class:"anonymize-preview-col"},[o("div",iN,[t[123]||(t[123]=o("span",{class:"paper-eyebrow"},"Live preview",-1)),o("span",aN,c(e.previewStatus==="ready"?"README with redactions applied":"README preview"),1)]),e.sourceLoading&&e.previewStatus==="idle"?(l(),d("div",lN,"Loading source\u2026")):f("v-if",!0),e.previewStatus==="loading"?(l(),d("div",dN,"Updating the anonymized preview\u2026")):f("v-if",!0),e.previewStatus==="error"?(l(),d("div",uN,[t[124]||(t[124]=o("p",null,"Unable to generate the anonymized preview. The latest redactions have not been verified.",-1)),o("button",{class:"btn btn-outline-ink",type:"button",onClick:t[28]||(t[28]=a=>e.retryPreview())},"Retry preview")])):f("v-if",!0),!e.sourceLoading&&!e.readme&&e.previewStatus==="idle"?(l(),d("div",cN,"No README is available to preview. Review the published files before sharing.")):f("v-if",!0),e.previewStatus==="ready"?(l(),d("div",{key:4,class:"anonymize-preview-body markdown-body body",innerHTML:e.sanitize(e.html_readme)},null,8,pN)):f("v-if",!0)],8,rN)):f("v-if",!0),e.detectedType==="gist"&&e.details?(l(),d("div",{key:1,id:"workspace-preview",role:e.mobileWorkspace?"tabpanel":null,"aria-labelledby":e.mobileWorkspace?"workspace-preview-tab":null,class:"anonymize-preview-col"},[o("div",mN,[t[125]||(t[125]=o("span",{class:"paper-eyebrow"},"Live preview",-1)),o("span",hN,c(e.previewStatus==="ready"?"Gist with redactions applied":"Gist preview"),1)]),e.sourceLoading&&e.previewStatus==="idle"?(l(),d("div",vN,"Loading source\u2026")):f("v-if",!0),e.previewStatus==="loading"?(l(),d("div",yN,"Updating the anonymized preview\u2026")):f("v-if",!0),e.previewStatus==="error"?(l(),d("div",gN,[t[126]||(t[126]=o("p",null,"Unable to generate the anonymized preview. The latest redactions have not been verified.",-1)),o("button",{class:"btn btn-outline-ink",type:"button",onClick:t[29]||(t[29]=a=>e.retryPreview())},"Retry preview")])):f("v-if",!0),e.previewStatus==="ready"?(l(),d("div",bN,[o("div",wN,[o("h2",kN,[e.options?.title?(l(),d("span",EN,c(e.anonymizeGistContent(e.details?.gist?.description)||"Untitled gist"),1)):f("v-if",!0),o("span",{class:A(["badge",{"badge-success":e.details?.gist?.isPublic,"badge-secondary":!e.details?.gist?.isPublic}])},c(e.details?.gist?.isPublic?"public":"secret"),3)]),e.options?.date?(l(),d("small",{key:0,textContent:c(e.fmt?.date(e.details?.gist?.updatedDate))},null,8,CN)):f("v-if",!0)]),e.options?.origin?(l(),d("small",_N,"Gist ID: "+c(e.details?.source?.gistId),1)):f("v-if",!0),e.options?.username&&e.details?.gist?.ownerLogin?(l(),d("small",SN,"By @"+c(e.anonymizeGistContent(e.details?.gist?.ownerLogin)),1)):f("v-if",!0),e.options?.content&&e.previewGistFiles?.length?(l(),d("div",NN,[o("ul",RN,[(l(!0),d(W,null,oe(e.previewGistFiles,(a,u)=>(l(),d("li",DN,[o("div",TN,[o("strong",{textContent:c(a?.filename)},null,8,AN),a?.language?(l(),d("span",ON,c(a?.language),1)):f("v-if",!0)]),Ce(n,{file:a,terms:e.terms,options:e.options},null,8,["file","terms","options"])]))),256))])])):f("v-if",!0),e.options?.comments&&e.details?.gist?.comments&&e.details?.gist?.comments?.length?(l(),d("div",IN,[t[129]||(t[129]=o("h3",{class:"paper-section-eyebrow mt-3"},"Comments",-1)),o("ul",PN,[(l(!0),d(W,null,oe(e.details?.gist?.comments,(a,u)=>(l(),d("li",VN,[o("div",qN,[e.options?.username?(l(),d("span",MN,[t[127]||(t[127]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user"})],-1)),t[128]||(t[128]=b(" @",-1)),o("span",{textContent:c(e.anonymizeGistContent(a?.author))},null,8,UN)])):f("v-if",!0),e.options?.date?(l(),d("span",{key:1,class:"pr-comment-date",textContent:c(e.fmt?.date(a?.updatedDate))},null,8,$N)):f("v-if",!0)]),e.options?.body?(l(),d("div",LN,[Ce(r,{content:e.anonymizeGistContent(a?.body),options:e.options,terms:e.terms},null,8,["content","options","terms"])])):f("v-if",!0)]))),256))])])):f("v-if",!0)])):f("v-if",!0)],8,fN)):f("v-if",!0),e.detectedType==="pr"&&e.details?(l(),d("div",{key:2,id:"workspace-preview",role:e.mobileWorkspace?"tabpanel":null,"aria-labelledby":e.mobileWorkspace?"workspace-preview-tab":null,class:"anonymize-preview-col"},[o("div",zN,[t[130]||(t[130]=o("span",{class:"paper-eyebrow"},"Live preview",-1)),o("span",HN,c(e.previewStatus==="ready"?"Pull request with redactions applied":"Pull request preview"),1)]),e.sourceLoading&&e.previewStatus==="idle"?(l(),d("div",BN,"Loading source\u2026")):f("v-if",!0),e.previewStatus==="loading"?(l(),d("div",jN,"Updating the anonymized preview\u2026")):f("v-if",!0),e.previewStatus==="error"?(l(),d("div",GN,[t[131]||(t[131]=o("p",null,"Unable to generate the anonymized preview. The latest redactions have not been verified.",-1)),o("button",{class:"btn btn-outline-ink",type:"button",onClick:t[30]||(t[30]=a=>e.retryPreview())},"Retry preview")])):f("v-if",!0),e.previewStatus==="ready"?(l(),d("div",WN,[o("div",KN,[o("h2",YN,[e.options?.title?(l(),d("span",JN,c(e.anonymizePrContent(e.details?.pullRequest?.title)),1)):f("v-if",!0),o("span",{class:A(["badge",{"badge-success":e.details?.pullRequest?.merged,"badge-warning":e.details?.pullRequest?.state=="open","badge-danger":e.details?.pullRequest?.state=="closed"&&!e.details?.pullRequest?.merged}])},c(e.fmt?.title(e.details?.pullRequest?.merged?"merged":e.details?.pullRequest?.state)),3)]),e.options?.date?(l(),d("small",{key:0,textContent:c(e.fmt?.date(e.details?.pullRequest?.updatedDate))},null,8,QN)):f("v-if",!0)]),e.options?.origin?(l(),d("small",XN,"Pull Request on "+c(e.details?.pullRequest?.baseRepositoryFullName),1)):f("v-if",!0),e.options?.body?(l(),d("div",ZN,[Ce(r,{content:e.anonymizePrContent(e.details?.pullRequest?.body),options:e.options,terms:e.terms},null,8,["content","options","terms"])])):f("v-if",!0),e.options?.diff||e.options?.comments?(l(),d("nav",xN,[e.options?.diff?(l(),d("button",{key:0,class:A(["paper-tab",{active:e.prTabState?.active=="diff"}]),type:"button",role:"tab",id:"preview-pr-diff-tab","aria-selected":e.prTabState?.active==="diff","aria-controls":"preview-pr-diff-panel",tabindex:e.prTabState?.active==="diff"?0:-1,onKeydown:t[31]||(t[31]=a=>e.previewTabKeydown(a)),onClick:t[32]||(t[32]=a=>e.prTabState.active="diff")},[...t[132]||(t[132]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-code"})],-1),b(" Diff ",-1)])],42,eR)):f("v-if",!0),e.options?.comments?(l(),d("button",{key:1,class:A(["paper-tab",{active:e.prTabState?.active=="comments"}]),type:"button",role:"tab",id:"preview-pr-comments-tab","aria-selected":e.prTabState?.active==="comments","aria-controls":"preview-pr-comments-panel",tabindex:e.prTabState?.active==="comments"?0:-1,onKeydown:t[33]||(t[33]=a=>e.previewTabKeydown(a)),onClick:t[34]||(t[34]=a=>e.prTabState.active="comments")},[t[133]||(t[133]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-comment"})],-1)),o("span",{textContent:c(e.fmt.plural(e.details?.pullRequest?.comments?.length,{0:"No comments",one:"1 comment",other:"{} comments"}))},null,8,oR)],42,tR)):f("v-if",!0)])):f("v-if",!0),!e.options?.diff&&!e.options?.comments?(l(),d("div",nR,"Diff and comments are hidden by your display settings.")):f("v-if",!0),o("div",sR,[e.options?.diff&&e.prTabState?.active=="diff"?(l(),d("div",rR,[o("div",{class:"pr-diff",innerHTML:e.sanitize(e.fmt?.diff(e.anonymizePrContent(e.details?.pullRequest?.diff)))},null,8,iR)])):f("v-if",!0),e.options?.comments&&e.prTabState?.active=="comments"?(l(),d("div",aR,[o("ul",lR,[(l(!0),d(W,null,oe(e.details?.pullRequest?.comments,(a,u)=>(l(),d("li",dR,[o("div",uR,[e.options?.username?(l(),d("span",cR,[t[134]||(t[134]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user"})],-1)),t[135]||(t[135]=b(" @",-1)),o("span",{textContent:c(e.anonymizePrContent(a?.author))},null,8,pR)])):f("v-if",!0),e.options?.date?(l(),d("span",{key:1,class:"pr-comment-date",textContent:c(e.fmt?.date(a?.updatedDate))},null,8,fR)):f("v-if",!0)]),e.options?.body?(l(),d("div",mR,[Ce(r,{content:e.anonymizePrContent(a?.body),options:e.options,terms:e.terms},null,8,["content","options","terms"])])):f("v-if",!0)]))),256))])])):f("v-if",!0)])])):f("v-if",!0)],8,FN)):f("v-if",!0)])],512),[[j,e.workspaceOpen||e.isUpdate]])],2)}var hR={class:"container-fluid h-100 anonymize-page"},vR={class:"row h-100 flex-column flex-md-row"},yR={class:"col-md sidePanel shadow overflow-auto anonymize-form-col"},gR={class:"form-group"},bR={class:"form-group"},wR={class:"form-check"},kR={class:"form-check-input",type:"checkbox",id:"update",name:"update"},ER={class:"form-group"},CR={class:"form-text text-muted"},_R=["href"],SR={class:"invalid-feedback"},NR={class:"form-text text-muted"},RR={class:"form-group"},DR={id:"idHelp",class:"form-text text-muted"},TR={class:"invalid-feedback"},AR={class:"form-group"},OR={class:"invalid-feedback"},IR={class:"form-group"},PR={class:"form-control",id:"expiration",name:"expiration"},VR={class:"form-group",id:"expiration-date-form"},qR={class:"form-control",type:"date",name:"expirationDate",id:"expirationDate"},MR={class:"accordion mb-3",id:"options"},UR={class:"card"},$R={id:"collapseOne",class:"collapse show","aria-labelledby":"headingOne","data-parent":"#options"},LR={class:"card-body"},FR={class:"form-group mb-0"},zR={class:"form-check"},HR={class:"form-check-input",type:"checkbox",id:"link",name:"link"},BR={class:"form-check"},jR={class:"form-check-input",type:"checkbox",id:"image",name:"image"},GR={class:"form-check"},WR={class:"form-check-input",type:"checkbox",id:"date",name:"date"},KR={class:"form-check"},YR={class:"form-check-input",type:"checkbox",id:"username",name:"username"},JR={class:"form-check"},QR={class:"form-check-input",type:"checkbox",id:"comments",name:"comments"},XR={class:"form-check"},ZR={class:"form-check-input",type:"checkbox",id:"diff",name:"diff"},xR={class:"form-check"},eD={class:"form-check-input",type:"checkbox",id:"origin",name:"origin"},tD={class:"form-check"},oD={class:"form-check-input",type:"checkbox",id:"title",name:"title"},nD={class:"form-check"},sD={class:"form-check-input",type:"checkbox",id:"body",name:"body"},rD=["textContent"],iD={class:"anonymize-submit-bar"},aD={key:0,class:"col-md-8 p-2 overflow-auto anonymize-preview-col"},lD={class:"d-flex w-100 justify-content-between align-items-center flex-wrap"},dD={class:"pr-title mb-1"},uD={key:0},cD=["textContent"],pD={key:0},fD={key:1,class:"pr-body shadow-sm p-3 mb-4 rounded",style:{background:"var(--sidebar-bg-color)"}},mD={class:"nav nav-tabs",id:"myTab",role:"tablist"},hD={key:0,class:"nav-item",role:"presentation"},vD={key:1,class:"nav-item",role:"presentation"},yD=["textContent"],gD={class:"tab-content",id:"pills-tabContent"},bD={class:"tab-pane show active",id:"pills-diff",role:"tabpanel","aria-labelledby":"pills-diff-tab"},wD={key:0,class:"pr-diff shadow-sm p-3 mb-4 rounded",style:{background:"var(--sidebar-bg-color)"}},kD={style:{"overflow-x":"auto"}},ED=["innerHTML"],CD={key:0,class:"pr-comments list-group"},_D={class:"pr-comment list-group-item"},SD={class:"d-flex w-100 justify-content-between flex-wrap"},ND={key:0,class:"mb-1"},RD=["textContent"],DD={class:"mb-1"};function Ml(e,t){let n=Ge("markdown"),r=ve("field"),s=ve("form");return l(),d("div",hR,[o("div",vR,[o("div",yR,[o("div",{class:A(["p-0 py-2 m-auto",{card:!e.pullRequestUrl,container:e.pullRequestUrl}])},[R((l(),d("form",{class:A(["form needs-validation",{"card-body":!e.pullRequestUrl}]),name:"anonymizeForm",novalidate:""},[t[30]||(t[30]=de('
Anonymize \xA0/\xA0 Pull request

Anonymize a pull request

Fill in the details \u2014 it only takes a minute.

Source
',4)),f(" pullRequestUrl "),o("div",gR,[t[2]||(t[2]=o("label",{for:"pullRequestUrl"},"URL of your pull request",-1)),R(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.anonymize?.pullRequestUrl?.invalid}]),name:"pullRequestUrl",id:"pullRequestUrl",placeholder:"https://github.com/owner/repo/pull/123"},null,2),[[r,{state:e.viewState,set:i=>{e.pullRequestUrl=i},value:e.pullRequestUrl,form:"anonymizeForm",options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"},change:()=>{e.pullRequestSelected()}}]]),R(o("div",{class:"invalid-feedback"},c(e.pullRequestUrl)+" is not accessible. Some organizations are restricting the access to the repositories. ",513),[[j,e.anonymize?.pullRequestUrl?.errors?.access]]),R(o("div",{class:"invalid-feedback"},c(e.pullRequestUrl)+" does not exist or is not accessible ",513),[[j,e.anonymize?.pullRequestUrl?.errors?.missing]]),R(o("div",{class:"invalid-feedback"},c(e.pullRequestUrl)+" is already anonymized ",513),[[j,e.anonymize?.pullRequestUrl?.errors?.used]])]),R(o("div",null,[o("div",bR,[o("div",wR,[R(o("input",kR,null,512),[[r,{state:e.viewState,set:i=>{e.options.update=i},value:e.options?.update,form:"anonymizeForm",options:{}}]]),t[3]||(t[3]=o("label",{class:"form-check-label",for:"update"},"Auto update",-1)),t[4]||(t[4]=o("small",{id:"updateHelp",class:"form-text text-muted"},"Automatically update the anonymized pull request with the latest updates. The pull request is updated once per day maximum.",-1))])]),t[26]||(t[26]=o("div",{class:"paper-section-eyebrow anonymize-section-title"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-conference"})]),b(" Conference ID ")],-1)),f(" Conference "),o("div",ER,[t[5]||(t[5]=o("label",{for:"conference"},[b("Conference ID "),o("span",{class:"text-muted"},"(Optional)")],-1)),R(o("input",{class:A(["form-control",{"is-invalid":e.anonymize?.conference?.invalid}]),id:"conference",name:"conference"},null,2),[[r,{state:e.viewState,set:i=>{e.conference=i},value:e.conference,form:"anonymizeForm",options:{debounce:{default:800,blur:0},updateOn:"default blur"}}]]),R(o("small",CR,[o("a",{target:"_target",href:e.safeUrl(e.conference_data?.url)},c(e.conference_data?.name),9,_R),b(" will expire on "+c(e.fmt?.date(e.conference_data?.endDate))+".",1)],512),[[j,e.conference_data]]),R(o("div",SR," The conference is not activated. ",512),[[j,e.anonymize?.conference?.errors?.activated]]),R(o("small",NR," Use the Conference ID that your conference provided you. This will update automatically the anonymization options based on the conference preferences. ",512),[[j,!e.conference_data]])]),t[27]||(t[27]=o("div",{class:"paper-section-eyebrow anonymize-section-title"},[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})]),b(" Anonymization Options ")],-1)),f(" Pull Request ID "),o("div",RR,[t[6]||(t[6]=o("label",{for:"pullRequestId"},"Anonymized pull request id",-1)),R(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.anonymize?.pullRequestId?.invalid}]),name:"pullRequestId",id:"pullRequestId"},null,2),[[r,{state:e.viewState,set:i=>{e.pullRequestId=i},value:e.pullRequestId,form:"anonymizeForm",options:{debounce:{default:1e3,blur:0,click:0},updateOn:"default blur click"}}]]),o("small",DR,"Id used in the url: https://anonymous.4open.science/r/"+c(e.pullRequestId),1),R(o("div",TR," Repository id can only contain letters and numbers ",512),[[j,e.anonymize?.pullRequestId?.errors?.format]]),R(o("div",{class:"invalid-feedback"},c(e.pullRequestId)+" is already used ",513),[[j,e.anonymize?.pullRequestId?.errors?.used]])]),f(" Terms "),o("div",AR,[t[7]||(t[7]=o("label",{for:"terms"},"Terms to anonymize",-1)),R(o("textarea",{class:A(["form-control",{"is-invalid":e.anonymize?.terms?.invalid}]),id:"terms",name:"terms",rows:"3"},null,2),[[r,{state:e.viewState,set:i=>{e.terms=i},value:e.terms,form:"anonymizeForm",options:{debounce:250}}]]),t[8]||(t[8]=o("small",{id:"termsHelp",class:"form-text text-muted"},"One term per line. Each term will be replaced by XXX.",-1)),R(o("div",OR," Terms are in an invalid format ",512),[[j,e.anonymize?.terms?.errors?.format]])]),o("div",IR,[t[10]||(t[10]=o("label",{for:"expiration"},"Expiration strategy",-1)),R((l(),d("select",PR,[...t[9]||(t[9]=[o("option",{value:"never",selected:""},"Never expire",-1),o("option",{value:"redirect"}," Redirect to GitHub when expired ",-1),o("option",{value:"remove"},"Remove when expired",-1)])])),[[r,{state:e.viewState,set:i=>{e.options.expirationMode=i},value:e.options?.expirationMode,form:"anonymizeForm",options:{}}]]),t[11]||(t[11]=o("small",{class:"form-text text-muted"},"Define the expiration strategy for the anonymized repository.",-1))]),R(o("div",VR,[t[12]||(t[12]=o("label",{for:"expirationDate"},"Expiration date of the anonymized repository",-1)),R(o("input",qR,null,512),[[r,{state:e.viewState,set:i=>{e.options.expirationDate=i},value:e.options?.expirationDate,form:"anonymizeForm",options:{}}]]),R(o("small",{class:"form-text text-muted"},"After "+c(e.fmt?.date(e.options?.expirationDate))+", the repository will be removed and the visitor will not be able to see the content of the repository.",513),[[j,e.options?.expirationMode=="remove"]]),R(o("small",{class:"form-text text-muted"},"After "+c(e.fmt?.date(e.options?.expirationDate))+", the visitors of the anonymized repository will be redirected to "+c(e.pullRequestUrl)+".",513),[[j,e.options?.expirationMode=="redirect"]])],512),[[j,e.options?.expirationMode!="never"]]),o("div",MR,[o("div",UR,[t[25]||(t[25]=de('

',1)),o("div",$R,[o("div",LR,[o("div",FR,[o("div",zR,[R(o("input",HR,null,512),[[r,{state:e.viewState,set:i=>{e.options.link=i},value:e.options?.link,form:"anonymizeForm",options:{}}]]),t[13]||(t[13]=o("label",{class:"form-check-label",for:"link"},"Keep links",-1)),t[14]||(t[14]=o("small",{class:"form-text text-muted"},"Keep or remove all the links.",-1))]),o("div",BR,[R(o("input",jR,null,512),[[r,{state:e.viewState,set:i=>{e.options.image=i},value:e.options?.image,form:"anonymizeForm",options:{}}]]),t[15]||(t[15]=o("label",{class:"form-check-label",for:"image"},"Display images",-1)),t[16]||(t[16]=o("small",{class:"form-text text-muted"},"Images are not anonymized",-1))]),o("div",GR,[R(o("input",WR,null,512),[[r,{state:e.viewState,set:i=>{e.options.date=i},value:e.options?.date,form:"anonymizeForm",options:{}}]]),t[17]||(t[17]=o("label",{class:"form-check-label",for:"date"},"Display dates",-1)),t[18]||(t[18]=o("small",{class:"form-text text-muted"},"Display the date of the Pull Request and the date of the comments.",-1))]),o("div",KR,[R(o("input",YR,null,512),[[r,{state:e.viewState,set:i=>{e.options.username=i},value:e.options?.username,form:"anonymizeForm",options:{}}]]),t[19]||(t[19]=o("label",{class:"form-check-label",for:"username"},"Display username",-1))]),o("div",JR,[R(o("input",QR,null,512),[[r,{state:e.viewState,set:i=>{e.options.comments=i},value:e.options?.comments,form:"anonymizeForm",options:{}}]]),t[20]||(t[20]=o("label",{class:"form-check-label",for:"comments"},"Display comments",-1))]),o("div",XR,[R(o("input",ZR,null,512),[[r,{state:e.viewState,set:i=>{e.options.diff=i},value:e.options?.diff,form:"anonymizeForm",options:{}}]]),t[21]||(t[21]=o("label",{class:"form-check-label",for:"diff"},"Display diff",-1))]),o("div",xR,[R(o("input",eD,null,512),[[r,{state:e.viewState,set:i=>{e.options.origin=i},value:e.options?.origin,form:"anonymizeForm",options:{}}]]),t[22]||(t[22]=o("label",{class:"form-check-label",for:"origin"},"Display the project name",-1))]),o("div",tD,[R(o("input",oD,null,512),[[r,{state:e.viewState,set:i=>{e.options.title=i},value:e.options?.title,form:"anonymizeForm",options:{}}]]),t[23]||(t[23]=o("label",{class:"form-check-label",for:"title"},"Display the PR title",-1))]),o("div",nD,[R(o("input",sD,null,512),[[r,{state:e.viewState,set:i=>{e.options.body=i},value:e.options?.body,form:"anonymizeForm",options:{}}]]),t[24]||(t[24]=o("label",{class:"form-check-label",for:"body"},"Display the PR body and comment bodies",-1))])])])])])])],512),[[j,e.pullRequestUrl]]),e.error?(l(),d("div",{key:0,class:"alert alert-danger",role:"alert",textContent:c(e.error)},null,8,rD)):f("v-if",!0),R(o("div",iD,[e.isUpdate?f("v-if",!0):(l(),d("button",{key:0,id:"submit",type:"submit",class:"btn btn-ink btn-block",onClick:t[0]||(t[0]=ie(i=>e.submitForm(i,()=>{e.anonymizePullRequest(i)}),["prevent"]))},[...t[28]||(t[28]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),b(" Anonymize ",-1)])])),e.isUpdate?(l(),d("button",{key:1,id:"submit",type:"submit",class:"btn btn-ink btn-block",onClick:t[1]||(t[1]=ie(i=>e.submitForm(i,()=>{e.updatePullRequest(i)}),["prevent"]))},[...t[29]||(t[29]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-save"})],-1),b(" Update ",-1)])])):f("v-if",!0)],512),[[j,e.pullRequestUrl]])],2)),[[s,e.viewState]])],2)]),e.details?(l(),d("div",aD,[o("div",lD,[o("h2",dD,[e.options?.title?(l(),d("span",uD,c(e.anonymize(e.details?.pullRequest?.title)),1)):f("v-if",!0),o("span",{class:A(["badge",{"badge-success":e.details?.pullRequest?.merged,"badge-warning":e.details?.pullRequest?.state=="open","badge-danger":e.details?.pullRequest?.state=="closed"&&!e.details?.pullRequest?.merged}])},c(e.fmt?.title(e.details?.pullRequest?.merged?"merged":e.details?.pullRequest?.state)),3)]),e.options?.date?(l(),d("small",{key:0,textContent:c(e.fmt?.date(e.details?.pullRequest?.updatedDate))},null,8,cD)):f("v-if",!0)]),e.options?.origin?(l(),d("small",pD,"Pull Request on "+c(e.details?.pullRequest?.baseRepositoryFullName),1)):f("v-if",!0),e.options?.body?(l(),d("div",fD,[Ce(n,{content:e.anonymize(e.details?.pullRequest?.body),options:e.options,terms:e.terms},null,8,["content","options","terms"])])):f("v-if",!0),o("ul",mD,[e.options?.diff?(l(),d("li",hD,[...t[31]||(t[31]=[o("button",{class:"nav-link active",id:"pills-diff-tab","data-toggle":"pill","data-target":"#pills-diff",type:"button",role:"tab","aria-controls":"pills-diff","aria-selected":"true"}," Diff ",-1)])])):f("v-if",!0),e.options?.comments?(l(),d("li",vD,[o("button",{class:A(["nav-link",{active:!e.options?.diff}]),id:"pills-comments-tab","data-toggle":"pill","data-target":"#pills-comments",type:"button",role:"tab","aria-controls":"pills-comments","aria-selected":"false"},[o("span",{textContent:c(e.fmt.plural(e.details?.pullRequest?.comments?.length,{0:"No comment",one:"One Comment",other:"{} Comments"}))},null,8,yD)],2)])):f("v-if",!0)]),o("div",gD,[o("div",bD,[e.options?.diff?(l(),d("div",wD,[o("pre",kD,[o("code",{innerHTML:e.sanitize(e.fmt?.diff(e.anonymize(e.details?.pullRequest?.diff)))},null,8,ED)])])):f("v-if",!0)]),o("div",{class:A(["tab-pane",{"show active":!e.options?.diff}]),id:"pills-comments",role:"tabpanel","aria-labelledby":"pills-comments-tab"},[e.options?.comments?(l(),d("ul",CD,[(l(!0),d(W,null,oe(e.details?.pullRequest?.comments,(i,a)=>(l(),d("li",_D,[o("div",SD,[e.options?.username?(l(),d("h5",ND," @"+c(e.anonymize(i?.author)),1)):f("v-if",!0),e.options?.date?(l(),d("small",{key:1,textContent:c(e.fmt?.date(i?.updatedDate))},null,8,RD)):f("v-if",!0)]),o("p",DD,[e.options?.body?(l(),Lt(n,{key:0,class:"pr-comment-body",content:e.anonymize(i?.body),options:e.options,terms:e.terms},null,8,["content","options","terms"])):f("v-if",!0)])]))),256))])):f("v-if",!0)],2)])])):f("v-if",!0)])])}var TD={class:"container paper-page claim-page"},AD={class:"paper-settings-main claim-form"},OD={class:"form-group"},ID={class:"invalid-feedback"},PD={class:"form-group"};function Ul(e,t){let n=ve("field"),r=ve("form");return l(),d("div",TD,[t[6]||(t[6]=de('
My work \xA0/\xA0 Claim

Claim an anonymization

Take ownership of an existing anonymized repository so it appears on your dashboard.

',3)),o("div",AD,[t[5]||(t[5]=o("p",{class:"paper-section-copy"},"Use this when an anonymization was created by a co-author or from another account. You must have access to the GitHub repository it was made from.",-1)),R((l(),d("form",{class:"form needs-validation",name:"claimForm",novalidate:"",onSubmit:t[0]||(t[0]=ie(s=>e.submitForm(s,()=>{e.claim()}),["prevent"]))},[o("div",OD,[t[1]||(t[1]=o("label",{class:"paper-field-label",for:"repoUrl"},"GitHub repository URL",-1)),R(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.claimForm?.repoUrl?.invalid&&(e.claimForm?.repoUrl?.touched||e.claimForm?.submitted)}]),name:"repoUrl",id:"repoUrl",placeholder:"https://github.com/owner/repository",required:""},null,2),[[n,{state:e.viewState,set:s=>{e.repoUrl=s},value:e.repoUrl,form:"claimForm",options:{}}]]),R(o("div",ID," No anonymization matches this repository and ID. Check both values and that you can access the repository on GitHub. ",512),[[j,e.claimForm?.repoUrl?.errors?.not_found]])]),o("div",PD,[t[2]||(t[2]=o("label",{class:"paper-field-label",for:"repoId"},"Anonymized repository ID",-1)),R(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.claimForm?.repoId?.invalid&&(e.claimForm?.repoId?.touched||e.claimForm?.submitted)}]),name:"repoId",id:"repoId",placeholder:"e.g. my-paper-7F2A","aria-describedby":"idHelp",required:""},null,2),[[n,{state:e.viewState,set:s=>{e.repoId=s},value:e.repoId,form:"claimForm",options:{}}]]),t[3]||(t[3]=o("small",{id:"idHelp",class:"form-text text-muted"},[b("The ID is the last part of the anonymized URL: "),o("code",null,"anonymous.4open.science/r/"),b(".")],-1))]),t[4]||(t[4]=o("button",{id:"submit",type:"submit",class:"btn btn-ink"}," Claim anonymization ",-1))],32)),[[r,e.viewState]])])])}var VD={class:"container page paper-page conference-page"},qD={class:"paper-crumbs"},MD={class:"here"},UD={class:"d-flex align-items-end flex-wrap",style:{gap:"12px","justify-content":"space-between"}},$D=["textContent"],LD={key:0,class:"paper-page-lede"},FD=["textContent","href"],zD={class:"d-flex align-items-center flex-wrap",style:{gap:"10px"}},HD=["textContent"],BD=["href"],jD={class:"paper-meta-rule"},GD=["textContent"],WD=["textContent"],KD={key:0},YD={class:"search-wrap"},JD={type:"search",id:"search",class:"form-control","aria-label":"Search repositories",placeholder:"Search by ID or source repository\u2026",autocomplete:"off"},QD={class:"dashboard-filter-controls"},XD={class:"dropdown"},ZD={class:"btn dropdown-toggle",type:"button",id:"dropdownSort","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},xD={class:"filter-btn-value"},eT={class:"dropdown-menu","aria-labelledby":"dropdownSort"},tT={class:"form-check dropdown-item"},oT={class:"form-check-input",type:"radio",name:"sort",id:"anonymizeDate",value:"-anonymizeDate"},nT={class:"form-check dropdown-item"},sT={class:"form-check-input",type:"radio",name:"sort",id:"sortID",value:"repoId"},rT={class:"form-check dropdown-item"},iT={class:"form-check-input",type:"radio",name:"sort",id:"sortStatus",value:"-status"},aT={class:"form-check dropdown-item"},lT={class:"form-check-input",type:"radio",name:"sort",id:"sortViews",value:"-pageView"},dT={class:"dropdown"},uT={class:"btn dropdown-toggle",type:"button",id:"dropdownStatus","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},cT={key:0,class:"filter-btn-value"},pT={key:1,class:"filter-btn-value"},fT={class:"dropdown-menu","aria-labelledby":"dropdownStatus"},mT={class:"form-check dropdown-item"},hT=["id"],vT=["for"],yT={class:"dashboard-meta"},gT={class:"dashboard-count"},bT={key:0},wT={key:0},kT={key:1},ET={key:1},CT={key:0,class:"filter-chip"},_T=["onClick","aria-label"],ST={class:"paper-table paper-table-repos w-100",role:"table","aria-label":"Repositories"},NT={class:"cell-anon",role:"cell"},RT={class:"anon-text"},DT=["textContent","href"],TT={class:"anon-sub"},AT={class:"anon-source"},OT=["textContent","href"],IT={key:0},PT=["textContent","href"],VT={key:1},qT=["href"],MT={class:"cell-status",role:"cell"},UT={class:"status-line"},$T=["textContent"],LT={key:0,class:"status-sub"},FT={class:"cell-views num",role:"cell"},zT=["textContent"],HT={class:"cell-expires",role:"cell"},BT={key:0,class:"expires-never"},jT=["textContent"],GT={key:2,class:"expires-past"},WT={key:0},KT={key:3,class:"empty-dash","aria-label":"Not applicable"},YT={class:"cell-actions",role:"cell"},JT={class:"dropdown"},QT=["aria-label"],XT={class:"dropdown-menu dropdown-menu-right"},ZT=["href"],xT=["href"],eA={key:0,class:"paper-table-empty"},tA={key:0},oA={key:1},nA={key:2,class:"paper-table-empty-actions"};function $l(e,t){let n=ve("field"),r=ve("form");return l(),d("div",VD,[o("div",null,[o("div",qD,[t[2]||(t[2]=o("a",{href:"/dashboard"},"My work",-1)),t[3]||(t[3]=b(" \xA0/\xA0 ",-1)),t[4]||(t[4]=o("a",{href:"/conferences"},"Conferences",-1)),t[5]||(t[5]=b(" \xA0/\xA0 ",-1)),o("span",MD,c(e.conference?.conferenceID),1)]),o("div",UD,[o("div",null,[o("h1",{class:"paper-page-title",textContent:c(e.conference?.name)},null,8,$D),e.conference?.url?(l(),d("p",LD,[o("a",{target:"_blank",rel:"noopener",textContent:c(e.conference?.url),href:e.safeUrl(e.conference?.url)},null,8,FD)])):f("v-if",!0)]),o("div",zD,[o("span",{class:A(["status-pill",{"status-pill-ready":e.conference?.status=="ready","status-pill-removed":e.conference?.status=="removed"||e.conference?.status=="expired"}])},[o("span",{class:A(["status-dot","status-"+e.conference?.status]),"aria-hidden":"true"},null,2),o("span",{textContent:c(e.fmt?.statusLabel(e.conference?.status))},null,8,HD)],2),o("a",{class:"btn btn-outline-ink",href:e.safeUrl("/conference/"+e.conference?.conferenceID+"/edit")},[...t[6]||(t[6]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),b(" Edit conference",-1)])],8,BD)])]),o("div",jD,[o("span",null,[t[7]||(t[7]=b("ID ",-1)),o("b",{class:"commit-hash",textContent:c(e.conference?.conferenceID)},null,8,GD)]),o("span",null,[t[8]||(t[8]=b("Review window ",-1)),o("b",null,c(e.fmt?.date(e.conference?.startDate,"mediumDate"))+" \u2013 "+c(e.fmt?.date(e.conference?.endDate,"mediumDate")),1)]),o("span",null,[t[9]||(t[9]=b("Repositories ",-1)),o("b",null,c(e.fmt?.number(e.conference?.repositories?.length)),1)]),o("span",null,[t[10]||(t[10]=b("Plan ",-1)),o("b",{textContent:c(e.conference?.plan?.name||e.conference?.plan?.planID||"Free")},null,8,WD)]),e.conference?.price?(l(),d("span",KD,[t[11]||(t[11]=b("Cost so far ",-1)),o("b",null,c(e.fmt?.number(e.conference?.price,2))+" \u20AC",1)])):f("v-if",!0)]),t[32]||(t[32]=o("div",{class:"paper-section-eyebrow"},"Repositories",-1)),R((l(),d("form",{class:"w-100 dashboard-filter-row","aria-label":"Filter repositories","accept-charset":"UTF-8",onSubmit:t[0]||(t[0]=ie(s=>e.submitForm(s,()=>{s.preventDefault()}),["prevent"]))},[o("div",YD,[R(o("input",JD,null,512),[[n,{state:e.viewState,set:s=>{e.search=s},value:e.search,form:null,options:{}}]])]),o("div",QD,[o("div",XD,[o("button",ZD,[t[12]||(t[12]=o("span",{class:"filter-btn-label"},"Sort",-1)),o("span",xD,c({"-anonymizeDate":"Anonymize date",repoId:"ID","-status":"Status","-pageView":"Views"}[e.orderBy]||"Custom"),1)]),o("div",eT,[t[17]||(t[17]=o("h6",{class:"dropdown-header"},"Order by",-1)),o("div",tT,[R(o("input",oT,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[13]||(t[13]=o("label",{class:"form-check-label",for:"anonymizeDate"},"Anonymize date",-1))]),o("div",nT,[R(o("input",sT,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[14]||(t[14]=o("label",{class:"form-check-label",for:"sortID"},"ID",-1))]),o("div",rT,[R(o("input",iT,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[15]||(t[15]=o("label",{class:"form-check-label",for:"sortStatus"},"Status",-1))]),o("div",aT,[R(o("input",lT,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[16]||(t[16]=o("label",{class:"form-check-label",for:"sortViews"},"Views",-1))])])]),o("div",dT,[o("button",uT,[t[18]||(t[18]=o("span",{class:"filter-btn-label"},"Status",-1)),e.filters?.status?.ready&&e.filters?.status?.expired&&e.filters?.status?.removed?(l(),d("span",cT,"All")):f("v-if",!0),e.filters?.status?.ready&&e.filters?.status?.expired&&e.filters?.status?.removed?f("v-if",!0):(l(),d("span",pT,c((e.filters?.status?.ready?0:1)+(e.filters?.status?.expired?0:1)+(e.filters?.status?.removed?0:1))+" hidden ",1))]),o("div",fT,[t[19]||(t[19]=o("h6",{class:"dropdown-header"},"Show statuses",-1)),(l(!0),d(W,null,oe(e.statusLabels,(s,i,a)=>(l(),d("div",mT,[R(o("input",{class:"form-check-input",type:"checkbox",id:"status-"+i},null,8,hT),[[n,{state:e.viewState,set:u=>{e.filters.status[i]=u},value:e.filters?.status[i],form:null,options:{}}]]),o("label",{class:"form-check-label",for:"status-"+i},c(s),9,vT)]))),256))])])])],32)),[[r,e.viewState]]),o("div",yT,[o("span",gT,[e.filteredRepositories?.length===e.conference?.repositories?.length?(l(),d("span",bT,[b(c(e.fmt?.number(e.conference?.repositories?.length))+" repositor",1),e.conference?.repositories?.length===1?(l(),d("span",wT,"y")):f("v-if",!0),e.conference?.repositories?.length!==1?(l(),d("span",kT,"ies")):f("v-if",!0)])):f("v-if",!0),e.filteredRepositories?.length!==e.conference?.repositories?.length?(l(),d("span",ET,c(e.fmt?.number(e.filteredRepositories?.length))+" of "+c(e.fmt?.number(e.conference?.repositories?.length))+" shown",1)):f("v-if",!0)]),(l(!0),d(W,null,oe(e.filters?.status,(s,i,a)=>(l(),d(W,null,[s===!1?(l(),d("span",CT,[b(" Hiding "+c(e.statusLabels[i])+" ",1),o("button",{type:"button",class:"filter-chip-close",onClick:u=>{e.filters.status[i]=!0},"aria-label":"Show "+e.statusLabels[i]+" again"},"\xD7",8,_T)])):f("v-if",!0)],64))),256))]),o("div",ST,[t[31]||(t[31]=o("div",{class:"paper-table-head",role:"row"},[o("div",{role:"columnheader"},"Repository"),o("div",{role:"columnheader"},"Status"),o("div",{role:"columnheader",class:"num"},"Views"),o("div",{role:"columnheader"},"Expires"),o("div",{role:"columnheader"},[o("span",{class:"sr-only"},"Actions")])],-1)),(l(!0),d(W,null,oe(e.filteredRepositories,(s,i)=>(l(),d("div",{class:A(["paper-table-row",{"repo-inactive":s?.status=="expired"||s?.status=="removed","repo-error":s?.status=="error"}]),role:"row",key:s?.repoId},[o("div",NT,[t[22]||(t[22]=o("svg",{class:"ui-icon record-type-icon",role:"img","aria-label":"Repository"},[o("use",{href:"#project-type-repo"})],-1)),o("div",RT,[o("a",{class:"repo-name",textContent:c(s?.repoId),href:e.safeUrl("/r/"+s?.repoId+"/")},null,8,DT),o("div",TT,[o("span",AT,[o("a",{target:"_blank",rel:"noopener",textContent:c(s?.source?.fullName),href:e.safeUrl("https://github.com/"+s?.source?.fullName+"/")},null,8,OT),s?.options?.update&&s?.source?.branch?(l(),d("span",IT,[t[20]||(t[20]=b(" \xB7 ",-1)),o("a",{target:"_blank",rel:"noopener",textContent:c(s?.source?.branch),href:e.safeUrl("https://github.com/"+s?.source?.fullName+"/tree/"+s?.source?.branch)},null,8,PT)])):f("v-if",!0),s?.source?.commit?(l(),d("span",VT,[t[21]||(t[21]=b(" \xB7 ",-1)),o("a",{class:"commit-hash",target:"_blank",rel:"noopener",href:e.safeUrl("https://github.com/"+s?.source?.fullName+"/tree/"+s?.source?.commit)},"@"+c(s?.source?.commit?.substring(0,8)),9,qT)])):f("v-if",!0)])])])]),o("div",MT,[o("div",UT,[o("span",{class:A(["status-dot","status-"+(s?.status=="error"?"error":s?.status=="ready"?"ready":s?.status=="expired"||s?.status=="removed"?s?.status:"progress")]),"aria-hidden":"true"},null,2),o("span",{class:"status-word",textContent:c(e.fmt?.statusLabel(s?.status))},null,8,$T)]),s?.anonymizeDate?(l(),d("div",LT,"anonymized "+c(e.fmt?.humanTime(s?.anonymizeDate)),1)):f("v-if",!0)]),o("div",FT,[t[23]||(t[23]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1)),t[24]||(t[24]=b()),o("span",{textContent:c(e.fmt?.number(s?.pageView))},null,8,zT)]),o("div",HT,[t[26]||(t[26]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),s?.status=="ready"&&(s?.options?.expirationMode==="never"||!s?.options?.expirationDate)?(l(),d("span",BT,"Never")):f("v-if",!0),s?.status=="ready"&&s?.options?.expirationMode!=="never"&&s?.options?.expirationDate?(l(),d("span",{key:1,textContent:c(e.fmt?.humanTime(s?.options?.expirationDate))},null,8,jT)):f("v-if",!0),s?.status=="expired"?(l(),d("span",GT,[t[25]||(t[25]=b("Expired",-1)),s?.options?.expirationDate?(l(),d("span",WT,c(e.fmt?.humanTime(s?.options?.expirationDate)),1)):f("v-if",!0)])):f("v-if",!0),s?.status!="ready"&&s?.status!="expired"?(l(),d("span",KT,"\u2014")):f("v-if",!0)]),o("div",YT,[o("div",JT,[o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"Actions for "+s?.repoId},[...t[27]||(t[27]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})],-1)])],8,QT),o("div",XT,[o("a",{class:"dropdown-item",href:e.safeUrl("/r/"+s?.repoId+"/")},[...t[28]||(t[28]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),b(" View ",-1)])],8,ZT),o("a",{class:"dropdown-item",href:e.safeUrl("/anonymize/"+s?.repoId)},[...t[29]||(t[29]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),b(" Edit ",-1)])],8,xT)])])])],2))),128)),e.filteredRepositories?.length==0?(l(),d("div",eA,[t[30]||(t[30]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1)),e.conference?.repositories?.length?f("v-if",!0):(l(),d("span",tA,"No repository has been submitted to this conference yet.")),e.conference?.repositories?.length?(l(),d("span",oA,"Nothing matches the current filters.")):f("v-if",!0),e.conference?.repositories?.length?(l(),d("div",nA,[o("button",{type:"button",class:"btn btn-outline-ink",onClick:t[1]||(t[1]=s=>{e.search="",e.filters.status.ready=!0,e.filters.status.expired=!0,e.filters.status.removed=!0})},"Clear filters")])):f("v-if",!0)])):f("v-if",!0)])])])}var sA={class:"container page paper-page conferences-page"},rA={class:"row"},iA={class:"w-100"},aA={class:"search-wrap"},lA={type:"search",id:"search",class:"form-control","aria-label":"Search conferences",placeholder:"Search by name or ID\u2026",autocomplete:"off"},dA={class:"dashboard-filter-controls"},uA={class:"dropdown"},cA={class:"btn dropdown-toggle",type:"button",id:"dropdownSort","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},pA={class:"filter-btn-value"},fA={class:"dropdown-menu","aria-labelledby":"dropdownSort"},mA={class:"form-check dropdown-item"},hA={class:"form-check-input",type:"radio",name:"sort",id:"sortName",value:"name"},vA={class:"form-check dropdown-item"},yA={class:"form-check-input",type:"radio",name:"sort",id:"sortID",value:"conferenceID"},gA={class:"form-check dropdown-item"},bA={class:"form-check-input",type:"radio",name:"sort",id:"sortStatus",value:"-status"},wA={class:"dropdown"},kA={class:"btn dropdown-toggle",type:"button",id:"dropdownStatus","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},EA={key:0,class:"filter-btn-value"},CA={key:1,class:"filter-btn-value"},_A={class:"dropdown-menu","aria-labelledby":"dropdownStatus"},SA={class:"form-check dropdown-item"},NA=["id"],RA=["for"],DA={class:"dashboard-meta"},TA={class:"dashboard-count"},AA={key:0},OA={key:0},IA={key:1},PA={key:0,class:"filter-chip"},VA=["onClick","aria-label"],qA={key:0,class:"conference-feedback",role:"alert"},MA={key:1,class:"conference-feedback",role:"status"},UA={class:"paper-table paper-table-conferences w-100",role:"table","aria-label":"Conferences"},$A={class:"cell-anon",role:"cell"},LA={class:"anon-text"},FA=["textContent","href"],zA={class:"anon-sub"},HA={class:"anon-source"},BA=["textContent"],jA={key:0},GA=["textContent","href"],WA={class:"cell-status",role:"cell"},KA={class:"status-line"},YA=["textContent"],JA={class:"cell-views num",role:"cell"},QA=["textContent"],XA={class:"cell-expires",role:"cell"},ZA={key:0},xA={key:1,class:"empty-dash","aria-label":"No review window"},eO={class:"cell-actions",role:"cell"},tO={class:"dropdown"},oO=["disabled","aria-label"],nO={class:"dropdown-menu dropdown-menu-right"},sO=["href"],rO=["href"],iO={key:0},aO=["onClick"],lO={key:0,class:"paper-table-empty"},dO={key:0},uO={key:1},cO={class:"paper-table-empty-actions"},pO={key:1,href:"/conference/new",class:"btn btn-ink"};function Ll(e,t){let n=ve("field"),r=ve("form");return l(),d("div",sA,[o("div",rA,[o("div",iA,[t[10]||(t[10]=de('
My work \xA0/\xA0 Conferences

Your conferences

Group anonymizations by venue, give chairs a shared dashboard, and set one expiry for every submission.

New conference
',2)),R((l(),d("form",{class:"w-100 dashboard-filter-row","aria-label":"Filter conferences","accept-charset":"UTF-8",onSubmit:t[0]||(t[0]=ie(s=>e.submitForm(s,()=>{s.preventDefault()}),["prevent"]))},[o("div",aA,[R(o("input",lA,null,512),[[n,{state:e.viewState,set:s=>{e.search=s},value:e.search,form:null,options:{}}]])]),o("div",dA,[o("div",uA,[o("button",cA,[t[3]||(t[3]=o("span",{class:"filter-btn-label"},"Sort",-1)),o("span",pA,c({name:"Name",conferenceID:"ID","-status":"Status"}[e.orderBy]||"Custom"),1)]),o("div",fA,[t[7]||(t[7]=o("h6",{class:"dropdown-header"},"Order by",-1)),o("div",mA,[R(o("input",hA,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[4]||(t[4]=o("label",{class:"form-check-label",for:"sortName"},"Name",-1))]),o("div",vA,[R(o("input",yA,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[5]||(t[5]=o("label",{class:"form-check-label",for:"sortID"},"ID",-1))]),o("div",gA,[R(o("input",bA,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[6]||(t[6]=o("label",{class:"form-check-label",for:"sortStatus"},"Status",-1))])])]),o("div",wA,[o("button",kA,[t[8]||(t[8]=o("span",{class:"filter-btn-label"},"Status",-1)),e.filters?.status?.ready&&e.filters?.status?.expired&&e.filters?.status?.removed?(l(),d("span",EA,"All")):f("v-if",!0),e.filters?.status?.ready&&e.filters?.status?.expired&&e.filters?.status?.removed?f("v-if",!0):(l(),d("span",CA,c((e.filters?.status?.ready?0:1)+(e.filters?.status?.expired?0:1)+(e.filters?.status?.removed?0:1))+" hidden ",1))]),o("div",_A,[t[9]||(t[9]=o("h6",{class:"dropdown-header"},"Show statuses",-1)),(l(!0),d(W,null,oe(e.statusLabels,(s,i,a)=>(l(),d("div",SA,[R(o("input",{class:"form-check-input",type:"checkbox",id:"status-"+i},null,8,NA),[[n,{state:e.viewState,set:u=>{e.filters.status[i]=u},value:e.filters?.status[i],form:null,options:{}}]]),o("label",{class:"form-check-label",for:"status-"+i},c(s),9,RA)]))),256))])])])],32)),[[r,e.viewState]]),o("div",DA,[o("span",TA,[e.filteredConferences?.length===e.conferences?.length?(l(),d("span",AA,[b(c(e.fmt?.number(e.conferences?.length))+" conference",1),e.conferences?.length!==1?(l(),d("span",OA,"s")):f("v-if",!0)])):f("v-if",!0),e.filteredConferences?.length!==e.conferences?.length?(l(),d("span",IA,c(e.fmt?.number(e.filteredConferences?.length))+" of "+c(e.fmt?.number(e.conferences?.length))+" shown",1)):f("v-if",!0)]),(l(!0),d(W,null,oe(e.filters?.status,(s,i,a)=>(l(),d(W,null,[s===!1?(l(),d("span",PA,[b(" Hiding "+c(e.statusLabels[i])+" ",1),o("button",{type:"button",class:"filter-chip-close",onClick:u=>{e.filters.status[i]=!0},"aria-label":"Show "+e.statusLabels[i]+" again"},"\xD7",8,VA)])):f("v-if",!0)],64))),256))])]),e.error?(l(),d("div",qA,[o("span",null,c(e.error),1),o("button",{type:"button",class:"btn btn-outline-ink",onClick:t[1]||(t[1]=s=>e.loadConferences())},"Retry")])):f("v-if",!0),e.loading?(l(),d("div",MA,"Loading conferences\u2026")):f("v-if",!0),o("div",UA,[t[24]||(t[24]=o("div",{class:"paper-table-head",role:"row"},[o("div",{role:"columnheader"},"Conference"),o("div",{role:"columnheader"},"Status"),o("div",{role:"columnheader",class:"num"},"Repos"),o("div",{role:"columnheader"},"Review window"),o("div",{role:"columnheader"},[o("span",{class:"sr-only"},"Actions")])],-1)),(l(!0),d(W,null,oe(e.filteredConferences,(s,i)=>(l(),d("div",{class:A(["paper-table-row row-clickable",{"repo-inactive":s?.status=="expired"||s?.status=="removed"}]),role:"row",key:s?.conferenceID},[o("div",$A,[t[13]||(t[13]=o("svg",{class:"ui-icon record-type-icon",role:"img","aria-label":"Conference"},[o("use",{href:"#project-icon-conference"})],-1)),o("div",LA,[o("a",{class:"repo-name",textContent:c(s?.name),href:e.safeUrl("/conference/"+s?.conferenceID)},null,8,FA),o("div",zA,[o("span",HA,[t[12]||(t[12]=b("ID ",-1)),o("span",{class:"commit-hash",textContent:c(s?.conferenceID)},null,8,BA),s?.url?(l(),d("span",jA,[t[11]||(t[11]=b(" \xB7 ",-1)),o("a",{target:"_blank",rel:"noopener",textContent:c(e.fmt?.limitTo(s?.url,60)),href:e.safeUrl(s?.url)},null,8,GA)])):f("v-if",!0)])])])]),o("div",WA,[o("div",KA,[o("span",{class:A(["status-dot","status-"+s?.status]),"aria-hidden":"true"},null,2),o("span",{class:"status-word",textContent:c(e.fmt?.statusLabel(s?.status))},null,8,YA)])]),o("div",JA,[t[14]||(t[14]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1)),t[15]||(t[15]=b()),o("span",{textContent:c(e.fmt?.number(s?.nbRepositories||0))},null,8,QA)]),o("div",XA,[t[16]||(t[16]=o("svg",{class:"ui-icon mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),s?.startDate?(l(),d("span",ZA,c(e.fmt?.date(s?.startDate,"mediumDate"))+" \u2013 "+c(e.fmt?.date(s?.endDate,"mediumDate")),1)):f("v-if",!0),s?.startDate?f("v-if",!0):(l(),d("span",xA,"\u2014"))]),o("div",eO,[o("div",tO,[o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false",disabled:s?.removing,"aria-label":"Actions for "+s?.name},[...t[17]||(t[17]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})],-1)])],8,oO),o("div",nO,[o("a",{class:"dropdown-item",href:e.safeUrl("/conference/"+s?.conferenceID+"/")},[...t[18]||(t[18]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),b(" View ",-1)])],8,sO),o("a",{class:"dropdown-item",href:e.safeUrl("/conference/"+s?.conferenceID+"/edit")},[...t[19]||(t[19]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),b(" Edit ",-1)])],8,rO),s?.status!="removed"?(l(),d("div",iO,[t[21]||(t[21]=o("div",{class:"dropdown-divider"},null,-1)),o("button",{type:"button",class:"dropdown-item dropdown-item-danger",onClick:a=>e.removeConference(s)},[...t[20]||(t[20]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),b(" Remove ",-1)])],8,aO)])):f("v-if",!0)])])])],2))),128)),!e.loading&&!e.error&&e.filteredConferences?.length==0?(l(),d("div",lO,[t[23]||(t[23]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1)),e.conferences?.length==0?(l(),d("span",dO,"You have not created a conference yet.")):f("v-if",!0),e.conferences?.length>0?(l(),d("span",uO,"Nothing matches the current filters.")):f("v-if",!0),o("div",cO,[e.conferences?.length>0?(l(),d("button",{key:0,type:"button",class:"btn btn-outline-ink",onClick:t[2]||(t[2]=s=>{e.search="",e.filters.status.ready=!0,e.filters.status.expired=!0,e.filters.status.removed=!0})},"Clear filters")):f("v-if",!0),e.conferences?.length==0?(l(),d("a",pO,[...t[22]||(t[22]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#project-icon-plus"})],-1),b(" New conference",-1)])])):f("v-if",!0)])])):f("v-if",!0)])])])}var fO={class:"container page dashboard-page paper-page"},mO={class:"row"},hO={class:"w-100"},vO={class:"dashboard-heading"},yO=["open"],gO=["aria-expanded"],bO=["stroke-dasharray"],wO={key:1,d:"M7 12c0-4 4-4 5 0s5 4 5 0-4-4-5 0-5 4-5 0",class:"quota-ring-unlimited"},kO={key:0,class:"quota-summary-value"},EO={key:0},CO={class:"quota-panel",id:"dashboard-usage"},_O={class:"quota-panel-heading"},SO={key:1,class:"quota-loading",role:"status"},NO={class:"search-wrap"},RO={type:"search",id:"search",class:"form-control","aria-label":"Search anonymizations",placeholder:"Search projects, IDs, or conferences\u2026",autocomplete:"off"},DO=["aria-expanded"],TO={class:"btn-group",role:"group","aria-label":"Type"},AO=["aria-pressed"],OO=["aria-pressed"],IO=["aria-pressed"],PO=["aria-pressed"],VO={class:"dropdown"},qO={class:"btn dropdown-toggle",type:"button",id:"dropdownSort","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},MO={class:"filter-btn-value"},UO={class:"sr-only"},$O={class:"dropdown-menu","aria-labelledby":"dropdownSort"},LO={class:"form-check dropdown-item"},FO=["onClick","checked","id"],zO=["for"],HO={class:"dropdown"},BO={class:"btn dropdown-toggle",type:"button",id:"dropdownStatus","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},jO={key:0,class:"filter-btn-value"},GO={key:1,class:"filter-btn-value"},WO={class:"dropdown-menu","aria-labelledby":"dropdownStatus"},KO={class:"form-check dropdown-item"},YO=["id"],JO=["for"],QO={key:0,class:"dashboard-meta"},XO={class:"dashboard-view-tabs",role:"group","aria-label":"Project view"},ZO=["aria-pressed"],xO=["aria-pressed","aria-label"],eI={class:"dashboard-count"},tI={key:0},oI={key:0},nI={key:1},sI={class:"dashboard-active-filters"},rI=["onClick","aria-label","title"],iI=["aria-busy"],aI={class:"paper-table-head",role:"row"},lI=["aria-sort"],dI=["aria-sort"],uI=["aria-sort"],cI=["aria-sort"],pI={key:0,class:"paper-table-row paper-table-skeleton",role:"row","aria-hidden":"true"},fI=["onClick"],mI={class:"cell-anon",role:"cell"},hI=["aria-label","title"],vI={class:"project-type-svg","aria-hidden":"true"},yI=["href"],gI={class:"anon-text"},bI={class:"anon-title"},wI=["title","textContent","href"],kI=["textContent"],EI={key:2,class:"type-badge type-coauthor",title:"You are a co-author on this anonymization"},CI={class:"anon-sub"},_I=["title"],SI=["title"],NI=["title"],RI=["textContent"],DI={class:"dashboard-row-meta",role:"presentation"},TI={class:"cell-status",role:"cell"},AI={class:"status-line"},OI=["textContent"],II=["textContent","title"],PI=["title"],VI=["href"],qI=["onClick"],MI={key:4,class:"status-sub status-sub-date"},UI=["aria-label"],$I={class:"cell-expires",role:"cell"},LI={key:0,class:"expires-never"},FI=["textContent"],zI={key:2,class:"expires-past"},HI={key:3,class:"expires-past"},BI={key:4,class:"empty-dash","aria-label":"Not applicable"},jI={class:"cell-actions",role:"cell"},GI=["onClick","disabled","title","aria-label"],WI=["onClick","data-project-actions","aria-controls","aria-expanded"],KI={key:2,class:"dropdown"},YI=["data-project-actions","aria-label"],JI={class:"dropdown-menu dropdown-menu-right"},QI=["onClick","aria-controls","aria-expanded"],XI=["href"],ZI=["href"],xI=["onClick","disabled"],e4=["href"],t4=["onClick"],o4=["onClick"],n4=["onClick"],s4={key:5},r4=["onClick"],i4={key:1,class:"project-details-row",role:"row"},a4=["id","onKeydown"],l4={class:"project-details-heading"},d4=["onClick"],u4={class:"project-details-list"},c4={key:0},p4={key:1},f4={key:0},m4={key:2},h4={key:0,class:"project-progress-help"},v4=["href"],y4=["onSubmit"],g4=["for"],b4=["id"],w4={class:"project-name-controls"},k4=["id","aria-describedby","disabled"],E4=["disabled"],C4={key:0,class:"project-name-error",role:"alert"},_4={key:1,role:"status"},S4={key:0,class:"paper-table-empty"},N4={key:0},R4={key:1},D4={class:"paper-table-empty-actions"},T4={key:1,href:"/anonymize",class:"btn btn-ink"},A4={key:0,class:"dashboard-pagination"},O4={key:0,role:"alert"},I4=["disabled"];function Fl(e,t){let n=Ge("quota-usage"),r=ve("field"),s=ve("form");return l(),d("div",fO,[o("div",mO,[o("div",hO,[o("div",vO,[o("div",null,[t[27]||(t[27]=o("h1",{class:"paper-page-title"},"Projects",-1)),t[28]||(t[28]=o("p",{class:"paper-page-lede"},"Manage your anonymous links.",-1)),o("details",{class:"dashboard-quota",open:e.quotaExpanded,onToggle:t[1]||(t[1]=i=>e.quotaExpanded=i.target.open),onKeydown:t[2]||(t[2]=Ao(ie(i=>e.closeQuota(),["prevent","stop"]),["esc"]))},[o("summary",{"aria-controls":"dashboard-usage","aria-expanded":e.quotaExpanded},[(l(),d("svg",{class:A(["quota-summary-ring",e.quota?"quota-"+e.quota.repository.level:""]),viewBox:"0 0 24 24","aria-hidden":"true"},[t[21]||(t[21]=o("circle",{class:"quota-ring-track",cx:"12",cy:"12",r:"9"},null,-1)),e.quota&&!e.quota.repository.unlimited?(l(),d("circle",{key:0,class:"quota-ring-fill",cx:"12",cy:"12",r:"9",pathLength:"100","stroke-dasharray":e.quota.repository.percent+" 100"},null,8,bO)):f("v-if",!0),e.quota?.repository.unlimited?(l(),d("path",wO)):f("v-if",!0)],2)),t[23]||(t[23]=o("span",{class:"quota-summary-label"},"Usage",-1)),e.quota?(l(),d("span",kO,[b(c(e.fmt.number(e.quota.repository.used)),1),e.quota.repository.unlimited?f("v-if",!0):(l(),d("span",EO," / "+c(e.fmt.number(e.quota.repository.total)),1)),t[22]||(t[22]=b(" repos",-1))])):f("v-if",!0),t[24]||(t[24]=o("svg",{class:"project-type-svg quota-summary-chevron","aria-hidden":"true"},[o("use",{href:"#project-icon-chevron"})],-1))],8,gO),o("div",CO,[o("div",_O,[t[26]||(t[26]=o("h2",null,"Account usage",-1)),o("button",{type:"button",class:"project-close","aria-label":"Close usage",onClick:t[0]||(t[0]=i=>e.closeQuota())},[...t[25]||(t[25]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])])]),e.quota?(l(),Lt(n,{key:0,quota:e.quota,fmt:e.fmt},null,8,["quota","fmt"])):(l(),d("p",SO,"Loading usage\u2026"))])],40,yO)]),t[29]||(t[29]=de('',1))]),f(" Search + filters "),R((l(),d("form",{class:"w-100 dashboard-filter-row","aria-label":"Filter anonymizations","accept-charset":"UTF-8",onSubmit:t[9]||(t[9]=ie(i=>e.submitForm(i,()=>{i.preventDefault()}),["prevent"]))},[o("div",NO,[R(o("input",RO,null,512),[[r,{state:e.viewState,set:i=>{e.search=i},value:e.search,form:null,options:{}}]])]),o("button",{class:"btn dashboard-filters-toggle",type:"button","aria-expanded":e.filtersExpanded,"aria-controls":"dashboard-filter-controls",onClick:t[3]||(t[3]=i=>e.filtersExpanded=!e.filtersExpanded)},[...t[30]||(t[30]=[b("Filters",-1),o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-filter"})],-1)])],8,DO),o("div",{id:"dashboard-filter-controls",class:A(["dashboard-filter-controls",{expanded:e.filtersExpanded}])},[o("div",TO,[o("button",{type:"button",class:A(["btn",{"btn-primary":e.typeFilter==="all"}]),onClick:t[4]||(t[4]=i=>e.typeFilter="all"),"aria-pressed":e.typeFilter==="all"},"All",10,AO),o("button",{type:"button",class:A(["btn dashboard-type-filter",{"btn-primary":e.typeFilter==="repo"}]),title:"Repositories",onClick:t[5]||(t[5]=i=>e.typeFilter="repo"),"aria-pressed":e.typeFilter==="repo"},[...t[31]||(t[31]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-type-repo"})],-1),o("span",{class:"type-filter-label"},"Repos",-1)])],10,OO),o("button",{type:"button",class:A(["btn dashboard-type-filter",{"btn-primary":e.typeFilter==="pr"}]),title:"Pull requests",onClick:t[6]||(t[6]=i=>e.typeFilter="pr"),"aria-pressed":e.typeFilter==="pr"},[...t[32]||(t[32]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-type-pr"})],-1),o("span",{class:"type-filter-label"},"PRs",-1)])],10,IO),o("button",{type:"button",class:A(["btn dashboard-type-filter",{"btn-primary":e.typeFilter==="gist"}]),title:"Gists",onClick:t[7]||(t[7]=i=>e.typeFilter="gist"),"aria-pressed":e.typeFilter==="gist"},[...t[33]||(t[33]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-type-gist"})],-1),o("span",{class:"type-filter-label"},"Gists",-1)])],10,PO)]),o("div",{id:"dashboard-extra-filters",class:A(["dashboard-extra-filters",{expanded:e.filtersExpanded}])},[o("div",VO,[o("button",qO,[t[35]||(t[35]=o("span",{class:"filter-btn-label"},"Sort",-1)),o("span",MO,c(e.sortLabel()),1),(l(),d("svg",{class:A(["project-type-svg sort-direction",{ascending:!e.sortDesc()}]),"aria-hidden":"true"},[...t[34]||(t[34]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)),o("span",UO,c(e.sortDesc()?"descending":"ascending"),1)]),o("div",$O,[t[36]||(t[36]=o("h6",{class:"dropdown-header"},"Order by",-1)),(l(!0),d(W,null,oe(e.sortFields,(i,a,u)=>(l(),d("div",LO,[o("input",{class:"form-check-input",type:"radio",name:"sort",onClick:m=>e.setSort(a,i.defaultDesc),checked:e.isSortedBy(a),id:"sort-"+u},null,8,FO),o("label",{class:"form-check-label",for:"sort-"+u},c(i?.label),9,zO)]))),256)),t[37]||(t[37]=o("div",{class:"dropdown-divider"},null,-1)),o("button",{type:"button",class:"dropdown-item",onClick:t[8]||(t[8]=i=>e.toggleSortDirection())},c(e.sortDesc()?"Switch to ascending":"Switch to descending"),1)])]),o("div",HO,[o("button",BO,[t[38]||(t[38]=o("span",{class:"filter-btn-label"},"Status",-1)),e.hasHiddenStatus()?f("v-if",!0):(l(),d("span",jO,"All")),e.hasHiddenStatus()?(l(),d("span",GO,c(e.hiddenStatusCount())+" hidden",1)):f("v-if",!0)]),o("div",WO,[t[39]||(t[39]=o("h6",{class:"dropdown-header"},"Show statuses",-1)),(l(!0),d(W,null,oe(e.statusKeyLabels,(i,a,u)=>(l(),d("div",KO,[R(o("input",{class:"form-check-input",type:"checkbox",id:"status-"+a},null,8,YO),[[r,{state:e.viewState,set:m=>{e.filters.status[a]=m},value:e.filters?.status[a],form:null,options:{}}]]),o("label",{class:"form-check-label",for:"status-"+a},c(i),9,JO)]))),256))])])],2)],2)],32)),[[s,e.viewState]]),f(" Result count + active filter chips "),e.loading?f("v-if",!0):(l(),d("div",QO,[o("div",XO,[o("button",{type:"button","aria-pressed":e.projectView==="all",onClick:t[10]||(t[10]=i=>e.setProjectView("all")),"aria-label":"All projects"},[...t[40]||(t[40]=[o("span",{class:"dashboard-view-long"},"All projects",-1),o("span",{class:"dashboard-view-short","aria-hidden":"true"},"All",-1)])],8,ZO),o("button",{type:"button","aria-pressed":e.projectView==="attention",onClick:t[11]||(t[11]=i=>e.setProjectView("attention")),"aria-label":"Needs attention "+e.attentionCount()},[t[41]||(t[41]=o("span",{class:"dashboard-attention-prefix"},"Needs ",-1)),t[42]||(t[42]=o("span",null,"attention",-1)),t[43]||(t[43]=b()),o("span",{class:A(["attention-count",{"has-attention":e.attentionCount()>0}])},c(e.attentionCount()),3)],8,xO)]),o("span",eI,[(e.dashboardTotals?.filtered??e.filteredItems?.length)===(e.dashboardTotals?.total??e.items?.length)?(l(),d("span",tI,[b(c(e.fmt?.number(e.dashboardTotals?.total??e.items?.length))+" project",1),(e.dashboardTotals?.total??e.items?.length)!==1?(l(),d("span",oI,"s")):f("v-if",!0)])):(l(),d("span",nI,c(e.fmt?.number(e.dashboardTotals?.filtered??e.filteredItems?.length))+" of "+c(e.fmt?.number(e.dashboardTotals?.total??e.items?.length))+" shown",1))]),o("div",sI,[(l(!0),d(W,null,oe(e.filters?.status,(i,a,u)=>(l(),d(W,null,[i===!1?(l(),d("button",{key:0,type:"button",class:"filter-chip",onClick:m=>e.filters.status[a]=!0,"aria-label":"Show "+e.statusKeyLabels[a]+" again",title:"Show "+e.statusKeyLabels[a]+" again"},[b(c(e.statusKeyLabels[a])+" hidden",1),t[44]||(t[44]=o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1))],8,rI)):f("v-if",!0)],64))),256)),e.typeFilter!=="all"?(l(),d("button",{key:0,type:"button",class:"filter-chip",onClick:t[12]||(t[12]=i=>e.typeFilter="all"),"aria-label":"Show all project types"},[b(c(e.typeFilter==="repo"?"Repositories":e.typeFilter==="pr"?"Pull requests":"Gists"),1),t[45]||(t[45]=o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1))])):f("v-if",!0),e.showClearFilters()?(l(),d("button",{key:1,type:"button",class:"btn-link-inline",onClick:t[13]||(t[13]=i=>e.clearFilters())},"Clear filters")):f("v-if",!0)])]))]),f(" Table "),o("div",{class:"paper-table paper-table-dashboard",role:"table","aria-label":"Anonymizations","aria-busy":e.loading},[o("div",aI,[o("div",{role:"columnheader","aria-sort":e.isSortedBy("_label")?e.sortDesc()?"descending":"ascending":"none"},[o("button",{type:"button",class:A(["sortable",{active:e.isSortedBy("_label")}]),onClick:t[14]||(t[14]=i=>e.setSort("_label"))},[t[47]||(t[47]=b(" Project ",-1)),e.isSortedBy("_label")?(l(),d("svg",{key:0,class:A(["project-type-svg sort-direction",{ascending:!e.sortDesc()}]),"aria-hidden":"true"},[...t[46]||(t[46]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)],8,lI),o("div",{role:"columnheader","aria-sort":e.isSortedBy("status")?e.sortDesc()?"descending":"ascending":"none"},[o("button",{type:"button",class:A(["sortable",{active:e.isSortedBy("status")}]),onClick:t[15]||(t[15]=i=>e.setSort("status"))},[t[49]||(t[49]=b(" Status ",-1)),e.isSortedBy("status")?(l(),d("svg",{key:0,class:A(["project-type-svg sort-direction",{ascending:!e.sortDesc()}]),"aria-hidden":"true"},[...t[48]||(t[48]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)],8,dI),o("div",{role:"columnheader",class:"num","aria-sort":e.isSortedBy("pageView")?e.sortDesc()?"descending":"ascending":"none"},[o("button",{type:"button",class:A(["sortable",{active:e.isSortedBy("pageView")}]),onClick:t[16]||(t[16]=i=>e.setSort("pageView"))},[t[51]||(t[51]=b(" Views ",-1)),e.isSortedBy("pageView")?(l(),d("svg",{key:0,class:A(["project-type-svg sort-direction",{ascending:!e.sortDesc()}]),"aria-hidden":"true"},[...t[50]||(t[50]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)],8,uI),o("div",{role:"columnheader","aria-sort":e.isSortedBy("options.expirationDate")?e.sortDesc()?"descending":"ascending":"none"},[o("button",{type:"button",class:A(["sortable",{active:e.isSortedBy("options.expirationDate")}]),onClick:t[17]||(t[17]=i=>e.setSort("options.expirationDate"))},[t[53]||(t[53]=b(" Expires ",-1)),e.isSortedBy("options.expirationDate")?(l(),d("svg",{key:0,class:A(["project-type-svg sort-direction",{ascending:!e.sortDesc()}]),"aria-hidden":"true"},[...t[52]||(t[52]=[o("use",{href:"#project-icon-arrow"},null,-1)])],2)):f("v-if",!0)],2)],8,cI),t[54]||(t[54]=o("div",{role:"columnheader"},[o("span",{class:"sr-only"},"Actions")],-1))]),f(" Loading skeleton: keeps the layout stable while the three lists load "),(l(),d(W,null,oe([1,2,3,4],(i,a)=>(l(),d(W,null,[e.loading?(l(),d("div",pI,[...t[55]||(t[55]=[o("div",{class:"cell-anon",role:"cell"},[o("span",{class:"skeleton skeleton-badge"}),o("div",{class:"anon-text"},[o("span",{class:"skeleton skeleton-line",style:{width:"38%"}}),o("span",{class:"skeleton skeleton-line skeleton-line-sm",style:{width:"56%"}})])],-1),o("div",{class:"cell-status",role:"cell"},[o("span",{class:"skeleton skeleton-line",style:{width:"60%"}})],-1),o("div",{class:"cell-views num",role:"cell"},[o("span",{class:"skeleton skeleton-line",style:{width:"40%"}})],-1),o("div",{class:"cell-expires",role:"cell"},[o("span",{class:"skeleton skeleton-line",style:{width:"55%"}})],-1),o("div",{class:"cell-actions",role:"cell"},null,-1)])])):f("v-if",!0)],64))),64)),(l(!0),d(W,null,oe(e.filteredItems,(i,a)=>(l(),d(W,{key:i?._type+":"+(i?._id||a)},[e.loading?f("v-if",!0):(l(),d("div",{key:0,class:A(["paper-table-row",{"repo-inactive":i?._statusKey=="expired"||i?._statusKey=="removed","repo-error":i?.status=="error","row-clickable":!!i?._viewUrl}]),role:"row",onClick:u=>e.openItem(i,u)},[o("div",mI,[o("span",{class:"project-type-icon",role:"img","aria-label":i?._type==="repo"?"Repository":i?._type==="pr"?"Pull request":"Gist",title:i?._type==="repo"?"Repository":i?._type==="pr"?"Pull request":"Gist"},[(l(),d("svg",vI,[o("use",{href:"#project-type-"+i._type},null,8,yI)]))],8,hI),o("div",gI,[o("div",bI,[i?._viewUrl?(l(),d("a",{key:0,class:"repo-name",title:i._label,textContent:c(i?._label),href:e.safeUrl(i?._viewUrl)},null,8,wI)):f("v-if",!0),i?._viewUrl?f("v-if",!0):(l(),d("span",{key:1,class:"repo-name repo-name-static",textContent:c(i?._label)},null,8,kI)),i?.role==="coauthor"?(l(),d("span",EI,"Co-author")):f("v-if",!0)]),o("div",CI,[i?._id?(l(),d("code",{key:0,class:"anonymous-id",title:i._id},c(i._id),9,_I)):f("v-if",!0),i?._type==="repo"&&i?.source?.commit?(l(),d("span",{key:1,class:"commit-hash",title:i.source.commit},c(i.source.commit.substring(0,8)),9,SI)):f("v-if",!0),i?.conference?(l(),d("span",{key:2,class:"cell-conf conf-tag",title:i?.conference},[t[56]||(t[56]=o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-conference"})],-1)),t[57]||(t[57]=b()),o("span",{textContent:c(i?.conference)},null,8,RI)],8,NI)):f("v-if",!0)])])]),o("div",DI,[o("div",TI,[o("div",AI,[o("span",{class:A(["status-dot","status-"+i?._statusKey]),"aria-hidden":"true"},null,2),o("span",{class:"status-word",textContent:c(e.fmt?.statusLabel(i?.status))},null,8,OI)]),i?.status=="error"&&i?.statusMessage?(l(),d("div",{key:0,class:"status-sub status-sub-error",textContent:c(e.fmt?.statusMsg(i?.statusMessage)),title:i?.statusMessage},null,8,II)):f("v-if",!0),i?._stale?(l(),d("div",{key:1,class:"status-sub status-sub-warn",title:"Last activity "+e.fmt?.humanTime(i?.anonymizeDate||i?.lastView)}," Last activity "+c(e.fmt?.humanTime(i?.anonymizeDate||i?.lastView))+" \xB7 may be stuck ",9,PI)):f("v-if",!0),i.status==="error"&&i._editUrl?(l(),d("a",{key:2,class:"project-attention-action",href:e.safeUrl(i._editUrl)},"Fix source",8,VI)):f("v-if",!0),i._stale||i._broken?(l(),d("button",{key:3,type:"button",class:"project-attention-action",onClick:ie(u=>e.showProjectDetails(i),["stop"])},c(i._broken?"Review details":"Check progress"),9,qI)):f("v-if",!0),i?.status!="error"&&!i?._stale&&i?.anonymizeDate?(l(),d("div",MI," anonymized "+c(e.fmt?.humanTime(i?.anonymizeDate)),1)):f("v-if",!0)]),o("div",{class:"cell-views num",role:"cell","aria-label":e.fmt.number(i.pageView)+" views"},[t[58]||(t[58]=o("svg",{class:"project-type-svg mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1)),o("span",null,c(e.fmt.number(i.pageView)),1)],8,UI),o("div",$I,[t[59]||(t[59]=o("svg",{class:"project-type-svg mobile-meta-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),i?._expiry?.kind==="never"?(l(),d("span",LI,"Never")):f("v-if",!0),i?._expiry?.kind==="date"?(l(),d("span",{key:1,textContent:c(e.fmt?.humanTime(i?._expiry?.date))},null,8,FI)):f("v-if",!0),i?._expiry?.kind==="expired"&&i?._expiry?.date?(l(),d("span",zI,"Expired "+c(e.fmt?.humanTime(i?._expiry?.date)),1)):f("v-if",!0),i?._expiry?.kind==="expired"&&!i?._expiry?.date?(l(),d("span",HI,"Expired")):f("v-if",!0),i?._expiry?.kind==="none"?(l(),d("span",BI,"\u2014")):f("v-if",!0)])]),o("div",jI,[i._viewUrl?(l(),d("button",{key:0,type:"button",class:"copy-link-inline",onClick:ie(u=>e.copyLink(i),["stop"]),disabled:!!e.copyingId,title:"Copy anonymous link for "+i._label,"aria-label":"Copy anonymous link for "+i._label},[...t[60]||(t[60]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-copy"})],-1)])],8,GI)):f("v-if",!0),i._broken?(l(),d("button",{key:1,type:"button",class:"project-details-button",onClick:ie(u=>e.showProjectDetails(i),["stop"]),"data-project-actions":encodeURIComponent(i._type+":"+i._id),"aria-controls":e.projectDetailsId(i),"aria-expanded":e.selectedProject===i},"Details",8,WI)):f("v-if",!0),i?._broken?f("v-if",!0):(l(),d("div",KI,[o("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","data-project-actions":encodeURIComponent(i._type+":"+i._id),"aria-label":"Actions for "+i?._name},[...t[61]||(t[61]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-more"})],-1)])],8,YI),o("div",JI,[o("button",{type:"button",class:"dropdown-item",onClick:u=>e.showProjectDetails(i),"aria-controls":e.projectDetailsId(i),"aria-expanded":e.selectedProject===i},"Project details & name",8,QI),o("a",{class:"dropdown-item",href:e.safeUrl(i?._viewUrl)}," View ",8,XI),i?._type==="repo"&&i?.options?.page&&i?.status=="ready"?(l(),d("a",{key:0,class:"dropdown-item",target:"_self",href:e.safeUrl("/w/"+i?.repoId+"/")}," View page ",8,ZI)):f("v-if",!0),i?._viewUrl?(l(),d("button",{key:1,type:"button",class:"dropdown-item",onClick:u=>e.copyLink(i),disabled:!!e.copyingId}," Copy anonymous link ",8,xI)):f("v-if",!0),o("a",{class:"dropdown-item",href:e.safeUrl(i?._editUrl)}," Edit ",8,e4),i?.status=="ready"||i?.status=="error"?(l(),d("button",{key:2,type:"button",class:"dropdown-item",onClick:u=>e.refreshItem(i)}," Force update ",8,t4)):f("v-if",!0),i?.status=="removed"?(l(),d("button",{key:3,type:"button",class:"dropdown-item",onClick:u=>e.refreshItem(i)}," Enable ",8,o4)):f("v-if",!0),i?.status=="expired"?(l(),d("button",{key:4,type:"button",class:"dropdown-item",onClick:u=>e.extendItem(i)}," Extend 6 months ",8,n4)):f("v-if",!0),(i?.status=="ready"||i?.status=="expired"||i?.status=="error")&&i?.role!=="coauthor"?(l(),d("div",s4,[t[62]||(t[62]=o("div",{class:"dropdown-divider"},null,-1)),o("button",{type:"button",class:"dropdown-item dropdown-item-danger",onClick:u=>e.removeItem(i)}," Remove ",8,r4)])):f("v-if",!0)])]))])],10,fI)),!e.loading&&e.selectedProject===i?(l(),d("div",i4,[o("div",{class:"project-details",role:"cell","aria-colspan":"5",id:e.projectDetailsId(i),tabindex:"-1",onKeydown:Ao(ie(u=>e.closeProjectDetails(i),["stop"]),["esc"])},[o("div",l4,[t[64]||(t[64]=o("h2",null,"Project details",-1)),o("button",{type:"button",class:"project-close",onClick:u=>e.closeProjectDetails(i),"aria-label":"Close project details"},[...t[63]||(t[63]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])],8,d4)]),o("dl",u4,[o("div",null,[t[65]||(t[65]=o("dt",null,"Source",-1)),o("dd",null,c(i._source||"Not available"),1)]),o("div",null,[t[66]||(t[66]=o("dt",null,"Anonymous ID",-1)),o("dd",null,[o("code",null,c(i._id||"Missing identifier"),1)])]),i.source?.commit?(l(),d("div",c4,[t[67]||(t[67]=o("dt",null,"Commit",-1)),o("dd",null,[o("code",null,c(i.source.commit),1)])])):f("v-if",!0),i.conference?(l(),d("div",p4,[t[68]||(t[68]=o("dt",null,"Conference",-1)),o("dd",null,c(i.conference),1)])):f("v-if",!0),o("div",null,[t[69]||(t[69]=o("dt",null,"Status",-1)),o("dd",null,[b(c(e.fmt.statusLabel(i.status)),1),i.statusMessage?(l(),d("span",f4," \xB7 "+c(e.fmt.statusMsg(i.statusMessage)),1)):f("v-if",!0)])]),i.anonymizeDate?(l(),d("div",m4,[t[70]||(t[70]=o("dt",null,"Last anonymized",-1)),o("dd",null,c(e.fmt.humanTime(i.anonymizeDate)),1)])):f("v-if",!0)]),i._stale?(l(),d("p",h4,"This download has not progressed recently. Check the source access and selected branch before retrying.")):f("v-if",!0),i._editUrl?(l(),d("a",{key:1,class:"project-attention-action",href:e.safeUrl(i._editUrl)},c(e.needsAttention(i)?"Check source settings":"Edit anonymization settings"),9,v4)):f("v-if",!0),i._id?(l(),d("form",{key:2,class:"project-name-form",onSubmit:ie(u=>e.saveProjectName(i),["prevent"])},[o("label",{for:"project-name-"+i._type+"-"+i._id},"Project name",8,g4),o("p",{id:"project-name-help-"+i._type+"-"+i._id},"Only you see this name. Leave it blank to use the default.",8,b4),o("div",w4,[R(o("input",{class:"form-control",type:"text",id:"project-name-"+i._type+"-"+i._id,"aria-describedby":"project-name-help-"+i._type+"-"+i._id,maxlength:"100","onUpdate:modelValue":t[18]||(t[18]=u=>e.projectName=u),disabled:e.nameSaving},null,8,k4),[[zt,e.projectName]]),o("button",{class:"btn btn-ink",type:"submit",disabled:e.nameSaving},c(e.nameSaving?"Saving\u2026":"Save name"),9,E4)]),e.nameError?(l(),d("p",C4,c(e.nameError),1)):f("v-if",!0),e.nameMessage?(l(),d("p",_4,c(e.nameMessage),1)):f("v-if",!0)],40,y4)):f("v-if",!0)],40,a4)])):f("v-if",!0)],64))),128)),!e.loading&&e.filteredItems?.length==0?(l(),d("div",S4,[t[72]||(t[72]=o("svg",{class:"project-type-svg project-empty-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1)),e.hasProjects()?f("v-if",!0):(l(),d("span",N4,"You have no anonymizations yet.")),e.hasProjects()?(l(),d("span",R4,"Nothing matches the current filters.")):f("v-if",!0),o("div",D4,[e.hasActiveFilters()?(l(),d("button",{key:0,type:"button",class:"btn btn-outline-ink",onClick:t[19]||(t[19]=i=>e.clearFilters())},"Clear filters")):f("v-if",!0),e.hasProjects()?f("v-if",!0):(l(),d("a",T4,[...t[71]||(t[71]=[o("svg",{class:"project-type-svg","aria-hidden":"true"},[o("use",{href:"#project-icon-plus"})],-1),b(" New anonymization",-1)])]))])])):f("v-if",!0)],8,iI)]),e.dashboardCursor||e.dashboardError?(l(),d("div",A4,[e.dashboardError?(l(),d("p",O4,c(e.dashboardError),1)):f("v-if",!0),e.dashboardCursor?(l(),d("button",{key:1,type:"button",class:"btn",onClick:t[20]||(t[20]=i=>e.loadMoreProjects()),disabled:e.loadingMore},c(e.loadingMore?"Loading\u2026":"Load more projects"),9,I4)):f("v-if",!0)])):f("v-if",!0)])}var P4={class:"explorer-page"},V4=["aria-label"],q4={class:"ui-icon","aria-hidden":"true"},M4=["href"],U4=["textContent"],$4={class:"leftCol-head"},L4={class:"leftCol-search"},F4={class:"tree-search-box"},z4=["href"],H4={type:"text",class:"tree-search-input",placeholder:"Search files","aria-label":"Search files"},B4={class:"leftCol-project-header"},j4=["textContent","title"],G4={class:"project-file-count"},W4=["title"],K4={class:"leftCol-body"},Y4={key:0,class:"paper-inline-warning",role:"alert"},J4={key:1,class:"paper-inline-warning",role:"alert"},Q4={class:"leftCol-foot"},X4=["title"],Z4=["title"],x4=["title"],e3={key:2,class:"last-update",title:"Older repositories have no recorded publication date. The source commit date does not establish when files became available here."},t3={class:"explorer-main"},o3={class:"status-bar"},n3={class:"breadcrumb paths","aria-label":"Path"},s3=["textContent"],r3={class:"status-bar-actions"},i3=["href"],a3={class:"d-none d-md-inline"},l3={class:"ui-icon","aria-hidden":"true"},d3=["href"],u3={class:"d-none d-md-inline"},c3=["href"],p3=["href"],f3=["href"],m3=["href"],h3={class:"explorer-content"};function zl(e,t){let n=Ge("tree"),r=Ge("partial-view"),s=ve("field");return l(),d("div",P4,[R(o("button",{class:"sidebar-toggle",onClick:t[0]||(t[0]=i=>e.sidebarCollapsed=!e.sidebarCollapsed),"aria-label":e.sidebarCollapsed?"Show files":"Hide files"},[(l(),d("svg",q4,[o("use",{href:e.sidebarCollapsed?"#ui-icon-folder":"#project-icon-close"},null,8,M4)])),o("span",{textContent:c(e.sidebarCollapsed?"Files":"Close")},null,8,U4)],8,V4),[[j,e.files?.length]]),R(o("div",{class:A(["leftCol",{collapsed:e.sidebarCollapsed}])},[o("div",$4,[t[7]||(t[7]=o("span",{class:"leftCol-eyebrow"},"Files",-1)),o("button",{class:"leftCol-close","aria-label":"Close files",onClick:t[1]||(t[1]=i=>e.sidebarCollapsed=!0)},[...t[6]||(t[6]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-close"})],-1)])])]),o("div",L4,[o("div",F4,[(l(),d("svg",{class:A(["ui-icon tree-search-icon",{"fa-spin":e.fileSearchLoading}]),"aria-hidden":"true"},[o("use",{href:e.fileSearchLoading?"#ui-icon-spinner":"#ui-icon-search"},null,8,z4)],2)),R(o("input",H4,null,512),[[s,{state:e.viewState,set:i=>{e.fileSearchQuery=i},value:e.fileSearchQuery,form:null,options:{debounce:300},change:()=>{e.onFileSearchChange()}}]]),R(o("kbd",{class:"tree-search-kbd"},c(e.isMac?"\u2318":"Ctrl+")+"K",513),[[j,!e.fileSearchQuery]]),R(o("button",{class:"tree-search-clear","aria-label":"Clear search",onClick:t[2]||(t[2]=i=>{e.fileSearchQuery="",e.onFileSearchChange()})},"\xD7",512),[[j,e.fileSearchQuery]])])]),o("div",B4,[o("span",{class:"project-name",textContent:c(e.repoId),title:e.repoId},null,8,j4),o("span",G4,c(e.fileCounts?.[""]||e.files?.length)+" files",1),e.options?.expirationDate?(l(),d("span",{key:0,class:"project-expiry",title:e.options.expirationDate},[t[8]||(t[8]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),b(" Available until "+c(e.fmt?.date(e.options.expirationDate)),1)],8,W4)):f("v-if",!0)]),o("div",K4,[e.options?.truncatedFolders?.length>0?(l(),d("div",Y4,[t[9]||(t[9]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),b(" "+c(e.fmt?.translate("WARNINGS.repo_truncated")),1)])):f("v-if",!0),e.options?.hasSubmodules?(l(),d("div",J4,[t[10]||(t[10]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})],-1)),b(" "+c(e.fmt?.translate("WARNINGS.submodules_not_included")),1)])):f("v-if",!0),Ce(n,{class:"files",file:e.files,"search-query":e.fileSearchQuery,"search-results":e.fileSearchResults,page:e.viewState},null,8,["file","search-query","search-results","page"])]),o("div",Q4,[o("span",{class:"last-update",title:e.options?.sourceCommitDate||e.options?.anonymizedAt||e.options?.lastUpdateDate},c(e.options?.sourceCommitDate?"Source commit":e.options?.anonymizedAt?"Anonymized":"Updated")+" "+c(e.fmt?.date(e.options?.sourceCommitDate||e.options?.anonymizedAt||e.options?.lastUpdateDate)),9,X4),e.options?.settingsSavedAt?(l(),d("span",{key:0,class:"last-update",title:e.options.settingsSavedAt}," Settings saved "+c(e.fmt?.date(e.options.settingsSavedAt)),9,Z4)):f("v-if",!0),e.options?.publishedAt?(l(),d("span",{key:1,class:"last-update",title:e.options.publishedAt}," Snapshot ready "+c(e.fmt?.date(e.options.publishedAt)),9,x4)):f("v-if",!0),e.options?.anonymizedAt&&!e.options?.publishedAt?(l(),d("span",e3," Snapshot ready date not recorded ")):f("v-if",!0)])],2),[[j,e.files?.length]]),R(o("div",{class:"leftCol-backdrop",onClick:t[3]||(t[3]=i=>e.sidebarCollapsed=!0)},null,512),[[j,e.files?.length&&!e.sidebarCollapsed]]),o("div",t3,[R(o("div",o3,[o("ol",n3,[(l(!0),d(W,null,oe(e.paths,(i,a)=>(l(),d("li",{class:"breadcrumb-item",textContent:c(i)},null,8,s3))),256))]),o("div",r3,[e.options?.isAdmin||e.options?.isOwner?(l(),d("a",{key:0,class:"btn btn-sm","aria-label":"Edit",href:e.safeUrl("/anonymize/"+e.repoId)},[...t[11]||(t[11]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),o("span",{class:"d-none d-md-inline"}," Edit",-1)])],8,i3)):f("v-if",!0),e.type=="html-doc"&&!e.showSource?(l(),d("button",{key:1,class:A(["btn btn-sm",{"btn-active":e.allowScripts}]),"aria-label":"Allow this document to run JavaScript",title:"Scripts in this file are blocked by default. Enable them only if you trust the repository \u2014 the document stays isolated from your session either way.",onClick:t[4]||(t[4]=i=>e.toggleAllowScripts())},[t[12]||(t[12]=o("i",{class:"fab fa-js"},null,-1)),o("span",a3,c(e.allowScripts?"JS on":"JS off"),1)],2)):f("v-if",!0),e.type=="html-doc"?(l(),d("button",{key:2,class:"btn btn-sm","aria-label":"Toggle between the rendered document and its source",title:"Toggle between the rendered document and its source",onClick:t[5]||(t[5]=i=>e.toggleSource())},[(l(),d("svg",l3,[o("use",{href:e.showSource?"#project-icon-eye":"#ui-icon-code"},null,8,d3)])),o("span",u3,c(e.showSource?"Rendered":"Source"),1)])):f("v-if",!0),R(o("a",{target:"_self",class:"btn btn-sm btn-icon-only","aria-label":"View raw current file",title:"View raw file",href:e.safeUrl(e.url)},[...t[13]||(t[13]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-file"})],-1)])],8,c3),[[j,e.content!=null&&e.type!="error"&&e.type!="rate_limited"]]),R(o("a",{target:"_self",class:"btn btn-sm btn-icon-only","aria-label":"Download current file",title:"Download this file",href:e.safeUrl(e.url+"&download=true")},[...t[14]||(t[14]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-download"})],-1)])],8,p3),[[j,e.content!=null&&e.type!="error"&&e.type!="rate_limited"]]),e.options?.download?(l(),d("a",{key:3,target:"_self",class:"btn btn-sm btn-ink","aria-label":"Download repository as ZIP",title:"Download the whole repository as a ZIP archive",href:e.safeUrl("/api/repo/"+e.repoId+"/zip")},[...t[15]||(t[15]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-archive"})],-1),o("span",{class:"d-none d-md-inline"}," Download repository",-1)])],8,f3)):f("v-if",!0),e.options?.hasWebsite?(l(),d("a",{key:4,target:"_self",class:"btn btn-sm","aria-label":"Website",href:e.safeUrl("/w/"+e.repoId+"/")},[...t[16]||(t[16]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-globe"})],-1),o("span",{class:"d-none d-md-inline"}," Website",-1)])],8,m3)):f("v-if",!0)])],512),[[j,e.type!="error"||e.files?.length]]),o("div",h3,[Ce(r,{name:"partials/pageView.htm",state:e.viewState},null,8,["state"])])])])}var v3={class:"paper-faq"};function Hl(e,t){return l(),d("div",v3,[...t[0]||(t[0]=[de('
Help

Answers to the questions that come up most.

If something's missing, write to us \u2014 report a bug on GitHub.

',1),o("div",{class:"paper-faq-body"},[o("aside",{class:"paper-faq-toc"},[o("div",{class:"paper-faq-toc-head"},"Contents"),o("nav",null,[o("a",{href:"#faq-general"},"General"),o("a",{href:"#faq-features"},"Features"),o("a",{href:"#faq-limitations"},"Limitations"),o("a",{href:"#faq-privacy"},"Privacy & Security"),o("a",{href:"#faq-hosting"},"Self-Hosting")])]),o("section",{class:"faq-section","aria-label":"FAQs"},[o("div",null,[f(" General "),o("h4",{class:"faq-cat"},[o("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})]),b("General ")]),o("div",{class:"panel-group",id:"faq-general",role:"tablist","aria-multiselectable":"true"},[o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingWhatIs"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-general",href:"#whatIs","aria-expanded":"false","aria-controls":"whatIs"}," What is Anonymous GitHub? ")])]),o("div",{id:"whatIs",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingWhatIs"},[o("div",{class:"panel-body p-3"},[o("p",null," Anonymous GitHub is a free, open-source tool that anonymizes GitHub repositories and pull requests for double-anonymous (double-blind) peer review. It replaces identifying information \u2014 such as the repository owner, organization name, and custom terms \u2014 so that reviewers cannot determine the identity of the authors through the code repository. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingHowWork"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-general",href:"#howWork","aria-expanded":"false","aria-controls":"howWork"}," How does Anonymous GitHub work? ")])]),o("div",{id:"howWork",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingHowWork"},[o("div",{class:"panel-body p-3"},[o("p",null," Anonymous GitHub either downloads the complete repository and anonymizes the content, or proxies requests to GitHub on the fly. In both cases, the original and anonymized versions of files are cached on the server. The system automatically detects and replaces the repository owner, organization name, and repository name. You can also specify additional custom terms to anonymize using one-per-line regex patterns. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingScope"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-general",href:"#scope","aria-expanded":"false","aria-controls":"scope"}," What is the scope of anonymization? ")])]),o("div",{id:"scope",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingScope"},[o("div",{class:"panel-body p-3"},[o("p",null," In double-anonymous peer review, the boundary of anonymization is the paper plus its online appendix \u2014 not the entire internet. Searching for any part of the paper or the online appendix can be considered a deliberate attempt to break anonymity. Anonymous GitHub anonymizes the repository owner, organization, repository name, file and directory names, and file contents across all text-based file types. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingCost"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-general",href:"#cost","aria-expanded":"false","aria-controls":"cost"}," How much does it cost? ")])]),o("div",{id:"cost",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingCost"},[o("div",{class:"panel-body p-3"},[o("p",null,[b(" Anonymous GitHub is completely free to use. However, the server costs hundreds of dollars per year to maintain. If you find the service useful, a small donation would be greatly appreciated. You can support the project by "),o("a",{href:"https://github.com/sponsors/tdurieux/",target:"_blank"},"sponsoring on GitHub"),b(", donating through "),o("a",{href:"https://ko-fi.com/tdurieux",target:"_blank"},"Ko-fi"),b(', or by clicking the "Support me" button on the site. ')])])])])]),f(" Features "),o("h4",{class:"faq-cat"},[o("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[o("use",{href:"#project-icon-filter"})]),b("Features ")]),o("div",{class:"panel-group",id:"faq-features",role:"tablist","aria-multiselectable":"true"},[o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingFormats"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#formats","aria-expanded":"false","aria-controls":"formats"}," Which file formats are supported? ")])]),o("div",{id:"formats",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingFormats"},[o("div",{class:"panel-body p-3"},[o("p",null," Anonymous GitHub can display and render a wide variety of file types: "),o("ul",null,[o("li",null,[o("strong",null,"Text and source code"),b(" \u2014 displayed with syntax highlighting")]),o("li",null,[o("strong",null,"Markdown"),b(" \u2014 rendered as formatted HTML")]),o("li",null,[o("strong",null,"Images"),b(" (PNG, JPG, SVG, etc.) \u2014 displayed inline")]),o("li",null,[o("strong",null,"PDFs"),b(" \u2014 rendered directly in the browser")]),o("li",null,[o("strong",null,"Jupyter Notebooks"),b(" \u2014 rendered with code cells and outputs")])]),o("p",null," Only text-based files are anonymized. Anonymous GitHub analyzes the content of each file to determine whether it is textual or binary. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingPR"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#pullRequests","aria-expanded":"false","aria-controls":"pullRequests"}," Can I anonymize pull requests? ")])]),o("div",{id:"pullRequests",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingPR"},[o("div",{class:"panel-body p-3"},[o("p",null," Yes. In addition to full repositories, Anonymous GitHub supports anonymizing individual pull requests. Simply paste the URL of a GitHub pull request when creating a new anonymized repository, and the system will automatically detect that it is a pull request and anonymize it accordingly. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingConference"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#conference","aria-expanded":"false","aria-controls":"conference"}," What is the Conference ID feature? ")])]),o("div",{id:"conference",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingConference"},[o("div",{class:"panel-body p-3"},[o("p",null," When creating an anonymized repository, you can associate it with a Conference ID. This allows conferences to define default anonymization settings (such as expiration dates) that are automatically applied to repositories submitted under that conference. If your conference provides a Conference ID, enter it during the anonymization setup. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingExpiration"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#expiration","aria-expanded":"false","aria-controls":"expiration"}," What happens when an anonymized repository expires? ")])]),o("div",{id:"expiration",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingExpiration"},[o("div",{class:"panel-body p-3"},[o("p",null," You can configure one of three expiration strategies when creating your anonymized repository: "),o("ul",null,[o("li",null,[o("strong",null,"Never expire"),b(" \u2014 the anonymized repository remains accessible indefinitely.")]),o("li",null,[o("strong",null,"Redirect to GitHub"),b(" \u2014 after expiration, visitors are redirected to the original GitHub repository.")]),o("li",null,[o("strong",null,"Remove content"),b(" \u2014 after expiration, the anonymized content is deleted from the server.")])])])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingDownload"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#download","aria-expanded":"false","aria-controls":"download"}," Can I download an anonymized repository? ")])]),o("div",{id:"download",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingDownload"},[o("div",{class:"panel-body p-3"},[o("p",null," Yes. Anonymized repositories can be downloaded as a ZIP file. This is useful if reviewers want to build or test the code locally. The downloaded archive contains the fully anonymized version of the repository. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingUpdates"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#updates","aria-expanded":"false","aria-controls":"updates"}," Are updates to the original repository reflected in the anonymized version? ")])]),o("div",{id:"updates",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingUpdates"},[o("div",{class:"panel-body p-3"},[o("p",null," Yes. The anonymized repository tracks the source on GitHub: when you push new commits to the original repository, the anonymized view picks up those changes (cached files are refreshed against GitHub). This means you can keep iterating on the code while reviewers have the link, and you do not need to recreate the anonymized repository every time you update the source. "),o("p",null," A few practical implications worth keeping in mind: "),o("ul",null,[o("li",null," You can safely create the anonymized repository early in the writing process \u2014 later commits will be visible to reviewers without any additional action. "),o("li",null," If you rename files, add new identifiers, or introduce new contributor names after creation, revisit the anonymization options (custom terms, file filters) to make sure the new content is still properly anonymized. "),o("li",null," If the original repository is made private or deleted, the anonymized repository will no longer be able to fetch updated content. ")])])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingCLI"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-features",href:"#cli","aria-expanded":"false","aria-controls":"cli"}," Is there a command-line tool? ")])]),o("div",{id:"cli",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingCLI"},[o("div",{class:"panel-body p-3"},[o("p",null," Yes. Anonymous GitHub provides a CLI tool that lets you anonymize repositories locally, generating an anonymized ZIP file on your machine. Install it via npm: "),o("pre",{style:{"background-color":"var(--hover-bg-color)",padding:"12px","border-radius":"4px","margin-top":"8px",color:"var(--color)"}},[o("code",null,`npm install -g @tdurieux/anonymous_github +anonymous_github`)])])])])]),f(" Limitations "),o("h4",{class:"faq-cat"},[o("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[o("use",{href:"#ui-icon-warning"})]),b("Limitations ")]),o("div",{class:"panel-group",id:"faq-limitations",role:"tablist","aria-multiselectable":"true"},[o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingLimitation"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-limitations",href:"#limitation","aria-expanded":"false","aria-controls":"limitation"}," What are the limitations of Anonymous GitHub? ")])]),o("div",{id:"limitation",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingLimitation"},[o("div",{class:"panel-body p-3"},[o("ul",null,[o("li",null," Anonymous GitHub only anonymizes text-based files. Binary files (compiled executables, archives, etc.) are served as-is without anonymization. "),o("li",null," Files larger than 8 MB are not supported. "),o("li",null," Static site generators (such as Jekyll) used with GitHub Pages are not fully supported, although Markdown files are converted to HTML. "),o("li",null," The anonymization of terms within source code may change the behavior of the program (e.g., if a replaced term appears in a string literal or identifier). ")])])])])]),f(" Privacy & Security "),o("h4",{class:"faq-cat"},[o("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})]),b("Privacy & Security ")]),o("div",{class:"panel-group",id:"faq-privacy",role:"tablist","aria-multiselectable":"true"},[o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingData"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-privacy",href:"#data","aria-expanded":"false","aria-controls":"data"}," How is my data handled? ")])]),o("div",{id:"data",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingData"},[o("div",{class:"panel-body p-3"},[o("p",null," Data stored on Anonymous GitHub is never shared or used for any purpose beyond providing the anonymization service. When a repository is removed or expires, only its configuration is retained \u2014 this makes it easy to restore the repository if needed and ensures that no future repository reuses the same ID. ")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingPermissions"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-privacy",href:"#permissions","aria-expanded":"false","aria-controls":"permissions"}," Why does GitHub say Anonymous GitHub asks for write access? ")])]),o("div",{id:"permissions",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingPermissions"},[o("div",{class:"panel-body p-3"},[o("p",null,[b("The GitHub App has read-only access to the repositories you choose. You can change repository access on your "),o("a",{href:"/connections"},"GitHub connections"),b(" page.")]),o("p",null,"Legacy GitHub OAuth includes write access to private repositories because GitHub's OAuth scopes do not offer a read-only option for them. Existing OAuth anonymizations and gists can still use this connection."),o("p",null,"Anonymous GitHub reads repository content. It never pushes, modifies, or deletes files on GitHub.")])])]),o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingViewer"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-privacy",href:"#viewer","aria-expanded":"false","aria-controls":"viewer"}," Can repository owners see who viewed their anonymized repository? ")])]),o("div",{id:"viewer",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingViewer"},[o("div",{class:"panel-body p-3"},[o("p",null," No. Only the total number of views is tracked as an incremental counter. It is not possible for the repository owner or for Anonymous GitHub to identify individual viewers. Reviewer anonymity is fully preserved. ")])])])]),f(" Self-Hosting "),o("h4",{class:"faq-cat"},[o("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[o("use",{href:"#project-icon-storage"})]),b("Self-Hosting ")]),o("div",{class:"panel-group",id:"faq-hosting",role:"tablist","aria-multiselectable":"true"},[o("div",{class:"panel panel-default mb-3"},[o("div",{class:"panel-heading p-3",role:"tab",id:"headingDeploy"},[o("h3",{class:"panel-title"},[o("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-hosting",href:"#deploy","aria-expanded":"false","aria-controls":"deploy"}," Can I deploy my own instance? ")])]),o("div",{id:"deploy",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingDeploy"},[o("div",{class:"panel-body p-3"},[o("p",null,[b(" Yes. Anonymous GitHub is fully open source (GPL-3.0) and supports Docker-based deployment. You will need to configure a GitHub OAuth app and provide a GitHub token. Detailed setup instructions are available on the "),o("a",{href:"https://github.com/tdurieux/anonymous_github/",target:"_blank"},"GitHub repository"),b(". ")]),o("p",null," The basic steps are: "),o("ol",null,[o("li",null,"Clone the repository and install dependencies"),o("li",null,[b("Create a "),o("code",null,".env"),b(" file with your GitHub token, OAuth client ID, and client secret")]),o("li",null,[b("Run "),o("code",null,"docker-compose up -d")])])])])])]),o("div",{class:"text-center mt-5 mb-5 p-4",style:{"background-color":"var(--hover-bg-color)","border-radius":"8px"}},[o("p",{class:"mb-2",style:{"font-size":"1.1rem"}}," Still have questions? "),o("p",{class:"text-muted mb-0"},[b(" Open an issue on the "),o("a",{href:"https://github.com/tdurieux/anonymous_github/issues",target:"_blank"},"GitHub repository"),b(" and we'll be happy to help. ")])])])])],-1)])])}var y3={class:"pr-page"},g3={class:"container paper-page pr-page-inner"},b3={class:"pr-header"},w3={class:"pr-title-row"},k3={class:"paper-page-title pr-title"},E3=["textContent"],C3={key:1,class:"text-muted"},_3=["href"],S3={class:"pr-header-meta"},N3={key:0,class:"pr-meta-item"},R3=["textContent"],D3={key:1,class:"pr-meta-item"},T3=["textContent"],A3={key:2,class:"pr-meta-item"},O3=["textContent"],I3={key:0,class:"paper-tabs",role:"tablist"},P3=["aria-selected","tabindex"],V3=["textContent"],q3=["aria-selected","tabindex"],M3=["textContent"],U3={class:"paper-tab-content"},$3={key:0,role:"tabpanel",id:"gist-files-panel","aria-labelledby":"gist-files-tab"},L3={class:"pr-comments"},F3={class:"pr-comment"},z3={class:"pr-comment-head"},H3=["textContent"],B3={key:0,class:"pr-comment-date"},j3={key:0,class:"paper-table-empty"},G3={key:1,role:"tabpanel",id:"gist-comments-panel","aria-labelledby":"gist-comments-tab"},W3={class:"pr-comments"},K3={class:"pr-comment"},Y3={class:"pr-comment-head"},J3={key:0,class:"pr-comment-author"},Q3=["textContent"],X3=["textContent"],Z3={key:0,class:"pr-comment-body"},x3={key:0,class:"paper-table-empty"};function Bl(e,t){let n=Ge("gist-file"),r=Ge("markdown");return l(),d("div",y3,[o("div",g3,[t[17]||(t[17]=o("div",{class:"paper-crumbs"},[o("a",{href:"/dashboard"},"Reviewer"),b(" \xA0/\xA0 "),o("span",{class:"here"},"Gist")],-1)),o("header",b3,[o("div",w3,[o("h1",k3,[e.details?.description?(l(),d("span",{key:0,textContent:c(e.details?.description)},null,8,E3)):f("v-if",!0),e.details?.description?f("v-if",!0):(l(),d("span",C3,"Untitled gist"))]),e.options?.isAdmin||e.options?.isOwner?(l(),d("a",{key:0,class:"btn btn-sm","aria-label":"Edit",href:e.safeUrl("/gist-anonymize/"+e.gistId)},[...t[4]||(t[4]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),o("span",{class:"d-none d-md-inline"}," Edit",-1)])],8,_3)):f("v-if",!0)]),o("div",S3,[o("span",{class:A(["paper-pill",{good:e.details?.isPublic,warn:!e.details?.isPublic}])},c(e.details?.isPublic?"Public":"Secret"),3),e.details?.ownerLogin?(l(),d("span",N3,[t[5]||(t[5]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user"})],-1)),t[6]||(t[6]=b(" @",-1)),o("span",{textContent:c(e.details?.ownerLogin)},null,8,R3)])):f("v-if",!0),e.details?.updatedDate?(l(),d("span",D3,[t[7]||(t[7]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),t[8]||(t[8]=b()),o("span",{textContent:c(e.fmt?.date(e.details?.updatedDate))},null,8,T3)])):f("v-if",!0),e.details?.anonymizeDate?(l(),d("span",A3,[t[9]||(t[9]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1)),t[10]||(t[10]=b(" Anonymized ",-1)),o("span",{textContent:c(e.fmt?.date(e.details?.anonymizeDate))},null,8,O3)])):f("v-if",!0)])]),e.details?.files&&e.details?.files?.length||e.details?.comments&&e.details?.comments?.length?(l(),d("nav",I3,[e.details?.files?(l(),d("button",{key:0,class:A(["paper-tab",{active:e.tabState?.active=="files"}]),type:"button",role:"tab",id:"gist-files-tab","aria-selected":e.tabState?.active==="files","aria-controls":"gist-files-panel",tabindex:e.tabState?.active==="files"?0:-1,onKeydown:t[0]||(t[0]=s=>e.previewTabKeydown(s)),onClick:t[1]||(t[1]=s=>e.tabState.active="files")},[t[11]||(t[11]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-type-gist"})],-1)),o("span",{textContent:c(e.fmt.plural(e.details?.files?.length,{0:"No files",one:"1 file",other:"{} files"}))},null,8,V3)],42,P3)):f("v-if",!0),e.details?.comments?(l(),d("button",{key:1,class:A(["paper-tab",{active:e.tabState?.active=="comments"}]),type:"button",role:"tab",id:"gist-comments-tab","aria-selected":e.tabState?.active==="comments","aria-controls":"gist-comments-panel",tabindex:e.tabState?.active==="comments"?0:-1,onKeydown:t[2]||(t[2]=s=>e.previewTabKeydown(s)),onClick:t[3]||(t[3]=s=>e.tabState.active="comments")},[t[12]||(t[12]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-comment"})],-1)),o("span",{textContent:c(e.fmt.plural(e.details?.comments?.length,{0:"No comments",one:"1 comment",other:"{} comments"}))},null,8,M3)],42,q3)):f("v-if",!0)])):f("v-if",!0),o("div",U3,[e.details?.files&&e.tabState?.active=="files"?(l(),d("div",$3,[o("ul",L3,[(l(!0),d(W,null,oe(e.details?.files,(s,i)=>(l(),d("li",F3,[o("div",z3,[o("strong",{textContent:c(s?.filename)},null,8,H3),s?.language?(l(),d("span",B3,c(s?.language),1)):f("v-if",!0)]),Ce(n,{file:s},null,8,["file"])]))),256)),e.details?.files?.length?f("v-if",!0):(l(),d("li",j3,[...t[13]||(t[13]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-file"})],-1),o("span",null,"No files in this gist.",-1)])]))])])):f("v-if",!0),e.details?.comments&&e.tabState?.active=="comments"?(l(),d("div",G3,[o("ul",W3,[(l(!0),d(W,null,oe(e.details?.comments,(s,i)=>(l(),d("li",K3,[o("div",Y3,[s?.author?(l(),d("span",J3,[t[14]||(t[14]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user"})],-1)),t[15]||(t[15]=b(" @",-1)),o("span",{textContent:c(s?.author)},null,8,Q3)])):f("v-if",!0),s?.updatedDate?(l(),d("span",{key:1,class:"pr-comment-date",textContent:c(e.fmt?.date(s?.updatedDate))},null,8,X3)):f("v-if",!0)]),s?.body?(l(),d("div",Z3,[Ce(r,{content:s?.body},null,8,["content"])])):f("v-if",!0)]))),256)),e.details?.comments?.length?f("v-if",!0):(l(),d("li",x3,[...t[16]||(t[16]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-comment"})],-1),o("span",null,"No comments on this gist.",-1)])]))])])):f("v-if",!0)])])])}var eP={class:"collapse navbar-collapse",id:"navbarSupportedContent"},tP={class:"navbar-nav mr-auto smooth-scroll"},oP={key:0,class:"nav-item"},nP={key:1,class:"nav-item"},sP={key:2,class:"nav-item"},rP={key:3,class:"nav-item"},iP={class:"nav-item"},aP={key:4,class:"nav-item"},lP={class:"navbar-nav"},dP={key:0,class:"nav-item"},uP={key:1,class:"nav-item"},cP={key:2,class:"nav-item"},pP={key:3,class:"nav-item"},fP={key:4,class:"nav-item dropdown user-chip-wrap"},mP={class:"nav-link user-chip dropdown-toggle",href:"#",id:"navbarDropdownMenuLink",role:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},hP=["src"],vP={class:"user-chip-name"},yP={class:"dropdown-menu dropdown-menu-right user-menu","aria-labelledby":"navbarDropdownMenuLink"},gP={class:"dropdown-header"},bP=["innerHTML"],wP=["disabled"],kP={key:0,class:"paper-inline-alert paper-inline-alert-error",role:"alert"},EP={class:"email-prompt-actions"},CP=["disabled"],_P=["disabled"],SP=["disabled"];function jl(e,t){return l(),d(W,null,[o("nav",{class:A(["navbar navbar-expand-lg",{"navbar-dark":e.isDarkMode}])},[t[18]||(t[18]=de('Anonymous GitHubSupport',3)),o("div",eP,[o("ul",tP,[e.user?f("v-if",!0):(l(),d("li",oP,[o("a",{class:A(["nav-link",{active:e.path=="/"}]),href:"/"}," Home ",2)])),e.user?(l(),d("li",nP,[o("a",{class:A(["nav-link",{active:e.path=="/dashboard"}]),href:"/dashboard"},[...t[7]||(t[7]=[o("svg",{class:"ui-icon d-lg-none mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-grid"})],-1),b(" My work ",-1)])],2)])):f("v-if",!0),e.user?(l(),d("li",sP,[o("a",{class:A(["nav-link",{active:e.path=="/anonymize"||e.path=="/pull-request-anonymize"}]),href:"/anonymize"},[...t[8]||(t[8]=[o("svg",{class:"ui-icon d-lg-none mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1),b(" Anonymize ",-1)])],2)])):f("v-if",!0),e.user?(l(),d("li",rP,[o("a",{class:A(["nav-link",{active:e.path=="/conferences"}]),href:"/conferences"},[...t[9]||(t[9]=[o("svg",{class:"ui-icon d-lg-none mr-1","aria-hidden":"true"},[o("use",{href:"#project-icon-conference"})],-1),b(" Conferences ",-1)])],2)])):f("v-if",!0),o("li",iP,[o("a",{class:A(["nav-link",{active:e.path=="/faq"}]),href:"/faq"},[...t[10]||(t[10]=[o("svg",{class:"ui-icon d-lg-none mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-help"})],-1),b("FAQ",-1)])],2)]),e.user&&e.user?.isAdmin?(l(),d("li",aP,[o("a",{class:A(["nav-link",{active:e.path?.indexOf("/admin")===0}]),href:"/admin/"},[...t[11]||(t[11]=[o("svg",{class:"ui-icon d-lg-none mr-1","aria-hidden":"true"},[o("use",{href:"#project-icon-filter"})],-1),b(" Admin ",-1)])],2)])):f("v-if",!0)]),o("ul",lP,[e.user||!e.isReviewerRoute?(l(),d("li",dP,[...t[12]||(t[12]=[o("a",{class:"nav-link nav-icon",target:"_blank",href:"https://github.com/tdurieux/anonymous_github/",title:"Anonymous GitHub source code","aria-label":"Anonymous GitHub source code on GitHub",rel:"noopener","data-offset":"30"},[o("i",{class:"fab fa-github","aria-hidden":"true"})],-1)])])):f("v-if",!0),f(` "Report a bug" is about this service. Reviewers who land on an anonymized repository often think it is about the paper, so the - label names the service and the tooltip says who to contact. `),t[17]||(t[17]=o("li",{class:"nav-item d-none d-lg-block"},[o("a",{class:"nav-link",target:"_blank",rel:"noopener",href:"https://github.com/tdurieux/anonymous_github/issues/new?template=issue_report.yml",title:"Report a problem with the Anonymous GitHub service. Questions about an anonymized repository or paper go to its authors.","data-offset":"30"},[o("svg",{class:"ui-icon d-lg-none mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-bug"})]),w("Report a bug ")])],-1)),e.isDarkMode?f("v-if",!0):(l(),d("li",K3,[o("a",{class:"nav-link nav-icon",href:"#",title:"Switch to dark mode","aria-label":"Switch to dark mode",role:"button",onClick:t[0]||(t[0]=ie(n=>{e.darkMode(!0)},["prevent"]))},[...t[13]||(t[13]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-moon"})],-1)])])])),e.isDarkMode?(l(),d("li",Y3,[o("a",{class:"nav-link nav-icon",href:"#",title:"Switch to light mode","aria-label":"Switch to light mode",role:"button",onClick:t[1]||(t[1]=ie(n=>{e.darkMode(!1)},["prevent"]))},[...t[14]||(t[14]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-sun"})],-1)])])])):f("v-if",!0),!e.user&&!e.isReviewerRoute?(l(),d("li",J3,[...t[15]||(t[15]=[o("a",{class:"nav-link btn-signin",target:"_self",href:"/signin","data-offset":"30"},[o("i",{class:"fab fa-github mr-1"}),w(" Sign in ")],-1)])])):f("v-if",!0),e.user?(l(),d("li",Q3,[o("a",X3,[e.user?.photo?(l(),d("img",{key:0,width:"22",height:"22",class:"rounded-circle",src:e.safeUrl(e.user?.photo)},null,8,Z3)):f("v-if",!0),o("span",x3,c(e.user?.username),1)]),o("div",eP,[o("h6",tP,"Signed in as @"+c(e.user?.username),1),t[16]||(t[16]=ue('SettingsDefaults, quotas, accountGitHub connectionsRepository access and OAuthClaim an anonymizationAttach an existing mirror to your accountReport a bugAbout this service, not a paperSource codeSupport the projectSign out',9))])])):f("v-if",!0)])])],2),e.generalMessage?(l(),d("div",{key:0,class:"navbar shadow generalMessage",innerHTML:e.sanitize(e.generalMessage)},null,8,oP)):f("v-if",!0),e.emailPromptOpen?(l(),d("dialog",{key:1,id:"email-prompt",class:"email-prompt","aria-labelledby":"email-prompt-title","aria-describedby":"email-prompt-reason",onCancel:t[6]||(t[6]=ie(n=>e.respondToEmailPrompt("later"),["prevent"]))},[o("form",{onSubmit:t[5]||(t[5]=ie(n=>e.respondToEmailPrompt("save"),["prevent"]))},[t[19]||(t[19]=o("h2",{id:"email-prompt-title"},"Stay informed about access problems",-1)),t[20]||(t[20]=o("p",{id:"email-prompt-reason"},"Get email alerts when your GitHub token or repository access fails.",-1)),t[21]||(t[21]=o("label",{for:"email-prompt-address"},"Email address",-1)),N(o("input",{id:"email-prompt-address",class:"form-control",type:"email",autocomplete:"email",maxlength:"254",required:"","onUpdate:modelValue":t[2]||(t[2]=n=>e.emailPromptAddress=n),disabled:e.emailPromptBusy},null,8,nP),[[zt,e.emailPromptAddress]]),e.emailPromptError?(l(),d("p",sP,c(e.emailPromptError),1)):f("v-if",!0),o("div",rP,[o("button",{type:"button",class:"btn btn-outline-ink",disabled:e.emailPromptBusy,onClick:t[3]||(t[3]=n=>e.respondToEmailPrompt("later"))},"Remind me later",8,iP),o("button",{type:"button",class:"btn btn-outline-ink",disabled:e.emailPromptBusy,onClick:t[4]||(t[4]=n=>e.respondToEmailPrompt("never"))},"Never",8,aP),o("button",{type:"submit",class:"btn btn-ink",disabled:e.emailPromptBusy},c(e.emailPromptBusy?"Saving\u2026":"Save"),9,lP)])],32)],32)):f("v-if",!0)],64)}var dP={class:"paper-landing"},uP={class:"paper-hero"},cP={class:"paper-hero-copy"},pP={class:"paper-cta-row"},fP={key:0,href:"/signin",target:"_self",class:"btn-hero"},mP={key:1,href:"/anonymize",class:"btn-hero"},hP={class:"paper-stats paper-wrap",id:"metrics","aria-label":"Usage over the last 60 days"},vP={class:"paper-stats-grid"},yP={class:"paper-stat-value"},gP={class:"paper-stat-label"},bP=["viewBox"],wP=["x","y","width","height"],kP={key:1,class:"paper-stat-delta"},EP={class:"paper-features paper-wrap","aria-label":"Product features"},CP={class:"paper-features-list",role:"tablist","aria-label":"Features","aria-orientation":"vertical"},_P=["onClick","onKeydown","id","aria-controls","aria-selected","tabindex"],SP={class:"paper-eyebrow"},NP={class:"paper-feature-title"},DP={class:"paper-feature-more"},RP={class:"paper-feature-title paper-feature-title-m","aria-hidden":"true"},TP=["href","target"],AP={class:"paper-features-stage"},OP=["id","aria-labelledby"],IP={class:"paper-frame"},PP={class:"paper-frame-bar","aria-hidden":"true"},VP={class:"url"},qP=["src","alt"],MP={class:"paper-footer"},UP={class:"paper-footer-inner"},$P={class:"paper-footer-col"},LP={key:0,href:"/dashboard"},FP={key:1,href:"/conferences"},zP={class:"paper-footer-foot"};function Gl(e,t){return l(),d("div",dP,[f(" Hero: copy on the left, the product on the right "),o("section",uP,[o("div",cP,[t[2]||(t[2]=o("div",{class:"paper-eyebrow"},"For double-blind peer review",-1)),t[3]||(t[3]=o("h1",{class:"hero-title"},[w(" Share the code,"),o("br"),o("span",{class:"accent"},"not the author.")],-1)),t[4]||(t[4]=o("p",{class:"hero-subtitle"}," Anonymous GitHub makes a read-only mirror of your repository, pull request, or gist. It redacts the terms you choose in text files, so reviewers can browse your artifact through an anonymous link. ",-1)),o("div",pP,[e.user?f("v-if",!0):(l(),d("a",fP,[...t[0]||(t[0]=[o("i",{class:"fab fa-github mr-2","aria-hidden":"true"},null,-1),w("Sign in with GitHub ",-1)])])),e.user?(l(),d("a",mP," Anonymize a repository \u2192 ")):f("v-if",!0),t[1]||(t[1]=o("a",{class:"paper-link-arrow",target:"_self",href:"https://anonymous.4open.science/r/840c8c57-3c32-451e-bf12-0e20be300389/"},"See an anonymized repository \u2192",-1))]),t[5]||(t[5]=o("ul",{class:"paper-reassure"},[o("li",null,"Free and open source"),o("li",null,"Read-only: never writes to your repos"),o("li",null,"Expires on the date you set")],-1))]),t[6]||(t[6]=ue('
A reviewer preview with the author, affiliation, and email replaced by anonymous terms
',1))]),f(" Proof "),t[16]||(t[16]=ue('
Trusted by authors at
ICSEFSEOOPSLA
',1)),f(" Live stats "),o("section",hP,[t[7]||(t[7]=o("div",{class:"paper-stats-meta"},[o("div",{class:"paper-stats-meta-left"},"Live \xB7 last 60 days"),o("div",{class:"paper-stats-meta-right"},[o("span",{class:"paper-stats-dot","aria-hidden":"true"}),w(" updated daily ")])],-1)),o("div",vP,[(l(!0),d(K,null,oe(e.cards,(n,r)=>(l(),d("div",{class:"paper-stat-card",key:n?.key},[o("div",yP,c(e.fmt?.bigNum(n?.total)),1),o("div",gP,c(n?.label),1),e.history[n?.key].bars?.length>1?(l(),d("svg",{key:0,class:"paper-stat-bars",preserveAspectRatio:"none","aria-hidden":"true",viewBox:"0 0 "+e.history[n?.key].viewW+" 36"},[(l(!0),d(K,null,oe(e.history[n?.key].bars,(s,i)=>(l(),d("rect",{key:i,class:A({"is-latest":i===e.history[n.key].bars.length-1}),x:s?.x,y:s?.y,width:s?.w,height:s?.h},null,10,wP))),128))],8,bP)):f("v-if",!0),e.history[n?.key].bars?.length>1?(l(),d("div",kP," +"+c(e.fmt?.number(e.history[n?.key].deltaToday))+" today ",1)):f("v-if",!0)]))),128))])]),f(" Before / after "),t[17]||(t[17]=o("section",{class:"paper-section-head paper-wrap"},[o("div",null,[o("div",{class:"paper-eyebrow"},"Before \xB7 after"),o("h2",null,[w("The same repository, "),o("em",null,"minus you.")])]),o("p",null," Names, affiliations, emails, and any term you list are replaced across the README, source files, notebooks, and PDF links. Reviewers browse the real thing, not a zip. ")],-1)),t[18]||(t[18]=o("div",{class:"paper-preview paper-wrap","aria-label":"Before and after example"},[o("div",{class:"pane"},[o("div",{class:"pane-header"},[o("span",{class:"pane-label"},"Before \xB7 your repo"),o("span",{class:"pane-url"},"github.com/jane-smith/DeepLearnUtils")]),o("div",{class:"pane-body"},[o("div",null,[o("span",{class:"tok"},"#"),w(),o("strong",null,"DeepLearnUtils")]),o("div",null,"Developed by Jane Smith at MIT CSAIL."),o("div",null,"See Smith et\xA0al., \u201CAttention That Works,\u201D 2026."),o("div",null,"Contact: jane.smith@mit.edu")])]),o("div",{class:"pane"},[o("div",{class:"pane-header"},[o("span",{class:"pane-label"},"After \xB7 anonymous mirror"),o("span",{class:"pane-url"},"anonymous.4open.science/r/paper-7f2a")]),o("div",{class:"pane-body"},[o("div",null,[o("span",{class:"tok"},"#"),w(),o("strong",null,"DeepLearnUtils")]),o("div",null,[w("Developed by "),o("span",{class:"redact",role:"img","aria-label":"redacted author name"},"XXXX-1"),w(" at "),o("span",{class:"redact",role:"img","aria-label":"redacted affiliation"},"XXXX-2"),w(".")]),o("div",null,[w("See "),o("span",{class:"redact",role:"img","aria-label":"redacted author name"},"XXXX-1"),w(" et\xA0al., \u201CAttention That Works,\u201D 2026.")]),o("div",null,[w("Contact: "),o("span",{class:"redact",role:"img","aria-label":"redacted email address"},"XXXX-3")])])])],-1)),f(" What you get: one screenshot, three tabs "),t[19]||(t[19]=o("section",{class:"paper-section-head paper-wrap",id:"about"},[o("div",null,[o("div",{class:"paper-eyebrow"},"What you get"),o("h2",null,[w("Anonymize, review, "),o("em",null,"manage.")])]),o("p",null," Terms are redacted in text files. Enabled images and PDFs are served unchanged, so review them for identifying content before sharing. Monitor your mirror, update it, or remove it when the review is over. ")],-1)),o("section",EP,[o("div",CP,[(l(!0),d(K,null,oe(e.features,(n,r)=>(l(),d("div",{class:A(["paper-feature",{"is-on":e.feature===n?.key}]),key:n?.key},[o("button",{type:"button",class:"paper-feature-tab",role:"tab",onClick:s=>e.selectFeature(n.key),onKeydown:s=>e.featureKeydown(s,r),id:"feature-tab-"+n?.key,"aria-controls":"feature-panel-"+n?.key,"aria-selected":e.feature===n?.key,tabindex:e.feature===n?.key?0:-1},[o("span",SP,c(n?.num)+" \xB7 "+c(n?.eyebrow),1),o("span",NP,[w(c(n?.title)+" ",1),o("em",null,c(n?.accent),1)])],40,_P),o("div",DP,[o("span",RP,[w(c(n?.title)+" ",1),o("em",null,c(n?.accent),1)]),o("p",null,c(n?.text),1),o("a",{class:"paper-link-arrow",href:e.safeUrl(e.featureHref(n)),target:e.featureTarget(n)},c(n?.cta)+" \u2192",9,TP)])],2))),128))]),o("div",AP,[(l(!0),d(K,null,oe(e.features,(n,r)=>N((l(),d("div",{class:"paper-feature-panel",role:"tabpanel",key:n?.key,id:"feature-panel-"+n?.key,"aria-labelledby":"feature-tab-"+n?.key},[o("div",IP,[o("div",PP,[t[8]||(t[8]=o("span",{class:"dots"},[o("i"),o("i"),o("i")],-1)),o("span",VP,c(n?.url),1)]),o("div",{class:A("paper-crop paper-crop-"+n?.key)},[o("img",{loading:"lazy",width:"2880",height:"1800",src:e.safeUrl(n?.img),alt:n?.alt},null,8,qP)],2)])],8,OP)),[[j,e.feature===n?.key]])),128))])]),f(" FAQ teaser "),t[20]||(t[20]=ue('
Before you sign in

The questions that come up most.

Read the full FAQ \u2192
What access does GitHub sign-in require?

The GitHub App has read-only access to gists and the repositories you choose. Legacy OAuth uses broader permissions. Anonymous GitHub never writes to your repositories.

Which file formats are supported?

Source code with syntax highlighting, Markdown, Jupyter notebooks, PDFs, images, and GitHub Pages sites. Text files are anonymized; enabled images and PDFs are served unchanged.

What happens when an anonymized repository expires?

You choose: the mirror is removed, or visitors are redirected to the original GitHub repository once the review is over.

',1)),o("footer",MP,[o("div",UP,[t[12]||(t[12]=o("div",{class:"paper-footer-brand"},[o("div",{class:"paper-footer-mark"},[w("Anonymous "),o("em",null,"GitHub")]),o("p",{class:"paper-footer-tag"}," A read-only, identity-stripped mirror of your repository, built for double-anonymous peer review. ")],-1)),o("div",$P,[t[9]||(t[9]=o("div",{class:"paper-footer-head"},"Product",-1)),t[10]||(t[10]=o("a",{href:"/anonymize"},"Anonymize",-1)),e.user?(l(),d("a",LP,"My work")):f("v-if",!0),e.user?(l(),d("a",FP,"Conferences")):f("v-if",!0),t[11]||(t[11]=o("a",{href:"/faq"},"FAQ",-1))]),t[13]||(t[13]=ue('',2))]),t[15]||(t[15]=o("div",{class:"paper-footer-rule"},null,-1)),o("div",zP,[o("span",null,"\xA9 "+c(e.year||2026)+" Anonymous GitHub \xB7 GPL-3.0 licensed",1),t[14]||(t[14]=o("span",{class:"paper-footer-meta"},"Built for reviewers, by researchers.",-1))])])])}var HP={class:"paper-empty"},BP={class:"paper-empty-inner"},jP={key:0,class:"paper-eyebrow"},GP={key:1,class:"paper-eyebrow"},WP={key:2,class:"paper-empty-title"},KP=["textContent"];function Wl(e,t){return l(),d("div",HP,[o("div",BP,[e.error?f("v-if",!0):(l(),d("div",jP,"Working")),e.error?(l(),d("div",GP,"Error")):f("v-if",!0),e.error?f("v-if",!0):(l(),d("h1",WP,[...t[0]||(t[0]=[w(" Loading",-1),o("span",{class:"dot-anim"},"\u2026",-1)])])),e.error?(l(),d("h1",{key:3,class:"paper-empty-title",textContent:c(e.fmt.translate(e.error))},null,8,KP)):f("v-if",!0)])])}var YP={class:"container paper-page paper-settings"},JP={class:"paper-crumbs"},QP={class:"here"},XP={class:"paper-page-title"},ZP={class:"paper-settings-body"},xP={class:"paper-settings-toc"},eV={href:"#conf-billing"},tV={class:"form needs-validation paper-settings-main",name:"conference",novalidate:""},oV={id:"conf-basics",class:"paper-settings-section"},nV={class:"form-group"},sV={class:"invalid-feedback"},rV={class:"invalid-feedback"},iV={class:"form-group"},aV={class:"invalid-feedback"},lV={class:"form-group"},dV={class:"invalid-feedback"},uV={class:"invalid-feedback"},cV={id:"conf-window",class:"paper-settings-section"},pV={class:"form-grid-2"},fV={class:"form-group"},mV={class:"invalid-feedback"},hV={class:"invalid-feedback"},vV={class:"form-group"},yV={class:"invalid-feedback"},gV={class:"invalid-feedback"},bV={id:"conf-rendering",class:"paper-settings-section"},wV={class:"form-check"},kV={class:"form-check-input",type:"checkbox",id:"link",name:"link"},EV={class:"form-check"},CV={class:"form-check-input",type:"checkbox",id:"image",name:"image"},_V={class:"form-check"},SV={class:"form-check-input",type:"checkbox",id:"pdf",name:"pdf"},NV={class:"form-check"},DV={class:"form-check-input",type:"checkbox",id:"notebook",name:"notebook"},RV={id:"conf-features",class:"paper-settings-section"},TV={class:"form-check"},AV={class:"form-check-input",type:"checkbox",id:"update",name:"update"},OV={class:"form-check"},IV={class:"form-check-input",type:"checkbox",id:"page",name:"page"},PV={id:"conf-plan",class:"paper-settings-section"},VV={class:"paper-plan-grid"},qV=["value"],MV=["textContent"],UV={class:"paper-plan-price"},$V=["innerHTML"],LV={key:0,id:"conf-billing",class:"paper-settings-section"},FV={class:"form-group"},zV={class:"form-group"},HV={class:"form-group"},BV={class:"form-group"},jV={class:"form-grid-3"},GV={class:"form-group"},WV={class:"form-group"},KV={class:"form-group"},YV={class:"form-group"},JV={class:"paper-settings-footer"},QV=["textContent"],XV=["textContent"],ZV=["disabled"];function Kl(e,t){let n=ve("paper-scrollspy"),r=ve("field"),s=ve("form");return l(),d("div",YP,[o("div",JP,[t[1]||(t[1]=o("a",{href:"/dashboard"},"My work",-1)),t[2]||(t[2]=w(" \xA0/\xA0 ",-1)),t[3]||(t[3]=o("a",{href:"/conferences"},"Conferences",-1)),t[4]||(t[4]=w(" \xA0/\xA0 ",-1)),o("span",QP,c(e.editionMode?"Edit":"New"),1)]),o("h1",XP,[w(c(e.editionMode?"Edit":"Create a")+" ",1),t[5]||(t[5]=o("em",null,"conference",-1))]),t[43]||(t[43]=o("p",{class:"paper-page-lede"}," Give chairs access to every anonymization submitted to a venue, and lift author quotas during the review window. ",-1)),o("div",ZP,[N((l(),d("aside",xP,[t[7]||(t[7]=o("div",{class:"paper-settings-toc-head"},"On this page",-1)),o("nav",null,[t[6]||(t[6]=ue('BasicsReview windowRendering defaultsFeaturesPlan',5)),N(o("a",eV,"Billing",512),[[j,e.plan?.pricePerRepo>0]])])])),[[n]]),N((l(),d("form",tV,[o("section",oV,[t[12]||(t[12]=o("div",{class:"paper-section-eyebrow"},"Basics",-1)),o("div",nV,[t[8]||(t[8]=o("label",{class:"paper-field-label",for:"name"},"Conference name",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.name?.invalid&&(e.conference?.name?.touched||e.conference?.submitted)}]),name:"name",id:"name",required:"",placeholder:"e.g. International Conference on Software Engineering"},null,2),[[r,{state:e.viewState,set:i=>{e.options.name=i},value:e.options?.name,form:"conference",options:{}}]]),N(o("div",sV," The name of the conference is invalid. ",512),[[j,e.conference?.name?.errors?.invalid]]),N(o("div",rV," The name of the conference is required. ",512),[[j,e.conference?.name?.errors?.required]])]),o("div",iV,[t[9]||(t[9]=o("label",{class:"paper-field-label",for:"url"},"Website",-1)),N(o("input",{type:"url",class:A(["form-control",{"is-invalid":e.conference?.url?.invalid&&(e.conference?.url?.touched||e.conference?.submitted)}]),name:"url",id:"url",placeholder:"https://example.org"},null,2),[[r,{state:e.viewState,set:i=>{e.options.url=i},value:e.options?.url,form:"conference",options:{}}]]),N(o("div",aV," The url of the conference is invalid. ",512),[[j,e.conference?.url?.errors?.url]])]),o("div",lV,[t[10]||(t[10]=o("label",{class:"paper-field-label",for:"conferenceID"},"Conference ID",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.conferenceID?.invalid&&(e.conference?.conferenceID?.touched||e.conference?.submitted)}]),name:"conferenceID",id:"conferenceID",required:"",pattern:"[a-zA-Z0-9\\-_]{3,10}",placeholder:"ICSE26"},null,2),[[r,{state:e.viewState,set:i=>{e.options.conferenceID=i},value:e.options?.conferenceID,form:"conference",options:{}}]]),t[11]||(t[11]=o("small",{class:"form-text text-muted"},[w("3\u201310 characters, letters, numbers, "),o("code",null,"-"),w(" and "),o("code",null,"_"),w(". Authors reference this when they anonymize.")],-1)),N(o("div",{class:"invalid-feedback"}," The conference ID '"+c(e.options?.conferenceID)+"' is already used. ",513),[[j,e.conference?.conferenceID?.errors?.used]]),N(o("div",dV," The conference ID is required. ",512),[[j,e.conference?.conferenceID?.errors?.required]]),N(o("div",uV," The format of the conference ID is incorrect ([a-zA-Z0-9-_]{3,10}). ",512),[[j,e.conference?.conferenceID?.errors?.pattern]])])]),o("section",cV,[t[17]||(t[17]=o("div",{class:"paper-section-eyebrow"},"Review window",-1)),o("div",pV,[o("div",fV,[t[13]||(t[13]=o("label",{class:"paper-field-label",for:"startDate"},"Start date",-1)),N(o("input",{type:"date",class:A(["form-control",{"is-invalid":e.conference?.startDate?.invalid&&(e.conference?.startDate?.touched||e.conference?.submitted)}]),name:"startDate",id:"startDate",required:""},null,2),[[r,{state:e.viewState,set:i=>{e.options.startDate=i},value:e.options?.startDate,form:"conference",options:{}}]]),t[14]||(t[14]=o("small",{class:"form-text text-muted"},"Beginning of the review process.",-1)),N(o("div",mV," Start date is required. ",512),[[j,e.conference?.startDate?.errors?.required]]),N(o("div",hV," Start date must be before end date. ",512),[[j,e.conference?.startDate?.errors?.invalid]])]),o("div",vV,[t[15]||(t[15]=o("label",{class:"paper-field-label",for:"endDate"},"End date",-1)),N(o("input",{type:"date",class:A(["form-control",{"is-invalid":e.conference?.endDate?.invalid&&(e.conference?.endDate?.touched||e.conference?.submitted)}]),name:"endDate",id:"endDate",required:""},null,2),[[r,{state:e.viewState,set:i=>{e.options.endDate=i},value:e.options?.endDate,form:"conference",options:{}}]]),t[16]||(t[16]=o("small",{class:"form-text text-muted"},"All repositories expire on this date.",-1)),N(o("div",yV," End date is required. ",512),[[j,e.conference?.endDate?.errors?.required]]),N(o("div",gV," End date is invalid. ",512),[[j,e.conference?.endDate?.errors?.invalid]])])])]),o("section",bV,[t[26]||(t[26]=o("div",{class:"paper-section-eyebrow"},"Rendering defaults",-1)),o("div",wV,[N(o("input",kV,null,512),[[r,{state:e.viewState,set:i=>{e.options.options.link=i},value:e.options?.options?.link,form:"conference",options:{}}]]),t[18]||(t[18]=o("label",{class:"form-check-label",for:"link"},"Keep links",-1)),t[19]||(t[19]=o("small",{class:"form-text text-muted"},"Keep or remove all links from text files.",-1))]),o("div",EV,[N(o("input",CV,null,512),[[r,{state:e.viewState,set:i=>{e.options.options.image=i},value:e.options?.options?.image,form:"conference",options:{}}]]),t[20]||(t[20]=o("label",{class:"form-check-label",for:"image"},"Display images",-1)),t[21]||(t[21]=o("small",{class:"form-text text-muted"},"Images are not anonymized.",-1))]),o("div",_V,[N(o("input",SV,null,512),[[r,{state:e.viewState,set:i=>{e.options.options.pdf=i},value:e.options?.options?.pdf,form:"conference",options:{}}]]),t[22]||(t[22]=o("label",{class:"form-check-label",for:"pdf"},"Display PDFs",-1)),t[23]||(t[23]=o("small",{class:"form-text text-muted"},"PDFs are not anonymized.",-1))]),o("div",NV,[N(o("input",DV,null,512),[[r,{state:e.viewState,set:i=>{e.options.options.notebook=i},value:e.options?.options?.notebook,form:"conference",options:{}}]]),t[24]||(t[24]=o("label",{class:"form-check-label",for:"notebook"},"Display notebooks",-1)),t[25]||(t[25]=o("small",{class:"form-text text-muted"},"Render Jupyter notebooks instead of raw JSON.",-1))])]),o("section",RV,[t[31]||(t[31]=o("div",{class:"paper-section-eyebrow"},"Features",-1)),o("div",TV,[N(o("input",AV,null,512),[[r,{state:e.viewState,set:i=>{e.options.options.update=i},value:e.options?.options?.update,form:"conference",options:{}}]]),t[27]||(t[27]=o("label",{class:"form-check-label",for:"update"},"Auto-update from GitHub",-1)),t[28]||(t[28]=o("small",{class:"form-text text-muted"},"Pull the latest commit automatically (hourly maximum).",-1))]),o("div",OV,[N(o("input",IV,null,512),[[r,{state:e.viewState,set:i=>{e.options.options.page=i},value:e.options?.options?.page,form:"conference",options:{}}]]),t[29]||(t[29]=o("label",{class:"form-check-label",for:"page"},"GitHub Pages",-1)),t[30]||(t[30]=o("small",{class:"form-text text-muted"},"Enable anonymized GitHub pages.",-1))])]),o("section",PV,[t[33]||(t[33]=o("div",{class:"paper-section-eyebrow"},"Plan",-1)),t[34]||(t[34]=o("p",{class:"paper-section-copy"},"Billed per repository per month, prorated by the day for as long as a repository stays in the conference.",-1)),o("div",VV,[(l(!0),d(K,null,oe(e.plans,(i,a)=>(l(),d("label",{class:A(["paper-plan-card",{selected:e.options?.plan?.planID==i?.id}])},[N(o("input",{type:"radio",name:"planPicker",value:i?.id},null,8,qV),[[r,{state:e.viewState,set:u=>{e.options.plan.planID=u},value:e.options?.plan?.planID,form:"conference",options:{}}]]),o("div",{class:"paper-plan-head",textContent:c(i?.name)},null,8,MV),o("div",UV,[w(c(e.fmt?.number(i?.pricePerRepo))+"\u20AC ",1),t[32]||(t[32]=o("span",{class:"paper-plan-per"},"/ repo / month",-1))]),o("div",{class:"paper-plan-desc",innerHTML:e.sanitize(i?.description)},null,8,$V)],2))),256))])]),e.plan?.pricePerRepo>0?(l(),d("section",LV,[t[42]||(t[42]=o("div",{class:"paper-section-eyebrow"},"Billing",-1)),o("div",FV,[t[35]||(t[35]=o("label",{class:"paper-field-label",for:"billing_name"},"Name",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.billing_name?.invalid&&(e.conference?.billing_name?.touched||e.conference?.submitted)}]),name:"billing_name",id:"billing_name",required:"",placeholder:"First & last name"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.name=i},value:e.options?.billing?.name,form:"conference",options:{}}]])]),o("div",zV,[t[36]||(t[36]=o("label",{class:"paper-field-label",for:"email"},"Email",-1)),N(o("input",{type:"email",class:A(["form-control",{"is-invalid":e.conference?.email?.invalid&&(e.conference?.email?.touched||e.conference?.submitted)}]),name:"email",id:"email",required:"",placeholder:"you@example.org"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.email=i},value:e.options?.billing?.email,form:"conference",options:{}}]])]),o("div",HV,[t[37]||(t[37]=o("label",{class:"paper-field-label",for:"inputAddress"},"Address",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.inputAddress?.invalid&&(e.conference?.inputAddress?.touched||e.conference?.submitted)}]),name:"inputAddress",id:"inputAddress",required:"",placeholder:"1234 Main St"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.address=i},value:e.options?.billing?.address,form:"conference",options:{}}]])]),o("div",BV,[N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.inputAddress2?.invalid&&(e.conference?.inputAddress2?.touched||e.conference?.submitted)}]),name:"inputAddress2",id:"inputAddress2",placeholder:"Apartment, studio, or floor"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.address2=i},value:e.options?.billing?.address2,form:"conference",options:{}}]])]),o("div",jV,[o("div",GV,[t[38]||(t[38]=o("label",{class:"paper-field-label",for:"city"},"City",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.city?.invalid&&(e.conference?.city?.touched||e.conference?.submitted)}]),name:"city",id:"city",required:"",placeholder:"City"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.city=i},value:e.options?.billing?.city,form:"conference",options:{}}]])]),o("div",WV,[t[39]||(t[39]=o("label",{class:"paper-field-label",for:"country"},"Country",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.country?.invalid&&(e.conference?.country?.touched||e.conference?.submitted)}]),name:"country",id:"country",required:"",placeholder:"Country"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.country=i},value:e.options?.billing?.country,form:"conference",options:{}}]])]),o("div",KV,[t[40]||(t[40]=o("label",{class:"paper-field-label",for:"zip"},"Zip",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.zip?.invalid&&(e.conference?.zip?.touched||e.conference?.submitted)}]),name:"zip",id:"zip",required:"",placeholder:"Zip"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.zip=i},value:e.options?.billing?.zip,form:"conference",options:{}}]])])]),o("div",YV,[t[41]||(t[41]=o("label",{class:"paper-field-label",for:"vat"},"VAT number",-1)),N(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.vat?.invalid&&(e.conference?.vat?.touched||e.conference?.submitted)}]),name:"vat",id:"vat",placeholder:"VAT Number"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.vat=i},value:e.options?.billing?.vat,form:"conference",options:{}}]])])])):f("v-if",!0),o("div",JV,[e.error?(l(),d("div",{key:0,class:"alert alert-danger",role:"alert",textContent:c(e.error)},null,8,QV)):f("v-if",!0),e.message?(l(),d("div",{key:1,class:"alert alert-success",role:"alert",textContent:c(e.message)},null,8,XV)):f("v-if",!0),o("button",{id:"send",disabled:e.saving,type:"submit",class:"btn btn-ink",onClick:t[0]||(t[0]=ie(i=>e.submitForm(i,()=>{e.submit(i)}),["prevent"]))},c(e.saving?e.editionMode?"Updating\u2026":"Creating\u2026":e.editionMode?"Update conference":"Create conference"),9,ZV)])])),[[s,e.viewState]])])])}var xV={key:0},e5=["innerHTML"],t5={key:3},o5=["src"],n5=["src"],s5={key:7},r5={controls:"controls"},i5=["src"],a5={key:8},l5={key:9,class:"file-error container d-flex h-100"},d5={class:"paper-ratelimit-card m-auto",style:{"max-width":"520px"}},u5={class:"paper-error-msg"},c5={key:10,class:"file-error container d-flex h-100"},p5={class:"viewer-error paper-error-card file-error-card m-auto",role:"alert","aria-labelledby":"viewer-error-title"},f5={id:"viewer-error-title",class:"paper-empty-title"},m5={class:"paper-error-actions"},h5={key:0,href:"/",class:"btn btn-sm"},v5={key:1,href:"/faq",class:"btn btn-sm"},y5={key:2,class:"btn btn-outline-ink",href:"/dashboard"},g5={key:11,class:"file-error container d-flex h-100"},b5={key:12,class:"file-error container d-flex h-100"},w5={key:13,class:"file-error container d-flex h-100"},k5={key:14,class:"file-error container d-flex h-100"},E5={class:"paper-empty-title m-auto"},C5=["href"];function Yl(e,t){let n=Ge("html-doc"),r=Ge("pdfviewer"),s=Ge("notebook"),i=ve("code-editor");return l(),d(K,null,[e.type=="text"?N((l(),d("div",xV,null,512)),[[i,{content:e.content,options:e.aceOption}]]):f("v-if",!0),e.type=="html"?(l(),d("div",{key:1,class:"file-content markdown-body",innerHTML:e.highlightRedactions(e.sanitize(e.content))},null,8,e5)):f("v-if",!0),e.type=="html-doc"&&!e.showSource&&e.content!=null?(l(),Lt(n,{key:2,content:e.content,"base-url":e.fileBaseUrl,"allow-scripts":e.allowScripts},null,8,["content","base-url","allow-scripts"])):f("v-if",!0),(e.type=="code"||e.type=="html-doc"&&e.showSource)&&e.content!=null?N((l(),d("div",t5,null,512)),[[i,{content:e.content,options:e.aceOption}]]):f("v-if",!0),e.type=="image"?(l(),d("img",{key:4,class:"image-content",src:e.safeUrl(e.url)},null,8,o5)):f("v-if",!0),e.type=="media"?(l(),d("iframe",{key:5,class:"h-100 overflow-auto w-100 b-0",src:e.safeUrl(e.url)},null,8,n5)):f("v-if",!0),e.type=="pdf"?(l(),Lt(r,{key:6,src:e.safeUrl(e.url)},null,8,["src"])):f("v-if",!0),e.type=="audio"?(l(),d("div",s5,[o("audio",r5,[o("source",{src:e.safeUrl(e.url)},null,8,i5)])])):f("v-if",!0),e.type=="IPython"?(l(),d("div",a5,[Ce(s,{file:e.url,content:e.content},null,8,["file","content"])])):f("v-if",!0),e.type=="rate_limited"?(l(),d("div",l5,[o("div",d5,[t[3]||(t[3]=ue('
Temporarily paused
GitHub API rate limit reached
',1)),o("p",u5,[t[1]||(t[1]=w("This repository will be available in ",-1)),o("strong",null,c(e.rateLimitCountdown),1),t[2]||(t[2]=w(". The page will reload automatically.",-1))])])])):f("v-if",!0),e.type=="error"?(l(),d("div",c5,[o("section",p5,[o("h1",f5,c(e.fmt.translate(e.isSourceAccessError()?"VIEWER_ERRORS.access_title":"VIEWER_ERRORS.title")),1),o("p",null,c(e.fmt.translate("ERRORS."+e.content)),1),e.isSourceAccessError()?(l(),d(K,{key:0},[o("p",null,c(e.fmt.translate("VIEWER_ERRORS.reader_help")),1),o("p",null,c(e.fmt.translate("VIEWER_ERRORS.owner_help")),1)],64)):f("v-if",!0),o("div",m5,[e.isSourceAccessError()?f("v-if",!0):(l(),d("a",h5,"Back to home")),e.isSourceAccessError()?f("v-if",!0):(l(),d("a",v5,"Read the FAQ")),o("button",{type:"button",class:"btn btn-primary",onClick:t[0]||(t[0]=a=>e.retryContent())},c(e.fmt.translate("VIEWER_ERRORS.retry")),1),e.isSourceAccessError()?(l(),d("a",y5,c(e.fmt.translate("VIEWER_ERRORS.dashboard")),1)):f("v-if",!0)])])])):f("v-if",!0),e.type=="loading"&&!e.error?(l(),d("div",g5,[...t[4]||(t[4]=[o("h1",{class:"paper-empty-title m-auto"},"Loading\u2026",-1)])])):f("v-if",!0),e.type=="empty"?(l(),d("div",b5,[...t[5]||(t[5]=[o("h1",{class:"paper-empty-title m-auto"},[w("Empty "),o("em",null,"repository"),w(".")],-1)])])):f("v-if",!0),e.content==null&&e.type!="empty"?(l(),d("div",w5,[...t[6]||(t[6]=[o("h1",{class:"paper-empty-title m-auto"},[w("Empty "),o("em",null,"file"),w(".")],-1)])])):f("v-if",!0),e.type=="binary"?(l(),d("div",k5,[o("h1",E5,[t[7]||(t[7]=w("Unsupported ",-1)),t[8]||(t[8]=o("em",null,"binary file",-1)),t[9]||(t[9]=w(". You can ",-1)),o("a",{target:"_blank",href:e.safeUrl(e.url+"&download=true")},"download it",8,C5),t[10]||(t[10]=w(".",-1))])])):f("v-if",!0)],64)}var _5={class:"container page dashboard-page paper-page"},S5={class:"row"},N5={class:"w-100"},D5={class:"w-100","aria-label":"Pull Requests","accept-charset":"UTF-8"},R5={class:"d-flex flex-column flex-md-row align-items-md-center",style:{gap:"8px"}},T5={class:"flex-grow-1"},A5={type:"search",id:"search",class:"form-control","aria-label":"Find a pull request...",placeholder:"Find a pull request...",autocomplete:"off"},O5={class:"d-flex flex-wrap",style:{gap:"6px"}},I5={class:"dropdown"},P5={class:"dropdown-menu","aria-labelledby":"dropdownSort"},V5={class:"form-check dropdown-item"},q5={class:"form-check-input",type:"radio",name:"sort",id:"sortFullName",value:"fullName"},M5={class:"form-check dropdown-item"},U5={class:"form-check-input",type:"radio",name:"sort",id:"sortAnonymizeDate",value:"-anonymizeDate"},$5={class:"form-check dropdown-item"},L5={class:"form-check-input",type:"radio",name:"sort",id:"sortStatus",value:"-status"},F5={class:"form-check dropdown-item"},z5={class:"form-check-input",type:"radio",name:"sort",id:"sortLastView",value:"-lastView"},H5={class:"form-check dropdown-item"},B5={class:"form-check-input",type:"radio",name:"sort",id:"sortPageView",value:"-pageView"},j5={class:"dropdown"},G5={class:"dropdown-menu","aria-labelledby":"dropdownStatus"},W5={class:"form-check dropdown-item"},K5={class:"form-check-input",type:"checkbox",name:"sort",id:"statusReady",value:"ready"},Y5={class:"form-check dropdown-item"},J5={class:"form-check-input",type:"checkbox",name:"sort",id:"statusExpired",value:"expired"},Q5={class:"form-check dropdown-item"},X5={class:"form-check-input",type:"checkbox",name:"sort",id:"statusRemoved",value:"removed"},Z5={class:"d-flex flex-wrap mt-2",style:{gap:"6px"}},x5={class:"filter-chip"},eq=["onClick"],tq={class:"repo-list w-100"},oq={class:"repo-list-item-content"},nq={class:"repo-list-item-main"},sq={class:"repo-list-item-header"},rq=["textContent","href"],iq=["textContent"],aq=["textContent"],lq={class:"repo-source"},dq=["href"],uq={class:"repo-date"},cq={class:"repo-meta"},pq={key:0,title:"Conference"},fq=["title"],mq=["title"],hq=["title"],vq={key:1},yq={class:"repo-list-item-actions"},gq={class:"dropdown"},bq={class:"dropdown-menu dropdown-menu-right"},wq=["href"],kq=["onClick"],Eq=["onClick"],Cq=["onClick"],_q=["href"],Sq={key:0,class:"repo-list-empty"};function Jl(e,t){let n=ve("field"),r=ve("form");return l(),d("div",_5,[o("div",S5,[o("div",N5,[t[12]||(t[12]=ue('
My work \xA0/\xA0 Pull requests

Anonymized pull requests

Track PR mirrors you\u2019ve created and their reviewer traffic.

',2)),f(" Search + filters row "),N((l(),d("form",D5,[o("div",R5,[o("div",T5,[N(o("input",A5,null,512),[[n,{state:e.viewState,set:s=>{e.search=s},value:e.search,form:null,options:{}}]])]),o("div",O5,[o("div",I5,[t[6]||(t[6]=o("button",{class:"btn btn-sm dropdown-toggle",type:"button",id:"dropdownSort","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"}," Sort ",-1)),o("div",P5,[t[5]||(t[5]=o("h6",{class:"dropdown-header"},"Select order",-1)),o("div",V5,[N(o("input",q5,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[0]||(t[0]=o("label",{class:"form-check-label",for:"sortFullName"},"Pull Request",-1))]),o("div",M5,[N(o("input",U5,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[1]||(t[1]=o("label",{class:"form-check-label",for:"sortAnonymizeDate"},"Anonymize Date",-1))]),o("div",$5,[N(o("input",L5,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[2]||(t[2]=o("label",{class:"form-check-label",for:"sortStatus"},"Status",-1))]),o("div",F5,[N(o("input",z5,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[3]||(t[3]=o("label",{class:"form-check-label",for:"sortLastView"},"Last View",-1))]),o("div",H5,[N(o("input",B5,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[4]||(t[4]=o("label",{class:"form-check-label",for:"sortPageView"},"Page View",-1))])])]),o("div",j5,[t[11]||(t[11]=o("button",{class:"btn btn-sm dropdown-toggle",type:"button",id:"dropdownStatus","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"}," Status ",-1)),o("div",G5,[t[10]||(t[10]=o("h6",{class:"dropdown-header"},"Select status",-1)),o("div",W5,[N(o("input",K5,null,512),[[n,{state:e.viewState,set:s=>{e.filters.status.ready=s},value:e.filters?.status?.ready,form:null,options:{}}]]),t[7]||(t[7]=o("label",{class:"form-check-label",for:"statusReady"},"Ready",-1))]),o("div",Y5,[N(o("input",J5,null,512),[[n,{state:e.viewState,set:s=>{e.filters.status.expired=s},value:e.filters?.status?.expired,form:null,options:{}}]]),t[8]||(t[8]=o("label",{class:"form-check-label",for:"statusExpired"},"Expired",-1))]),o("div",Q5,[N(o("input",X5,null,512),[[n,{state:e.viewState,set:s=>{e.filters.status.removed=s},value:e.filters?.status?.removed,form:null,options:{}}]]),t[9]||(t[9]=o("label",{class:"form-check-label",for:"statusRemoved"},"Removed",-1))])])])])])])),[[r,e.viewState]]),f(" Active filter chips "),N(o("div",Z5,[(l(!0),d(K,null,oe(e.filters?.status,(s,i,a)=>N((l(),d("span",x5,[w(c(e.fmt?.title(i))+" ",1),o("button",{type:"button",class:"filter-chip-close","aria-label":"Remove filter",onClick:u=>{e.filters.status[i]=!0}}," \xD7 ",8,eq)],512)),[[j,!s]])),256))],512),[[j,e.filters?.status?.ready===!1||e.filters?.status?.expired===!1||e.filters?.status?.removed===!1]])]),f(" Pull request list "),o("ul",tq,[(l(!0),d(K,null,oe(e.filteredPullRequests,(s,i)=>(l(),d("li",{class:A(["repo-list-item",{"repo-inactive":s?.status=="expired"||s?.status=="removed"||s?.status=="error"}])},[o("div",oq,[o("div",nq,[o("div",sq,[o("a",{class:"repo-name",textContent:c(s?.pullRequestId),href:e.safeUrl("/pr/"+s?.pullRequestId)},null,8,rq),o("span",{class:A(["status-badge",{"status-removed":s?.status=="removed"||s?.status=="expired"||s?.status=="removing"||s?.status=="expiring","status-preparing":s?.status=="preparing"||s?.status=="download","status-ready":s?.status=="ready","status-error":s?.status=="error"}])},[o("span",{textContent:c(e.fmt?.title(s?.status))},null,8,iq),s?.status=="error"?(l(),d("span",{key:0,textContent:c(": "+s?.statusMessage)},null,8,aq)):f("v-if",!0)],2)]),o("div",lq,[o("span",null,[t[13]||(t[13]=o("i",{class:"fab fa-github","aria-hidden":"true"},null,-1)),o("a",{href:e.safeUrl("https://github.com/"+s?.source?.repositoryFullName+"/pull/"+s?.source?.pullRequestId)},c(s?.source?.repositoryFullName)+"#"+c(s?.source?.pullRequestId),9,dq)]),o("span",{class:A(["status-badge",{"status-ready":s?.merged,"status-removed":s?.state=="open","status-error":s?.state=="closed"&&!s?.merged}]),style:{"font-size":"10px"}},c(e.fmt?.title(s?.merged?"merged":s?.state)),3),o("span",uq,"anonymized "+c(e.fmt?.humanTime(s?.anonymizeDate)),1)])]),o("div",cq,[s?.conference?(l(),d("span",pq,[t[14]||(t[14]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-conference"})],-1)),w(" "+c(s?.conference),1)])):f("v-if",!0),o("span",{"data-toggle":"tooltip","data-placement":"bottom",title:"Terms: "+s?.options?.terms?.join(", ")},[t[15]||(t[15]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1)),w(" "+c(e.fmt?.number(s?.options?.terms?.length)),1)],8,fq),o("span",{"data-toggle":"tooltip","data-placement":"bottom",title:"Views: "+e.fmt?.number(s?.pageView)},[t[16]||(t[16]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1)),w(" "+c(e.fmt?.number(s?.pageView)),1)],8,mq),o("span",{"data-toggle":"tooltip","data-placement":"bottom",title:"Last view: "+e.fmt?.date(s?.lastView)},[t[17]||(t[17]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-calendar"})],-1)),w(" "+c(e.fmt?.humanTime(s?.lastView)),1)],8,hq),s?.options?.expirationMode!="never"&&s?.status=="ready"?(l(),d("span",vq,[t[18]||(t[18]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),w(" Expire: "+c(e.fmt?.humanTime(s?.options?.expirationDate)),1)])):f("v-if",!0)])]),o("div",yq,[o("div",gq,[t[24]||(t[24]=o("button",{class:"btn btn-sm dropdown-toggle",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"}," Actions ",-1)),o("div",bq,[o("a",{class:"dropdown-item",href:e.safeUrl("/pull-request-anonymize/"+s?.pullRequestId)},[...t[19]||(t[19]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),w(" Edit ",-1)])],8,wq),N(o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.updatePullRequest(s),["prevent"])},[...t[20]||(t[20]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),w(" Force update ",-1)])],8,kq),[[j,s?.status=="ready"||s?.status=="error"]]),N(o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.updatePullRequest(s),["prevent"])},[...t[21]||(t[21]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-check-circle"})],-1),w(" Enable ",-1)])],8,Eq),[[j,s?.status=="removed"]]),N(o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.removePullRequest(s),["prevent"])},[...t[22]||(t[22]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),w(" Remove ",-1)])],8,Cq),[[j,s?.status=="ready"]]),o("a",{class:"dropdown-item",href:e.safeUrl("/pr/"+s?.pullRequestId+"/")},[...t[23]||(t[23]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),w(" View PR ",-1)])],8,_q)])])])],2))),256)),e.filteredPullRequests?.length==0?(l(),d("li",Sq,[...t[25]||(t[25]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1),o("span",null,"No pull requests to display.",-1)])])):f("v-if",!0)])])])}var Nq={class:"container paper-page paper-settings"},Dq={class:"paper-settings-body"},Rq={class:"paper-settings-toc"},Tq={class:"paper-settings-main"},Aq={id:"settings-quota",class:"paper-settings-section"},Oq={key:1,class:"quota-row","aria-hidden":"true"},Iq={class:"quota-item"},Pq={id:"settings-terms",class:"paper-settings-section"},Vq={class:"form-group"},qq={class:"form-control",id:"terms",name:"terms",rows:"4",placeholder:`Jane Smith + label names the service and the tooltip says who to contact. `),t[17]||(t[17]=o("li",{class:"nav-item d-none d-lg-block"},[o("a",{class:"nav-link",target:"_blank",rel:"noopener",href:"https://github.com/tdurieux/anonymous_github/issues/new?template=issue_report.yml",title:"Report a problem with the Anonymous GitHub service. Questions about an anonymized repository or paper go to its authors.","data-offset":"30"},[o("svg",{class:"ui-icon d-lg-none mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-bug"})]),b("Report a bug ")])],-1)),e.isDarkMode?f("v-if",!0):(l(),d("li",uP,[o("a",{class:"nav-link nav-icon",href:"#",title:"Switch to dark mode","aria-label":"Switch to dark mode",role:"button",onClick:t[0]||(t[0]=ie(n=>{e.darkMode(!0)},["prevent"]))},[...t[13]||(t[13]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-moon"})],-1)])])])),e.isDarkMode?(l(),d("li",cP,[o("a",{class:"nav-link nav-icon",href:"#",title:"Switch to light mode","aria-label":"Switch to light mode",role:"button",onClick:t[1]||(t[1]=ie(n=>{e.darkMode(!1)},["prevent"]))},[...t[14]||(t[14]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-sun"})],-1)])])])):f("v-if",!0),!e.user&&!e.isReviewerRoute?(l(),d("li",pP,[...t[15]||(t[15]=[o("a",{class:"nav-link btn-signin",target:"_self",href:"/signin","data-offset":"30"},[o("i",{class:"fab fa-github mr-1"}),b(" Sign in ")],-1)])])):f("v-if",!0),e.user?(l(),d("li",fP,[o("a",mP,[e.user?.photo?(l(),d("img",{key:0,width:"22",height:"22",class:"rounded-circle",src:e.safeUrl(e.user?.photo)},null,8,hP)):f("v-if",!0),o("span",vP,c(e.user?.username),1)]),o("div",yP,[o("h6",gP,"Signed in as @"+c(e.user?.username),1),t[16]||(t[16]=de('SettingsDefaults, quotas, accountGitHub connectionsRepository access and OAuthClaim an anonymizationAttach an existing mirror to your accountReport a bugAbout this service, not a paperSource codeSupport the projectSign out',9))])])):f("v-if",!0)])])],2),e.generalMessage?(l(),d("div",{key:0,class:"navbar shadow generalMessage",innerHTML:e.sanitize(e.generalMessage)},null,8,bP)):f("v-if",!0),e.emailPromptOpen?(l(),d("dialog",{key:1,id:"email-prompt",class:"email-prompt","aria-labelledby":"email-prompt-title","aria-describedby":"email-prompt-reason",onCancel:t[6]||(t[6]=ie(n=>e.respondToEmailPrompt("later"),["prevent"]))},[o("form",{onSubmit:t[5]||(t[5]=ie(n=>e.respondToEmailPrompt("save"),["prevent"]))},[t[19]||(t[19]=o("h2",{id:"email-prompt-title"},"Stay informed about access problems",-1)),t[20]||(t[20]=o("p",{id:"email-prompt-reason"},"Get email alerts when your GitHub token or repository access fails.",-1)),t[21]||(t[21]=o("label",{for:"email-prompt-address"},"Email address",-1)),R(o("input",{id:"email-prompt-address",class:"form-control",type:"email",autocomplete:"email",maxlength:"254",required:"","onUpdate:modelValue":t[2]||(t[2]=n=>e.emailPromptAddress=n),disabled:e.emailPromptBusy},null,8,wP),[[zt,e.emailPromptAddress]]),e.emailPromptError?(l(),d("p",kP,c(e.emailPromptError),1)):f("v-if",!0),o("div",EP,[o("button",{type:"button",class:"btn btn-outline-ink",disabled:e.emailPromptBusy,onClick:t[3]||(t[3]=n=>e.respondToEmailPrompt("later"))},"Remind me later",8,CP),o("button",{type:"button",class:"btn btn-outline-ink",disabled:e.emailPromptBusy,onClick:t[4]||(t[4]=n=>e.respondToEmailPrompt("never"))},"Never",8,_P),o("button",{type:"submit",class:"btn btn-ink",disabled:e.emailPromptBusy},c(e.emailPromptBusy?"Saving\u2026":"Save"),9,SP)])],32)],32)):f("v-if",!0)],64)}var NP={class:"paper-landing"},RP={class:"paper-hero"},DP={class:"paper-hero-copy"},TP={class:"paper-cta-row"},AP={key:0,href:"/signin",target:"_self",class:"btn-hero"},OP={key:1,href:"/anonymize",class:"btn-hero"},IP={class:"paper-stats paper-wrap",id:"metrics","aria-label":"Usage over the last 60 days"},PP={class:"paper-stats-grid"},VP={class:"paper-stat-value"},qP={class:"paper-stat-label"},MP=["viewBox"],UP=["x","y","width","height"],$P={key:1,class:"paper-stat-delta"},LP={class:"paper-features paper-wrap","aria-label":"Product features"},FP={class:"paper-features-list",role:"tablist","aria-label":"Features","aria-orientation":"vertical"},zP=["onClick","onKeydown","id","aria-controls","aria-selected","tabindex"],HP={class:"paper-eyebrow"},BP={class:"paper-feature-title"},jP={class:"paper-feature-more"},GP={class:"paper-feature-title paper-feature-title-m","aria-hidden":"true"},WP=["href","target"],KP={class:"paper-features-stage"},YP=["id","aria-labelledby"],JP={class:"paper-frame"},QP={class:"paper-frame-bar","aria-hidden":"true"},XP={class:"url"},ZP=["src","alt"],xP={class:"paper-footer"},e5={class:"paper-footer-inner"},t5={class:"paper-footer-col"},o5={key:0,href:"/dashboard"},n5={key:1,href:"/conferences"},s5={class:"paper-footer-foot"};function Gl(e,t){return l(),d("div",NP,[f(" Hero: copy on the left, the product on the right "),o("section",RP,[o("div",DP,[t[2]||(t[2]=o("div",{class:"paper-eyebrow"},"For double-blind peer review",-1)),t[3]||(t[3]=o("h1",{class:"hero-title"},[b(" Share the code,"),o("br"),o("span",{class:"accent"},"not the author.")],-1)),t[4]||(t[4]=o("p",{class:"hero-subtitle"}," Anonymous GitHub makes a read-only mirror of your repository, pull request, or gist. It redacts the terms you choose in text files, so reviewers can browse your artifact through an anonymous link. ",-1)),o("div",TP,[e.user?f("v-if",!0):(l(),d("a",AP,[...t[0]||(t[0]=[o("i",{class:"fab fa-github mr-2","aria-hidden":"true"},null,-1),b("Sign in with GitHub ",-1)])])),e.user?(l(),d("a",OP," Anonymize a repository \u2192 ")):f("v-if",!0),t[1]||(t[1]=o("a",{class:"paper-link-arrow",target:"_self",href:"https://anonymous.4open.science/r/840c8c57-3c32-451e-bf12-0e20be300389/"},"See an anonymized repository \u2192",-1))]),t[5]||(t[5]=o("ul",{class:"paper-reassure"},[o("li",null,"Free and open source"),o("li",null,"Read-only: never writes to your repos"),o("li",null,"Expires on the date you set")],-1))]),t[6]||(t[6]=de('
A reviewer preview with the author, affiliation, and email replaced by anonymous terms
',1))]),f(" Proof "),t[16]||(t[16]=de('
Trusted by authors at
ICSEFSEOOPSLA
',1)),f(" Live stats "),o("section",IP,[t[7]||(t[7]=o("div",{class:"paper-stats-meta"},[o("div",{class:"paper-stats-meta-left"},"Live \xB7 last 60 days"),o("div",{class:"paper-stats-meta-right"},[o("span",{class:"paper-stats-dot","aria-hidden":"true"}),b(" updated daily ")])],-1)),o("div",PP,[(l(!0),d(W,null,oe(e.cards,(n,r)=>(l(),d("div",{class:"paper-stat-card",key:n?.key},[o("div",VP,c(e.fmt?.bigNum(n?.total)),1),o("div",qP,c(n?.label),1),e.history[n?.key].bars?.length>1?(l(),d("svg",{key:0,class:"paper-stat-bars",preserveAspectRatio:"none","aria-hidden":"true",viewBox:"0 0 "+e.history[n?.key].viewW+" 36"},[(l(!0),d(W,null,oe(e.history[n?.key].bars,(s,i)=>(l(),d("rect",{key:i,class:A({"is-latest":i===e.history[n.key].bars.length-1}),x:s?.x,y:s?.y,width:s?.w,height:s?.h},null,10,UP))),128))],8,MP)):f("v-if",!0),e.history[n?.key].bars?.length>1?(l(),d("div",$P," +"+c(e.fmt?.number(e.history[n?.key].deltaToday))+" today ",1)):f("v-if",!0)]))),128))])]),f(" Before / after "),t[17]||(t[17]=o("section",{class:"paper-section-head paper-wrap"},[o("div",null,[o("div",{class:"paper-eyebrow"},"Before \xB7 after"),o("h2",null,[b("The same repository, "),o("em",null,"minus you.")])]),o("p",null," Names, affiliations, emails, and any term you list are replaced across the README, source files, notebooks, and PDF links. Reviewers browse the real thing, not a zip. ")],-1)),t[18]||(t[18]=o("div",{class:"paper-preview paper-wrap","aria-label":"Before and after example"},[o("div",{class:"pane"},[o("div",{class:"pane-header"},[o("span",{class:"pane-label"},"Before \xB7 your repo"),o("span",{class:"pane-url"},"github.com/jane-smith/DeepLearnUtils")]),o("div",{class:"pane-body"},[o("div",null,[o("span",{class:"tok"},"#"),b(),o("strong",null,"DeepLearnUtils")]),o("div",null,"Developed by Jane Smith at MIT CSAIL."),o("div",null,"See Smith et\xA0al., \u201CAttention That Works,\u201D 2026."),o("div",null,"Contact: jane.smith@mit.edu")])]),o("div",{class:"pane"},[o("div",{class:"pane-header"},[o("span",{class:"pane-label"},"After \xB7 anonymous mirror"),o("span",{class:"pane-url"},"anonymous.4open.science/r/paper-7f2a")]),o("div",{class:"pane-body"},[o("div",null,[o("span",{class:"tok"},"#"),b(),o("strong",null,"DeepLearnUtils")]),o("div",null,[b("Developed by "),o("span",{class:"redact",role:"img","aria-label":"redacted author name"},"XXXX-1"),b(" at "),o("span",{class:"redact",role:"img","aria-label":"redacted affiliation"},"XXXX-2"),b(".")]),o("div",null,[b("See "),o("span",{class:"redact",role:"img","aria-label":"redacted author name"},"XXXX-1"),b(" et\xA0al., \u201CAttention That Works,\u201D 2026.")]),o("div",null,[b("Contact: "),o("span",{class:"redact",role:"img","aria-label":"redacted email address"},"XXXX-3")])])])],-1)),f(" What you get: one screenshot, three tabs "),t[19]||(t[19]=o("section",{class:"paper-section-head paper-wrap",id:"about"},[o("div",null,[o("div",{class:"paper-eyebrow"},"What you get"),o("h2",null,[b("Anonymize, review, "),o("em",null,"manage.")])]),o("p",null," Terms are redacted in text files. Enabled images and PDFs are served unchanged, so review them for identifying content before sharing. Monitor your mirror, update it, or remove it when the review is over. ")],-1)),o("section",LP,[o("div",FP,[(l(!0),d(W,null,oe(e.features,(n,r)=>(l(),d("div",{class:A(["paper-feature",{"is-on":e.feature===n?.key}]),key:n?.key},[o("button",{type:"button",class:"paper-feature-tab",role:"tab",onClick:s=>e.selectFeature(n.key),onKeydown:s=>e.featureKeydown(s,r),id:"feature-tab-"+n?.key,"aria-controls":"feature-panel-"+n?.key,"aria-selected":e.feature===n?.key,tabindex:e.feature===n?.key?0:-1},[o("span",HP,c(n?.num)+" \xB7 "+c(n?.eyebrow),1),o("span",BP,[b(c(n?.title)+" ",1),o("em",null,c(n?.accent),1)])],40,zP),o("div",jP,[o("span",GP,[b(c(n?.title)+" ",1),o("em",null,c(n?.accent),1)]),o("p",null,c(n?.text),1),o("a",{class:"paper-link-arrow",href:e.safeUrl(e.featureHref(n)),target:e.featureTarget(n)},c(n?.cta)+" \u2192",9,WP)])],2))),128))]),o("div",KP,[(l(!0),d(W,null,oe(e.features,(n,r)=>R((l(),d("div",{class:"paper-feature-panel",role:"tabpanel",key:n?.key,id:"feature-panel-"+n?.key,"aria-labelledby":"feature-tab-"+n?.key},[o("div",JP,[o("div",QP,[t[8]||(t[8]=o("span",{class:"dots"},[o("i"),o("i"),o("i")],-1)),o("span",XP,c(n?.url),1)]),o("div",{class:A("paper-crop paper-crop-"+n?.key)},[o("img",{loading:"lazy",width:"2880",height:"1800",src:e.safeUrl(n?.img),alt:n?.alt},null,8,ZP)],2)])],8,YP)),[[j,e.feature===n?.key]])),128))])]),f(" FAQ teaser "),t[20]||(t[20]=de('
Before you sign in

The questions that come up most.

Read the full FAQ \u2192
What access does GitHub sign-in require?

The GitHub App has read-only access to gists and the repositories you choose. Legacy OAuth uses broader permissions. Anonymous GitHub never writes to your repositories.

Which file formats are supported?

Source code with syntax highlighting, Markdown, Jupyter notebooks, PDFs, images, and GitHub Pages sites. Text files are anonymized; enabled images and PDFs are served unchanged.

What happens when an anonymized repository expires?

You choose: the mirror is removed, or visitors are redirected to the original GitHub repository once the review is over.

',1)),o("footer",xP,[o("div",e5,[t[12]||(t[12]=o("div",{class:"paper-footer-brand"},[o("div",{class:"paper-footer-mark"},[b("Anonymous "),o("em",null,"GitHub")]),o("p",{class:"paper-footer-tag"}," A read-only, identity-stripped mirror of your repository, built for double-anonymous peer review. ")],-1)),o("div",t5,[t[9]||(t[9]=o("div",{class:"paper-footer-head"},"Product",-1)),t[10]||(t[10]=o("a",{href:"/anonymize"},"Anonymize",-1)),e.user?(l(),d("a",o5,"My work")):f("v-if",!0),e.user?(l(),d("a",n5,"Conferences")):f("v-if",!0),t[11]||(t[11]=o("a",{href:"/faq"},"FAQ",-1))]),t[13]||(t[13]=de('',2))]),t[15]||(t[15]=o("div",{class:"paper-footer-rule"},null,-1)),o("div",s5,[o("span",null,"\xA9 "+c(e.year||2026)+" Anonymous GitHub \xB7 GPL-3.0 licensed",1),t[14]||(t[14]=o("span",{class:"paper-footer-meta"},"Built for reviewers, by researchers.",-1))])])])}var r5={class:"paper-empty"},i5={class:"paper-empty-inner"},a5={key:0,class:"paper-eyebrow"},l5={key:1,class:"paper-eyebrow"},d5={key:2,class:"paper-empty-title"},u5=["textContent"];function Wl(e,t){return l(),d("div",r5,[o("div",i5,[e.error?f("v-if",!0):(l(),d("div",a5,"Working")),e.error?(l(),d("div",l5,"Error")):f("v-if",!0),e.error?f("v-if",!0):(l(),d("h1",d5,[...t[0]||(t[0]=[b(" Loading",-1),o("span",{class:"dot-anim"},"\u2026",-1)])])),e.error?(l(),d("h1",{key:3,class:"paper-empty-title",textContent:c(e.fmt.translate(e.error))},null,8,u5)):f("v-if",!0)])])}var c5={class:"container paper-page paper-settings"},p5={class:"paper-crumbs"},f5={class:"here"},m5={class:"paper-page-title"},h5={class:"paper-settings-body"},v5={class:"paper-settings-toc"},y5={href:"#conf-billing"},g5={class:"form needs-validation paper-settings-main",name:"conference",novalidate:""},b5={id:"conf-basics",class:"paper-settings-section"},w5={class:"form-group"},k5={class:"invalid-feedback"},E5={class:"invalid-feedback"},C5={class:"form-group"},_5={class:"invalid-feedback"},S5={class:"form-group"},N5={class:"invalid-feedback"},R5={class:"invalid-feedback"},D5={id:"conf-window",class:"paper-settings-section"},T5={class:"form-grid-2"},A5={class:"form-group"},O5={class:"invalid-feedback"},I5={class:"invalid-feedback"},P5={class:"form-group"},V5={class:"invalid-feedback"},q5={class:"invalid-feedback"},M5={id:"conf-rendering",class:"paper-settings-section"},U5={class:"form-check"},$5={class:"form-check-input",type:"checkbox",id:"link",name:"link"},L5={class:"form-check"},F5={class:"form-check-input",type:"checkbox",id:"image",name:"image"},z5={class:"form-check"},H5={class:"form-check-input",type:"checkbox",id:"pdf",name:"pdf"},B5={class:"form-check"},j5={class:"form-check-input",type:"checkbox",id:"notebook",name:"notebook"},G5={id:"conf-features",class:"paper-settings-section"},W5={class:"form-check"},K5={class:"form-check-input",type:"checkbox",id:"update",name:"update"},Y5={class:"form-check"},J5={class:"form-check-input",type:"checkbox",id:"page",name:"page"},Q5={id:"conf-plan",class:"paper-settings-section"},X5={class:"paper-plan-grid"},Z5=["value"],x5=["textContent"],eV={class:"paper-plan-price"},tV=["innerHTML"],oV={key:0,id:"conf-billing",class:"paper-settings-section"},nV={class:"form-group"},sV={class:"form-group"},rV={class:"form-group"},iV={class:"form-group"},aV={class:"form-grid-3"},lV={class:"form-group"},dV={class:"form-group"},uV={class:"form-group"},cV={class:"form-group"},pV={class:"paper-settings-footer"},fV=["textContent"],mV=["textContent"],hV=["disabled"];function Kl(e,t){let n=ve("paper-scrollspy"),r=ve("field"),s=ve("form");return l(),d("div",c5,[o("div",p5,[t[1]||(t[1]=o("a",{href:"/dashboard"},"My work",-1)),t[2]||(t[2]=b(" \xA0/\xA0 ",-1)),t[3]||(t[3]=o("a",{href:"/conferences"},"Conferences",-1)),t[4]||(t[4]=b(" \xA0/\xA0 ",-1)),o("span",f5,c(e.editionMode?"Edit":"New"),1)]),o("h1",m5,[b(c(e.editionMode?"Edit":"Create a")+" ",1),t[5]||(t[5]=o("em",null,"conference",-1))]),t[43]||(t[43]=o("p",{class:"paper-page-lede"}," Give chairs access to every anonymization submitted to a venue, and lift author quotas during the review window. ",-1)),o("div",h5,[R((l(),d("aside",v5,[t[7]||(t[7]=o("div",{class:"paper-settings-toc-head"},"On this page",-1)),o("nav",null,[t[6]||(t[6]=de('BasicsReview windowRendering defaultsFeaturesPlan',5)),R(o("a",y5,"Billing",512),[[j,e.plan?.pricePerRepo>0]])])])),[[n]]),R((l(),d("form",g5,[o("section",b5,[t[12]||(t[12]=o("div",{class:"paper-section-eyebrow"},"Basics",-1)),o("div",w5,[t[8]||(t[8]=o("label",{class:"paper-field-label",for:"name"},"Conference name",-1)),R(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.name?.invalid&&(e.conference?.name?.touched||e.conference?.submitted)}]),name:"name",id:"name",required:"",placeholder:"e.g. International Conference on Software Engineering"},null,2),[[r,{state:e.viewState,set:i=>{e.options.name=i},value:e.options?.name,form:"conference",options:{}}]]),R(o("div",k5," The name of the conference is invalid. ",512),[[j,e.conference?.name?.errors?.invalid]]),R(o("div",E5," The name of the conference is required. ",512),[[j,e.conference?.name?.errors?.required]])]),o("div",C5,[t[9]||(t[9]=o("label",{class:"paper-field-label",for:"url"},"Website",-1)),R(o("input",{type:"url",class:A(["form-control",{"is-invalid":e.conference?.url?.invalid&&(e.conference?.url?.touched||e.conference?.submitted)}]),name:"url",id:"url",placeholder:"https://example.org"},null,2),[[r,{state:e.viewState,set:i=>{e.options.url=i},value:e.options?.url,form:"conference",options:{}}]]),R(o("div",_5," The url of the conference is invalid. ",512),[[j,e.conference?.url?.errors?.url]])]),o("div",S5,[t[10]||(t[10]=o("label",{class:"paper-field-label",for:"conferenceID"},"Conference ID",-1)),R(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.conferenceID?.invalid&&(e.conference?.conferenceID?.touched||e.conference?.submitted)}]),name:"conferenceID",id:"conferenceID",required:"",pattern:"[a-zA-Z0-9\\-_]{3,10}",placeholder:"ICSE26"},null,2),[[r,{state:e.viewState,set:i=>{e.options.conferenceID=i},value:e.options?.conferenceID,form:"conference",options:{}}]]),t[11]||(t[11]=o("small",{class:"form-text text-muted"},[b("3\u201310 characters, letters, numbers, "),o("code",null,"-"),b(" and "),o("code",null,"_"),b(". Authors reference this when they anonymize.")],-1)),R(o("div",{class:"invalid-feedback"}," The conference ID '"+c(e.options?.conferenceID)+"' is already used. ",513),[[j,e.conference?.conferenceID?.errors?.used]]),R(o("div",N5," The conference ID is required. ",512),[[j,e.conference?.conferenceID?.errors?.required]]),R(o("div",R5," The format of the conference ID is incorrect ([a-zA-Z0-9-_]{3,10}). ",512),[[j,e.conference?.conferenceID?.errors?.pattern]])])]),o("section",D5,[t[17]||(t[17]=o("div",{class:"paper-section-eyebrow"},"Review window",-1)),o("div",T5,[o("div",A5,[t[13]||(t[13]=o("label",{class:"paper-field-label",for:"startDate"},"Start date",-1)),R(o("input",{type:"date",class:A(["form-control",{"is-invalid":e.conference?.startDate?.invalid&&(e.conference?.startDate?.touched||e.conference?.submitted)}]),name:"startDate",id:"startDate",required:""},null,2),[[r,{state:e.viewState,set:i=>{e.options.startDate=i},value:e.options?.startDate,form:"conference",options:{}}]]),t[14]||(t[14]=o("small",{class:"form-text text-muted"},"Beginning of the review process.",-1)),R(o("div",O5," Start date is required. ",512),[[j,e.conference?.startDate?.errors?.required]]),R(o("div",I5," Start date must be before end date. ",512),[[j,e.conference?.startDate?.errors?.invalid]])]),o("div",P5,[t[15]||(t[15]=o("label",{class:"paper-field-label",for:"endDate"},"End date",-1)),R(o("input",{type:"date",class:A(["form-control",{"is-invalid":e.conference?.endDate?.invalid&&(e.conference?.endDate?.touched||e.conference?.submitted)}]),name:"endDate",id:"endDate",required:""},null,2),[[r,{state:e.viewState,set:i=>{e.options.endDate=i},value:e.options?.endDate,form:"conference",options:{}}]]),t[16]||(t[16]=o("small",{class:"form-text text-muted"},"All repositories expire on this date.",-1)),R(o("div",V5," End date is required. ",512),[[j,e.conference?.endDate?.errors?.required]]),R(o("div",q5," End date is invalid. ",512),[[j,e.conference?.endDate?.errors?.invalid]])])])]),o("section",M5,[t[26]||(t[26]=o("div",{class:"paper-section-eyebrow"},"Rendering defaults",-1)),o("div",U5,[R(o("input",$5,null,512),[[r,{state:e.viewState,set:i=>{e.options.options.link=i},value:e.options?.options?.link,form:"conference",options:{}}]]),t[18]||(t[18]=o("label",{class:"form-check-label",for:"link"},"Keep links",-1)),t[19]||(t[19]=o("small",{class:"form-text text-muted"},"Keep or remove all links from text files.",-1))]),o("div",L5,[R(o("input",F5,null,512),[[r,{state:e.viewState,set:i=>{e.options.options.image=i},value:e.options?.options?.image,form:"conference",options:{}}]]),t[20]||(t[20]=o("label",{class:"form-check-label",for:"image"},"Display images",-1)),t[21]||(t[21]=o("small",{class:"form-text text-muted"},"Images are not anonymized.",-1))]),o("div",z5,[R(o("input",H5,null,512),[[r,{state:e.viewState,set:i=>{e.options.options.pdf=i},value:e.options?.options?.pdf,form:"conference",options:{}}]]),t[22]||(t[22]=o("label",{class:"form-check-label",for:"pdf"},"Display PDFs",-1)),t[23]||(t[23]=o("small",{class:"form-text text-muted"},"PDFs are not anonymized.",-1))]),o("div",B5,[R(o("input",j5,null,512),[[r,{state:e.viewState,set:i=>{e.options.options.notebook=i},value:e.options?.options?.notebook,form:"conference",options:{}}]]),t[24]||(t[24]=o("label",{class:"form-check-label",for:"notebook"},"Display notebooks",-1)),t[25]||(t[25]=o("small",{class:"form-text text-muted"},"Render Jupyter notebooks instead of raw JSON.",-1))])]),o("section",G5,[t[31]||(t[31]=o("div",{class:"paper-section-eyebrow"},"Features",-1)),o("div",W5,[R(o("input",K5,null,512),[[r,{state:e.viewState,set:i=>{e.options.options.update=i},value:e.options?.options?.update,form:"conference",options:{}}]]),t[27]||(t[27]=o("label",{class:"form-check-label",for:"update"},"Auto-update from GitHub",-1)),t[28]||(t[28]=o("small",{class:"form-text text-muted"},"Pull the latest commit automatically (hourly maximum).",-1))]),o("div",Y5,[R(o("input",J5,null,512),[[r,{state:e.viewState,set:i=>{e.options.options.page=i},value:e.options?.options?.page,form:"conference",options:{}}]]),t[29]||(t[29]=o("label",{class:"form-check-label",for:"page"},"GitHub Pages",-1)),t[30]||(t[30]=o("small",{class:"form-text text-muted"},"Enable anonymized GitHub pages.",-1))])]),o("section",Q5,[t[33]||(t[33]=o("div",{class:"paper-section-eyebrow"},"Plan",-1)),t[34]||(t[34]=o("p",{class:"paper-section-copy"},"Billed per repository per month, prorated by the day for as long as a repository stays in the conference.",-1)),o("div",X5,[(l(!0),d(W,null,oe(e.plans,(i,a)=>(l(),d("label",{class:A(["paper-plan-card",{selected:e.options?.plan?.planID==i?.id}])},[R(o("input",{type:"radio",name:"planPicker",value:i?.id},null,8,Z5),[[r,{state:e.viewState,set:u=>{e.options.plan.planID=u},value:e.options?.plan?.planID,form:"conference",options:{}}]]),o("div",{class:"paper-plan-head",textContent:c(i?.name)},null,8,x5),o("div",eV,[b(c(e.fmt?.number(i?.pricePerRepo))+"\u20AC ",1),t[32]||(t[32]=o("span",{class:"paper-plan-per"},"/ repo / month",-1))]),o("div",{class:"paper-plan-desc",innerHTML:e.sanitize(i?.description)},null,8,tV)],2))),256))])]),e.plan?.pricePerRepo>0?(l(),d("section",oV,[t[42]||(t[42]=o("div",{class:"paper-section-eyebrow"},"Billing",-1)),o("div",nV,[t[35]||(t[35]=o("label",{class:"paper-field-label",for:"billing_name"},"Name",-1)),R(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.billing_name?.invalid&&(e.conference?.billing_name?.touched||e.conference?.submitted)}]),name:"billing_name",id:"billing_name",required:"",placeholder:"First & last name"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.name=i},value:e.options?.billing?.name,form:"conference",options:{}}]])]),o("div",sV,[t[36]||(t[36]=o("label",{class:"paper-field-label",for:"email"},"Email",-1)),R(o("input",{type:"email",class:A(["form-control",{"is-invalid":e.conference?.email?.invalid&&(e.conference?.email?.touched||e.conference?.submitted)}]),name:"email",id:"email",required:"",placeholder:"you@example.org"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.email=i},value:e.options?.billing?.email,form:"conference",options:{}}]])]),o("div",rV,[t[37]||(t[37]=o("label",{class:"paper-field-label",for:"inputAddress"},"Address",-1)),R(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.inputAddress?.invalid&&(e.conference?.inputAddress?.touched||e.conference?.submitted)}]),name:"inputAddress",id:"inputAddress",required:"",placeholder:"1234 Main St"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.address=i},value:e.options?.billing?.address,form:"conference",options:{}}]])]),o("div",iV,[R(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.inputAddress2?.invalid&&(e.conference?.inputAddress2?.touched||e.conference?.submitted)}]),name:"inputAddress2",id:"inputAddress2",placeholder:"Apartment, studio, or floor"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.address2=i},value:e.options?.billing?.address2,form:"conference",options:{}}]])]),o("div",aV,[o("div",lV,[t[38]||(t[38]=o("label",{class:"paper-field-label",for:"city"},"City",-1)),R(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.city?.invalid&&(e.conference?.city?.touched||e.conference?.submitted)}]),name:"city",id:"city",required:"",placeholder:"City"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.city=i},value:e.options?.billing?.city,form:"conference",options:{}}]])]),o("div",dV,[t[39]||(t[39]=o("label",{class:"paper-field-label",for:"country"},"Country",-1)),R(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.country?.invalid&&(e.conference?.country?.touched||e.conference?.submitted)}]),name:"country",id:"country",required:"",placeholder:"Country"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.country=i},value:e.options?.billing?.country,form:"conference",options:{}}]])]),o("div",uV,[t[40]||(t[40]=o("label",{class:"paper-field-label",for:"zip"},"Zip",-1)),R(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.zip?.invalid&&(e.conference?.zip?.touched||e.conference?.submitted)}]),name:"zip",id:"zip",required:"",placeholder:"Zip"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.zip=i},value:e.options?.billing?.zip,form:"conference",options:{}}]])])]),o("div",cV,[t[41]||(t[41]=o("label",{class:"paper-field-label",for:"vat"},"VAT number",-1)),R(o("input",{type:"text",class:A(["form-control",{"is-invalid":e.conference?.vat?.invalid&&(e.conference?.vat?.touched||e.conference?.submitted)}]),name:"vat",id:"vat",placeholder:"VAT Number"},null,2),[[r,{state:e.viewState,set:i=>{e.options.billing.vat=i},value:e.options?.billing?.vat,form:"conference",options:{}}]])])])):f("v-if",!0),o("div",pV,[e.error?(l(),d("div",{key:0,class:"alert alert-danger",role:"alert",textContent:c(e.error)},null,8,fV)):f("v-if",!0),e.message?(l(),d("div",{key:1,class:"alert alert-success",role:"alert",textContent:c(e.message)},null,8,mV)):f("v-if",!0),o("button",{id:"send",disabled:e.saving,type:"submit",class:"btn btn-ink",onClick:t[0]||(t[0]=ie(i=>e.submitForm(i,()=>{e.submit(i)}),["prevent"]))},c(e.saving?e.editionMode?"Updating\u2026":"Creating\u2026":e.editionMode?"Update conference":"Create conference"),9,hV)])])),[[s,e.viewState]])])])}var vV={key:0},yV=["innerHTML"],gV={key:3},bV=["src"],wV=["src"],kV={key:7},EV={controls:"controls"},CV=["src"],_V={key:8},SV={key:9,class:"file-error container d-flex h-100"},NV={class:"paper-ratelimit-card m-auto",style:{"max-width":"520px"}},RV={class:"paper-error-msg"},DV={key:10,class:"file-error container d-flex h-100"},TV={class:"viewer-error paper-error-card file-error-card m-auto",role:"alert","aria-labelledby":"viewer-error-title"},AV={id:"viewer-error-title",class:"paper-empty-title"},OV={class:"paper-error-actions"},IV={key:0,href:"/",class:"btn btn-sm"},PV={key:1,href:"/faq",class:"btn btn-sm"},VV={key:2,class:"btn btn-outline-ink",href:"/dashboard"},qV={key:11,class:"file-error container d-flex h-100"},MV={key:12,class:"file-error container d-flex h-100"},UV={key:13,class:"file-error container d-flex h-100"},$V={key:14,class:"file-error container d-flex h-100"},LV={class:"paper-empty-title m-auto"},FV=["href"];function Yl(e,t){let n=Ge("html-doc"),r=Ge("pdfviewer"),s=Ge("notebook"),i=ve("code-editor");return l(),d(W,null,[e.type=="text"?R((l(),d("div",vV,null,512)),[[i,{content:e.content,options:e.aceOption}]]):f("v-if",!0),e.type=="html"?(l(),d("div",{key:1,class:"file-content markdown-body",innerHTML:e.highlightRedactions(e.sanitize(e.content))},null,8,yV)):f("v-if",!0),e.type=="html-doc"&&!e.showSource&&e.content!=null?(l(),Lt(n,{key:2,content:e.content,"base-url":e.fileBaseUrl,"allow-scripts":e.allowScripts},null,8,["content","base-url","allow-scripts"])):f("v-if",!0),(e.type=="code"||e.type=="html-doc"&&e.showSource)&&e.content!=null?R((l(),d("div",gV,null,512)),[[i,{content:e.content,options:e.aceOption}]]):f("v-if",!0),e.type=="image"?(l(),d("img",{key:4,class:"image-content",src:e.safeUrl(e.url)},null,8,bV)):f("v-if",!0),e.type=="media"?(l(),d("iframe",{key:5,class:"h-100 overflow-auto w-100 b-0",src:e.safeUrl(e.url)},null,8,wV)):f("v-if",!0),e.type=="pdf"?(l(),Lt(r,{key:6,src:e.safeUrl(e.url)},null,8,["src"])):f("v-if",!0),e.type=="audio"?(l(),d("div",kV,[o("audio",EV,[o("source",{src:e.safeUrl(e.url)},null,8,CV)])])):f("v-if",!0),e.type=="IPython"?(l(),d("div",_V,[Ce(s,{file:e.url,content:e.content},null,8,["file","content"])])):f("v-if",!0),e.type=="rate_limited"?(l(),d("div",SV,[o("div",NV,[t[3]||(t[3]=de('
Temporarily paused
GitHub API rate limit reached
',1)),o("p",RV,[t[1]||(t[1]=b("This repository will be available in ",-1)),o("strong",null,c(e.rateLimitCountdown),1),t[2]||(t[2]=b(". The page will reload automatically.",-1))])])])):f("v-if",!0),e.type=="error"?(l(),d("div",DV,[o("section",TV,[o("h1",AV,c(e.fmt.translate(e.isSourceAccessError()?"VIEWER_ERRORS.access_title":"VIEWER_ERRORS.title")),1),o("p",null,c(e.fmt.translate("ERRORS."+e.content)),1),e.isSourceAccessError()?(l(),d(W,{key:0},[o("p",null,c(e.fmt.translate("VIEWER_ERRORS.reader_help")),1),o("p",null,c(e.fmt.translate("VIEWER_ERRORS.owner_help")),1)],64)):f("v-if",!0),o("div",OV,[e.isSourceAccessError()?f("v-if",!0):(l(),d("a",IV,"Back to home")),e.isSourceAccessError()?f("v-if",!0):(l(),d("a",PV,"Read the FAQ")),o("button",{type:"button",class:"btn btn-primary",onClick:t[0]||(t[0]=a=>e.retryContent())},c(e.fmt.translate("VIEWER_ERRORS.retry")),1),e.isSourceAccessError()?(l(),d("a",VV,c(e.fmt.translate("VIEWER_ERRORS.dashboard")),1)):f("v-if",!0)])])])):f("v-if",!0),e.type=="loading"&&!e.error?(l(),d("div",qV,[...t[4]||(t[4]=[o("h1",{class:"paper-empty-title m-auto"},"Loading\u2026",-1)])])):f("v-if",!0),e.type=="empty"?(l(),d("div",MV,[...t[5]||(t[5]=[o("h1",{class:"paper-empty-title m-auto"},[b("Empty "),o("em",null,"repository"),b(".")],-1)])])):f("v-if",!0),e.content==null&&e.type!="empty"?(l(),d("div",UV,[...t[6]||(t[6]=[o("h1",{class:"paper-empty-title m-auto"},[b("Empty "),o("em",null,"file"),b(".")],-1)])])):f("v-if",!0),e.type=="binary"?(l(),d("div",$V,[o("h1",LV,[t[7]||(t[7]=b("Unsupported ",-1)),t[8]||(t[8]=o("em",null,"binary file",-1)),t[9]||(t[9]=b(". You can ",-1)),o("a",{target:"_blank",href:e.safeUrl(e.url+"&download=true")},"download it",8,FV),t[10]||(t[10]=b(".",-1))])])):f("v-if",!0)],64)}var zV={class:"container page dashboard-page paper-page"},HV={class:"row"},BV={class:"w-100"},jV={class:"w-100","aria-label":"Pull Requests","accept-charset":"UTF-8"},GV={class:"d-flex flex-column flex-md-row align-items-md-center",style:{gap:"8px"}},WV={class:"flex-grow-1"},KV={type:"search",id:"search",class:"form-control","aria-label":"Find a pull request...",placeholder:"Find a pull request...",autocomplete:"off"},YV={class:"d-flex flex-wrap",style:{gap:"6px"}},JV={class:"dropdown"},QV={class:"dropdown-menu","aria-labelledby":"dropdownSort"},XV={class:"form-check dropdown-item"},ZV={class:"form-check-input",type:"radio",name:"sort",id:"sortFullName",value:"fullName"},xV={class:"form-check dropdown-item"},eq={class:"form-check-input",type:"radio",name:"sort",id:"sortAnonymizeDate",value:"-anonymizeDate"},tq={class:"form-check dropdown-item"},oq={class:"form-check-input",type:"radio",name:"sort",id:"sortStatus",value:"-status"},nq={class:"form-check dropdown-item"},sq={class:"form-check-input",type:"radio",name:"sort",id:"sortLastView",value:"-lastView"},rq={class:"form-check dropdown-item"},iq={class:"form-check-input",type:"radio",name:"sort",id:"sortPageView",value:"-pageView"},aq={class:"dropdown"},lq={class:"dropdown-menu","aria-labelledby":"dropdownStatus"},dq={class:"form-check dropdown-item"},uq={class:"form-check-input",type:"checkbox",name:"sort",id:"statusReady",value:"ready"},cq={class:"form-check dropdown-item"},pq={class:"form-check-input",type:"checkbox",name:"sort",id:"statusExpired",value:"expired"},fq={class:"form-check dropdown-item"},mq={class:"form-check-input",type:"checkbox",name:"sort",id:"statusRemoved",value:"removed"},hq={class:"d-flex flex-wrap mt-2",style:{gap:"6px"}},vq={class:"filter-chip"},yq=["onClick"],gq={class:"repo-list w-100"},bq={class:"repo-list-item-content"},wq={class:"repo-list-item-main"},kq={class:"repo-list-item-header"},Eq=["textContent","href"],Cq=["textContent"],_q=["textContent"],Sq={class:"repo-source"},Nq=["href"],Rq={class:"repo-date"},Dq={class:"repo-meta"},Tq={key:0,title:"Conference"},Aq=["title"],Oq=["title"],Iq=["title"],Pq={key:1},Vq={class:"repo-list-item-actions"},qq={class:"dropdown"},Mq={class:"dropdown-menu dropdown-menu-right"},Uq=["href"],$q=["onClick"],Lq=["onClick"],Fq=["onClick"],zq=["href"],Hq={key:0,class:"repo-list-empty"};function Jl(e,t){let n=ve("field"),r=ve("form");return l(),d("div",zV,[o("div",HV,[o("div",BV,[t[12]||(t[12]=de('
My work \xA0/\xA0 Pull requests

Anonymized pull requests

Track PR mirrors you\u2019ve created and their reviewer traffic.

',2)),f(" Search + filters row "),R((l(),d("form",jV,[o("div",GV,[o("div",WV,[R(o("input",KV,null,512),[[n,{state:e.viewState,set:s=>{e.search=s},value:e.search,form:null,options:{}}]])]),o("div",YV,[o("div",JV,[t[6]||(t[6]=o("button",{class:"btn btn-sm dropdown-toggle",type:"button",id:"dropdownSort","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"}," Sort ",-1)),o("div",QV,[t[5]||(t[5]=o("h6",{class:"dropdown-header"},"Select order",-1)),o("div",XV,[R(o("input",ZV,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[0]||(t[0]=o("label",{class:"form-check-label",for:"sortFullName"},"Pull Request",-1))]),o("div",xV,[R(o("input",eq,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[1]||(t[1]=o("label",{class:"form-check-label",for:"sortAnonymizeDate"},"Anonymize Date",-1))]),o("div",tq,[R(o("input",oq,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[2]||(t[2]=o("label",{class:"form-check-label",for:"sortStatus"},"Status",-1))]),o("div",nq,[R(o("input",sq,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[3]||(t[3]=o("label",{class:"form-check-label",for:"sortLastView"},"Last View",-1))]),o("div",rq,[R(o("input",iq,null,512),[[n,{state:e.viewState,set:s=>{e.orderBy=s},value:e.orderBy,form:null,options:{}}]]),t[4]||(t[4]=o("label",{class:"form-check-label",for:"sortPageView"},"Page View",-1))])])]),o("div",aq,[t[11]||(t[11]=o("button",{class:"btn btn-sm dropdown-toggle",type:"button",id:"dropdownStatus","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"}," Status ",-1)),o("div",lq,[t[10]||(t[10]=o("h6",{class:"dropdown-header"},"Select status",-1)),o("div",dq,[R(o("input",uq,null,512),[[n,{state:e.viewState,set:s=>{e.filters.status.ready=s},value:e.filters?.status?.ready,form:null,options:{}}]]),t[7]||(t[7]=o("label",{class:"form-check-label",for:"statusReady"},"Ready",-1))]),o("div",cq,[R(o("input",pq,null,512),[[n,{state:e.viewState,set:s=>{e.filters.status.expired=s},value:e.filters?.status?.expired,form:null,options:{}}]]),t[8]||(t[8]=o("label",{class:"form-check-label",for:"statusExpired"},"Expired",-1))]),o("div",fq,[R(o("input",mq,null,512),[[n,{state:e.viewState,set:s=>{e.filters.status.removed=s},value:e.filters?.status?.removed,form:null,options:{}}]]),t[9]||(t[9]=o("label",{class:"form-check-label",for:"statusRemoved"},"Removed",-1))])])])])])])),[[r,e.viewState]]),f(" Active filter chips "),R(o("div",hq,[(l(!0),d(W,null,oe(e.filters?.status,(s,i,a)=>R((l(),d("span",vq,[b(c(e.fmt?.title(i))+" ",1),o("button",{type:"button",class:"filter-chip-close","aria-label":"Remove filter",onClick:u=>{e.filters.status[i]=!0}}," \xD7 ",8,yq)],512)),[[j,!s]])),256))],512),[[j,e.filters?.status?.ready===!1||e.filters?.status?.expired===!1||e.filters?.status?.removed===!1]])]),f(" Pull request list "),o("ul",gq,[(l(!0),d(W,null,oe(e.filteredPullRequests,(s,i)=>(l(),d("li",{class:A(["repo-list-item",{"repo-inactive":s?.status=="expired"||s?.status=="removed"||s?.status=="error"}])},[o("div",bq,[o("div",wq,[o("div",kq,[o("a",{class:"repo-name",textContent:c(s?.pullRequestId),href:e.safeUrl("/pr/"+s?.pullRequestId)},null,8,Eq),o("span",{class:A(["status-badge",{"status-removed":s?.status=="removed"||s?.status=="expired"||s?.status=="removing"||s?.status=="expiring","status-preparing":s?.status=="preparing"||s?.status=="download","status-ready":s?.status=="ready","status-error":s?.status=="error"}])},[o("span",{textContent:c(e.fmt?.title(s?.status))},null,8,Cq),s?.status=="error"?(l(),d("span",{key:0,textContent:c(": "+s?.statusMessage)},null,8,_q)):f("v-if",!0)],2)]),o("div",Sq,[o("span",null,[t[13]||(t[13]=o("i",{class:"fab fa-github","aria-hidden":"true"},null,-1)),o("a",{href:e.safeUrl("https://github.com/"+s?.source?.repositoryFullName+"/pull/"+s?.source?.pullRequestId)},c(s?.source?.repositoryFullName)+"#"+c(s?.source?.pullRequestId),9,Nq)]),o("span",{class:A(["status-badge",{"status-ready":s?.merged,"status-removed":s?.state=="open","status-error":s?.state=="closed"&&!s?.merged}]),style:{"font-size":"10px"}},c(e.fmt?.title(s?.merged?"merged":s?.state)),3),o("span",Rq,"anonymized "+c(e.fmt?.humanTime(s?.anonymizeDate)),1)])]),o("div",Dq,[s?.conference?(l(),d("span",Tq,[t[14]||(t[14]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-conference"})],-1)),b(" "+c(s?.conference),1)])):f("v-if",!0),o("span",{"data-toggle":"tooltip","data-placement":"bottom",title:"Terms: "+s?.options?.terms?.join(", ")},[t[15]||(t[15]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1)),b(" "+c(e.fmt?.number(s?.options?.terms?.length)),1)],8,Aq),o("span",{"data-toggle":"tooltip","data-placement":"bottom",title:"Views: "+e.fmt?.number(s?.pageView)},[t[16]||(t[16]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1)),b(" "+c(e.fmt?.number(s?.pageView)),1)],8,Oq),o("span",{"data-toggle":"tooltip","data-placement":"bottom",title:"Last view: "+e.fmt?.date(s?.lastView)},[t[17]||(t[17]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-calendar"})],-1)),b(" "+c(e.fmt?.humanTime(s?.lastView)),1)],8,Iq),s?.options?.expirationMode!="never"&&s?.status=="ready"?(l(),d("span",Pq,[t[18]||(t[18]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),b(" Expire: "+c(e.fmt?.humanTime(s?.options?.expirationDate)),1)])):f("v-if",!0)])]),o("div",Vq,[o("div",qq,[t[24]||(t[24]=o("button",{class:"btn btn-sm dropdown-toggle",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"}," Actions ",-1)),o("div",Mq,[o("a",{class:"dropdown-item",href:e.safeUrl("/pull-request-anonymize/"+s?.pullRequestId)},[...t[19]||(t[19]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),b(" Edit ",-1)])],8,Uq),R(o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.updatePullRequest(s),["prevent"])},[...t[20]||(t[20]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-refresh"})],-1),b(" Force update ",-1)])],8,$q),[[j,s?.status=="ready"||s?.status=="error"]]),R(o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.updatePullRequest(s),["prevent"])},[...t[21]||(t[21]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-check-circle"})],-1),b(" Enable ",-1)])],8,Lq),[[j,s?.status=="removed"]]),R(o("a",{class:"dropdown-item",href:"#",onClick:ie(a=>e.removePullRequest(s),["prevent"])},[...t[22]||(t[22]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1),b(" Remove ",-1)])],8,Fq),[[j,s?.status=="ready"]]),o("a",{class:"dropdown-item",href:e.safeUrl("/pr/"+s?.pullRequestId+"/")},[...t[23]||(t[23]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),b(" View PR ",-1)])],8,zq)])])])],2))),256)),e.filteredPullRequests?.length==0?(l(),d("li",Hq,[...t[25]||(t[25]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-inbox"})],-1),o("span",null,"No pull requests to display.",-1)])])):f("v-if",!0)])])])}var Bq={class:"container paper-page paper-settings"},jq={class:"paper-settings-body"},Gq={class:"paper-settings-toc"},Wq={class:"paper-settings-main"},Kq={id:"settings-quota",class:"paper-settings-section"},Yq={key:1,class:"quota-row","aria-hidden":"true"},Jq={class:"quota-item"},Qq={id:"settings-terms",class:"paper-settings-section"},Xq={class:"form-group"},Zq={class:"form-control",id:"terms",name:"terms",rows:"4",placeholder:`Jane Smith MIT CSAIL -jane.smith@example.org`},Mq={id:"termsHelp",class:"form-text text-muted"},Uq={class:"invalid-feedback"},$q={id:"settings-display",class:"paper-settings-section"},Lq={class:"form-group paper-check-list"},Fq={class:"form-check"},zq={class:"form-check-input",type:"checkbox",id:"link",name:"link"},Hq={class:"form-check"},Bq={class:"form-check-input",type:"checkbox",id:"image",name:"image"},jq={class:"form-check"},Gq={class:"form-check-input",type:"checkbox",id:"pdf",name:"pdf"},Wq={class:"form-check"},Kq={class:"form-check-input",type:"checkbox",id:"notebook",name:"notebook"},Yq={id:"settings-features",class:"paper-settings-section"},Jq={class:"form-group paper-check-list"},Qq={class:"form-check"},Xq={class:"form-check-input",type:"checkbox",id:"page",name:"page"},Zq={class:"form-check"},xq={class:"form-check-input",type:"checkbox",id:"loc",name:"loc"},eM={class:"form-check"},tM={class:"form-check-input",type:"checkbox",id:"update",name:"update"},oM={class:"form-group"},nM={class:"form-control",id:"mode",name:"mode"},sM={class:"form-text text-muted"},rM={id:"settings-expiration",class:"paper-settings-section"},iM={class:"form-group"},aM={class:"form-control",id:"expiration",name:"expiration"},lM={key:0,class:"draft-status",role:"status"},dM={key:1,class:"draft-status"},uM={class:"paper-settings-footer"},cM={key:0,class:"paper-inline-alert paper-inline-alert-error",role:"alert"},pM=["textContent"],fM={class:"paper-settings-actions"},mM=["disabled"],hM={key:0,class:"ui-icon mr-1","aria-hidden":"true"},vM={id:"settings-account",class:"paper-settings-section"},yM={class:"paper-account-card"},gM=["src"],bM={class:"paper-account-identity"},wM={class:"paper-account-name"},kM=["disabled"],EM={key:0,role:"status"},CM={key:1,class:"paper-inline-alert paper-inline-alert-error",role:"alert"},_M=["disabled"],SM={key:3,role:"status"},NM={class:"paper-danger-zone"},DM={key:0,class:"paper-inline-alert paper-inline-alert-error",role:"alert"},RM=["textContent"],TM=["disabled"];function Ql(e,t){let n=Ge("quota-usage"),r=ve("paper-scrollspy"),s=ve("field"),i=ve("form");return l(),d("div",Nq,[t[58]||(t[58]=ue('
My work \xA0/\xA0 Settings

Your settings

Defaults applied to every new anonymization, your quotas, and your account.

',3)),o("div",Dq,[N((l(),d("aside",Rq,[...t[8]||(t[8]=[ue('
On this page
',2)])])),[[r]]),o("div",Tq,[f(" Account usage shares the dashboard component. "),o("section",Aq,[t[10]||(t[10]=o("div",{class:"paper-section-eyebrow"},"Quota",-1)),t[11]||(t[11]=o("p",{class:"paper-section-copy"},"What you are using across all your anonymizations. Conferences can lift these limits during a review window.",-1)),e.quota?(l(),Lt(n,{key:0,quota:e.quota,fmt:e.fmt},null,8,["quota","fmt"])):f("v-if",!0),e.quota?f("v-if",!0):(l(),d("div",Oq,[(l(),d(K,null,oe([1,2,3],(a,u)=>o("div",Iq,[...t[9]||(t[9]=[o("div",{class:"quota-header"},[o("span",{class:"skeleton skeleton-line",style:{width:"40%"}}),o("span",{class:"skeleton skeleton-line",style:{width:"25%"}})],-1),o("div",{class:"quota-track"},null,-1)])])),64))]))]),N((l(),d("form",{class:"form needs-validation",name:"defaultsForm",novalidate:"",onSubmit:t[2]||(t[2]=ie(a=>e.submitForm(a,()=>{e.saveDefault(a)}),["prevent"]))},[o("section",Pq,[t[17]||(t[17]=o("div",{class:"paper-section-eyebrow"},"Terms to redact",-1)),t[18]||(t[18]=o("p",{class:"paper-section-copy"},"Pre-filled in every new anonymization. You can still edit the list per anonymization.",-1)),o("div",Vq,[t[16]||(t[16]=o("label",{class:"paper-field-label",for:"terms"},"Default terms",-1)),N(o("textarea",qq,null,512),[[s,{state:e.viewState,set:a=>{e.terms=a},value:e.terms,form:"defaultsForm",options:{debounce:250}}]]),o("small",Mq,[t[12]||(t[12]=w(" One term per line (regex allowed). Each match is replaced by ",-1)),o("code",null,c(e.site_options?.ANONYMIZATION_MASK||"XXX")+"-[N]",1),t[13]||(t[13]=w(", or use ",-1)),t[14]||(t[14]=o("code",null,"term=>replacement",-1)),t[15]||(t[15]=w(" to pick your own. ",-1))]),N(o("div",Uq," Terms are in an invalid format ",512),[[j,e.defaultsForm?.terms?.errors?.format]])])]),o("section",$q,[t[27]||(t[27]=o("div",{class:"paper-section-eyebrow"},"Display",-1)),t[28]||(t[28]=o("p",{class:"paper-section-copy"},"What reviewers can see inside an anonymized repository.",-1)),o("div",Lq,[o("div",Fq,[N(o("input",zq,null,512),[[s,{state:e.viewState,set:a=>{e.options.link=a},value:e.options?.link,form:"defaultsForm",options:{}}]]),t[19]||(t[19]=o("label",{class:"form-check-label",for:"link"},"Keep links",-1)),t[20]||(t[20]=o("small",{class:"form-text text-muted"},"Unchecked, every link in text files is removed.",-1))]),o("div",Hq,[N(o("input",Bq,null,512),[[s,{state:e.viewState,set:a=>{e.options.image=a},value:e.options?.image,form:"defaultsForm",options:{}}]]),t[21]||(t[21]=o("label",{class:"form-check-label",for:"image"},"Display images",-1)),t[22]||(t[22]=o("small",{class:"form-text text-muted"},"Images are shown as is. They are not anonymized.",-1))]),o("div",jq,[N(o("input",Gq,null,512),[[s,{state:e.viewState,set:a=>{e.options.pdf=a},value:e.options?.pdf,form:"defaultsForm",options:{}}]]),t[23]||(t[23]=o("label",{class:"form-check-label",for:"pdf"},"Display PDFs",-1)),t[24]||(t[24]=o("small",{class:"form-text text-muted"},"PDFs are shown as is. They are not anonymized.",-1))]),o("div",Wq,[N(o("input",Kq,null,512),[[s,{state:e.viewState,set:a=>{e.options.notebook=a},value:e.options?.notebook,form:"defaultsForm",options:{}}]]),t[25]||(t[25]=o("label",{class:"form-check-label",for:"notebook"},"Display notebooks",-1)),t[26]||(t[26]=o("small",{class:"form-text text-muted"},"Render Jupyter notebooks instead of raw JSON.",-1))])])]),o("section",Yq,[t[37]||(t[37]=o("div",{class:"paper-section-eyebrow"},"Features",-1)),o("div",Jq,[o("div",Qq,[N(o("input",Xq,null,512),[[s,{state:e.viewState,set:a=>{e.options.page=a},value:e.options?.page,form:"defaultsForm",options:{}}]]),t[29]||(t[29]=o("label",{class:"form-check-label",for:"page"},"GitHub Pages",-1)),t[30]||(t[30]=o("small",{class:"form-text text-muted"},"Serve an anonymized copy of the repository's GitHub Pages site. Only pages built from the anonymized branch are supported.",-1))]),o("div",Zq,[N(o("input",xq,null,512),[[s,{state:e.viewState,set:a=>{e.options.loc=a},value:e.options?.loc,form:"defaultsForm",options:{}}]]),t[31]||(t[31]=o("label",{class:"form-check-label",for:"loc"},"Lines of code",-1)),t[32]||(t[32]=o("small",{class:"form-text text-muted"},"Show the line count of the repository in the explorer.",-1))]),o("div",eM,[N(o("input",tM,null,512),[[s,{state:e.viewState,set:a=>{e.options.update=a},value:e.options?.update,form:"defaultsForm",options:{}}]]),t[33]||(t[33]=o("label",{class:"form-check-label",for:"update"},"Auto-update from GitHub",-1)),t[34]||(t[34]=o("small",{class:"form-text text-muted"},"Follow the branch and pull the latest commit automatically, at most once an hour.",-1))])]),o("div",oM,[t[36]||(t[36]=o("label",{class:"paper-field-label",for:"mode"},"Fetch mode",-1)),N((l(),d("select",nM,[...t[35]||(t[35]=[o("option",{value:"GitHubStream",selected:""},"Stream from GitHub on demand",-1),o("option",{value:"GitHubDownload"},"Download to Anonymous GitHub",-1)])])),[[s,{state:e.viewState,set:a=>{e.options.mode=a},value:e.options?.mode,form:"defaultsForm",options:{}}]]),o("small",sM," Download is faster for reviewers and enables every feature. Streaming is the only option above "+c(e.fmt?.humanFileSize(e.site_options?.MAX_REPO_SIZE*1024))+". ",1)])]),o("section",rM,[t[41]||(t[41]=o("div",{class:"paper-section-eyebrow"},"Expiration",-1)),o("div",iM,[t[39]||(t[39]=o("label",{class:"paper-field-label",for:"expiration"},"When an anonymization expires",-1)),N((l(),d("select",aM,[...t[38]||(t[38]=[o("option",{value:"redirect"},"Redirect visitors to the GitHub repository",-1),o("option",{value:"remove",selected:""},"Remove the anonymized repository",-1)])])),[[s,{state:e.viewState,set:a=>{e.options.expirationMode=a},value:e.options?.expirationMode,form:"defaultsForm",options:{}}]]),t[40]||(t[40]=o("small",{class:"form-text text-muted"}," The expiration date itself is chosen per anonymization. Redirecting reveals the source repository, so pick it only once the review is over. ",-1))])]),e.draftRestored?(l(),d("div",lM,[t[42]||(t[42]=w("Your unsaved draft was restored. ",-1)),o("button",{type:"button",class:"draft-discard",onClick:t[0]||(t[0]=a=>e.discardDraft())},"Discard draft")])):e.unsavedChanges?(l(),d("div",dM,[w(c(e.draftSaved?"Draft saved in this tab for 30 minutes.":"Unsaved changes. Keep this tab open until you save.")+" ",1),o("button",{type:"button",class:"draft-discard",onClick:t[1]||(t[1]=a=>e.discardDraft())},c(e.isUpdate?"Restore saved settings":"Discard changes"),1)])):f("v-if",!0),o("div",uM,[e.error?(l(),d("div",cM,[t[43]||(t[43]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})],-1)),t[44]||(t[44]=w()),o("span",{textContent:c(e.error)},null,8,pM)])):f("v-if",!0),o("div",fM,[o("button",{id:"save",type:"submit",class:"btn btn-ink",disabled:e.saving},[e.message?(l(),d("svg",hM,[...t[45]||(t[45]=[o("use",{href:"#ui-icon-check"},null,-1)])])):f("v-if",!0),w(c(e.saving?"Saving\u2026":e.message?"Saved":"Save defaults"),1)],8,mM),t[46]||(t[46]=o("span",{class:"paper-settings-hint"},"Applies to new anonymizations only. Existing ones keep their settings.",-1))])])],32)),[[i,e.viewState]]),o("section",vM,[t[56]||(t[56]=o("div",{class:"paper-section-eyebrow"},"Account",-1)),o("div",yM,[e.user?.photo?(l(),d("img",{key:0,width:"40",height:"40",class:"rounded-circle",alt:"",src:e.safeUrl(e.user?.photo)},null,8,gM)):f("v-if",!0),o("div",bM,[o("div",wM,"@"+c(e.user?.username),1),t[47]||(t[47]=o("div",{class:"paper-account-meta"},"Signed in with GitHub. Anonymous GitHub only reads your repositories.",-1))]),t[48]||(t[48]=o("a",{class:"btn btn-outline-ink",href:"/api/user/logout",target:"_self"},"Sign out",-1))]),o("form",{class:"paper-account-email",onSubmit:t[6]||(t[6]=ie(a=>e.saveAccountEmail(),["prevent"]))},[t[49]||(t[49]=o("label",{class:"paper-field-label",for:"account-email"},"Email address",-1)),t[50]||(t[50]=o("p",{id:"account-email-help",class:"paper-section-copy"},"Used for account alerts. Your address is never shown on anonymous pages.",-1)),N(o("input",{id:"account-email",class:"form-control",type:"email",autocomplete:"email",maxlength:"254",required:"","onUpdate:modelValue":t[3]||(t[3]=a=>e.accountEmail=a),"aria-describedby":"account-email-help",disabled:e.emailLoading||e.emailSaving||!e.emailCSRFReady,onInput:t[4]||(t[4]=a=>e.emailSaved=!1)},null,40,kM),[[zt,e.accountEmail]]),e.emailLoading?(l(),d("p",EM,"Loading your email address\u2026")):f("v-if",!0),e.emailError?(l(),d("p",CM,c(e.emailError),1)):f("v-if",!0),!e.emailCSRFReady&&!e.emailLoading?(l(),d("button",{key:2,class:"btn btn-outline-ink mt-2",type:"button",onClick:t[5]||(t[5]=a=>e.loadAccountEmail())},"Try again")):f("v-if",!0),o("button",{class:"btn btn-ink mt-2",type:"submit",disabled:e.emailLoading||e.emailSaving||!e.emailCSRFReady},c(e.emailSaving?"Saving\u2026":"Save email address"),9,_M),e.emailSaved?(l(),d("p",SM,"Email address saved.")):f("v-if",!0)],32),t[57]||(t[57]=o("a",{class:"paper-settings-connection-link",href:"/connections"},[o("i",{class:"fab fa-github","aria-hidden":"true"}),o("span",null,[w("GitHub connections"),o("small",null,"Manage repository access and legacy OAuth.")]),o("span",{"aria-hidden":"true"},"\u2192")],-1)),o("div",NM,[t[54]||(t[54]=o("div",{class:"paper-danger-head"},"Delete account",-1)),t[55]||(t[55]=o("p",{class:"paper-danger-copy"}," Removes all your anonymized repositories, gists, and pull requests, revokes the application's access to your GitHub account, and erases your personal data (username, email, access tokens). This cannot be undone. ",-1)),e.deleteError?(l(),d("div",DM,[t[51]||(t[51]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})],-1)),t[52]||(t[52]=w()),o("span",{textContent:c(e.deleteError)},null,8,RM)])):f("v-if",!0),o("button",{type:"button",class:"btn btn-outline-danger",onClick:t[7]||(t[7]=a=>e.deleteAccount()),disabled:e.deletingAccount},[t[53]||(t[53]=o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1)),w(c(e.deletingAccount?"Deleting\u2026":"Delete my account"),1)],8,TM)])])])])])}var AM={class:"pr-page"},OM={class:"container paper-page pr-page-inner"},IM={class:"pr-header"},PM={class:"pr-title-row"},VM={class:"paper-page-title pr-title"},qM=["textContent"],MM={key:1,class:"text-muted"},UM=["href"],$M={class:"pr-header-meta"},LM={key:0,class:"pr-meta-item"},FM=["textContent"],zM={key:1,class:"pr-meta-item"},HM=["textContent"],BM={key:2,class:"pr-meta-item"},jM=["textContent"],GM={key:0,class:"pr-body-card"},WM={key:1,class:"paper-tabs",role:"tablist"},KM=["aria-selected","tabindex"],YM=["aria-selected","tabindex"],JM=["textContent"],QM={class:"paper-tab-content"},XM={key:0,role:"tabpanel",id:"pr-diff-panel","aria-labelledby":"pr-diff-tab"},ZM=["innerHTML"],xM={key:1,role:"tabpanel",id:"pr-comments-panel","aria-labelledby":"pr-comments-tab"},e8={class:"pr-comments"},t8={class:"pr-comment"},o8={class:"pr-comment-head"},n8={key:0,class:"pr-comment-author"},s8=["textContent"],r8=["textContent"],i8={key:0,class:"pr-comment-body"},a8={key:0,class:"paper-table-empty"};function Xl(e,t){let n=Ge("markdown");return l(),d("div",AM,[o("div",OM,[t[17]||(t[17]=o("div",{class:"paper-crumbs"},[o("a",{href:"/dashboard"},"Reviewer"),w(" \xA0/\xA0 "),o("span",{class:"here"},"Pull request")],-1)),o("header",IM,[o("div",PM,[o("h1",VM,[e.details?.title?(l(),d("span",{key:0,textContent:c(e.details?.title)},null,8,qM)):f("v-if",!0),e.details?.title?f("v-if",!0):(l(),d("span",MM,"Untitled pull request"))]),e.options?.isAdmin||e.options?.isOwner?(l(),d("a",{key:0,class:"btn btn-sm","aria-label":"Edit",href:e.safeUrl("/pull-request-anonymize/"+e.pullRequestId)},[...t[4]||(t[4]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),o("span",{class:"d-none d-md-inline"}," Edit",-1)])],8,UM)):f("v-if",!0)]),o("div",$M,[o("span",{class:A(["paper-pill",{good:e.details?.merged,warn:e.details?.state=="open",bad:e.details?.state=="closed"&&!e.details?.merged}])},[o("span",{class:A(["status-dot",{"status-ready":e.details?.merged,"status-error":e.details?.state=="closed"&&!e.details?.merged}])},null,2),w(" "+c(e.details?.merged?"Merged":e.fmt.title(e.details?.state)),1)],2),e.details?.baseRepositoryFullName?(l(),d("span",LM,[t[5]||(t[5]=o("i",{class:"fab fa-github"},null,-1)),t[6]||(t[6]=w()),o("span",{textContent:c(e.details?.baseRepositoryFullName)},null,8,FM)])):f("v-if",!0),e.details?.updatedDate?(l(),d("span",zM,[t[7]||(t[7]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),t[8]||(t[8]=w()),o("span",{textContent:c(e.fmt?.date(e.details?.updatedDate))},null,8,HM)])):f("v-if",!0),e.details?.anonymizeDate?(l(),d("span",BM,[t[9]||(t[9]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1)),t[10]||(t[10]=w(" Anonymized ",-1)),o("span",{textContent:c(e.fmt?.date(e.details?.anonymizeDate))},null,8,jM)])):f("v-if",!0)])]),e.details?.body?(l(),d("section",GM,[t[11]||(t[11]=o("div",{class:"paper-section-eyebrow"},"Description",-1)),Ce(n,{content:e.details?.body},null,8,["content"])])):f("v-if",!0),e.details?.diff||e.details?.comments?(l(),d("nav",WM,[e.details?.diff?(l(),d("button",{key:0,class:A(["paper-tab",{active:e.tabState?.active=="diff"}]),type:"button",role:"tab",id:"pr-diff-tab","aria-selected":e.tabState?.active==="diff","aria-controls":"pr-diff-panel",tabindex:e.tabState?.active==="diff"?0:-1,onKeydown:t[0]||(t[0]=r=>e.previewTabKeydown(r)),onClick:t[1]||(t[1]=r=>e.tabState.active="diff")},[...t[12]||(t[12]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-code"})],-1),w(" Diff ",-1)])],42,KM)):f("v-if",!0),e.details?.comments?(l(),d("button",{key:1,class:A(["paper-tab",{active:e.tabState?.active=="comments"}]),type:"button",role:"tab",id:"pr-comments-tab","aria-selected":e.tabState?.active==="comments","aria-controls":"pr-comments-panel",tabindex:e.tabState?.active==="comments"?0:-1,onKeydown:t[2]||(t[2]=r=>e.previewTabKeydown(r)),onClick:t[3]||(t[3]=r=>e.tabState.active="comments")},[t[13]||(t[13]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-comment"})],-1)),o("span",{textContent:c(e.fmt.plural(e.details?.comments?.length,{0:"No comments",one:"1 comment",other:"{} comments"}))},null,8,JM)],42,YM)):f("v-if",!0)])):f("v-if",!0),o("div",QM,[e.details?.diff&&e.tabState?.active=="diff"?(l(),d("div",XM,[o("div",{class:"pr-diff",innerHTML:e.sanitize(e.fmt?.diff(e.details?.diff))},null,8,ZM)])):f("v-if",!0),e.details?.comments&&e.tabState?.active=="comments"?(l(),d("div",xM,[o("ul",e8,[(l(!0),d(K,null,oe(e.details?.comments,(r,s)=>(l(),d("li",t8,[o("div",o8,[r?.author?(l(),d("span",n8,[t[14]||(t[14]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user"})],-1)),t[15]||(t[15]=w(" @",-1)),o("span",{textContent:c(r?.author)},null,8,s8)])):f("v-if",!0),r?.updatedDate?(l(),d("span",{key:1,class:"pr-comment-date",textContent:c(e.fmt?.date(r?.updatedDate))},null,8,r8)):f("v-if",!0)]),r?.body?(l(),d("div",i8,[Ce(n,{content:r?.body},null,8,["content"])])):f("v-if",!0)]))),256)),e.details?.comments?.length?f("v-if",!0):(l(),d("li",a8,[...t[16]||(t[16]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-comment"})],-1),o("span",null,"No comments on this pull request.",-1)])]))])])):f("v-if",!0)])])])}var l8={class:"container paper-page status-page"},d8={class:"d-flex align-items-center justify-content-between flex-wrap",style:{gap:"12px"}},u8={class:"paper-page-title"},c8=["textContent"],p8={key:1},f8={class:"paper-settings-section"},m8=["textContent"],h8={key:0,class:"paper-section-copy"},v8={key:1,class:"paper-ratelimit-card",role:"status"},y8={class:"paper-error-msg"},g8=["aria-valuenow"],b8={class:"paper-progress-label"},w8=["textContent"],k8={key:0},E8=["textContent"],C8={class:"paper-progress-pct"},_8={key:3,class:"paper-error-card",role:"alert"},S8={key:0,class:"paper-error-msg"},N8={key:1,class:"paper-error-msg"},D8={class:"paper-error-actions"},R8=["href"],T8={key:4,class:"share-link"},A8={class:"share-link-row"},O8=["value"],I8={class:"ui-icon","aria-hidden":"true"},P8=["href"],V8=["textContent"],q8={class:"share-link-actions"},M8=["href"],U8=["href"];function Zl(e,t){return l(),d("div",l8,[t[16]||(t[16]=o("div",{class:"paper-crumbs"},[w("Anonymization \xA0/\xA0 "),o("span",{class:"here"},"Status")],-1)),o("div",d8,[o("div",null,[o("h1",u8,[t[2]||(t[2]=w("Status of ",-1)),o("em",null,c(e.repoId),1)]),t[3]||(t[3]=o("p",{class:"paper-page-lede"},"Track progress as your anonymization is prepared.",-1))]),o("span",{class:A(["status-pill",{"status-pill-ready":e.repo?.status=="ready","status-pill-error":e.repo?.status=="error","status-pill-removed":e.repo?.status=="removed"||e.repo?.status=="expired","status-pill-ratelimit":e.rateLimitResetAt}])},[o("span",{class:A(["status-dot",{"status-ready":e.repo?.status=="ready","status-error":e.repo?.status=="error","status-removed":e.repo?.status=="removed"||e.repo?.status=="expired","status-ratelimit":e.rateLimitResetAt}])},null,2),e.rateLimitResetAt?f("v-if",!0):(l(),d("span",{key:0,textContent:c(e.fmt?.title(e.repo?.status))},null,8,c8)),e.rateLimitResetAt?(l(),d("span",p8,"Rate limited")):f("v-if",!0)],2)]),o("section",f8,[o("div",{class:"paper-section-eyebrow",textContent:c(e.repo?.status=="ready"?"Your anonymous link":"Progress")},null,8,m8),e.repo?.status!="ready"?(l(),d("p",h8,[...t[4]||(t[4]=[w(" The repository will take a few minutes to get ready, depending on its size. Visit the ",-1),o("a",{href:"/faq"},"FAQ",-1),w(" for more information. ",-1)])])):f("v-if",!0),e.rateLimitResetAt?(l(),d("div",v8,[t[7]||(t[7]=ue('
Temporarily paused
GitHub API rate limit reached
',1)),o("p",y8,[t[5]||(t[5]=w("Anonymization will resume automatically in ",-1)),o("strong",null,c(e.rateLimitCountdown),1),t[6]||(t[6]=w(". No action needed \u2014 the job is queued and will continue where it left off.",-1))])])):f("v-if",!0),e.repo?.status!="error"&&e.repo?.status!="ready"&&!e.rateLimitResetAt?(l(),d("div",{key:2,class:A(["paper-progress",{"paper-progress-ready":e.repo?.status=="ready"}]),role:"progressbar","aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":e.progress},[o("div",{class:"paper-progress-bar",style:Ie("width: "+e.progress+"%;")},null,4),o("div",b8,[o("span",{textContent:c(e.fmt?.title(e.repo?.status))},null,8,w8),e.repo?.statusMessage?(l(),d("span",k8,[t[8]||(t[8]=w("\xA0\xB7\xA0",-1)),o("span",{textContent:c(e.repo?.statusMessage)},null,8,E8)])):f("v-if",!0),o("span",C8,c(e.progress||0)+"%",1)])],10,g8)):f("v-if",!0),e.repo?.status=="error"&&!e.rateLimitResetAt?(l(),d("div",_8,[t[11]||(t[11]=ue('
Anonymization failed
Something went wrong while preparing this repository.
',1)),e.repo?.statusMessage?(l(),d("p",S8,c(e.fmt?.translate("ERRORS."+e.repo?.statusMessage)),1)):f("v-if",!0),e.repo?.statusMessage?f("v-if",!0):(l(),d("p",N8,"No additional details were reported. The most common causes are private repositories, missing branches, and rate limits.")),t[12]||(t[12]=o("ul",{class:"paper-error-hints"},[o("li",null,"Make sure the source URL points to a repository or pull request you can access."),o("li",null,"Check that the chosen branch and commit still exist on GitHub."),o("li",null,"If you just signed in, the access token may need a moment to propagate \u2014 try again.")],-1)),o("div",D8,[o("a",{class:"btn btn-ink",href:e.safeUrl("/anonymize/"+e.repoId)},[...t[9]||(t[9]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),w(" Edit anonymization",-1)])],8,R8),t[10]||(t[10]=ue(' Read the FAQ Report a bug in Anonymous GitHub',2))])])):f("v-if",!0),e.repo?.status=="ready"?(l(),d("div",T8,[t[15]||(t[15]=o("p",{class:"paper-section-copy"},"Reviewers can browse the repository at this address without seeing who you are.",-1)),o("div",A8,[o("input",{id:"share-url",class:"form-control share-link-input",readonly:"","aria-label":"Anonymous link",value:e.shareUrl,onFocus:t[0]||(t[0]=n=>n.target.select())},null,40,O8),o("button",{type:"button",class:"btn btn-ink",onClick:t[1]||(t[1]=n=>e.copyShareUrl())},[(l(),d("svg",I8,[o("use",{href:e.copied?"#ui-icon-check":"#project-icon-copy"},null,8,P8)])),o("span",{"aria-live":"polite",textContent:c(e.copied?"Copied":"Copy link")},null,8,V8)])]),o("div",q8,[o("a",{class:"btn",target:"_self",href:e.safeUrl("/r/"+e.repoId+"/")},[...t[13]||(t[13]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),w(" Open repository ",-1)])],8,M8),e.repo?.options?.page?(l(),d("a",{key:0,class:"btn",target:"_self",href:e.safeUrl("/w/"+e.repoId+"/")},[...t[14]||(t[14]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-globe"})],-1),w(" Open GitHub page ",-1)])],8,U8)):f("v-if",!0)])])):f("v-if",!0)]),t[17]||(t[17]=ue('
Support Anonymous GitHub

A small team keeps this running. If it helps you, please consider contributing back \u2014 in code, ideas, or coffee.

',1))])}var ls={"partials/reviewConsent.htm":_l,"partials/connections.htm":Sl,"partials/signin.htm":Nl,"partials/404.htm":Dl,"partials/admin/conferences.htm":Rl,"partials/admin/errors.htm":Tl,"partials/admin/overview.htm":Al,"partials/admin/queues.htm":Ol,"partials/admin/repositories.htm":Il,"partials/admin/user.htm":Pl,"partials/admin/users.htm":Vl,"partials/anonymize.htm":ql,"partials/anonymizePullRequest.htm":Ml,"partials/claim.htm":Ul,"partials/conference.htm":$l,"partials/conferences.htm":Ll,"partials/dashboard.htm":Fl,"partials/explorer.htm":zl,"partials/faq.htm":Hl,"partials/gist.htm":Bl,"partials/header.htm":jl,"partials/home.htm":Gl,"partials/loading.htm":Wl,"partials/newConference.htm":Kl,"partials/pageView.htm":Yl,"partials/pr-dashboard.htm":Jl,"partials/profile.htm":Ql,"partials/pullRequest.htm":Xl,"partials/status.htm":Zl};var $8={class:"ui-icon-definitions","aria-hidden":"true",focusable:"false"};function xl(e,t){return l(),d("svg",$8,[...t[0]||(t[0]=[ue('',1)])])}function ed(e,t){e==="partials/explorer.htm"&&(t.sidebarCollapsed=window.matchMedia?.("(max-width: 767px)").matches||!1),e==="partials/anonymize.htm"&&(t.prTabState={active:t.options.diff?"diff":"comments"},t.watchGroup(["options.diff","options.comments"],()=>{t.options[t.prTabState.active]||(t.prTabState.active=t.options.diff?"diff":t.options.comments?"comments":null)})),e==="partials/gist.htm"&&(t.tabState={active:t.details?.files?"files":"comments"}),["partials/conferences.htm","partials/conference.htm"].includes(e)&&(t.statusLabels={ready:"Ready",expired:"Expired",removed:"Removed"});let r={"partials/dashboard.htm":["filteredItems",()=>t.items,"itemFilter"],"partials/conferences.htm":["filteredConferences",()=>t.conferences,"conferenceFilter"],"partials/conference.htm":["filteredRepositories",()=>t.conference?.repositories,"repoFiler"],"partials/admin/repositories.htm":["filteredRepositories",()=>t.repositories,"repoFiler"],"partials/admin/user.htm":["filteredRepositories",()=>t.repositories,"repoFiler"],"partials/admin/users.htm":["filteredUsers",()=>t.users,"userFiler"],"partials/admin/conferences.htm":["filteredConferences",()=>t.conferences]}[e];if(r){let s=tt(()=>t.fmt.orderBy(t.fmt.filter(r[1](),t[r[2]]),t.orderBy));Object.defineProperty(t,r[0],{configurable:!0,get:()=>s.value})}}function td(e=(...t)=>fetch(...t)){async function t(r,s,i,a={}){let u=new URL(s,window.location.href);for(let[y,E]of Object.entries(a.params||{}))if(E!=null)for(let h of Array.isArray(E)?E:[E])u.searchParams.append(y,typeof h=="object"?JSON.stringify(h):h);let m=new AbortController,k;a.timeout?.then?a.timeout.then(()=>m.abort()):a.timeout&&(k=setTimeout(()=>m.abort(),a.timeout));try{let y={Accept:"application/json, text/plain, */*",...a.headers},E=document.cookie.match(/(?:^|;\s*)XSRF-TOKEN=([^;]*)/);E&&u.origin===window.location.origin&&(y["X-XSRF-TOKEN"]=decodeURIComponent(E[1]));let h;i!==void 0&&(i instanceof FormData?h=i:(y["Content-Type"]||(y["Content-Type"]="application/json;charset=utf-8"),h=JSON.stringify(i)));let C=await e(u.href,{method:r,headers:y,body:h,credentials:"same-origin",signal:m.signal}),g=await C.text(),b=g;if(a.transformResponse)b=a.transformResponse(g);else if(g&&(/json/i.test(C.headers.get("content-type")||"")||/^[\[{]/.test(g.trim())))try{b=JSON.parse(g)}catch{}let S={data:b,status:C.status,headers:R=>C.headers.get(R)};if(!C.ok)throw S;return S}catch(y){throw y.name==="AbortError"?{status:-1,data:null}:y}finally{clearTimeout(k)}}let n={};for(let r of["get","delete","head"])n[r]=(s,i)=>t(r.toUpperCase(),s,void 0,i);for(let r of["post","put","patch"])n[r]=(s,i,a)=>t(r.toUpperCase(),s,i,a);return n}var od={resolve:e=>Promise.resolve(e),reject:e=>Promise.reject(e),all:e=>Promise.all(e),defer(){let e,t;return{promise:new Promise((r,s)=>{e=r,t=s}),resolve:e,reject:t}}};var nd=function(e){function t(n){return n=n||{used:0,total:0},n.unlimited=!n.total,n.percent=n.unlimited?0:Math.min(100,n.used*100/n.total),n.level=n.unlimited?"unlimited":n.percent>=95?"danger":n.percent>=80?"warn":"ok",n}return{decorate:t,load:function(){return e.get("/api/user/quota").then(n=>{let r=n.data||{};return r.storage=t(r.storage),r.file=t(r.file),r.repository=t(r.repository),r})}}};var mr={};Ed(mr,{bigNum:()=>F8,date:()=>X8,diff:()=>G8,filter:()=>J8,humanFileSize:()=>L8,humanTime:()=>z8,limitTo:()=>Y8,number:()=>W8,orderBy:()=>Q8,plural:()=>Z8,statusLabel:()=>B8,statusMsg:()=>j8,title:()=>H8,uppercase:()=>K8});var L8=e=>window.humanFileSize(e),F8=(function(){return function(t){let n=Number(t)||0,r=Math.abs(n);return r<1e3?String(n):r<1e4?(n/1e3).toFixed(1).replace(/\.0$/,"")+"k":r<1e6?Math.round(n/1e3)+"k":r<1e7?(n/1e6).toFixed(1).replace(/\.0$/,"")+"M":Math.round(n/1e6)+"M"}})(),z8=(function(){return function(t){if(!t)return"never";t instanceof Date&&(t=Math.round((Date.now()-t)/1e3)),(typeof t=="string"||typeof t=="number")&&(t=Math.round((Date.now()-new Date(t))/1e3));var n=t<0?"from now":"ago";if(Math.abs(t)>7200*24){let m=new Date;return m.setSeconds(m.getSeconds()-t),"on "+m.toLocaleDateString(void 0,{day:"numeric",month:"short",year:"numeric"})}t=Math.abs(t);for(var r=[t/60/60/24/365,t/60/60/24/30,t/60/60/24/7,t/60/60/24,t/60/60,t/60,t],s=["year","month","week","day","hour","minute","second"],i=0;i1&&(u+="s"),a>=1)return a+" "+u+" "+n}return"0 seconds "+n}})(),H8=(function(){return function(e){if(!e)return e;e=e.toLowerCase();var t=e.split(" "),n=t.map(function(r){return r.charAt(0).toUpperCase()+r.substring(1,r.length)});return n.join(" ")}})(),B8=(function(){var e={ready:"Ready",error:"Error",expired:"Expired",expiring:"Expiring",removed:"Removed",removing:"Removing",queue:"Queued",download:"Downloading",downloaded:"Downloaded",preparing:"Preparing",anonymizing:"Anonymizing"};return function(t){if(!t)return"";if(e[t])return e[t];var n=String(t).replace(/[_-]+/g," ").toLowerCase();return n.charAt(0).toUpperCase()+n.slice(1)}})(),j8=(function(){var e={branch_not_found:"Branch not found on GitHub",repo_not_found:"Repository not found on GitHub",repository_not_found:"Repository not found on GitHub",repo_not_accessible:"Repository is not accessible with your token",pr_not_found:"Pull request not found on GitHub",gist_not_found:"Gist not found on GitHub",commit_not_found:"Commit not found on GitHub",repo_too_big:"Repository exceeds the size limit",quota_exceeded:"Storage quota exceeded",incomplete_record:"Incomplete record: missing identifier"};return function(t){if(!t)return t;var n=t.match(/^rate_limited:(\d+)$/);if(n){var r=Math.max(0,Math.ceil((parseInt(n[1],10)-Date.now())/1e3));if(r<=0)return"Rate limited \u2014 resuming soon";var s=Math.floor(r/60),i=r%60;return"Rate limited \u2014 retrying in "+(s>0?s+"m "+i+"s":i+"s")}if(e[t])return e[t];if(/^[a-z0-9]+(_[a-z0-9]+)+$/.test(t)){var a=t.replace(/_/g," ");return a.charAt(0).toUpperCase()+a.slice(1)}return t}})(),G8=(function(e){let t=r=>r.replace(/&/g,"&").replace(//g,">");function n(r,s){if(!s)return;let i=s.newPath&&s.newPath!=="/dev/null"?s.newPath:s.oldPath||"",a=s.oldPath==="/dev/null"?"added":s.newPath==="/dev/null"?"deleted":s.oldPath&&s.newPath&&s.oldPath!==s.newPath?"renamed":"modified";if(r.push('
'),r.push('
'+t(i)+''+a+"
"),s.lines.length){r.push('');for(let u of s.lines)r.push('");r.push("
'+(u.oldNo||"")+''+(u.newNo||"")+''+(u.kind==="add"?"+":u.kind==="remove"?"-":u.kind==="hunk"?"@":"")+''+t(u.text)+"
")}r.push("
")}return function(r){if(!r)return r;let s=[],i=null,a=0,u=0,m=()=>(i||(i={oldPath:"",newPath:"",lines:[]}),i),k=()=>{i&&(i.lines.length||i.oldPath||i.newPath)&&(n(s,i),i=null)},y=r.split(` -`);for(let E=0;Ee});function W8(e,t){return e==null?"":Number(e).toLocaleString(void 0,t==null?{}:{minimumFractionDigits:t,maximumFractionDigits:t})}function K8(e){return String(e??"").toUpperCase()}function Y8(e,t,n=0){return(e||[]).slice(n,n+t)}function J8(e,t){return Array.isArray(e)?typeof t=="function"?e.filter(t):e:[]}function Q8(e,t){if(!t)return e||[];let n=Array.isArray(t)?t:[t];return[...e||[]].sort((r,s)=>{for(let i of n){let a=i[0]==="-"?-1:1;i=i.replace(/^[+-]/,"");let u=i.split(".").reduce((k,y)=>k?.[y],r),m=i.split(".").reduce((k,y)=>k?.[y],s);if(typeof u=="string"&&(u=u.toLowerCase()),typeof m=="string"&&(m=m.toLowerCase()),u!==m)return(u==null?-1:m==null?1:ur[s])}function Z8(e,t){return(t?.[e]??t?.[e===1?"one":"other"]??"").replace(/\{\}/g,e??0)}var sd={name:"htmlDoc",props:["content","baseUrl","allowScripts"],setup(e){let t=xe(null);return $t(()=>{let r=[t.value][0];r.classList.add("html-doc");function s(){r.innerHTML="";let i=e.content;if(typeof i!="string")return;let a=document.createElement("iframe");a.className="html-doc-frame",a.setAttribute("title","Rendered HTML document");let u=["allow-popups","allow-popups-to-escape-sandbox"];e.allowScripts&&u.push("allow-scripts","allow-forms","allow-modals"),a.setAttribute("sandbox",u.join(" ")),a.setAttribute("referrerpolicy","no-referrer"),r.appendChild(a);let m="";e.baseUrl&&(m=''),a.srcdoc=m+i}He(()=>e.content,s,{immediate:!0}),He(()=>e.baseUrl,s,{immediate:!0}),He(()=>e.allowScripts,s,{immediate:!0})}),()=>be("html-doc",{ref:t})}};var rd={name:"pdfviewer",props:["src"],setup(e){let t=xe(null);return $t(()=>{let n=[t.value],r=400,s=[.5,.75,1,1.25,1.5,2,3],i=1e3,a=n[0];a.classList.add("pdf-viewer");let u=null,m=[],k=!1,y=null,E=1,h=1,C=0,g=0,b=612/792,S=0,R=null,T=new Map,q=0;function M(p){let v=T.get(p);v&&(v.cancelled=!0,v.task?.cancel?.(),T.delete(p));let D=p.querySelector("canvas");D&&(D.width=0,D.height=0),p.innerHTML="",delete p.dataset.state}let V=document.createElement("div");V.className="pdf-toolbar";let z=document.createElement("div");z.className="pdf-pages",z.tabIndex=0,z.setAttribute("aria-label","PDF pages"),a.appendChild(V),a.appendChild(z);function ne(p,v,D){let O=document.createElement("button");return O.type="button",O.className="pdf-toolbar-btn",O.title=v,O.setAttribute("aria-label",v),O.innerHTML='',O.addEventListener("click",D),O}let ee=ne("fa-chevron-up","Previous page",function(){qe(h-1)}),_=ne("fa-chevron-down","Next page",function(){qe(h+1)}),P=document.createElement("input");P.type="text",P.className="pdf-toolbar-page",P.setAttribute("aria-label","Page number"),P.title="Page number \u2014 type a page and press Enter",P.addEventListener("keydown",function(p){p.key==="Enter"&&(qe(parseInt(P.value,10)),P.blur())}),P.addEventListener("blur",function(){P.value=String(h)});let G=document.createElement("span");G.className="pdf-toolbar-count";let J=ne("fa-search-minus","Zoom out",function(){te(s[Math.max(0,de()-1)])}),X=ne("fa-search-plus","Zoom in",function(){te(s[Math.min(s.length-1,de()+1)])}),W=document.createElement("button");W.type="button",W.className="pdf-toolbar-btn pdf-toolbar-zoom",W.title="Reset zoom to fit the width",W.setAttribute("aria-label","Reset zoom to fit the width"),W.addEventListener("click",function(){te(1)}),V.appendChild(ee),V.appendChild(_);let se=document.createElement("span");se.className="pdf-toolbar-group",se.appendChild(P),se.appendChild(G),V.appendChild(se);let ce=document.createElement("span");ce.className="pdf-toolbar-group pdf-toolbar-right",ce.appendChild(J),ce.appendChild(W),ce.appendChild(X),V.appendChild(ce);function de(){let p=0;for(let v=0;v=p,W.textContent=Math.round(E*100)+"%",J.disabled=de()===0,X.disabled=de()===s.length-1}function _e(p){let v=m[p-1];v&&(z.scrollTop+=v.getBoundingClientRect().top-z.getBoundingClientRect().top)}function qe(p){if(!u||isNaN(p))return;let v=Math.min(Math.max(1,p),u.numPages);m[v-1]&&(_e(v),h=v,C=v,g=Date.now()+800,re(),ke())}function Me(){if(!m.length||Date.now(){}),R=null),y&&(clearTimeout(y),y=null),u&&(u.destroy(),u=null),m=[],h=1,z.innerHTML="",re()}function Se(){z.innerHTML="";let p=document.createElement("div");p.className="pdf-viewer-error",p.textContent="This PDF could not be displayed.",z.appendChild(p)}function ze(){let p=Math.max(120,z.clientWidth-24);return Math.round(Math.min(p,i)*E)}function Ue(p,v,D){let O=window.devicePixelRatio||1,I=p.getViewport({scale:1}),U=parseFloat(v.style.width);if(!U)return;let L=p.getViewport({scale:U/I.width*O}),H=document.createElement("canvas");return H.width=Math.floor(L.width),H.height=Math.floor(L.height),H.style.width=U+"px",H.style.height=Math.floor(L.height/O)+"px",v.innerHTML="",v.appendChild(H),v.style.height=H.style.height,D.task=p.render({canvasContext:H.getContext("2d"),viewport:L}),D.task.promise}function ke(){if(!u)return;let p=S,v=z.getBoundingClientRect(),D=v.top-r,O=v.top+z.clientHeight+r,I=m.map((L,H)=>({slot:L,i:H,rect:L.getBoundingClientRect()})).filter(L=>L.rect.top<=O&&L.rect.bottom>=D).sort((L,H)=>Math.abs(L.rect.top-v.top)-Math.abs(H.rect.top-v.top)).slice(0,6),U=new Set(I.map(L=>L.slot));for(let L of T.keys())U.has(L)||M(L);for(let{slot:L,i:H}of I){if(L.dataset.state||q>=2)continue;let Y={cancelled:!1,task:null};T.set(L,Y),q++,L.dataset.state="rendering";let B;u.getPage(H+1).then(le=>{if(B=le,!(Y.cancelled||p!==S))return Ue(B,L,Y)}).then(()=>{Y.cancelled||p!==S||(L.dataset.state="done",C&&Date.now(){!Y.cancelled&&p===S&&(L.dataset.state="failed")}).finally(()=>{q--,B?.cleanup?.(),u&&ke()})}}function F(){k||(k=!0,window.requestAnimationFrame(function(){k=!1,Me(),ke()}))}function Z(){let p=!1;function v(){p||(p=!0,ke())}window.requestAnimationFrame(v),window.setTimeout(v,50)}function Q(){S++,m.forEach(M);let p=ze();m.forEach(function(v){delete v.dataset.state,v.innerHTML="",v.style.width=p+"px",v.style.height=Math.round(p/b)+"px"}),ke()}function te(p){if(!u||!m.length||p===E)return;let v=h;E=p,re(),Q(),qe(v)}function ye(){u&&(y&&clearTimeout(y),y=setTimeout(function(){y=null,u&&m.length&&Q()},250))}function Ee(p){if(Pe(),!p)return;let v=S;R=pdfjsLib.getDocument({url:p,isEvalSupported:!1,standardFontDataUrl:"/script/external/pdf-standard-fonts/",cMapUrl:"/script/external/pdf-cmaps/",cMapPacked:!0}),R.promise.then(function(D){if(v!==S){D.destroy();return}return u=D,u.getPage(1).then(function(O){if(v!==S)return;let I=O.getViewport({scale:1});I.width&&I.height&&(b=I.width/I.height);let U=ze();for(let L=1;L<=u.numPages;L++){let H=document.createElement("div");H.className="pdf-viewer-page",H.style.width=U+"px",H.style.height=Math.round(U/b)+"px",z.appendChild(H),m.push(H)}re(),Z()})}).catch(function(){v===S&&Se()})}z.addEventListener("scroll",F,{passive:!0}),$(window).on("resize",ye),re(),He(()=>e.src,Ee,{immediate:!0}),co(function(){z.removeEventListener("scroll",F),$(window).off("resize",ye),Pe()})}),()=>be("pdfviewer",{ref:t})}};var x8={key:0,class:"quota-row quota-usage"},e6={class:"quota-header"},t6={class:"quota-label"},o6={class:"project-type-svg","aria-hidden":"true"},n6=["href"],s6={key:0,class:"quota-percent"},r6={key:1,class:"quota-unlimited-tag"},i6={class:"quota-value"},a6={key:0},l6=["aria-label","aria-valuenow","aria-valuemax","aria-valuetext"],d6={key:1,class:"quota-remaining"},u6={key:2,class:"quota-remaining quota-limit"};function id(e,t){return e.quota?(l(),d("div",x8,[(l(),d(K,null,oe([{key:"repository",label:"Repositories",kind:"count",icon:"project-type-repo"},{key:"storage",label:"Storage",kind:"bytes",icon:"project-icon-storage"},{key:"file",label:"Files",kind:"count",icon:"project-icon-file"}],n=>o("div",{class:A(["quota-item","quota-"+e.quota[n.key].level]),key:n.key},[o("div",e6,[o("span",t6,[(l(),d("svg",o6,[o("use",{href:"#"+n.icon},null,8,n6)])),w(c(n.label),1)]),e.quota[n.key].unlimited?f("v-if",!0):(l(),d("span",s6,c(e.fmt.number(e.quota[n.key].percent,0))+"% used",1)),e.quota[n.key].unlimited?(l(),d("span",r6,"Unlimited")):f("v-if",!0)]),o("div",i6,[o("strong",null,c(e.formatAmount(e.quota[n.key].used,n.kind)),1),e.quota[n.key].unlimited?f("v-if",!0):(l(),d("span",a6," / "+c(e.formatAmount(e.quota[n.key].total,n.kind)),1))]),e.quota[n.key].unlimited?f("v-if",!0):(l(),d("div",{key:0,class:A(["quota-track","quota-"+e.quota[n.key].level]),role:"progressbar","aria-valuemin":"0","aria-label":n.label+" quota","aria-valuenow":Math.min(e.quota[n.key].used,e.quota[n.key].total),"aria-valuemax":e.quota[n.key].total,"aria-valuetext":e.fmt.number(e.quota[n.key].percent,0)+"% used"},[e.quota[n?.key].unlimited?f("v-if",!0):(l(),d("div",{key:0,class:"quota-fill",style:Ie({width:e.quota[n.key].percent+"%"})},null,4))],10,l6)),!e.quota[n.key].unlimited&&e.quota[n.key].used=e.quota[n.key].total?(l(),d("p",u6,c(e.quota[n.key].used>e.quota[n.key].total?"Limit exceeded":"Limit reached"),1)):f("v-if",!0)],2)),64))])):f("v-if",!0)}var c6={props:["quota","fmt"],setup(e){return{formatAmount:(t,n)=>n==="bytes"?e.fmt.humanFileSize(t).replace(/([a-zA-Z]+)$/," $1"):e.fmt.number(t)}},render:id},p6=new Set(pe),ld={props:["content","terms","options"],setup(e){let t=xe(null),n=()=>{t.value.innerHTML=renderMD(e.content||"",window.location.pathname+"/../")};return $t(()=>{n(),He(()=>[e.content,e.terms,e.options],n,{deep:!0})}),()=>be("markdown",{ref:t})}},f6={props:["file","terms","options"],setup(e){let t=xe(null),n=()=>ot(()=>t.value?.querySelectorAll("pre code").forEach(r=>window.Prism?.highlightElement(r)));return $t(n),He(()=>[e.file?.content,e.terms,e.options],n,{deep:!0}),()=>{let r=e.file||{},s=(r.filename||"").split(".").pop().toLowerCase();if(["md","markdown"].includes(s)||r.language==="Markdown")return be("gist-file",{ref:t},be(ld,{content:r.content,terms:e.terms,options:e.options}));let i={js:"javascript",jsx:"javascript",ts:"javascript",typescript:"javascript",py:"python",html:"markup",xml:"markup",svg:"markup",sh:"bash"},a=(r.language||s||"none").toLowerCase();return be("gist-file",{ref:t},be("pre",{class:"line-numbers"},be("code",{class:"language-"+(i[a]||a),key:r.content},r.content||"")))}}},m6={props:["file","content"],setup(e){let t=xe(null),n=0,r,s=async()=>{let i=++n;r?.abort(),r=new AbortController;try{let a=e.content?JSON.parse(e.content):await fetch(e.file?.download_url||e.file,{signal:r.signal}).then(u=>{if(!u.ok)throw Error("Notebook request failed");return u.json()});if(await oo("notebook"),i!==n)return;t.value.innerHTML=DOMPurify.sanitize(nb.parse(a).render()),t.value.querySelectorAll("pre code").forEach(u=>window.Prism?.highlightElement(u))}catch(a){i===n&&a.name!=="AbortError"&&(t.value.textContent="Unable to render the notebook.")}};return $t(()=>{s(),He(()=>[e.file,e.content],s)}),co(()=>{n++,r?.abort()}),()=>be("notebook",{ref:t})}},h6={props:["stats"],setup(e){return()=>{let t=Object.entries(e.stats||{}).filter(([,r])=>r.code),n=t.reduce((r,[,s])=>r+s.code,0);return be("loc",t.map(([r,s])=>be("div",{class:"lang",title:`${r}: ${s.code.toLocaleString()} lines`,style:{width:s.code*100/n+"%",background:langColors[r]}})))}}},dd={Markdown:ld,GistFile:f6,Notebook:m6,Loc:h6,HtmlDoc:sd,QuotaUsage:c6,Pdfviewer:Ei(async()=>(await oo("pdf"),pdfjsLib.GlobalWorkerOptions.workerSrc="/script/external/pdf.worker.js",rd))},ud={async mounted(e,{value:t}){e._editorValue=t;try{if(await kr(),e._editorDisposed)return;let n=e._editorValue,r=ace.edit(e);e._editor=r,r.setValue(String(n.content??""),-1),ad(e,n.options),e._editorCleanup=n.options?.onLoad?.(r)}catch(n){e._editorDisposed||(e.textContent=n.message)}},updated(e,{value:t}){e._editorValue=t,e._editor&&(e._editor.getValue()!==String(t.content??"")&&e._editor.setValue(String(t.content??""),-1),ad(e,t.options))},beforeUnmount(e){e._editorDisposed=!0,e._editorCleanup?.(),e._editor?.destroy()}};function ad(e,t={}){let n=p6.has(t.mode)?t.mode:"text";e._editor.session.setMode("ace/mode/"+n),t.theme&&e._editor.setTheme("ace/theme/"+t.theme),e._editor.setReadOnly(t.readOnly!==!1)}var cd={mounted(e){if(!window.IntersectionObserver)return;let t=[...e.querySelectorAll('a[href^="#"]')],n=new Set,r=new IntersectionObserver(s=>{s.forEach(a=>a.isIntersecting?n.add(a.target.id):n.delete(a.target.id));let i=t.find(a=>n.has(a.hash.slice(1)));t.forEach(a=>a.classList.toggle("active",a===i))},{rootMargin:"-20% 0px -60% 0px",threshold:0});ot(()=>t.forEach(s=>{let i=document.getElementById(s.hash.slice(1));i&&r.observe(i)})),e._observer=r},beforeUnmount(e){e._observer?.disconnect()}};function v6(e){let t={children:[]},n=new Map([["",t]]);function r(s){if(n.has(s))return n.get(s);let i=s.lastIndexOf("/"),a=r(i<0?"":s.slice(0,i)),u={name:s.slice(i+1),children:[]};return n.set(s,u),a.children.push(u),u}for(let s of e||[]){let i=s.path?`${s.path}/${s.name}`:s.name;s.size==null?r(i):r(s.path||"").children.push({...s})}return t.children}var pd={name:"FileTree",props:["file","parent","searchQuery","searchResults","page"],setup(e){let t=Xa(),n=xe(null),r=Fe(Object.create(null)),s=null,i=tt(()=>v6(e.file)),a=()=>"/"+(Array.isArray(t.params.path)?t.params.path.join("/"):t.params.path||"");He(()=>[t.params.repoId,t.params.path],()=>{let h="";a().split("/").filter(Boolean).forEach(C=>{h+="/"+C,r[h]=!0})},{immediate:!0});let u=tt(()=>{if(!e.searchQuery||!e.searchResults)return null;let h=new Set,C=new Set;return e.searchResults.forEach(g=>{h.add(g.path?`${g.path}/${g.name}`:g.name);let b="";(g.path||"").split("/").filter(Boolean).forEach(S=>{b=b?b+"/"+S:S,C.add(b)})}),{files:h,folders:C}}),m=()=>[...n.value.querySelectorAll("li > a")],k=h=>{n.value.querySelector(".tree-focused")?.classList.remove("tree-focused"),h&&(s=h.dataset.path,h.classList.add("tree-focused"),h.scrollIntoView?.({block:"nearest"}),n.value.focus())};function y(h){let C=m(),g=n.value.querySelector(".tree-focused")||C[0],b=C.indexOf(g);if(!["ArrowDown","ArrowUp","ArrowRight","ArrowLeft","Enter"].includes(h.key)||(h.preventDefault(),h.key==="ArrowDown"&&k(C[(b+1)%C.length]),h.key==="ArrowUp"&&k(C[(b-1+C.length)%C.length]),!g))return;let S=g.closest("li");h.key==="ArrowRight"&&S.classList.contains("folder")&&(S.classList.contains("open")?k(S.querySelector(":scope > ul > li > a")):g.click()),h.key==="ArrowLeft"&&(S.classList.contains("folder")&&S.classList.contains("open")?g.click():k(S.parentElement.closest("li.folder")?.querySelector(":scope > a"))),h.key==="Enter"&&g.click()}function E(h,C=""){let g=[...h].sort((b,S)=>+!!S.children-+!!b.children||b.name.localeCompare(S.name));return be("ul",g.flatMap(b=>{let S=b,R=S.name,T=(C+"/"+R).slice(1);if(u.value&&!u.value.files.has(T)&&!u.value.folders.has(T))return[];for(;S.children?.length===1;)S=S.children[0],R+="/"+S.name;let q=C+"/"+R,M=!!S.children,V=u.value?r[q]!==!1:!!r[q],z=M&&e.page?.options?.truncatedFolders?.includes(q.slice(1)),ne=e.page?.fileCounts?.[q.slice(1)]||0,ee=be("span",{class:M?"tree-icon-folder":"far fa-file tree-icon-file","aria-hidden":"true"},M?be("svg",{viewBox:"0 0 14 12",focusable:"false"},be("path",{d:"M1.5 10.5v-9h4l1.5 2h5.5v7z"})):null),_=be("span",{class:"tree-name"},R),P=J=>{k(J.currentTarget),M&&(J.preventDefault(),r[q]=!V,r[q]&&!S.children.length&&e.page.getFiles(q.slice(1)),ot(()=>k(m().find(X=>X.dataset.path===s))))},G=be("a",{"data-path":q,href:M?void 0:`/r/${encodeURIComponent(t.params.repoId)}${encodePathForUrl(q)}`,class:{"tree-focused":s===q},onClick:P},[M?be("span",{class:"tree-toggle"}):C?be("span",{class:"tree-spacer"}):null,ee,_,z?be("span",{class:"truncated-warning",title:e.page.fmt.translate("WARNINGS.folder_truncated")},be("i",{class:"fas fa-exclamation-triangle"})):null,M&&ne?be("span",{class:"tree-count"},ne):null]);return be("li",{key:q,class:{file:!0,folder:M,open:V,active:a()===q,truncated:z},title:M?"":`Size: ${humanFileSize(S.size||0)}`},[G,M&&V?E(S.children,q):null])}))}return()=>be("tree",{ref:n,tabindex:0,onKeydown:y},e.file?.length?u.value?.files.size===0?be("div",{class:"tree-search-empty"},"No files found"):E(i.value):"Empty repository")}};function md(){return Fe({errors:{},dirty:!1,touched:!1,submitted:!1,get invalid(){return Object.values(this.errors).some(Boolean)},setValidity(e,t){this.errors[e]=!t},setDirty(){this.dirty=!0}})}function hd(e,t){if(!e[t]){let n=md();Object.defineProperty(n,"invalid",{get(){return Object.values(n.errors).some(Boolean)||Object.keys(n).some(r=>r!=="invalid"&&n[r]&&typeof n[r]=="object"&&n[r].invalid)}}),e[t]=n}return e[t]}var vd={beforeMount(e,{value:t}){e._formState=hd(t,e.name),e.addEventListener("submit",n=>n.preventDefault())}};function y6(e){return e instanceof Date?isNaN(e)?"":`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`:e||""}function fd(e){let t=e._field.binding.value;e.type==="checkbox"?e.checked=!!t:e.type==="radio"?e.checked=t==(e._value??e.value):e._field.timer||(e.value=e.type==="date"?y6(t):t??""),hr(e)}function hr(e){let t=e._field.validation;if(!t)return;let n=e.validity;for(let[r,s]of Object.entries({required:n.valueMissing,pattern:n.patternMismatch,min:n.rangeUnderflow,max:n.rangeOverflow,date:n.badInput,email:n.typeMismatch&&e.type==="email",url:n.typeMismatch&&e.type==="url"}))t.setValidity(r,e.disabled||!s)}var yd={beforeMount(e,{value:t}){var a;let n=t.form&&hd(t.state,t.form),r=n&&e.name?n[a=e.name]||(n[a]=md()):null;e._field={binding:t,validation:r,timer:null};let s=()=>{clearTimeout(e._field.timer),e._field.timer=null;let u=e._field.binding,m=e.type==="checkbox"?e.checked:e._value??e.value;if(!(e.type==="radio"&&!e.checked)){if((e.type==="number"||e.type==="range")&&(m=e.value===""?null:Number(e.value)),e.type==="date"&&(m=e.value?new Date(e.value+"T00:00:00"):null),r){r.setDirty();for(let k of Object.keys(r.errors))r.setValidity(k,!0)}u.set(m),hr(e),u.change?.()}};e._field.commit=s;let i=u=>{let m=e._field.binding.options?.debounce||0,k=typeof m=="number"?m:m[u.type]??m.default??0;clearTimeout(e._field.timer),k?e._field.timer=setTimeout(s,k):s()};e.addEventListener(e.tagName==="SELECT"||["checkbox","radio","date"].includes(e.type)?"change":"input",i),e.addEventListener("blur",()=>{r&&(r.touched=!0),e._field.timer&&s()})},mounted:fd,updated(e,{value:t}){e._field.binding=t,fd(e)},beforeUnmount(e){clearTimeout(e._field.timer);let{binding:t,validation:n}=e._field,r=t.form&&t.state[t.form];r&&r[e.name]===n&&delete r[e.name]}};function gd(e,t){let n=e.target.closest("form");if(n?._formState&&(n._formState.submitted=!0),n?.querySelectorAll("input, select, textarea").forEach(r=>{r._field?.timer&&r._field.commit(),r._field&&hr(r)}),n&&!n.checkValidity()){let r=n.querySelector(":invalid");r?.scrollIntoView?.({block:"center"}),r?.focus(),n.reportValidity();return}return t()}var bd=Symbol("session"),g6=/^\/(w|api|github)(\/|$)/;function wd(e,t={}){let n=e?.split(".").reduce((r,s)=>r?.[s],vn);return n==null&&e?.startsWith("ERRORS.")&&(n=vn.ERRORS.unknown_error),String(n??e??"").replace(/{{\s*([^}]+?)\s*}}/g,(r,s)=>t[s]??"")}var b6={...mr,translate:wd};function w6(e){if(e==null||e==="")return e;try{let t=new URL(e,window.location.href);return["http:","https:","mailto:","tel:","blob:"].includes(t.protocol)?e:void 0}catch{return}}function k6(e="#app",t={}){let n=!!document.querySelector('meta[name="review-consent-page"][content="1"]'),r=n&&window.location.pathname==="/review-link"?br(window):null,s=()=>{let h=r;return r=null,h};!t.history&&window.location.pathname==="/"&&/^#!\/r\/[^/?#]+/.test(window.location.hash)&&window.history.replaceState(window.history.state,"",window.location.hash.slice(2));let i=new Map,a=td(t.fetch),u,m;function k(){let h=ut(),C={url(b){return b===void 0?m.currentRoute.value.fullPath:(m.push(b),C)},path(){return m.currentRoute.value.path},search(){return m.currentRoute.value.query}},g=new Proxy({},{get(b,S){let R=m.currentRoute.value.params[S];return Array.isArray(R)?R.join("/"):R}});return{takeReviewHandoff:s,http:a,...h,location:C,params:g,window,promises:od,html:{trustAsHtml:b=>b},translate:(b,S)=>Promise.resolve(wd(b,S)),quotaService:nd(a)}}function y(h){return{name:h.template,setup(){let C=dr(dt(bd),i);h.setup(C,k()),ed(h.template,C);let g=[];return()=>ls[h.template](C,g)}}}m=Qa({history:t.history||Ka(),routes:Cl.map(h=>h.redirect?h:{path:h.path,component:y(h),meta:{title:h.title,preserveExplorer:h.preserveExplorer}})});let E=ma({setup(){u=dr(null,i),u.fmt=b6,u.window=window,u.Math=Math,u.sanitize=b=>DOMPurify.sanitize(b??""),u.highlightRedactions=b=>(u.site_options,tl(b)),u.submitForm=gd,u.safeUrl=w6;let h=k();nl(u,h.http,h.location,h.timeout),uo(bd,u),He(()=>u.title,b=>{document.title=b||"Anonymous GitHub"});let C=[],g=b=>{let S=b.target.closest?.("a[href]");if(b.defaultPrevented||b.button!==0||b.metaKey||b.ctrlKey||b.shiftKey||b.altKey||!S||S.hasAttribute("download")||S.target&&S.target!=="_self"||S.dataset.toggle||S.getAttribute("href").startsWith("#"))return;let T=new URL(S.href,window.location.href);n||/^\/review-link\/?$/i.test(T.pathname)||T.origin!==window.location.origin||g6.test(T.pathname)||(b.preventDefault(),m.push(T.pathname+T.search+T.hash),$("#navbarSupportedContent.show").collapse("hide"))};return document.addEventListener("click",g),co(()=>document.removeEventListener("click",g)),()=>[xl(u,[]),n?null:be("header",{class:"app-header"},ls["partials/header.htm"](u,C)),be("main",{class:"app-view align-items-stretch w-100"},be(lr,null,{default:({Component:b,route:S})=>b?be(b,{key:S.meta.preserveExplorer?S.matched[0]?.path:S.path}):null})),be("div",{class:"position-fixed p-3",style:{zIndex:999999999,right:0,bottom:0}},u.toasts.map((b,S)=>be("div",{class:"toast show",role:"alert","aria-live":"assertive","aria-atomic":"true",key:S},[be("div",{class:"toast-header"},[be("strong",{class:"mr-auto"},b.title),be("button",{type:"button",class:"ml-2 mb-1 close","aria-label":"Close",onClick:()=>u.removeToast(b)},"\xD7")]),be("div",{class:"toast-body"},b.body)])))]}});for(let[h,C]of Object.entries(dd))E.component(h,C);return E.component("Tree",pd),E.component("PartialView",{props:["name","state"],setup(h){let C=[];return()=>ls[h.name](h.state,C)}}),E.directive("field",yd),E.directive("form",vd),E.directive("code-editor",ud),E.directive("paper-scrollspy",cd),E.use(m),m.beforeEach(async h=>{if(h.path==="/review-link"&&!n||n&&h.path!=="/review-link")return window.location.assign(h.fullPath),!1;u?.emit("routeLeave"),/^\/(r|repository|anonymize|pull-request-anonymize|gist-anonymize|pr|gist)(\/|$)/.test(h.path)&&await oo("markdown"),/^\/(r|repository)\//.test(h.path)&&await oo("org")}),m.afterEach(h=>{if(!u)return;u.title=h.meta.title,u.emit("routeChange",{title:h.meta.title}),u.emit("routeUpdate",{title:h.meta.title});let C=document.querySelector(".app-view");!h.meta.preserveExplorer&&C&&(C.scrollTop=0)}),E.mount(e),{app:E,router:m,state:u}}document.querySelector("#app")&&(window.anonymousApp=k6());})(); +jane.smith@example.org`},xq={id:"termsHelp",class:"form-text text-muted"},eM={class:"invalid-feedback"},tM={id:"settings-display",class:"paper-settings-section"},oM={class:"form-group paper-check-list"},nM={class:"form-check"},sM={class:"form-check-input",type:"checkbox",id:"link",name:"link"},rM={class:"form-check"},iM={class:"form-check-input",type:"checkbox",id:"image",name:"image"},aM={class:"form-check"},lM={class:"form-check-input",type:"checkbox",id:"pdf",name:"pdf"},dM={class:"form-check"},uM={class:"form-check-input",type:"checkbox",id:"notebook",name:"notebook"},cM={id:"settings-features",class:"paper-settings-section"},pM={class:"form-group paper-check-list"},fM={class:"form-check"},mM={class:"form-check-input",type:"checkbox",id:"page",name:"page"},hM={class:"form-check"},vM={class:"form-check-input",type:"checkbox",id:"loc",name:"loc"},yM={class:"form-check"},gM={class:"form-check-input",type:"checkbox",id:"update",name:"update"},bM={class:"form-group"},wM={class:"form-control",id:"mode",name:"mode"},kM={class:"form-text text-muted"},EM={id:"settings-expiration",class:"paper-settings-section"},CM={class:"form-group"},_M={class:"form-control",id:"expiration",name:"expiration"},SM={key:0,class:"draft-status",role:"status"},NM={key:1,class:"draft-status"},RM={class:"paper-settings-footer"},DM={key:0,class:"paper-inline-alert paper-inline-alert-error",role:"alert"},TM=["textContent"],AM={class:"paper-settings-actions"},OM=["disabled"],IM={key:0,class:"ui-icon mr-1","aria-hidden":"true"},PM={id:"settings-account",class:"paper-settings-section"},VM={class:"paper-account-card"},qM=["src"],MM={class:"paper-account-identity"},UM={class:"paper-account-name"},$M=["disabled"],LM={key:0,role:"status"},FM={key:1,class:"paper-inline-alert paper-inline-alert-error",role:"alert"},zM=["disabled"],HM={key:3,role:"status"},BM={class:"paper-danger-zone"},jM={key:0,class:"paper-inline-alert paper-inline-alert-error",role:"alert"},GM=["textContent"],WM=["disabled"];function Ql(e,t){let n=Ge("quota-usage"),r=ve("paper-scrollspy"),s=ve("field"),i=ve("form");return l(),d("div",Bq,[t[58]||(t[58]=de('
My work \xA0/\xA0 Settings

Your settings

Defaults applied to every new anonymization, your quotas, and your account.

',3)),o("div",jq,[R((l(),d("aside",Gq,[...t[8]||(t[8]=[de('
On this page
',2)])])),[[r]]),o("div",Wq,[f(" Account usage shares the dashboard component. "),o("section",Kq,[t[10]||(t[10]=o("div",{class:"paper-section-eyebrow"},"Quota",-1)),t[11]||(t[11]=o("p",{class:"paper-section-copy"},"What you are using across all your anonymizations. Conferences can lift these limits during a review window.",-1)),e.quota?(l(),Lt(n,{key:0,quota:e.quota,fmt:e.fmt},null,8,["quota","fmt"])):f("v-if",!0),e.quota?f("v-if",!0):(l(),d("div",Yq,[(l(),d(W,null,oe([1,2,3],(a,u)=>o("div",Jq,[...t[9]||(t[9]=[o("div",{class:"quota-header"},[o("span",{class:"skeleton skeleton-line",style:{width:"40%"}}),o("span",{class:"skeleton skeleton-line",style:{width:"25%"}})],-1),o("div",{class:"quota-track"},null,-1)])])),64))]))]),R((l(),d("form",{class:"form needs-validation",name:"defaultsForm",novalidate:"",onSubmit:t[2]||(t[2]=ie(a=>e.submitForm(a,()=>{e.saveDefault(a)}),["prevent"]))},[o("section",Qq,[t[17]||(t[17]=o("div",{class:"paper-section-eyebrow"},"Terms to redact",-1)),t[18]||(t[18]=o("p",{class:"paper-section-copy"},"Pre-filled in every new anonymization. You can still edit the list per anonymization.",-1)),o("div",Xq,[t[16]||(t[16]=o("label",{class:"paper-field-label",for:"terms"},"Default terms",-1)),R(o("textarea",Zq,null,512),[[s,{state:e.viewState,set:a=>{e.terms=a},value:e.terms,form:"defaultsForm",options:{debounce:250}}]]),o("small",xq,[t[12]||(t[12]=b(" One term per line (regex allowed). Each match is replaced by ",-1)),o("code",null,c(e.site_options?.ANONYMIZATION_MASK||"XXX")+"-[N]",1),t[13]||(t[13]=b(", or use ",-1)),t[14]||(t[14]=o("code",null,"term=>replacement",-1)),t[15]||(t[15]=b(" to pick your own. ",-1))]),R(o("div",eM," Terms are in an invalid format ",512),[[j,e.defaultsForm?.terms?.errors?.format]])])]),o("section",tM,[t[27]||(t[27]=o("div",{class:"paper-section-eyebrow"},"Display",-1)),t[28]||(t[28]=o("p",{class:"paper-section-copy"},"What reviewers can see inside an anonymized repository.",-1)),o("div",oM,[o("div",nM,[R(o("input",sM,null,512),[[s,{state:e.viewState,set:a=>{e.options.link=a},value:e.options?.link,form:"defaultsForm",options:{}}]]),t[19]||(t[19]=o("label",{class:"form-check-label",for:"link"},"Keep links",-1)),t[20]||(t[20]=o("small",{class:"form-text text-muted"},"Unchecked, every link in text files is removed.",-1))]),o("div",rM,[R(o("input",iM,null,512),[[s,{state:e.viewState,set:a=>{e.options.image=a},value:e.options?.image,form:"defaultsForm",options:{}}]]),t[21]||(t[21]=o("label",{class:"form-check-label",for:"image"},"Display images",-1)),t[22]||(t[22]=o("small",{class:"form-text text-muted"},"Images are shown as is. They are not anonymized.",-1))]),o("div",aM,[R(o("input",lM,null,512),[[s,{state:e.viewState,set:a=>{e.options.pdf=a},value:e.options?.pdf,form:"defaultsForm",options:{}}]]),t[23]||(t[23]=o("label",{class:"form-check-label",for:"pdf"},"Display PDFs",-1)),t[24]||(t[24]=o("small",{class:"form-text text-muted"},"PDFs are shown as is. They are not anonymized.",-1))]),o("div",dM,[R(o("input",uM,null,512),[[s,{state:e.viewState,set:a=>{e.options.notebook=a},value:e.options?.notebook,form:"defaultsForm",options:{}}]]),t[25]||(t[25]=o("label",{class:"form-check-label",for:"notebook"},"Display notebooks",-1)),t[26]||(t[26]=o("small",{class:"form-text text-muted"},"Render Jupyter notebooks instead of raw JSON.",-1))])])]),o("section",cM,[t[37]||(t[37]=o("div",{class:"paper-section-eyebrow"},"Features",-1)),o("div",pM,[o("div",fM,[R(o("input",mM,null,512),[[s,{state:e.viewState,set:a=>{e.options.page=a},value:e.options?.page,form:"defaultsForm",options:{}}]]),t[29]||(t[29]=o("label",{class:"form-check-label",for:"page"},"GitHub Pages",-1)),t[30]||(t[30]=o("small",{class:"form-text text-muted"},"Serve an anonymized copy of the repository's GitHub Pages site. Only pages built from the anonymized branch are supported.",-1))]),o("div",hM,[R(o("input",vM,null,512),[[s,{state:e.viewState,set:a=>{e.options.loc=a},value:e.options?.loc,form:"defaultsForm",options:{}}]]),t[31]||(t[31]=o("label",{class:"form-check-label",for:"loc"},"Lines of code",-1)),t[32]||(t[32]=o("small",{class:"form-text text-muted"},"Show the line count of the repository in the explorer.",-1))]),o("div",yM,[R(o("input",gM,null,512),[[s,{state:e.viewState,set:a=>{e.options.update=a},value:e.options?.update,form:"defaultsForm",options:{}}]]),t[33]||(t[33]=o("label",{class:"form-check-label",for:"update"},"Auto-update from GitHub",-1)),t[34]||(t[34]=o("small",{class:"form-text text-muted"},"Follow the branch and pull the latest commit automatically, at most once an hour.",-1))])]),o("div",bM,[t[36]||(t[36]=o("label",{class:"paper-field-label",for:"mode"},"Fetch mode",-1)),R((l(),d("select",wM,[...t[35]||(t[35]=[o("option",{value:"GitHubStream",selected:""},"Stream from GitHub on demand",-1),o("option",{value:"GitHubDownload"},"Download to Anonymous GitHub",-1)])])),[[s,{state:e.viewState,set:a=>{e.options.mode=a},value:e.options?.mode,form:"defaultsForm",options:{}}]]),o("small",kM," Download is faster for reviewers and enables every feature. Streaming is the only option above "+c(e.fmt?.humanFileSize(e.site_options?.MAX_REPO_SIZE*1024))+". ",1)])]),o("section",EM,[t[41]||(t[41]=o("div",{class:"paper-section-eyebrow"},"Expiration",-1)),o("div",CM,[t[39]||(t[39]=o("label",{class:"paper-field-label",for:"expiration"},"When an anonymization expires",-1)),R((l(),d("select",_M,[...t[38]||(t[38]=[o("option",{value:"redirect"},"Redirect visitors to the GitHub repository",-1),o("option",{value:"remove",selected:""},"Remove the anonymized repository",-1)])])),[[s,{state:e.viewState,set:a=>{e.options.expirationMode=a},value:e.options?.expirationMode,form:"defaultsForm",options:{}}]]),t[40]||(t[40]=o("small",{class:"form-text text-muted"}," The expiration date itself is chosen per anonymization. Redirecting reveals the source repository, so pick it only once the review is over. ",-1))])]),e.draftRestored?(l(),d("div",SM,[t[42]||(t[42]=b("Your unsaved draft was restored. ",-1)),o("button",{type:"button",class:"draft-discard",onClick:t[0]||(t[0]=a=>e.discardDraft())},"Discard draft")])):e.unsavedChanges?(l(),d("div",NM,[b(c(e.draftSaved?"Draft saved in this tab for 30 minutes.":"Unsaved changes. Keep this tab open until you save.")+" ",1),o("button",{type:"button",class:"draft-discard",onClick:t[1]||(t[1]=a=>e.discardDraft())},c(e.isUpdate?"Restore saved settings":"Discard changes"),1)])):f("v-if",!0),o("div",RM,[e.error?(l(),d("div",DM,[t[43]||(t[43]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})],-1)),t[44]||(t[44]=b()),o("span",{textContent:c(e.error)},null,8,TM)])):f("v-if",!0),o("div",AM,[o("button",{id:"save",type:"submit",class:"btn btn-ink",disabled:e.saving},[e.message?(l(),d("svg",IM,[...t[45]||(t[45]=[o("use",{href:"#ui-icon-check"},null,-1)])])):f("v-if",!0),b(c(e.saving?"Saving\u2026":e.message?"Saved":"Save defaults"),1)],8,OM),t[46]||(t[46]=o("span",{class:"paper-settings-hint"},"Applies to new anonymizations only. Existing ones keep their settings.",-1))])])],32)),[[i,e.viewState]]),o("section",PM,[t[56]||(t[56]=o("div",{class:"paper-section-eyebrow"},"Account",-1)),o("div",VM,[e.user?.photo?(l(),d("img",{key:0,width:"40",height:"40",class:"rounded-circle",alt:"",src:e.safeUrl(e.user?.photo)},null,8,qM)):f("v-if",!0),o("div",MM,[o("div",UM,"@"+c(e.user?.username),1),t[47]||(t[47]=o("div",{class:"paper-account-meta"},"Signed in with GitHub. Anonymous GitHub only reads your repositories.",-1))]),t[48]||(t[48]=o("a",{class:"btn btn-outline-ink",href:"/api/user/logout",target:"_self"},"Sign out",-1))]),o("form",{class:"paper-account-email",onSubmit:t[6]||(t[6]=ie(a=>e.saveAccountEmail(),["prevent"]))},[t[49]||(t[49]=o("label",{class:"paper-field-label",for:"account-email"},"Email address",-1)),t[50]||(t[50]=o("p",{id:"account-email-help",class:"paper-section-copy"},"Used for account alerts. Your address is never shown on anonymous pages.",-1)),R(o("input",{id:"account-email",class:"form-control",type:"email",autocomplete:"email",maxlength:"254",required:"","onUpdate:modelValue":t[3]||(t[3]=a=>e.accountEmail=a),"aria-describedby":"account-email-help",disabled:e.emailLoading||e.emailSaving||!e.emailCSRFReady,onInput:t[4]||(t[4]=a=>e.emailSaved=!1)},null,40,$M),[[zt,e.accountEmail]]),e.emailLoading?(l(),d("p",LM,"Loading your email address\u2026")):f("v-if",!0),e.emailError?(l(),d("p",FM,c(e.emailError),1)):f("v-if",!0),!e.emailCSRFReady&&!e.emailLoading?(l(),d("button",{key:2,class:"btn btn-outline-ink mt-2",type:"button",onClick:t[5]||(t[5]=a=>e.loadAccountEmail())},"Try again")):f("v-if",!0),o("button",{class:"btn btn-ink mt-2",type:"submit",disabled:e.emailLoading||e.emailSaving||!e.emailCSRFReady},c(e.emailSaving?"Saving\u2026":"Save email address"),9,zM),e.emailSaved?(l(),d("p",HM,"Email address saved.")):f("v-if",!0)],32),t[57]||(t[57]=o("a",{class:"paper-settings-connection-link",href:"/connections"},[o("i",{class:"fab fa-github","aria-hidden":"true"}),o("span",null,[b("GitHub connections"),o("small",null,"Manage repository access and legacy OAuth.")]),o("span",{"aria-hidden":"true"},"\u2192")],-1)),o("div",BM,[t[54]||(t[54]=o("div",{class:"paper-danger-head"},"Delete account",-1)),t[55]||(t[55]=o("p",{class:"paper-danger-copy"}," Removes all your anonymized repositories, gists, and pull requests, revokes the application's access to your GitHub account, and erases your personal data (username, email, access tokens). This cannot be undone. ",-1)),e.deleteError?(l(),d("div",jM,[t[51]||(t[51]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-info"})],-1)),t[52]||(t[52]=b()),o("span",{textContent:c(e.deleteError)},null,8,GM)])):f("v-if",!0),o("button",{type:"button",class:"btn btn-outline-danger",onClick:t[7]||(t[7]=a=>e.deleteAccount()),disabled:e.deletingAccount},[t[53]||(t[53]=o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-trash"})],-1)),b(c(e.deletingAccount?"Deleting\u2026":"Delete my account"),1)],8,WM)])])])])])}var KM={class:"pr-page"},YM={class:"container paper-page pr-page-inner"},JM={class:"pr-header"},QM={class:"pr-title-row"},XM={class:"paper-page-title pr-title"},ZM=["textContent"],xM={key:1,class:"text-muted"},e8=["href"],t8={class:"pr-header-meta"},o8={key:0,class:"pr-meta-item"},n8=["textContent"],s8={key:1,class:"pr-meta-item"},r8=["textContent"],i8={key:2,class:"pr-meta-item"},a8=["textContent"],l8={key:0,class:"pr-body-card"},d8={key:1,class:"paper-tabs",role:"tablist"},u8=["aria-selected","tabindex"],c8=["aria-selected","tabindex"],p8=["textContent"],f8={class:"paper-tab-content"},m8={key:0,role:"tabpanel",id:"pr-diff-panel","aria-labelledby":"pr-diff-tab"},h8=["innerHTML"],v8={key:1,role:"tabpanel",id:"pr-comments-panel","aria-labelledby":"pr-comments-tab"},y8={class:"pr-comments"},g8={class:"pr-comment"},b8={class:"pr-comment-head"},w8={key:0,class:"pr-comment-author"},k8=["textContent"],E8=["textContent"],C8={key:0,class:"pr-comment-body"},_8={key:0,class:"paper-table-empty"};function Xl(e,t){let n=Ge("markdown");return l(),d("div",KM,[o("div",YM,[t[17]||(t[17]=o("div",{class:"paper-crumbs"},[o("a",{href:"/dashboard"},"Reviewer"),b(" \xA0/\xA0 "),o("span",{class:"here"},"Pull request")],-1)),o("header",JM,[o("div",QM,[o("h1",XM,[e.details?.title?(l(),d("span",{key:0,textContent:c(e.details?.title)},null,8,ZM)):f("v-if",!0),e.details?.title?f("v-if",!0):(l(),d("span",xM,"Untitled pull request"))]),e.options?.isAdmin||e.options?.isOwner?(l(),d("a",{key:0,class:"btn btn-sm","aria-label":"Edit",href:e.safeUrl("/pull-request-anonymize/"+e.pullRequestId)},[...t[4]||(t[4]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),o("span",{class:"d-none d-md-inline"}," Edit",-1)])],8,e8)):f("v-if",!0)]),o("div",t8,[o("span",{class:A(["paper-pill",{good:e.details?.merged,warn:e.details?.state=="open",bad:e.details?.state=="closed"&&!e.details?.merged}])},[o("span",{class:A(["status-dot",{"status-ready":e.details?.merged,"status-error":e.details?.state=="closed"&&!e.details?.merged}])},null,2),b(" "+c(e.details?.merged?"Merged":e.fmt.title(e.details?.state)),1)],2),e.details?.baseRepositoryFullName?(l(),d("span",o8,[t[5]||(t[5]=o("i",{class:"fab fa-github"},null,-1)),t[6]||(t[6]=b()),o("span",{textContent:c(e.details?.baseRepositoryFullName)},null,8,n8)])):f("v-if",!0),e.details?.updatedDate?(l(),d("span",s8,[t[7]||(t[7]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-clock"})],-1)),t[8]||(t[8]=b()),o("span",{textContent:c(e.fmt?.date(e.details?.updatedDate))},null,8,r8)])):f("v-if",!0),e.details?.anonymizeDate?(l(),d("span",i8,[t[9]||(t[9]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-shield"})],-1)),t[10]||(t[10]=b(" Anonymized ",-1)),o("span",{textContent:c(e.fmt?.date(e.details?.anonymizeDate))},null,8,a8)])):f("v-if",!0)])]),e.details?.body?(l(),d("section",l8,[t[11]||(t[11]=o("div",{class:"paper-section-eyebrow"},"Description",-1)),Ce(n,{content:e.details?.body},null,8,["content"])])):f("v-if",!0),e.details?.diff||e.details?.comments?(l(),d("nav",d8,[e.details?.diff?(l(),d("button",{key:0,class:A(["paper-tab",{active:e.tabState?.active=="diff"}]),type:"button",role:"tab",id:"pr-diff-tab","aria-selected":e.tabState?.active==="diff","aria-controls":"pr-diff-panel",tabindex:e.tabState?.active==="diff"?0:-1,onKeydown:t[0]||(t[0]=r=>e.previewTabKeydown(r)),onClick:t[1]||(t[1]=r=>e.tabState.active="diff")},[...t[12]||(t[12]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-code"})],-1),b(" Diff ",-1)])],42,u8)):f("v-if",!0),e.details?.comments?(l(),d("button",{key:1,class:A(["paper-tab",{active:e.tabState?.active=="comments"}]),type:"button",role:"tab",id:"pr-comments-tab","aria-selected":e.tabState?.active==="comments","aria-controls":"pr-comments-panel",tabindex:e.tabState?.active==="comments"?0:-1,onKeydown:t[2]||(t[2]=r=>e.previewTabKeydown(r)),onClick:t[3]||(t[3]=r=>e.tabState.active="comments")},[t[13]||(t[13]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-comment"})],-1)),o("span",{textContent:c(e.fmt.plural(e.details?.comments?.length,{0:"No comments",one:"1 comment",other:"{} comments"}))},null,8,p8)],42,c8)):f("v-if",!0)])):f("v-if",!0),o("div",f8,[e.details?.diff&&e.tabState?.active=="diff"?(l(),d("div",m8,[o("div",{class:"pr-diff",innerHTML:e.sanitize(e.fmt?.diff(e.details?.diff))},null,8,h8)])):f("v-if",!0),e.details?.comments&&e.tabState?.active=="comments"?(l(),d("div",v8,[o("ul",y8,[(l(!0),d(W,null,oe(e.details?.comments,(r,s)=>(l(),d("li",g8,[o("div",b8,[r?.author?(l(),d("span",w8,[t[14]||(t[14]=o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-user"})],-1)),t[15]||(t[15]=b(" @",-1)),o("span",{textContent:c(r?.author)},null,8,k8)])):f("v-if",!0),r?.updatedDate?(l(),d("span",{key:1,class:"pr-comment-date",textContent:c(e.fmt?.date(r?.updatedDate))},null,8,E8)):f("v-if",!0)]),r?.body?(l(),d("div",C8,[Ce(n,{content:r?.body},null,8,["content"])])):f("v-if",!0)]))),256)),e.details?.comments?.length?f("v-if",!0):(l(),d("li",_8,[...t[16]||(t[16]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-comment"})],-1),o("span",null,"No comments on this pull request.",-1)])]))])])):f("v-if",!0)])])])}var S8={class:"container paper-page status-page"},N8={class:"d-flex align-items-center justify-content-between flex-wrap",style:{gap:"12px"}},R8={class:"paper-page-title"},D8=["textContent"],T8={key:1},A8={class:"paper-settings-section"},O8=["textContent"],I8={key:0,class:"paper-section-copy"},P8={key:1,class:"paper-ratelimit-card",role:"status"},V8={class:"paper-error-msg"},q8=["aria-valuenow"],M8={class:"paper-progress-label"},U8=["textContent"],$8={key:0},L8=["textContent"],F8={class:"paper-progress-pct"},z8={key:3,class:"paper-error-card",role:"alert"},H8={key:0,class:"paper-error-msg"},B8={key:1,class:"paper-error-msg"},j8={class:"paper-error-actions"},G8=["href"],W8={key:4,class:"share-link"},K8={class:"share-link-row"},Y8=["value"],J8={class:"ui-icon","aria-hidden":"true"},Q8=["href"],X8=["textContent"],Z8={class:"share-link-actions"},x8=["href"],e6=["href"];function Zl(e,t){return l(),d("div",S8,[t[16]||(t[16]=o("div",{class:"paper-crumbs"},[b("Anonymization \xA0/\xA0 "),o("span",{class:"here"},"Status")],-1)),o("div",N8,[o("div",null,[o("h1",R8,[t[2]||(t[2]=b("Status of ",-1)),o("em",null,c(e.repoId),1)]),t[3]||(t[3]=o("p",{class:"paper-page-lede"},"Track progress as your anonymization is prepared.",-1))]),o("span",{class:A(["status-pill",{"status-pill-ready":e.repo?.status=="ready","status-pill-error":e.repo?.status=="error","status-pill-removed":e.repo?.status=="removed"||e.repo?.status=="expired","status-pill-ratelimit":e.rateLimitResetAt}])},[o("span",{class:A(["status-dot",{"status-ready":e.repo?.status=="ready","status-error":e.repo?.status=="error","status-removed":e.repo?.status=="removed"||e.repo?.status=="expired","status-ratelimit":e.rateLimitResetAt}])},null,2),e.rateLimitResetAt?f("v-if",!0):(l(),d("span",{key:0,textContent:c(e.fmt?.title(e.repo?.status))},null,8,D8)),e.rateLimitResetAt?(l(),d("span",T8,"Rate limited")):f("v-if",!0)],2)]),o("section",A8,[o("div",{class:"paper-section-eyebrow",textContent:c(e.repo?.status=="ready"?"Your anonymous link":"Progress")},null,8,O8),e.repo?.status!="ready"?(l(),d("p",I8,[...t[4]||(t[4]=[b(" The repository will take a few minutes to get ready, depending on its size. Visit the ",-1),o("a",{href:"/faq"},"FAQ",-1),b(" for more information. ",-1)])])):f("v-if",!0),e.rateLimitResetAt?(l(),d("div",P8,[t[7]||(t[7]=de('
Temporarily paused
GitHub API rate limit reached
',1)),o("p",V8,[t[5]||(t[5]=b("Anonymization will resume automatically in ",-1)),o("strong",null,c(e.rateLimitCountdown),1),t[6]||(t[6]=b(". No action needed \u2014 the job is queued and will continue where it left off.",-1))])])):f("v-if",!0),e.repo?.status!="error"&&e.repo?.status!="ready"&&!e.rateLimitResetAt?(l(),d("div",{key:2,class:A(["paper-progress",{"paper-progress-ready":e.repo?.status=="ready"}]),role:"progressbar","aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":e.progress},[o("div",{class:"paper-progress-bar",style:Ie("width: "+e.progress+"%;")},null,4),o("div",M8,[o("span",{textContent:c(e.fmt?.title(e.repo?.status))},null,8,U8),e.repo?.statusMessage?(l(),d("span",$8,[t[8]||(t[8]=b("\xA0\xB7\xA0",-1)),o("span",{textContent:c(e.repo?.statusMessage)},null,8,L8)])):f("v-if",!0),o("span",F8,c(e.progress||0)+"%",1)])],10,q8)):f("v-if",!0),e.repo?.status=="error"&&!e.rateLimitResetAt?(l(),d("div",z8,[t[11]||(t[11]=de('
Anonymization failed
Something went wrong while preparing this repository.
',1)),e.repo?.statusMessage?(l(),d("p",H8,c(e.fmt?.translate("ERRORS."+e.repo?.statusMessage)),1)):f("v-if",!0),e.repo?.statusMessage?f("v-if",!0):(l(),d("p",B8,"No additional details were reported. The most common causes are private repositories, missing branches, and rate limits.")),t[12]||(t[12]=o("ul",{class:"paper-error-hints"},[o("li",null,"Make sure the source URL points to a repository or pull request you can access."),o("li",null,"Check that the chosen branch and commit still exist on GitHub."),o("li",null,"If you just signed in, the access token may need a moment to propagate \u2014 try again.")],-1)),o("div",j8,[o("a",{class:"btn btn-ink",href:e.safeUrl("/anonymize/"+e.repoId)},[...t[9]||(t[9]=[o("svg",{class:"ui-icon mr-1","aria-hidden":"true"},[o("use",{href:"#ui-icon-edit"})],-1),b(" Edit anonymization",-1)])],8,G8),t[10]||(t[10]=de(' Read the FAQ Report a bug in Anonymous GitHub',2))])])):f("v-if",!0),e.repo?.status=="ready"?(l(),d("div",W8,[t[15]||(t[15]=o("p",{class:"paper-section-copy"},"Reviewers can browse the repository at this address without seeing who you are.",-1)),o("div",K8,[o("input",{id:"share-url",class:"form-control share-link-input",readonly:"","aria-label":"Anonymous link",value:e.shareUrl,onFocus:t[0]||(t[0]=n=>n.target.select())},null,40,Y8),o("button",{type:"button",class:"btn btn-ink",onClick:t[1]||(t[1]=n=>e.copyShareUrl())},[(l(),d("svg",J8,[o("use",{href:e.copied?"#ui-icon-check":"#project-icon-copy"},null,8,Q8)])),o("span",{"aria-live":"polite",textContent:c(e.copied?"Copied":"Copy link")},null,8,X8)])]),o("div",Z8,[o("a",{class:"btn",target:"_self",href:e.safeUrl("/r/"+e.repoId+"/")},[...t[13]||(t[13]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#project-icon-eye"})],-1),b(" Open repository ",-1)])],8,x8),e.repo?.options?.page?(l(),d("a",{key:0,class:"btn",target:"_self",href:e.safeUrl("/w/"+e.repoId+"/")},[...t[14]||(t[14]=[o("svg",{class:"ui-icon","aria-hidden":"true"},[o("use",{href:"#ui-icon-globe"})],-1),b(" Open GitHub page ",-1)])],8,e6)):f("v-if",!0)])])):f("v-if",!0)]),t[17]||(t[17]=de('
Support Anonymous GitHub

A small team keeps this running. If it helps you, please consider contributing back \u2014 in code, ideas, or coffee.

',1))])}var ls={"partials/reviewConsent.htm":_l,"partials/connections.htm":Sl,"partials/signin.htm":Nl,"partials/404.htm":Rl,"partials/admin/conferences.htm":Dl,"partials/admin/errors.htm":Tl,"partials/admin/overview.htm":Al,"partials/admin/queues.htm":Ol,"partials/admin/repositories.htm":Il,"partials/admin/user.htm":Pl,"partials/admin/users.htm":Vl,"partials/anonymize.htm":ql,"partials/anonymizePullRequest.htm":Ml,"partials/claim.htm":Ul,"partials/conference.htm":$l,"partials/conferences.htm":Ll,"partials/dashboard.htm":Fl,"partials/explorer.htm":zl,"partials/faq.htm":Hl,"partials/gist.htm":Bl,"partials/header.htm":jl,"partials/home.htm":Gl,"partials/loading.htm":Wl,"partials/newConference.htm":Kl,"partials/pageView.htm":Yl,"partials/pr-dashboard.htm":Jl,"partials/profile.htm":Ql,"partials/pullRequest.htm":Xl,"partials/status.htm":Zl};var t6={class:"ui-icon-definitions","aria-hidden":"true",focusable:"false"};function xl(e,t){return l(),d("svg",t6,[...t[0]||(t[0]=[de('',1)])])}function ed(e,t){e==="partials/explorer.htm"&&(t.sidebarCollapsed=window.matchMedia?.("(max-width: 767px)").matches||!1),e==="partials/anonymize.htm"&&(t.prTabState={active:t.options.diff?"diff":"comments"},t.watchGroup(["options.diff","options.comments"],()=>{t.options[t.prTabState.active]||(t.prTabState.active=t.options.diff?"diff":t.options.comments?"comments":null)})),e==="partials/gist.htm"&&(t.tabState={active:t.details?.files?"files":"comments"}),["partials/conferences.htm","partials/conference.htm"].includes(e)&&(t.statusLabels={ready:"Ready",expired:"Expired",removed:"Removed"});let r={"partials/dashboard.htm":["filteredItems",()=>t.items,"itemFilter"],"partials/conferences.htm":["filteredConferences",()=>t.conferences,"conferenceFilter"],"partials/conference.htm":["filteredRepositories",()=>t.conference?.repositories,"repoFiler"],"partials/admin/repositories.htm":["filteredRepositories",()=>t.repositories,"repoFiler"],"partials/admin/user.htm":["filteredRepositories",()=>t.repositories,"repoFiler"],"partials/admin/users.htm":["filteredUsers",()=>t.users,"userFiler"],"partials/admin/conferences.htm":["filteredConferences",()=>t.conferences]}[e];if(r){let s=tt(()=>t.fmt.orderBy(t.fmt.filter(r[1](),t[r[2]]),t.orderBy));Object.defineProperty(t,r[0],{configurable:!0,get:()=>s.value})}}function td(e=(...t)=>fetch(...t)){async function t(r,s,i,a={}){let u=new URL(s,window.location.href);for(let[g,k]of Object.entries(a.params||{}))if(k!=null)for(let h of Array.isArray(k)?k:[k])u.searchParams.append(g,typeof h=="object"?JSON.stringify(h):h);let m=new AbortController,w;a.timeout?.then?a.timeout.then(()=>m.abort()):a.timeout&&(w=setTimeout(()=>m.abort(),a.timeout));try{let g={Accept:"application/json, text/plain, */*",...a.headers},k=document.cookie.match(/(?:^|;\s*)XSRF-TOKEN=([^;]*)/);k&&u.origin===window.location.origin&&(g["X-XSRF-TOKEN"]=decodeURIComponent(k[1]));let h;i!==void 0&&(i instanceof FormData?h=i:(g["Content-Type"]||(g["Content-Type"]="application/json;charset=utf-8"),h=JSON.stringify(i)));let E=await e(u.href,{method:r,headers:g,body:h,credentials:"same-origin",signal:m.signal}),S=await E.text(),v=S;if(a.transformResponse)v=a.transformResponse(S);else if(S&&(/json/i.test(E.headers.get("content-type")||"")||/^[\[{]/.test(S.trim())))try{v=JSON.parse(S)}catch{}let _={data:v,status:E.status,headers:N=>E.headers.get(N)};if(!E.ok)throw _;return _}catch(g){throw g.name==="AbortError"?{status:-1,data:null}:g}finally{clearTimeout(w)}}let n={};for(let r of["get","delete","head"])n[r]=(s,i)=>t(r.toUpperCase(),s,void 0,i);for(let r of["post","put","patch"])n[r]=(s,i,a)=>t(r.toUpperCase(),s,i,a);return n}var od={resolve:e=>Promise.resolve(e),reject:e=>Promise.reject(e),all:e=>Promise.all(e),defer(){let e,t;return{promise:new Promise((r,s)=>{e=r,t=s}),resolve:e,reject:t}}};var nd=function(e){function t(n){return n=n||{used:0,total:0},n.unlimited=!n.total,n.percent=n.unlimited?0:Math.min(100,n.used*100/n.total),n.level=n.unlimited?"unlimited":n.percent>=95?"danger":n.percent>=80?"warn":"ok",n}return{decorate:t,load:function(){return e.get("/api/user/quota").then(n=>{let r=n.data||{};return r.storage=t(r.storage),r.file=t(r.file),r.repository=t(r.repository),r})}}};var mr={};Ed(mr,{bigNum:()=>n6,date:()=>m6,diff:()=>l6,filter:()=>p6,humanFileSize:()=>o6,humanTime:()=>s6,limitTo:()=>c6,number:()=>d6,orderBy:()=>f6,plural:()=>h6,statusLabel:()=>i6,statusMsg:()=>a6,title:()=>r6,uppercase:()=>u6});var o6=e=>window.humanFileSize(e),n6=(function(){return function(t){let n=Number(t)||0,r=Math.abs(n);return r<1e3?String(n):r<1e4?(n/1e3).toFixed(1).replace(/\.0$/,"")+"k":r<1e6?Math.round(n/1e3)+"k":r<1e7?(n/1e6).toFixed(1).replace(/\.0$/,"")+"M":Math.round(n/1e6)+"M"}})(),s6=(function(){return function(t){if(!t)return"never";t instanceof Date&&(t=Math.round((Date.now()-t)/1e3)),(typeof t=="string"||typeof t=="number")&&(t=Math.round((Date.now()-new Date(t))/1e3));var n=t<0?"from now":"ago";if(Math.abs(t)>7200*24){let m=new Date;return m.setSeconds(m.getSeconds()-t),"on "+m.toLocaleDateString(void 0,{day:"numeric",month:"short",year:"numeric"})}t=Math.abs(t);for(var r=[t/60/60/24/365,t/60/60/24/30,t/60/60/24/7,t/60/60/24,t/60/60,t/60,t],s=["year","month","week","day","hour","minute","second"],i=0;i1&&(u+="s"),a>=1)return a+" "+u+" "+n}return"0 seconds "+n}})(),r6=(function(){return function(e){if(!e)return e;e=e.toLowerCase();var t=e.split(" "),n=t.map(function(r){return r.charAt(0).toUpperCase()+r.substring(1,r.length)});return n.join(" ")}})(),i6=(function(){var e={ready:"Ready",error:"Error",expired:"Expired",expiring:"Expiring",removed:"Removed",removing:"Removing",queue:"Queued",download:"Downloading",downloaded:"Downloaded",preparing:"Preparing",anonymizing:"Anonymizing"};return function(t){if(!t)return"";if(e[t])return e[t];var n=String(t).replace(/[_-]+/g," ").toLowerCase();return n.charAt(0).toUpperCase()+n.slice(1)}})(),a6=(function(){var e={branch_not_found:"Branch not found on GitHub",repo_not_found:"Repository not found on GitHub",repository_not_found:"Repository not found on GitHub",repo_not_accessible:"Repository is not accessible with your token",pr_not_found:"Pull request not found on GitHub",gist_not_found:"Gist not found on GitHub",commit_not_found:"Commit not found on GitHub",repo_too_big:"Repository exceeds the size limit",quota_exceeded:"Storage quota exceeded",incomplete_record:"Incomplete record: missing identifier"};return function(t){if(!t)return t;var n=t.match(/^rate_limited:(\d+)$/);if(n){var r=Math.max(0,Math.ceil((parseInt(n[1],10)-Date.now())/1e3));if(r<=0)return"Rate limited \u2014 resuming soon";var s=Math.floor(r/60),i=r%60;return"Rate limited \u2014 retrying in "+(s>0?s+"m "+i+"s":i+"s")}if(e[t])return e[t];if(/^[a-z0-9]+(_[a-z0-9]+)+$/.test(t)){var a=t.replace(/_/g," ");return a.charAt(0).toUpperCase()+a.slice(1)}return t}})(),l6=(function(e){let t=r=>r.replace(/&/g,"&").replace(//g,">");function n(r,s){if(!s)return;let i=s.newPath&&s.newPath!=="/dev/null"?s.newPath:s.oldPath||"",a=s.oldPath==="/dev/null"?"added":s.newPath==="/dev/null"?"deleted":s.oldPath&&s.newPath&&s.oldPath!==s.newPath?"renamed":"modified";if(r.push('
'),r.push('
'+t(i)+''+a+"
"),s.lines.length){r.push('');for(let u of s.lines)r.push('");r.push("
'+(u.oldNo||"")+''+(u.newNo||"")+''+(u.kind==="add"?"+":u.kind==="remove"?"-":u.kind==="hunk"?"@":"")+''+t(u.text)+"
")}r.push("
")}return function(r){if(!r)return r;let s=[],i=null,a=0,u=0,m=()=>(i||(i={oldPath:"",newPath:"",lines:[]}),i),w=()=>{i&&(i.lines.length||i.oldPath||i.newPath)&&(n(s,i),i=null)},g=r.split(` +`);for(let k=0;ke});function d6(e,t){return e==null?"":Number(e).toLocaleString(void 0,t==null?{}:{minimumFractionDigits:t,maximumFractionDigits:t})}function u6(e){return String(e??"").toUpperCase()}function c6(e,t,n=0){return(e||[]).slice(n,n+t)}function p6(e,t){return Array.isArray(e)?typeof t=="function"?e.filter(t):e:[]}function f6(e,t){if(!t)return e||[];let n=Array.isArray(t)?t:[t];return[...e||[]].sort((r,s)=>{for(let i of n){let a=i[0]==="-"?-1:1;i=i.replace(/^[+-]/,"");let u=i.split(".").reduce((w,g)=>w?.[g],r),m=i.split(".").reduce((w,g)=>w?.[g],s);if(typeof u=="string"&&(u=u.toLowerCase()),typeof m=="string"&&(m=m.toLowerCase()),u!==m)return(u==null?-1:m==null?1:ur[s])}function h6(e,t){return(t?.[e]??t?.[e===1?"one":"other"]??"").replace(/\{\}/g,e??0)}var sd={name:"htmlDoc",props:["content","baseUrl","allowScripts"],setup(e){let t=xe(null);return $t(()=>{let r=[t.value][0];r.classList.add("html-doc");function s(){r.innerHTML="";let i=e.content;if(typeof i!="string")return;let a=document.createElement("iframe");a.className="html-doc-frame",a.setAttribute("title","Rendered HTML document");let u=["allow-popups","allow-popups-to-escape-sandbox"];e.allowScripts&&u.push("allow-scripts","allow-forms","allow-modals"),a.setAttribute("sandbox",u.join(" ")),a.setAttribute("referrerpolicy","no-referrer"),r.appendChild(a);let m="";e.baseUrl&&(m=''),a.srcdoc=m+i}He(()=>e.content,s,{immediate:!0}),He(()=>e.baseUrl,s,{immediate:!0}),He(()=>e.allowScripts,s,{immediate:!0})}),()=>be("html-doc",{ref:t})}};var rd={name:"pdfviewer",props:["src"],setup(e){let t=xe(null);return $t(()=>{let n=[t.value],r=400,s=[.5,.75,1,1.25,1.5,2,3],i=1e3,a=n[0];a.classList.add("pdf-viewer");let u=null,m=[],w=!1,g=null,k=1,h=1,E=0,S=0,v=612/792,_=0,N=null,T=new Map,V=0;function M(p){let y=T.get(p);y&&(y.cancelled=!0,y.task?.cancel?.(),T.delete(p));let D=p.querySelector("canvas");D&&(D.width=0,D.height=0),p.innerHTML="",delete p.dataset.state}let q=document.createElement("div");q.className="pdf-toolbar";let z=document.createElement("div");z.className="pdf-pages",z.tabIndex=0,z.setAttribute("aria-label","PDF pages"),a.appendChild(q),a.appendChild(z);function ne(p,y,D){let O=document.createElement("button");return O.type="button",O.className="pdf-toolbar-btn",O.title=y,O.setAttribute("aria-label",y),O.innerHTML='',O.addEventListener("click",D),O}let ee=ne("fa-chevron-up","Previous page",function(){qe(h-1)}),C=ne("fa-chevron-down","Next page",function(){qe(h+1)}),P=document.createElement("input");P.type="text",P.className="pdf-toolbar-page",P.setAttribute("aria-label","Page number"),P.title="Page number \u2014 type a page and press Enter",P.addEventListener("keydown",function(p){p.key==="Enter"&&(qe(parseInt(P.value,10)),P.blur())}),P.addEventListener("blur",function(){P.value=String(h)});let G=document.createElement("span");G.className="pdf-toolbar-count";let J=ne("fa-search-minus","Zoom out",function(){te(s[Math.max(0,ue()-1)])}),X=ne("fa-search-plus","Zoom in",function(){te(s[Math.min(s.length-1,ue()+1)])}),K=document.createElement("button");K.type="button",K.className="pdf-toolbar-btn pdf-toolbar-zoom",K.title="Reset zoom to fit the width",K.setAttribute("aria-label","Reset zoom to fit the width"),K.addEventListener("click",function(){te(1)}),q.appendChild(ee),q.appendChild(C);let se=document.createElement("span");se.className="pdf-toolbar-group",se.appendChild(P),se.appendChild(G),q.appendChild(se);let ce=document.createElement("span");ce.className="pdf-toolbar-group pdf-toolbar-right",ce.appendChild(J),ce.appendChild(K),ce.appendChild(X),q.appendChild(ce);function ue(){let p=0;for(let y=0;y=p,K.textContent=Math.round(k*100)+"%",J.disabled=ue()===0,X.disabled=ue()===s.length-1}function _e(p){let y=m[p-1];y&&(z.scrollTop+=y.getBoundingClientRect().top-z.getBoundingClientRect().top)}function qe(p){if(!u||isNaN(p))return;let y=Math.min(Math.max(1,p),u.numPages);m[y-1]&&(_e(y),h=y,E=y,S=Date.now()+800,re(),ke())}function Me(){if(!m.length||Date.now(){}),N=null),g&&(clearTimeout(g),g=null),u&&(u.destroy(),u=null),m=[],h=1,z.innerHTML="",re()}function Se(){z.innerHTML="";let p=document.createElement("div");p.className="pdf-viewer-error",p.textContent="This PDF could not be displayed.",z.appendChild(p)}function ze(){let p=Math.max(120,z.clientWidth-24);return Math.round(Math.min(p,i)*k)}function Ue(p,y,D){let O=window.devicePixelRatio||1,I=p.getViewport({scale:1}),U=parseFloat(y.style.width);if(!U)return;let L=p.getViewport({scale:U/I.width*O}),H=document.createElement("canvas");return H.width=Math.floor(L.width),H.height=Math.floor(L.height),H.style.width=U+"px",H.style.height=Math.floor(L.height/O)+"px",y.innerHTML="",y.appendChild(H),y.style.height=H.style.height,D.task=p.render({canvasContext:H.getContext("2d"),viewport:L}),D.task.promise}function ke(){if(!u)return;let p=_,y=z.getBoundingClientRect(),D=y.top-r,O=y.top+z.clientHeight+r,I=m.map((L,H)=>({slot:L,i:H,rect:L.getBoundingClientRect()})).filter(L=>L.rect.top<=O&&L.rect.bottom>=D).sort((L,H)=>Math.abs(L.rect.top-y.top)-Math.abs(H.rect.top-y.top)).slice(0,6),U=new Set(I.map(L=>L.slot));for(let L of T.keys())U.has(L)||M(L);for(let{slot:L,i:H}of I){if(L.dataset.state||V>=2)continue;let Y={cancelled:!1,task:null};T.set(L,Y),V++,L.dataset.state="rendering";let B;u.getPage(H+1).then(le=>{if(B=le,!(Y.cancelled||p!==_))return Ue(B,L,Y)}).then(()=>{Y.cancelled||p!==_||(L.dataset.state="done",E&&Date.now(){!Y.cancelled&&p===_&&(L.dataset.state="failed")}).finally(()=>{V--,B?.cleanup?.(),u&&ke()})}}function F(){w||(w=!0,window.requestAnimationFrame(function(){w=!1,Me(),ke()}))}function Z(){let p=!1;function y(){p||(p=!0,ke())}window.requestAnimationFrame(y),window.setTimeout(y,50)}function Q(){_++,m.forEach(M);let p=ze();m.forEach(function(y){delete y.dataset.state,y.innerHTML="",y.style.width=p+"px",y.style.height=Math.round(p/v)+"px"}),ke()}function te(p){if(!u||!m.length||p===k)return;let y=h;k=p,re(),Q(),qe(y)}function ye(){u&&(g&&clearTimeout(g),g=setTimeout(function(){g=null,u&&m.length&&Q()},250))}function Ee(p){if(Pe(),!p)return;let y=_;N=pdfjsLib.getDocument({url:p,isEvalSupported:!1,standardFontDataUrl:"/script/external/pdf-standard-fonts/",cMapUrl:"/script/external/pdf-cmaps/",cMapPacked:!0}),N.promise.then(function(D){if(y!==_){D.destroy();return}return u=D,u.getPage(1).then(function(O){if(y!==_)return;let I=O.getViewport({scale:1});I.width&&I.height&&(v=I.width/I.height);let U=ze();for(let L=1;L<=u.numPages;L++){let H=document.createElement("div");H.className="pdf-viewer-page",H.style.width=U+"px",H.style.height=Math.round(U/v)+"px",z.appendChild(H),m.push(H)}re(),Z()})}).catch(function(){y===_&&Se()})}z.addEventListener("scroll",F,{passive:!0}),$(window).on("resize",ye),re(),He(()=>e.src,Ee,{immediate:!0}),co(function(){z.removeEventListener("scroll",F),$(window).off("resize",ye),Pe()})}),()=>be("pdfviewer",{ref:t})}};var v6={key:0,class:"quota-row quota-usage"},y6={class:"quota-header"},g6={class:"quota-label"},b6={class:"project-type-svg","aria-hidden":"true"},w6=["href"],k6={key:0,class:"quota-percent"},E6={key:1,class:"quota-unlimited-tag"},C6={class:"quota-value"},_6={key:0},S6=["aria-label","aria-valuenow","aria-valuemax","aria-valuetext"],N6={key:1,class:"quota-remaining"},R6={key:2,class:"quota-remaining quota-limit"};function id(e,t){return e.quota?(l(),d("div",v6,[(l(),d(W,null,oe([{key:"repository",label:"Repositories",kind:"count",icon:"project-type-repo"},{key:"storage",label:"Storage",kind:"bytes",icon:"project-icon-storage"},{key:"file",label:"Files",kind:"count",icon:"project-icon-file"}],n=>o("div",{class:A(["quota-item","quota-"+e.quota[n.key].level]),key:n.key},[o("div",y6,[o("span",g6,[(l(),d("svg",b6,[o("use",{href:"#"+n.icon},null,8,w6)])),b(c(n.label),1)]),e.quota[n.key].unlimited?f("v-if",!0):(l(),d("span",k6,c(e.fmt.number(e.quota[n.key].percent,0))+"% used",1)),e.quota[n.key].unlimited?(l(),d("span",E6,"Unlimited")):f("v-if",!0)]),o("div",C6,[o("strong",null,c(e.formatAmount(e.quota[n.key].used,n.kind)),1),e.quota[n.key].unlimited?f("v-if",!0):(l(),d("span",_6," / "+c(e.formatAmount(e.quota[n.key].total,n.kind)),1))]),e.quota[n.key].unlimited?f("v-if",!0):(l(),d("div",{key:0,class:A(["quota-track","quota-"+e.quota[n.key].level]),role:"progressbar","aria-valuemin":"0","aria-label":n.label+" quota","aria-valuenow":Math.min(e.quota[n.key].used,e.quota[n.key].total),"aria-valuemax":e.quota[n.key].total,"aria-valuetext":e.fmt.number(e.quota[n.key].percent,0)+"% used"},[e.quota[n?.key].unlimited?f("v-if",!0):(l(),d("div",{key:0,class:"quota-fill",style:Ie({width:e.quota[n.key].percent+"%"})},null,4))],10,S6)),!e.quota[n.key].unlimited&&e.quota[n.key].used=e.quota[n.key].total?(l(),d("p",R6,c(e.quota[n.key].used>e.quota[n.key].total?"Limit exceeded":"Limit reached"),1)):f("v-if",!0)],2)),64))])):f("v-if",!0)}var D6={props:["quota","fmt"],setup(e){return{formatAmount:(t,n)=>n==="bytes"?e.fmt.humanFileSize(t).replace(/([a-zA-Z]+)$/," $1"):e.fmt.number(t)}},render:id},T6=new Set(pe),ld={props:["content","terms","options"],setup(e){let t=xe(null),n=()=>{t.value.innerHTML=renderMD(e.content||"",window.location.pathname+"/../")};return $t(()=>{n(),He(()=>[e.content,e.terms,e.options],n,{deep:!0})}),()=>be("markdown",{ref:t})}},A6={props:["file","terms","options"],setup(e){let t=xe(null),n=()=>ot(()=>t.value?.querySelectorAll("pre code").forEach(r=>window.Prism?.highlightElement(r)));return $t(n),He(()=>[e.file?.content,e.terms,e.options],n,{deep:!0}),()=>{let r=e.file||{},s=(r.filename||"").split(".").pop().toLowerCase();if(["md","markdown"].includes(s)||r.language==="Markdown")return be("gist-file",{ref:t},be(ld,{content:r.content,terms:e.terms,options:e.options}));let i={js:"javascript",jsx:"javascript",ts:"javascript",typescript:"javascript",py:"python",html:"markup",xml:"markup",svg:"markup",sh:"bash"},a=(r.language||s||"none").toLowerCase();return be("gist-file",{ref:t},be("pre",{class:"line-numbers"},be("code",{class:"language-"+(i[a]||a),key:r.content},r.content||"")))}}},O6={props:["file","content"],setup(e){let t=xe(null),n=0,r,s=async()=>{let i=++n;r?.abort(),r=new AbortController;try{let a=e.content?JSON.parse(e.content):await fetch(e.file?.download_url||e.file,{signal:r.signal}).then(u=>{if(!u.ok)throw Error("Notebook request failed");return u.json()});if(await oo("notebook"),i!==n)return;t.value.innerHTML=DOMPurify.sanitize(nb.parse(a).render()),t.value.querySelectorAll("pre code").forEach(u=>window.Prism?.highlightElement(u))}catch(a){i===n&&a.name!=="AbortError"&&(t.value.textContent="Unable to render the notebook.")}};return $t(()=>{s(),He(()=>[e.file,e.content],s)}),co(()=>{n++,r?.abort()}),()=>be("notebook",{ref:t})}},I6={props:["stats"],setup(e){return()=>{let t=Object.entries(e.stats||{}).filter(([,r])=>r.code),n=t.reduce((r,[,s])=>r+s.code,0);return be("loc",t.map(([r,s])=>be("div",{class:"lang",title:`${r}: ${s.code.toLocaleString()} lines`,style:{width:s.code*100/n+"%",background:langColors[r]}})))}}},dd={Markdown:ld,GistFile:A6,Notebook:O6,Loc:I6,HtmlDoc:sd,QuotaUsage:D6,Pdfviewer:Ei(async()=>(await oo("pdf"),pdfjsLib.GlobalWorkerOptions.workerSrc="/script/external/pdf.worker.js",rd))},ud={async mounted(e,{value:t}){e._editorValue=t;try{if(await kr(),e._editorDisposed)return;let n=e._editorValue,r=ace.edit(e);e._editor=r,r.setValue(String(n.content??""),-1),ad(e,n.options),e._editorCleanup=n.options?.onLoad?.(r)}catch(n){e._editorDisposed||(e.textContent=n.message)}},updated(e,{value:t}){e._editorValue=t,e._editor&&(e._editor.getValue()!==String(t.content??"")&&e._editor.setValue(String(t.content??""),-1),ad(e,t.options))},beforeUnmount(e){e._editorDisposed=!0,e._editorCleanup?.(),e._editor?.destroy()}};function ad(e,t={}){let n=T6.has(t.mode)?t.mode:"text";e._editor.session.setMode("ace/mode/"+n),t.theme&&e._editor.setTheme("ace/theme/"+t.theme),e._editor.setReadOnly(t.readOnly!==!1)}var cd={mounted(e){if(!window.IntersectionObserver)return;let t=[...e.querySelectorAll('a[href^="#"]')],n=new Set,r=new IntersectionObserver(s=>{s.forEach(a=>a.isIntersecting?n.add(a.target.id):n.delete(a.target.id));let i=t.find(a=>n.has(a.hash.slice(1)));t.forEach(a=>a.classList.toggle("active",a===i))},{rootMargin:"-20% 0px -60% 0px",threshold:0});ot(()=>t.forEach(s=>{let i=document.getElementById(s.hash.slice(1));i&&r.observe(i)})),e._observer=r},beforeUnmount(e){e._observer?.disconnect()}};function P6(e){let t={children:[]},n=new Map([["",t]]);function r(s){if(n.has(s))return n.get(s);let i=s.lastIndexOf("/"),a=r(i<0?"":s.slice(0,i)),u={name:s.slice(i+1),children:[]};return n.set(s,u),a.children.push(u),u}for(let s of e||[]){let i=s.path?`${s.path}/${s.name}`:s.name;s.size==null?r(i):r(s.path||"").children.push({...s})}return t.children}var pd={name:"FileTree",props:["file","parent","searchQuery","searchResults","page"],setup(e){let t=Xa(),n=xe(null),r=Fe(Object.create(null)),s=null,i=tt(()=>P6(e.file)),a=()=>"/"+(Array.isArray(t.params.path)?t.params.path.join("/"):t.params.path||"");He(()=>[t.params.repoId,t.params.path],()=>{let h="";a().split("/").filter(Boolean).forEach(E=>{h+="/"+E,r[h]=!0})},{immediate:!0});let u=tt(()=>{if(!e.searchQuery||!e.searchResults)return null;let h=new Set,E=new Set;return e.searchResults.forEach(S=>{h.add(S.path?`${S.path}/${S.name}`:S.name);let v="";(S.path||"").split("/").filter(Boolean).forEach(_=>{v=v?v+"/"+_:_,E.add(v)})}),{files:h,folders:E}}),m=()=>[...n.value.querySelectorAll("li > a")],w=h=>{n.value.querySelector(".tree-focused")?.classList.remove("tree-focused"),h&&(s=h.dataset.path,h.classList.add("tree-focused"),h.scrollIntoView?.({block:"nearest"}),n.value.focus())};function g(h){let E=m(),S=n.value.querySelector(".tree-focused")||E[0],v=E.indexOf(S);if(!["ArrowDown","ArrowUp","ArrowRight","ArrowLeft","Enter"].includes(h.key)||(h.preventDefault(),h.key==="ArrowDown"&&w(E[(v+1)%E.length]),h.key==="ArrowUp"&&w(E[(v-1+E.length)%E.length]),!S))return;let _=S.closest("li");h.key==="ArrowRight"&&_.classList.contains("folder")&&(_.classList.contains("open")?w(_.querySelector(":scope > ul > li > a")):S.click()),h.key==="ArrowLeft"&&(_.classList.contains("folder")&&_.classList.contains("open")?S.click():w(_.parentElement.closest("li.folder")?.querySelector(":scope > a"))),h.key==="Enter"&&S.click()}function k(h,E=""){let S=[...h].sort((v,_)=>+!!_.children-+!!v.children||v.name.localeCompare(_.name));return be("ul",S.flatMap(v=>{let _=v,N=_.name,T=(E+"/"+N).slice(1);if(u.value&&!u.value.files.has(T)&&!u.value.folders.has(T))return[];for(;_.children?.length===1;)_=_.children[0],N+="/"+_.name;let V=E+"/"+N,M=!!_.children,q=u.value?r[V]!==!1:!!r[V],z=M&&e.page?.options?.truncatedFolders?.includes(V.slice(1)),ne=e.page?.fileCounts?.[V.slice(1)]||0,ee=be("span",{class:M?"tree-icon-folder":"far fa-file tree-icon-file","aria-hidden":"true"},M?be("svg",{viewBox:"0 0 14 12",focusable:"false"},be("path",{d:"M1.5 10.5v-9h4l1.5 2h5.5v7z"})):null),C=be("span",{class:"tree-name"},N),P=J=>{w(J.currentTarget),M&&(J.preventDefault(),r[V]=!q,r[V]&&!_.children.length&&e.page.getFiles(V.slice(1)),ot(()=>w(m().find(X=>X.dataset.path===s))))},G=be("a",{"data-path":V,href:M?void 0:`/r/${encodeURIComponent(t.params.repoId)}${encodePathForUrl(V)}`,class:{"tree-focused":s===V},onClick:P},[M?be("span",{class:"tree-toggle"}):E?be("span",{class:"tree-spacer"}):null,ee,C,z?be("span",{class:"truncated-warning",title:e.page.fmt.translate("WARNINGS.folder_truncated")},be("i",{class:"fas fa-exclamation-triangle"})):null,M&&ne?be("span",{class:"tree-count"},ne):null]);return be("li",{key:V,class:{file:!0,folder:M,open:q,active:a()===V,truncated:z},title:M?"":`Size: ${humanFileSize(_.size||0)}`},[G,M&&q?k(_.children,V):null])}))}return()=>be("tree",{ref:n,tabindex:0,onKeydown:g},e.file?.length?u.value?.files.size===0?be("div",{class:"tree-search-empty"},"No files found"):k(i.value):"Empty repository")}};function md(){return Fe({errors:{},dirty:!1,touched:!1,submitted:!1,get invalid(){return Object.values(this.errors).some(Boolean)},setValidity(e,t){this.errors[e]=!t},setDirty(){this.dirty=!0}})}function hd(e,t){if(!e[t]){let n=md();Object.defineProperty(n,"invalid",{get(){return Object.values(n.errors).some(Boolean)||Object.keys(n).some(r=>r!=="invalid"&&n[r]&&typeof n[r]=="object"&&n[r].invalid)}}),e[t]=n}return e[t]}var vd={beforeMount(e,{value:t}){e._formState=hd(t,e.name),e.addEventListener("submit",n=>n.preventDefault())}};function V6(e){return e instanceof Date?isNaN(e)?"":`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`:e||""}function fd(e){let t=e._field.binding.value;e.type==="checkbox"?e.checked=!!t:e.type==="radio"?e.checked=t==(e._value??e.value):e._field.timer||(e.value=e.type==="date"?V6(t):t??""),hr(e)}function hr(e){let t=e._field.validation;if(!t)return;let n=e.validity;for(let[r,s]of Object.entries({required:n.valueMissing,pattern:n.patternMismatch,min:n.rangeUnderflow,max:n.rangeOverflow,date:n.badInput,email:n.typeMismatch&&e.type==="email",url:n.typeMismatch&&e.type==="url"}))t.setValidity(r,e.disabled||!s)}var yd={beforeMount(e,{value:t}){var a;let n=t.form&&hd(t.state,t.form),r=n&&e.name?n[a=e.name]||(n[a]=md()):null;e._field={binding:t,validation:r,timer:null};let s=()=>{clearTimeout(e._field.timer),e._field.timer=null;let u=e._field.binding,m=e.type==="checkbox"?e.checked:e._value??e.value;if(!(e.type==="radio"&&!e.checked)){if((e.type==="number"||e.type==="range")&&(m=e.value===""?null:Number(e.value)),e.type==="date"&&(m=e.value?new Date(e.value+"T00:00:00"):null),r){r.setDirty();for(let w of Object.keys(r.errors))r.setValidity(w,!0)}u.set(m),hr(e),u.change?.()}};e._field.commit=s;let i=u=>{let m=e._field.binding.options?.debounce||0,w=typeof m=="number"?m:m[u.type]??m.default??0;clearTimeout(e._field.timer),w?e._field.timer=setTimeout(s,w):s()};e.addEventListener(e.tagName==="SELECT"||["checkbox","radio","date"].includes(e.type)?"change":"input",i),e.addEventListener("blur",()=>{r&&(r.touched=!0),e._field.timer&&s()})},mounted:fd,updated(e,{value:t}){e._field.binding=t,fd(e)},beforeUnmount(e){clearTimeout(e._field.timer);let{binding:t,validation:n}=e._field,r=t.form&&t.state[t.form];r&&r[e.name]===n&&delete r[e.name]}};function gd(e,t){let n=e.target.closest("form");if(n?._formState&&(n._formState.submitted=!0),n?.querySelectorAll("input, select, textarea").forEach(r=>{r._field?.timer&&r._field.commit(),r._field&&hr(r)}),n&&!n.checkValidity()){let r=n.querySelector(":invalid");r?.scrollIntoView?.({block:"center"}),r?.focus(),n.reportValidity();return}return t()}var bd=Symbol("session"),q6=/^\/(w|api|github)(\/|$)/;function wd(e,t={}){let n=e?.split(".").reduce((r,s)=>r?.[s],yn);return n==null&&e?.startsWith("ERRORS.")&&(n=yn.ERRORS.unknown_error),String(n??e??"").replace(/{{\s*([^}]+?)\s*}}/g,(r,s)=>t[s]??"")}var M6={...mr,translate:wd};function U6(e){if(e==null||e==="")return e;try{let t=new URL(e,window.location.href);return["http:","https:","mailto:","tel:","blob:"].includes(t.protocol)?e:void 0}catch{return}}function $6(e="#app",t={}){let n=!!document.querySelector('meta[name="review-consent-page"][content="1"]'),r=n&&window.location.pathname==="/review-link"?br(window):null,s=()=>{let h=r;return r=null,h};!t.history&&window.location.pathname==="/"&&/^#!\/r\/[^/?#]+/.test(window.location.hash)&&window.history.replaceState(window.history.state,"",window.location.hash.slice(2));let i=new Map,a=td(t.fetch),u,m;function w(){let h=ut(),E={url(v){return v===void 0?m.currentRoute.value.fullPath:(m.push(v),E)},path(){return m.currentRoute.value.path},search(){return m.currentRoute.value.query}},S=new Proxy({},{get(v,_){let N=m.currentRoute.value.params[_];return Array.isArray(N)?N.join("/"):N}});return{takeReviewHandoff:s,http:a,...h,location:E,params:S,window,promises:od,html:{trustAsHtml:v=>v},translate:(v,_)=>Promise.resolve(wd(v,_)),quotaService:nd(a)}}function g(h){return{name:h.template,setup(){let E=dr(dt(bd),i);h.setup(E,w()),ed(h.template,E);let S=[];return()=>ls[h.template](E,S)}}}m=Qa({history:t.history||Ka(),routes:Cl.map(h=>h.redirect?h:{path:h.path,component:g(h),meta:{title:h.title,preserveExplorer:h.preserveExplorer}})});let k=ma({setup(){u=dr(null,i),u.fmt=M6,u.window=window,u.Math=Math,u.sanitize=v=>DOMPurify.sanitize(v??""),u.highlightRedactions=v=>(u.site_options,tl(v)),u.submitForm=gd,u.safeUrl=U6;let h=w();nl(u,h.http,h.location,h.timeout),uo(bd,u),He(()=>u.title,v=>{document.title=v||"Anonymous GitHub"});let E=[],S=v=>{let _=v.target.closest?.("a[href]");if(v.defaultPrevented||v.button!==0||v.metaKey||v.ctrlKey||v.shiftKey||v.altKey||!_||_.hasAttribute("download")||_.target&&_.target!=="_self"||_.dataset.toggle||_.getAttribute("href").startsWith("#"))return;let T=new URL(_.href,window.location.href);n||/^\/review-link\/?$/i.test(T.pathname)||T.origin!==window.location.origin||q6.test(T.pathname)||(v.preventDefault(),m.push(T.pathname+T.search+T.hash),$("#navbarSupportedContent.show").collapse("hide"))};return document.addEventListener("click",S),co(()=>document.removeEventListener("click",S)),()=>[xl(u,[]),n?null:be("header",{class:"app-header"},ls["partials/header.htm"](u,E)),be("main",{class:"app-view align-items-stretch w-100"},be(lr,null,{default:({Component:v,route:_})=>v?be(v,{key:_.meta.preserveExplorer?_.matched[0]?.path:_.path}):null})),be("div",{class:"position-fixed p-3",style:{zIndex:999999999,right:0,bottom:0}},u.toasts.map((v,_)=>be("div",{class:"toast show",role:"alert","aria-live":"assertive","aria-atomic":"true",key:_},[be("div",{class:"toast-header"},[be("strong",{class:"mr-auto"},v.title),be("button",{type:"button",class:"ml-2 mb-1 close","aria-label":"Close",onClick:()=>u.removeToast(v)},"\xD7")]),be("div",{class:"toast-body"},v.body)])))]}});for(let[h,E]of Object.entries(dd))k.component(h,E);return k.component("Tree",pd),k.component("PartialView",{props:["name","state"],setup(h){let E=[];return()=>ls[h.name](h.state,E)}}),k.directive("field",yd),k.directive("form",vd),k.directive("code-editor",ud),k.directive("paper-scrollspy",cd),k.use(m),m.beforeEach(async h=>{if(h.path==="/review-link"&&!n||n&&h.path!=="/review-link")return window.location.assign(h.fullPath),!1;u?.emit("routeLeave"),/^\/(r|repository|anonymize|pull-request-anonymize|gist-anonymize|pr|gist)(\/|$)/.test(h.path)&&await oo("markdown"),/^\/(r|repository)\//.test(h.path)&&await oo("org")}),m.afterEach(h=>{if(!u)return;u.title=h.meta.title,u.emit("routeChange",{title:h.meta.title}),u.emit("routeUpdate",{title:h.meta.title});let E=document.querySelector(".app-view");!h.meta.preserveExplorer&&E&&(E.scrollTop=0)}),k.mount(e),{app:k,router:m,state:u}}document.querySelector("#app")&&(window.anonymousApp=$6());})(); /*! Bundled license information: @vue/shared/dist/shared.esm-bundler.js: diff --git a/scripts/cache-index-performance.js b/scripts/cache-index-performance.js new file mode 100644 index 0000000..cb9b6b9 --- /dev/null +++ b/scripts/cache-index-performance.js @@ -0,0 +1,58 @@ +/* Synthetic metadata cardinality and bounded eviction probes. No production access. */ +const { strict: assert } = require('node:assert'); +const { promises: fs } = require('node:fs'); +const { tmpdir } = require('node:os'); +const { join } = require('node:path'); +const { Readable } = require('node:stream'); +const { performance } = require('node:perf_hooks'); +require('ts-node/register/transpile-only'); +const config = require('../src/config').default; +const { BlobCache } = require('../src/core/blob-cache'); +const percentile=(values,p)=>[...values].sort((a,b)=>a-b)[Math.min(values.length-1,Math.ceil(values.length*p)-1)]; +const consume=async stream=>{let size=0;for await(const chunk of stream)size+=chunk.length;return size;}; +async function main(){ + const root=await fs.mkdtemp(join(tmpdir(),'cache-index-performance-'));config.CACHE_MONITORING_ENABLED=false; + const results=[];let cache; + try{ + for(const cardinality of [0,10000,100000]){ + cache=new BlobCache({root:join(root,'index-'+cardinality),budget:1024**3,maxObject:4096,gzip:false}); + const real=await cache.getOrFill('real',async()=>Readable.from('verified real content'));const digest=real.cachedBlob.record.digest;await consume(real); + const now=Date.now();cache.db.exec('BEGIN'); + const blob=cache.db.prepare('INSERT INTO blobs VALUES(?,?,?,?,?,?,?)'); + const alias=cache.db.prepare('INSERT INTO aliases VALUES(?,?)'); + const decision=cache.db.prepare('INSERT INTO decisions VALUES(?,?,?,?,?)'); + const history=cache.db.prepare('INSERT INTO history VALUES(?,?,0)'); + for(let i=0;i{throw Error('unexpected miss');})),21);hits.push(performance.now()-start); + start=performance.now();cache.saveDecision('measured-'+i,digest,false);decisions.push(performance.now()-start); + start=performance.now();await consume(await cache.getOrFill('new-'+i,async()=>Readable.from('verified real content')));fills.push(performance.now()-start); + } + const summarize=x=>({p50Ms:percentile(x,.5),p95Ms:percentile(x,.95),maxMs:Math.max(...x)}); + results.push({seedBlobs:cardinality,seedAliases:cardinality*2,seedDecisions:cardinality,seedHistory:cardinality, + adminStats:summarize(stats),warmSourceHit:summarize(hits),decisionWrite:summarize(decisions),smallFill:summarize(fills)}); + cache.close();cache=undefined; + } + cache=new BlobCache({root:join(root,'eviction'),budget:4*1024**2,maxObject:65536,gzip:false}); + const times=[];let upstream=0,peakAllocated=0;const started=performance.now(); + for(let i=0;i<300;i++){ + // 100 distinct objects, three sequential traversals: deliberately larger than the pool. + const id=i%100,data=Buffer.alloc(65536,id);const begin=performance.now(); + await consume(await cache.getOrFill('object-'+id,async()=>{upstream++;return Readable.from(data);}));times.push(performance.now()-begin); + const stats=cache.stats();peakAllocated=Math.max(peakAllocated,stats.allocatedBytes);assert.ok(stats.allocatedBytes+stats.reservedBytes<=stats.budgetBytes); + } + const report={measuredAt:new Date().toISOString(),scope:'Synthetic metadata-only scale probe. Dummy blob rows have no payload files; excludes directory scanning and disk reads for those rows. Real reads use one verified blob. Eviction probe uses real 64 KiB files.', + node:process.version,cardinality:results,eviction:{requests:300,distinctObjects:100,upstreamFills:upstream,hitRate:1-upstream/300, + elapsedMs:performance.now()-started,p50Ms:percentile(times,.5),p95Ms:percentile(times,.95),peakAllocated,final:cache.stats()},assertions:'passed'}; + await fs.writeFile(process.argv[2]||'docs/cache-index-performance-results.json',JSON.stringify(report,null,2)+'\n'); + process.stdout.write(JSON.stringify(report,null,2)+'\n'); + }finally{cache?.close();await fs.rm(root,{recursive:true,force:true});} +} +main().catch(error=>{console.error(error);process.exitCode=1;}); diff --git a/scripts/cache-performance.js b/scripts/cache-performance.js new file mode 100644 index 0000000..633df41 --- /dev/null +++ b/scripts/cache-performance.js @@ -0,0 +1,140 @@ +/* Local HTTP benchmark. Uses temporary files and deterministic synthetic content, never production. */ +const { strict: assert } = require('node:assert'); +const { promises: fs, createReadStream } = require('node:fs'); +const { tmpdir, cpus, totalmem, loadavg } = require('node:os'); +const { join } = require('node:path'); +const { createHash } = require('node:crypto'); +const { Readable } = require('node:stream'); +const { pipeline } = require('node:stream/promises'); +const { createGzip, gunzipSync } = require('node:zlib'); +const { performance, monitorEventLoopDelay } = require('node:perf_hooks'); +const { setTimeout: delay } = require('node:timers/promises'); +const { setInterval, clearInterval } = require('node:timers'); +const { fork } = require('node:child_process'); +const http = require('node:http'); +const percentile = (values, p) => [...values].sort((a,b) => a-b)[Math.min(values.length-1, Math.ceil(values.length*p)-1)]; +function fixture(size, binary) { + const chunks = []; let length = 0; + for (let i=0; lengthResearcherHidden']:['AbsentResearcher'], decisionManaged:spec.mode!=='legacy-transform' }; + const obtain = async () => { + if (spec.mode === 'uncached') { upstreamFills++; await delay(20); return Readable.from(body); } + if (spec.mode === 'raw-source' || spec.mode === 'legacy-transform') { + if (!sourceReady) { upstreamFills++; await delay(20); await fs.writeFile(raw,body); sourceReady=true; } + return createReadStream(raw); + } + return sharedBlobCache().getOrFill(digest, async()=>{upstreamFills++;await delay(20);return Readable.from(body);}, + async proof=>{assert.equal('git-'+proof.gitSha,digest);return digest;},body.length); + }; + const app=express(); app.get('/file',async(_req,res)=>{ + res.type(spec.binary?'application/octet-stream':'text/plain'); + try { + const source=await obtain(); + if (spec.mode==='shared' && await sendSharedContent(source,res,options)) return; + const stages=[source,new AnonymizeTransformer(options)]; + if(spec.encoding==='gzip'){res.setHeader('Content-Encoding','gzip');stages.push(createGzip({level:6}));} + await pipeline(...stages,res); + }catch(error){res.destroy(error);} + }); + const agent=new http.Agent({keepAlive:true,maxSockets:8}); + let wireHash; + try { + await new Promise(resolve=>{server=app.listen(0,'127.0.0.1',resolve);}); + const request=()=>new Promise((resolve,reject)=>{ + const start=performance.now(); + http.get({host:'127.0.0.1',port:server.address().port,path:'/file',agent,headers:{'accept-encoding':spec.encoding}},res=>{ + const ttfb=performance.now()-start, chunks=[]; let bytes=0;const sha=createHash('sha256'); + res.on('data',b=>{bytes+=b.length;sha.update(b);if(!wireHash)chunks.push(b);}); + res.on('error',reject);res.on('end',()=>{ + try { + assert.equal(res.statusCode,200); const digest=sha.digest('hex'); + const elapsed=performance.now()-start; + if(!wireHash){const data=Buffer.concat(chunks);assert.deepEqual(res.headers['content-encoding']==='gzip'?gunzipSync(data):data,expected);wireHash=digest;} + else assert.equal(digest,wireHash); + resolve({ms:elapsed,ttfb,bytes}); + }catch(error){reject(error);} + }); + }).on('error',reject); + }); + const coldCpu=process.cpuUsage(),coldStart=performance.now();const cold=await request(); + const coldResources={...cold,wallMs:performance.now()-coldStart,cpuMs:Object.values(process.cpuUsage(coldCpu)).reduce((a,b)=>a+b,0)/1000}; + // JIT and worker warmup is excluded from warm samples. + for(let i=0;i<3;i++) await request(); + const batches=[]; + for(const concurrency of [1,8]) for(let repeat=0;repeat<2;repeat++) { + const count=concurrency===1?16:32;let next=0;const rows=[]; + let peakRss=process.memoryUsage().rss; + const timer=setInterval(()=>{peakRss=Math.max(peakRss,process.memoryUsage().rss);},5); + const eventLoop=monitorEventLoopDelay({resolution:10});eventLoop.enable();await delay(20); + const cpu=process.cpuUsage(), start=performance.now(); + await Promise.all(Array.from({length:concurrency},async()=>{for(;;){const i=next++;if(i>=count)return;rows.push(await request());}})); + const elapsed=performance.now()-start,cpuUsed=process.cpuUsage(cpu);eventLoop.disable();clearInterval(timer); + batches.push({concurrency,repeat,requests:count,elapsedMs:elapsed,requestsPerSecond:count*1000/elapsed, + p50Ms:percentile(rows.map(r=>r.ms),.5),p95Ms:percentile(rows.map(r=>r.ms),.95),maxMs:Math.max(...rows.map(r=>r.ms)), + ttfbP95Ms:percentile(rows.map(r=>r.ttfb),.95),cpuMs:(cpuUsed.user+cpuUsed.system)/1000, + cpuMsPerRequest:(cpuUsed.user+cpuUsed.system)/1000/count,peakRssMiB:Math.max(peakRss,process.memoryUsage().rss)/1048576, + eventLoopP95Ms:eventLoop.count?eventLoop.percentile(95)/1e6:null,wireBytes:rows.reduce((n,r)=>n+r.bytes,0),latenciesMs:rows.map(r=>r.ms)}); + } + const metrics=cacheMetricsReport(60); + const report={...spec,cold:coldResources,batches,upstreamFills,source:sharedBlobCache()?.stats()||null,results:resultBlobCache()?.stats()||null, + metrics:metrics.rows,wireBytesPerResponse:cold.bytes,uncompressedBytes:expected.length,verifiedResponses:100}; + process.send({report}); + } finally {agent.destroy();if(server)await new Promise(resolve=>server.close(resolve));closeBlobCaches();closeCacheMetrics();await fs.rm(root,{recursive:true,force:true});if(privateTmp)await fs.rm(privateTmp,{recursive:true,force:true});} +} +async function main() { + let scenarios=[]; + for(const size of [16384,262144,2097152])for(const changed of [false,true])for(const mode of ['uncached','raw-source','shared'])scenarios.push({size,changed,mode,encoding:'gzip',binary:false}); + for(const size of [262144,2097152])scenarios.push({size,changed:true,mode:'shared',encoding:'identity',binary:false}); + for(const mode of ['raw-source','shared'])scenarios.push({size:262144,changed:false,mode,encoding:'gzip',binary:true}); + if (process.argv.includes('--shared')) scenarios=scenarios.filter(s=>s.mode==='shared' && s.changed && s.encoding==='gzip'); + if (process.argv.includes('--normal')) scenarios=[16384,262144,2097152].map(size=>({size,changed:true,mode:'shared',encoding:'gzip',binary:false,sqliteNormal:true})); + if (process.argv.includes('--legacy')) scenarios=[false,true].map(changed=>({size:2097152,changed,mode:'legacy-transform',encoding:'gzip',binary:false})); + const report={measuredAt:new Date().toISOString(),environment:{execution:process.env.CACHE_BENCH_COMPILED === '1' ? 'compiled JavaScript' : 'ts-node',node:process.version,platform:process.platform,arch:process.arch,cpu:cpus()[0]?.model,logicalCpus:cpus().length,totalMemoryGiB:totalmem()/1024**3,loadAverage:loadavg()}, + methodology:{scope:'Local loopback HTTP, deterministic synthetic content, isolated process per scenario; no production traffic', + upstreamDelayMs:20,rawSourceBaseline:'Raw local file; anonymization and gzip repeated every request; no transformed-result cache. Not a complete legacy deployment comparison.', + measurements:'Cold request then 3 warmups, 2 batches each at concurrency 1 (16 requests) and 8 (32 requests). CPU and RSS include server, loopback client, hashing and Node runtime; worker-thread CPU included. First cold request also includes worker startup when applicable.', + limitations:'Warm OS page cache; no TLS, proxy, GitHub bandwidth, database auth or real-world RTT. Small sample p95 is descriptive, not a capacity SLA. Fresh metadata indexes; not a full-size index test.'},scenarios:[]}; + for(const spec of scenarios){ + process.stderr.write(`Measuring ${JSON.stringify(spec)}\n`); + report.scenarios.push(await new Promise((resolve,reject)=>{ + const child=fork(__filename,['--worker',JSON.stringify(spec)],{env:{...process.env,NODE_ENV:'test'},stdio:['ignore','ignore','pipe','ipc']}); + let result,stderr='';const timeout=setInterval(()=>{child.kill();reject(Error('Scenario exceeded 120 seconds'));},120000); + child.stderr.on('data',b=>{stderr=(stderr+b).slice(-4000);});child.on('message',m=>{result=m.report;});child.on('error',reject); + child.on('exit',code=>{clearInterval(timeout);if(code===0&&result)resolve(result);else reject(Error(`Scenario failed ${code}: ${stderr}`));}); + })); + } + report.completedAt=new Date().toISOString();report.assertions=`All ${scenarios.length*100} response bodies verified against expected output or the validated wire digest`; + if (process.argv.includes('--normal')) report.methodology.experimentalOverride='PRAGMA synchronous=NORMAL in both temporary pool connections only. Application defaults are unchanged. WAL commits may be lost after power failure.'; + if (process.argv.includes('--legacy')) report.methodology.legacyComparison='Existing large-file transformedFile cache enabled, isolated TMPDIR, local source file, no Redis coordination or database authorization.'; + await fs.writeFile(process.argv[2]||'docs/cache-performance-results.json',JSON.stringify(report,null,2)+'\n'); + process.stdout.write(JSON.stringify({scenarios:report.scenarios.length,assertions:report.assertions})+'\n'); +} +if(process.argv[2]==='--worker')worker(JSON.parse(process.argv[3])).then(()=>process.exit(0),e=>{console.error(e);process.exit(1);}); +else main().catch(e=>{console.error(e);process.exitCode=1;}); diff --git a/scripts/cache-workload.js b/scripts/cache-workload.js new file mode 100644 index 0000000..4f5a0d9 --- /dev/null +++ b/scripts/cache-workload.js @@ -0,0 +1,70 @@ +/* Reproducible local acceptance workload. Never connects to production or downloads upstream files. */ +const { strict: assert } = require("node:assert"); +const { promises: fs } = require("node:fs"); +const { tmpdir } = require("node:os"); +const { join } = require("node:path"); +const { Readable } = require("node:stream"); +const { createHash } = require("node:crypto"); +const http = require("node:http"); +const express = require("express"); +require("ts-node/register/transpile-only"); +const config = require("../src/config").default; +const { BlobCache, sharedBlobCache, resultBlobCache, closeBlobCaches } = require("../src/core/blob-cache"); +const { sendSharedContent } = require("../src/core/cached-response"); +const { cacheMetricsReport, closeCacheMetrics } = require("../src/core/cache-observability"); +const { monitorRequests } = require("../src/core/request-monitoring"); +const consume = async s => { const chunks = []; for await (const b of s) chunks.push(Buffer.from(b)); return Buffer.concat(chunks); }; +async function main() { + const root = await fs.mkdtemp(join(tmpdir(), "cache-workload-")); let server, eviction; + const old = { ...config }; + Object.assign(config, { SHARED_CACHE_ENABLED: true, SHARED_CACHE_PATH: root, SHARED_CACHE_BYTES: 1024 * 1024, + SHARED_CACHE_RESULT_BYTES: 1024 * 1024, SHARED_CACHE_MAX_FILE_BYTES: 32768, SHARED_CACHE_FREE_BYTES: 0, CACHE_MONITORING_ENABLED: true }); + try { + const source = sharedBlobCache(); + const content = Buffer.from("A public example with repeatable documentation.\n".repeat(400)); + const key = "git-" + createHash("sha1").update(`blob ${content.length}\0`).update(content).digest("hex"); + let fills = 0; + const obtain = () => source.getOrFill(key, async () => { fills++; return Readable.from(content); }, async p => { + assert.equal(key, "git-" + p.gitSha); return key; + }, content.length); + const app = express(); app.use(monitorRequests("api", undefined, { info() {}, warn() {} })); + app.get("/:project/:rule", async (req, res) => { + res.type("text/plain"); + try { assert.equal(await sendSharedContent(await obtain(), res, { filePath: "README.md", repoId: req.params.project, + terms: req.params.rule === "changed" ? ["public=>private"] : ["Alice"] }), true); } + catch (e) { res.destroy(e); } + }); + await new Promise(resolve => { server = app.listen(0, "127.0.0.1", resolve); }); + const responses = []; + for (const path of ["/a/plain", "/b/plain", "/a/plain", "/a/changed", "/a/changed"]) { + responses.push(await new Promise((resolve, reject) => { + http.get({ host: "127.0.0.1", port: server.address().port, path, headers: { "accept-encoding": "gzip" } }, res => { + consume(res).then(b => resolve({ status: res.statusCode, encoding: res.headers["content-encoding"], bytes: b.length }), reject); + }).on("error", reject); + })); + } + assert.equal(fills, 1); assert.ok(responses.every(r => r.status === 200 && r.encoding === "gzip")); + eviction = new BlobCache({ root: join(root, "eviction"), budget: 65536, maxObject: 4096, gzip: false, name: "workload" }); + for (let i = 0; i < 30; i++) { + const data = Buffer.alloc(4000, i); + await consume(await eviction.getOrFill(`item-${i}`, async () => Readable.from(data))); + const stats = eviction.stats(); assert.ok(stats.allocatedBytes + stats.reservedBytes <= stats.budgetBytes); + } + const stats = eviction.stats(); assert.ok(stats.blobs < 30); + const metrics = cacheMetricsReport(60); + const count = name => metrics.rows.filter(r => r.name === name).reduce((n, r) => n + r.count, 0); + assert.equal(count("decision_hit"), 2); assert.equal(count("rewrite_changed"), 1); + const result = { node: process.version, measuredAt: new Date().toISOString(), scope: "Synthetic local acceptance workload; not a production projection", + sourceRequests: 5, upstreamFills: fills, source: source.stats(), results: resultBlobCache().stats(), eviction: stats, + decisionsReused: count("decision_hit"), unchangedDecisionsComputed: count("rewrite_unchanged"), changedOutputsComputed: count("rewrite_changed"), + compressionSavingPercent: 100 * (1 - source.stats().storedBytes / source.stats().originalBytes), responses, metrics: metrics.rows, + assertions: "passed" }; + const json = JSON.stringify(result, null, 2) + "\n"; + if (process.argv[2]) await fs.writeFile(process.argv[2], json); + process.stdout.write(json); + } finally { + if (server) await new Promise(resolve => server.close(resolve)); + eviction?.close(); closeBlobCaches(); closeCacheMetrics(); Object.assign(config, old); await fs.rm(root, { recursive: true, force: true }); + } +} +main().catch(e => { console.error(e); process.exitCode = 1; }); diff --git a/src/config.ts b/src/config.ts index cb171c0..b396d8f 100644 --- a/src/config.ts +++ b/src/config.ts @@ -4,6 +4,19 @@ import { randomBytes } from "crypto"; interface Config { RESEND_API_KEY: string; EMAIL_FROM: string; + + SHARED_CACHE_ENABLED: boolean; + SHARED_CACHE_PATH: string; + SHARED_CACHE_BYTES: number; + SHARED_CACHE_MAX_FILE_BYTES: number; + SHARED_CACHE_GZIP: boolean; + SHARED_CACHE_GZIP_MIN_SAVING: number; + SHARED_CACHE_FREE_BYTES: number; + SHARED_CACHE_LOW_WATER: number; + SHARED_CACHE_DECISIONS: boolean; + SHARED_CACHE_RESULT_BYTES: number; + CACHE_MONITORING_ENABLED: boolean; + GITHUB_APP_ENABLED: boolean; GITHUB_APP_NEW_CONNECTIONS: boolean; GITHUB_OAUTH_ENABLED: boolean; @@ -71,6 +84,19 @@ interface Config { const config: Config = { RESEND_API_KEY: "", EMAIL_FROM: "", + + SHARED_CACHE_ENABLED: false, + SHARED_CACHE_PATH: resolve(process.env.FOLDER || resolve(__dirname, "..", "repositories"), ".shared-cache-v1"), + SHARED_CACHE_BYTES: 10 * 1024 ** 3, + SHARED_CACHE_MAX_FILE_BYTES: 32 * 1024 ** 2, + SHARED_CACHE_GZIP: true, + SHARED_CACHE_GZIP_MIN_SAVING: 0.10, + SHARED_CACHE_FREE_BYTES: 1024 ** 3, + SHARED_CACHE_LOW_WATER: 0.9, + SHARED_CACHE_DECISIONS: true, + SHARED_CACHE_RESULT_BYTES: 512 * 1024 ** 2, + CACHE_MONITORING_ENABLED: true, + GITHUB_APP_ENABLED: false, GITHUB_APP_NEW_CONNECTIONS: true, GITHUB_OAUTH_ENABLED: true, diff --git a/src/core/AnonymizedFile.ts b/src/core/AnonymizedFile.ts index 020d521..682e569 100644 --- a/src/core/AnonymizedFile.ts +++ b/src/core/AnonymizedFile.ts @@ -1,4 +1,5 @@ import { notifyOwnerAccessProblem } from "./owner-notifications"; +import { sendSharedContent } from "./cached-response"; import { streamResponse } from "./response-stream"; import { join, basename, dirname } from "path"; import { Response } from "express"; @@ -454,7 +455,8 @@ export default class AnonymizedFile { const resStream = got .stream(join(config.STREAMER_ENTRYPOINT, "api"), { method: "POST", - headers: requestHeaders(), + headers: { ...requestHeaders(), "accept-encoding": res.req?.get?.("accept-encoding") || "identity" }, + decompress: false, json: { sha, size, @@ -477,6 +479,10 @@ export default class AnonymizedFile { resStream.on("response", (upstream: { headers: Record }) => { headersDone(); if (res.headersSent) return; + for (const header of ["content-encoding", "content-length", "vary", "accept-ranges"]) { + const value = upstream.headers[header]; + if (typeof value === "string") res.setHeader(header, value); + } const ct = upstream.headers["content-type"]; if (typeof ct === "string") { res.contentType(ct); @@ -530,6 +536,7 @@ export default class AnonymizedFile { }); const content = await this.content(); if (res.destroyed || res.writableEnded) { content.destroy(); anonymizer.destroy(); resolve(); return; } + if (await sendSharedContent(content, res, anonymizer.opt)) { anonymizer.destroy(); resolve(); return; } function handleStreamError(error: Error) { if (!content.closed && !content.destroyed) { content.destroy(); diff --git a/src/core/anonymize-utils.ts b/src/core/anonymize-utils.ts index f5088e7..db0d5ff 100644 --- a/src/core/anonymize-utils.ts +++ b/src/core/anonymize-utils.ts @@ -1,3 +1,5 @@ +import { observeCache } from "./cache-observability"; +import { performance } from "perf_hooks"; import { createHash } from "crypto"; import { transformedFile } from "./transformed-cache"; import { promises as fs, createReadStream, ReadStream } from "fs"; @@ -105,7 +107,7 @@ function isTextualMime(mime: string): boolean { // Name-only classification: returns true (known text), false (known binary), // or null when the name alone is inconclusive. The streaming transformer // resolves null by sniffing the first chunk with isbinaryfile. -function classifyByName(filePath: string): boolean | null { +export function classifyByName(filePath: string): boolean | null { const name = basename(filePath); const extension = name.split(".").reverse()[0].toLowerCase(); if (config.additionalExtensions.includes(extension)) return true; @@ -143,6 +145,7 @@ export class AnonymizeTransformer extends Transform { anonimizer: ContentAnonimizer; private wholeChunks: Buffer[] = []; private wholeBytes = 0; + private passthroughBytes = 0; private digest = createHash("sha256"); private spool?: string; private reservedSpool = 0; @@ -157,6 +160,7 @@ export class AnonymizeTransformer extends Transform { filePath: string; cacheGeneration?: string; cacheRevision?: string; + decisionManaged?: boolean; } & ConstructorParameters[0] ) { super(); @@ -200,6 +204,7 @@ export class AnonymizeTransformer extends Transform { return; } } else { + this.passthroughBytes += chunk.length; this.emit("transform", { isText: this.isText, wasAnonimized: false, chunk }); this.push(chunk); } @@ -237,13 +242,17 @@ export class AnonymizeTransformer extends Transform { } _flush(callback: (error?: Error) => void) { + if (this.passthroughBytes) observeCache(this.isText ? "inspected_passthrough" : "inspected_binary", this.passthroughBytes); if (this.spool) { const output = join(this.spool, "output"); - void transformedFile(this.digest.digest("hex"), this.opt, output, () => anonymizeOnWorker({ input: join(this.spool!, "input"), output, - options: this.opt, maxOutput: config.MAX_FILE_SIZE * 4, context: { mask: config.ANONYMIZATION_MASK, hostname: config.APP_HOSTNAME } }, this.wholeBytes, this.cancelled.signal)) + const started = performance.now(); + const produce = () => anonymizeOnWorker({ input: join(this.spool!, "input"), output, + options: this.opt, maxOutput: config.MAX_FILE_SIZE * 4, context: { mask: config.ANONYMIZATION_MASK, hostname: config.APP_HOSTNAME } }, this.wholeBytes, this.cancelled.signal); + void (this.opt.decisionManaged ? produce() : transformedFile(this.digest.digest("hex"), this.opt, output, produce)) .then(changed => { if (this.destroyed) return; this.anonimizer.wasAnonymized = changed; + observeCache(changed ? "inspected_changed" : "inspected_unchanged", this.wholeBytes, performance.now() - started); this.output = createReadStream(output); this.output.on("data", chunk => { this.emit("transform", { isText: true, wasAnonimized: changed, chunk }); @@ -260,7 +269,9 @@ export class AnonymizeTransformer extends Transform { const original = Buffer.concat(this.wholeChunks, this.wholeBytes); this.wholeChunks = []; const text = original.toString("utf8"); + const started = performance.now(); const out = this.anonimizer.anonymize(text); + observeCache(out === text ? "inspected_unchanged" : "inspected_changed", original.length, performance.now() - started); // Preserve the original encoding when no replacement was needed. const chunk = out === text ? original : Buffer.from(out, "utf8"); this.emit("transform", { isText: true, wasAnonimized: this.wasAnonimized, chunk }); diff --git a/src/core/blob-cache.ts b/src/core/blob-cache.ts new file mode 100644 index 0000000..a9814f2 --- /dev/null +++ b/src/core/blob-cache.ts @@ -0,0 +1,324 @@ +import { DatabaseSync } from "node:sqlite"; +import { createHash, randomUUID } from "crypto"; +import { createReadStream, createWriteStream, mkdirSync, unlinkSync, rmdirSync, promises as fs } from "fs"; +import { join } from "path"; +import { Readable, Transform } from "stream"; +import { pipeline } from "stream/promises"; +import { createGzip, createGunzip } from "zlib"; +import { performance } from "perf_hooks"; +import config from "../config"; +import { observeCache } from "./cache-observability"; + +export class CacheAdmissionError extends Error {} +export interface BlobRecord { digest: string; file: string; size: number; stored: number; allocated: number; encoding: "gzip" | "identity"; accessed: number } +export interface BlobProof { gitSha: string; sha256: string; size: number } +export interface BlobOptions { root: string; budget: number; maxObject: number; gzip?: boolean; saving?: number; freeBytes?: number; lowWater?: number; name?: string } +export type BlobStream = Readable & { cachedBlob?: { store: BlobCache; record: BlobRecord } }; +const validDigest = (s: string) => /^(git-[a-f0-9]{40}|sha256-[a-f0-9]{64})$/.test(s); + +/** One local filesystem shared by all processes. SQLite WAL coordinates metadata, fills and reader leases. */ +export class BlobCache { + readonly db: DatabaseSync; + readonly name: string; + constructor(readonly options: BlobOptions) { + if (!(options.budget > 0 && options.maxObject > 0)) throw new Error("invalid_cache_budget"); + this.name = options.name || "source"; + mkdirSync(join(options.root, "tmp"), { recursive: true, mode: 0o700 }); + this.db = new DatabaseSync(join(options.root, "index.sqlite")); + this.db.exec(`PRAGMA busy_timeout=5000; PRAGMA journal_mode=WAL; + CREATE TABLE IF NOT EXISTS blobs(digest TEXT PRIMARY KEY,file TEXT,size INTEGER,stored INTEGER,encoding TEXT,accessed INTEGER,allocated INTEGER); + CREATE INDEX IF NOT EXISTS blobs_lru ON blobs(accessed); + CREATE TABLE IF NOT EXISTS aliases(key TEXT PRIMARY KEY,digest TEXT REFERENCES blobs(digest) ON DELETE CASCADE); + CREATE INDEX IF NOT EXISTS aliases_digest ON aliases(digest); + CREATE TABLE IF NOT EXISTS fills(key TEXT PRIMARY KEY,token TEXT,expires INTEGER,reserved INTEGER); + CREATE TABLE IF NOT EXISTS publications(token TEXT PRIMARY KEY,digest TEXT,file TEXT); + CREATE TABLE IF NOT EXISTS readers(token TEXT PRIMARY KEY,digest TEXT,expires INTEGER); + CREATE INDEX IF NOT EXISTS readers_digest ON readers(digest); + CREATE INDEX IF NOT EXISTS readers_expiry ON readers(expires); + CREATE TABLE IF NOT EXISTS decisions(key TEXT PRIMARY KEY,digest TEXT,changed INTEGER,accessed INTEGER,expires INTEGER); + CREATE INDEX IF NOT EXISTS decisions_age ON decisions(accessed); + CREATE INDEX IF NOT EXISTS decisions_expiry ON decisions(expires); + CREATE TABLE IF NOT EXISTS maintenance(id INTEGER PRIMARY KEY,nextScan INTEGER); + CREATE TABLE IF NOT EXISTS history(key TEXT PRIMARY KEY,seen INTEGER,evicted INTEGER); + CREATE INDEX IF NOT EXISTS history_seen ON history(seen); + CREATE INDEX IF NOT EXISTS blobs_file ON blobs(file); + CREATE TABLE IF NOT EXISTS totals(id INTEGER PRIMARY KEY, bytes INTEGER); + CREATE TRIGGER IF NOT EXISTS blob_added AFTER INSERT ON blobs BEGIN UPDATE totals SET bytes=bytes+NEW.allocated WHERE id=1; END; + CREATE TRIGGER IF NOT EXISTS blob_removed AFTER DELETE ON blobs BEGIN UPDATE totals SET bytes=bytes-OLD.allocated WHERE id=1; END; + PRAGMA foreign_keys=ON; PRAGMA recursive_triggers=ON;`); + // Initialize once under a write lock; all connections see data and counters atomically. + this.transaction(() => { + if (!this.db.prepare("SELECT 1 FROM totals WHERE id=1").get()) this.db.exec("INSERT INTO totals SELECT 1,COALESCE(SUM(allocated),0) FROM blobs"); + this.db.exec(`CREATE TABLE IF NOT EXISTS summary(id INTEGER PRIMARY KEY,blobs INTEGER,originalBytes INTEGER,storedBytes INTEGER,allocatedBytes INTEGER,activeReaders INTEGER,decisions INTEGER,aliases INTEGER,history INTEGER,reservedBytes INTEGER)`); + if (!this.db.prepare("SELECT 1 FROM summary WHERE id=1").get()) { + this.db.exec(`INSERT INTO summary SELECT 1,COUNT(*),COALESCE(SUM(size),0),COALESCE(SUM(stored),0),COALESCE(SUM(allocated),0), + (SELECT COUNT(*) FROM readers),(SELECT COUNT(*) FROM decisions),(SELECT COUNT(*) FROM aliases),(SELECT COUNT(*) FROM history),(SELECT COALESCE(SUM(reserved),0) FROM fills) FROM blobs`); + } + for (const [table, columns] of [ + ["blobs", { blobs: "1", originalBytes: "size", storedBytes: "stored", allocatedBytes: "allocated" }], + ["readers", { activeReaders: "1" }], ["decisions", { decisions: "1" }], + ["aliases", { aliases: "1" }], ["history", { history: "1" }], ["fills", { reservedBytes: "reserved" }] + ] as [string, Record][]) { + const changes = (prefix: string, sign: string) => Object.entries(columns).map(([column, value]) => + `${column}=${column}${sign}${value === "1" ? "1" : prefix + "." + value}`).join(","); + this.db.exec(`CREATE TRIGGER IF NOT EXISTS summary_${table}_insert AFTER INSERT ON ${table} BEGIN UPDATE summary SET ${changes("NEW", "+")} WHERE id=1; END; + CREATE TRIGGER IF NOT EXISTS summary_${table}_delete AFTER DELETE ON ${table} BEGIN UPDATE summary SET ${changes("OLD", "-")} WHERE id=1; END;`); + const values = Object.entries(columns).filter(([, value]) => value !== "1"); + if (values.length) this.db.exec(`CREATE TRIGGER IF NOT EXISTS summary_${table}_update AFTER UPDATE OF ${values.map(([, value]) => value).join(",")} ON ${table} + BEGIN UPDATE summary SET ${values.map(([column, value]) => `${column}=${column}-OLD.${value}+NEW.${value}`).join(",")} WHERE id=1; END;`); + } + }); + this.db.exec("PRAGMA synchronous=NORMAL; PRAGMA busy_timeout=50;"); + } + // Reader leases, history and decisions are disposable after a system failure. + // Reservations and publication records use FULL before creating/renaming payloads, + // so recovery never releases disk accounting before removing an unindexed file. + private transaction(fn: () => T, durable = false): T { + if (durable) this.db.exec("PRAGMA synchronous=FULL"); + try { + this.db.exec("BEGIN IMMEDIATE"); + try { const value = fn(); this.db.exec("COMMIT"); return value; } + catch (error) { this.db.exec("ROLLBACK"); throw error; } + } finally { if (durable) this.db.exec("PRAGMA synchronous=NORMAL"); } + } + private trim(table: "aliases" | "history" | "decisions", limit: number, order: string) { + const excess = Number(this.db.prepare(`SELECT ${table} n FROM summary WHERE id=1`).get()!.n) - limit; + if (excess > 0) this.db.prepare(`DELETE FROM ${table} WHERE rowid IN (SELECT rowid FROM ${table} ORDER BY ${order} LIMIT ?)`).run(excess); + } + private metric(event: string, bytes = 0, ms = 0) { observeCache(`${this.name}_${event}`, bytes, ms); } + private path(record: BlobRecord) { + if (!validDigest(record.digest) || !/^[a-f0-9-]+\.(gz|raw)$/.test(record.file)) throw new Error("invalid_blob_record"); + return join(this.options.root, "blobs", record.digest.substring(record.digest.indexOf("-") + 1, record.digest.indexOf("-") + 3), record.digest, record.file); + } + private usage() { return Number(this.db.prepare("SELECT allocatedBytes bytes FROM summary WHERE id=1").get()!.bytes); } + private reservations() { return Number(this.db.prepare("SELECT reservedBytes bytes FROM summary WHERE id=1").get()!.bytes); } + private expire() { + const now = Date.now(); + // A crashed producer's files are removed BEFORE its reservation is released. + const dead = this.db.prepare("SELECT token FROM fills WHERE expires { this.expire(); this.evictTo(Math.max(0, this.options.budget - this.reservations())); }); + const scan = this.transaction(() => { + const previous = this.db.prepare("SELECT nextScan FROM maintenance WHERE id=1").get(); + if (previous && Number(previous.nextScan) > Date.now()) return false; + this.db.prepare("INSERT OR REPLACE INTO maintenance VALUES(1,?)").run(Date.now() + 3600000); + return true; + }); + if (!scan) return; + // Recover publication orphans after crashes. Never remove a recent publisher's file. + const walk = async (directory: string): Promise => { + let entries; try { entries = await fs.opendir(directory); } catch { return; } + for await (const entry of entries) { + const p = join(directory, entry.name); + if (entry.isDirectory()) { await walk(p); continue; } + const stat = await fs.stat(p).catch(() => undefined); + if (!stat || Date.now() - stat.mtimeMs < 3600000) continue; + const found = this.db.prepare("SELECT 1 FROM blobs WHERE file=?").get(entry.name); + if (!found) await fs.unlink(p).catch(() => {}); + } + }; + await walk(join(this.options.root, "blobs")); + } + stats() { + const data = this.db.prepare("SELECT blobs,originalBytes,storedBytes,allocatedBytes,activeReaders,decisions,reservedBytes FROM summary WHERE id=1").get(); + return { ...data, budgetBytes: this.options.budget, maxObjectBytes: this.options.maxObject, + oldestAccess: this.db.prepare("SELECT accessed FROM blobs ORDER BY accessed LIMIT 1").get()?.accessed ?? null }; + } + async open(digest: string, encoded = false): Promise { + if (!validDigest(digest)) return; + const token = randomUUID(); + const record = this.transaction(() => { + const r = this.db.prepare("SELECT * FROM blobs WHERE digest=?").get(digest) as unknown as BlobRecord | undefined; + if (!r) return; + this.db.prepare("INSERT INTO readers VALUES(?,?,?)").run(token, digest, Date.now() + 120000); + if (Date.now() - r.accessed > 30000) this.db.prepare("UPDATE blobs SET accessed=? WHERE digest=?").run(Date.now(), digest); + return r; + }); + if (!record) return; + let handle; + try { + handle = await fs.open(this.path(record), "r"); + if ((await handle.stat()).size !== record.stored) throw new Error("corrupt_blob_size"); + } catch { + await handle?.close(); + await fs.unlink(this.path(record)).catch(() => {}); + this.db.prepare("DELETE FROM readers WHERE token=?").run(token); + this.transaction(() => { this.db.prepare("DELETE FROM blobs WHERE digest=?").run(digest); }); + this.metric("corrupt"); return; + } + const source = handle.createReadStream(); + const needsDecode = record.encoding === "gzip" && !encoded; + const output = (needsDecode ? createGunzip() : source) as BlobStream; + output.cachedBlob = { store: this, record }; + let start = performance.now(); + const heartbeat = setInterval(() => { + try { if (!this.db.prepare("UPDATE readers SET expires=? WHERE token=?").run(Date.now() + 120000, token).changes) output.destroy(new Error("cache_reader_lease_lost")); } + catch { output.destroy(new Error("cache_reader_lease_lost")); } + }, 30000); heartbeat.unref(); + let released = false; + const release = () => { + if (released) return; released = true; clearInterval(heartbeat); source.destroy(); + try { this.db.prepare("DELETE FROM readers WHERE token=?").run(token); } catch { /* expires */ } + }; + output.once("close", release); + if (needsDecode) { + // Delay decompression until a consumer asks for data; fast-path callers can close unused streams. + const originalRead = output._read.bind(output); let begun = false; + output._read = size => { if (!begun) { begun = true; start = performance.now(); source.on("error", e => output.destroy(e)); source.pipe(output as Transform); } originalRead(size); }; + output.once("end", () => observeCache("decompress", record.size, performance.now() - start)); + } + return output; + } + async lookup(key: string): Promise { + const alias = this.db.prepare("SELECT digest FROM aliases WHERE key=?").get(key); + return this.open(String(alias?.digest || key)); + } + private accessed(key: string, hit: boolean, bytes = 0) { + const previous = this.db.prepare("SELECT * FROM history WHERE key=? AND seen>=?").get(key, Date.now() - 7 * 86400000); + this.metric(hit ? "hit" : "miss", bytes); + if (!hit) this.metric(previous?.evicted ? "refetch" : previous ? "known_miss" : "first_seen_miss"); + if (previous) { + const age = Date.now() - Number(previous.seen); + for (const [label, limit] of [["1h", 3600000], ["1d", 86400000], ["7d", 604800000]] as const) if (age <= limit) this.metric(`reuse_${label}`, bytes); + } + if (!previous || previous.evicted || Date.now() - Number(previous.seen) >= 30000) this.transaction(() => { + this.db.prepare("INSERT INTO history VALUES(?,?,0) ON CONFLICT(key) DO UPDATE SET seen=excluded.seen,evicted=0").run(key, Date.now()); + this.trim("history", 100000, "seen"); + }); + } + async getOrFill(key: string, produce: () => Promise, verify?: (proof: BlobProof) => Promise, sizeHint?: number): Promise { + if (!/^[a-z0-9-]{1,100}$/.test(key)) throw new Error("invalid_cache_key"); + let hit = await this.lookup(key); + this.accessed(key, !!hit, hit?.cachedBlob?.record.size || sizeHint || 0); + if (hit) return hit; + if (sizeHint != null && sizeHint > this.options.maxObject) { this.metric("bypass", sizeHint); throw new CacheAdmissionError("object_too_large"); } + const token = randomUUID(), reservation = this.options.maxObject * 3 + 1024; + const deadline = Date.now() + 120000; + for (;;) { + const space = await fs.statfs(this.options.root); + if (space.bavail * space.bsize < reservation + (this.options.freeBytes || 0)) throw new CacheAdmissionError("disk_headroom"); + const owned = this.transaction(() => { + this.expire(); + if (this.db.prepare("SELECT 1 FROM fills WHERE key=?").get(key)) return false; + const reserved = this.reservations(); + if (this.usage() + reserved + reservation > this.options.budget) { + this.evictTo(Math.max(0, Math.min(this.options.budget * (this.options.lowWater ?? 0.9), this.options.budget - reserved - reservation))); + } + if (this.usage() + reserved + reservation > this.options.budget) throw new CacheAdmissionError("cache_budget_busy"); + this.db.prepare("INSERT INTO fills VALUES(?,?,?,?)").run(key, token, Date.now() + 120000, reservation); return true; + }, true); + if (owned) break; + this.metric("fill_wait"); + if (Date.now() >= deadline) throw new CacheAdmissionError("fill_timeout"); + await new Promise(resolve => setTimeout(resolve, 50)); + hit = await this.lookup(key); if (hit) return hit; + } + const raw = join(this.options.root, "tmp", `${token}.raw`), gz = join(this.options.root, "tmp", `${token}.gz`); + let input: Readable | undefined, file: string | undefined; + const heartbeat = setInterval(() => { + try { if (!this.db.prepare("UPDATE fills SET expires=? WHERE key=? AND token=?").run(Date.now() + 120000, key, token).changes) input?.destroy(new Error("cache_fill_lease_lost")); } + catch { input?.destroy(new Error("cache_fill_lease_lost")); } + }, 30000); heartbeat.unref(); + const timeout = setTimeout(() => input?.destroy(new Error("cache_fill_timeout")), 120000); timeout.unref(); + try { + // Recheck after ownership; another producer may have published between the initial lookup and lease acquisition. + hit = await this.lookup(key); if (hit) return hit; + input = await produce(); + let size = 0; const sha256 = createHash("sha256"); + await pipeline(input, new Transform({ transform: (chunk, _encoding, done) => { + size += chunk.length; sha256.update(chunk); + done(size > this.options.maxObject ? new CacheAdmissionError("object_too_large") : null, chunk); + } }), createWriteStream(raw, { flags: "wx", mode: 0o600 })); + const git = createHash("sha1").update(`blob ${size}\0`); + for await (const chunk of createReadStream(raw)) git.update(chunk); + const proof = { gitSha: git.digest("hex"), sha256: sha256.digest("hex"), size }; + const digest = verify ? await verify(proof) : `sha256-${proof.sha256}`; + if (!validDigest(digest)) throw new Error("invalid_verified_digest"); + let encoding: "gzip" | "identity" = "identity", stored = size, chosen = raw; + if (this.options.gzip && size >= 1024) { + const started = performance.now(); + await pipeline(createReadStream(raw), createGzip({ level: 6 }), createWriteStream(gz, { flags: "wx", mode: 0o600 })); + const compressed = (await fs.stat(gz)).size; + observeCache("compress", size, performance.now() - started); + if (compressed <= size * (1 - (this.options.saving ?? 0.1))) { encoding = "gzip"; stored = compressed; chosen = gz; } + } + const record: BlobRecord = { digest, file: `${token}.${encoding === "gzip" ? "gz" : "raw"}`, size, stored, allocated: 0, encoding, accessed: Date.now() }; + file = this.path(record); await fs.mkdir(join(file, ".."), { recursive: true, mode: 0o700 }); + const durable = await fs.open(chosen, "r"); + try { await durable.sync(); } finally { await durable.close(); } + this.transaction(() => { this.db.prepare("INSERT INTO publications VALUES(?,?,?)").run(token, digest, record.file); }, true); + await fs.rename(chosen, file); + record.allocated = Math.max(4096, (await fs.stat(file)).blocks * 512); + let duplicate = false; + this.transaction(() => { + if (!this.db.prepare("SELECT 1 FROM fills WHERE key=? AND token=? AND expires>?").get(key, token, Date.now())) throw new Error("cache_fill_lease_lost"); + duplicate = !!this.db.prepare("SELECT 1 FROM blobs WHERE digest=?").get(digest); + if (!duplicate) this.db.prepare("INSERT INTO blobs VALUES(?,?,?,?,?,?,?)").run(digest, record.file, size, stored, encoding, Date.now(), record.allocated); + this.db.prepare("INSERT INTO aliases VALUES(?,?) ON CONFLICT(key) DO UPDATE SET digest=excluded.digest").run(key, digest); + this.trim("aliases", 200000, "rowid"); + }, true); + if (duplicate) { await fs.unlink(file); this.metric("deduplicated", stored); } + file = undefined; + this.metric("fill", size); this.metric("stored", duplicate ? 0 : stored); + const result = await this.open(digest); if (!result) throw new Error("published_blob_missing"); return result; + } finally { + clearTimeout(timeout); clearInterval(heartbeat); input?.destroy(); + await Promise.all([raw, gz, ...(file ? [file] : [])].map(p => fs.unlink(p).catch(() => {}))); + this.db.prepare("DELETE FROM publications WHERE token=?").run(token); + this.db.prepare("DELETE FROM fills WHERE key=? AND token=?").run(key, token); + } + } + decision(key: string) { + const row = this.db.prepare("SELECT * FROM decisions WHERE key=? AND expires>?").get(key, Date.now()); + if (row) this.db.prepare("UPDATE decisions SET accessed=? WHERE key=? AND accessed { + this.db.prepare("INSERT INTO decisions VALUES(?,?,?,?,?) ON CONFLICT(key) DO UPDATE SET digest=excluded.digest,changed=excluded.changed,accessed=excluded.accessed,expires=excluded.expires").run(key, digest, +changed, Date.now(), Date.now() + 7 * 86400000); + this.trim("decisions", 100000, "accessed"); + }); + } + close() { this.db.close(); } +} +let source: BlobCache | undefined, results: BlobCache | undefined; +export function sharedBlobCache() { + if (!config.SHARED_CACHE_ENABLED || config.STORAGE !== "filesystem") return; + return source ||= new BlobCache({ root: join(config.SHARED_CACHE_PATH, "source"), budget: config.SHARED_CACHE_BYTES, + maxObject: config.SHARED_CACHE_MAX_FILE_BYTES, gzip: config.SHARED_CACHE_GZIP, saving: config.SHARED_CACHE_GZIP_MIN_SAVING, + freeBytes: config.SHARED_CACHE_FREE_BYTES, lowWater: config.SHARED_CACHE_LOW_WATER }); +} +export function resultBlobCache() { + if (!sharedBlobCache() || !config.SHARED_CACHE_DECISIONS) return; + return results ||= new BlobCache({ root: join(config.SHARED_CACHE_PATH, "results"), budget: config.SHARED_CACHE_RESULT_BYTES, + maxObject: Math.min(config.SHARED_CACHE_MAX_FILE_BYTES, Math.floor(config.SHARED_CACHE_RESULT_BYTES / 8)), gzip: config.SHARED_CACHE_GZIP, + freeBytes: config.SHARED_CACHE_FREE_BYTES, name: "result" }); +} +export function closeBlobCaches() { source?.close(); results?.close(); source = results = undefined; } diff --git a/src/core/cache-observability.ts b/src/core/cache-observability.ts new file mode 100644 index 0000000..edeaf3a --- /dev/null +++ b/src/core/cache-observability.ts @@ -0,0 +1,76 @@ +import { hostname } from "os"; +import { DatabaseSync } from "node:sqlite"; +import { mkdirSync } from "fs"; +import { join } from "path"; +import config from "../config"; +import { cacheTraffic } from "./request-monitoring"; + +export const CACHE_BUCKETS = [0.1, 1, 10, 100, 1000, 10000]; +type Sample = { count: number; bytes: number; ms: number; buckets: number[] }; +let db: DatabaseSync | undefined; +const pending = new Map(); +let dropped = 0; +let timer: NodeJS.Timeout | undefined; +let lastFlush = 0; +function connection() { + if (!db) { + mkdirSync(config.SHARED_CACHE_PATH, { recursive: true, mode: 0o700 }); + db = new DatabaseSync(join(config.SHARED_CACHE_PATH, "telemetry.sqlite")); + db.exec(`PRAGMA journal_mode=WAL; PRAGMA synchronous=NORMAL; PRAGMA busy_timeout=50; + CREATE TABLE IF NOT EXISTS metrics (period INTEGER, bucket INTEGER, name TEXT, traffic TEXT, + count INTEGER, bytes INTEGER, ms REAL, b0 INTEGER, b1 INTEGER, b2 INTEGER, b3 INTEGER, b4 INTEGER, b5 INTEGER, b6 INTEGER, + PRIMARY KEY(period,bucket,name,traffic)); + CREATE TABLE IF NOT EXISTS health (id TEXT PRIMARY KEY, updated INTEGER, dropped INTEGER); + CREATE INDEX IF NOT EXISTS metric_time ON metrics(period,bucket);`); + } + return db; +} +/** Fixed event names only. No paths, terms, user identifiers or blob hashes in metrics. */ +export function observeCache(name: string, bytes = 0, ms = 0, traffic = cacheTraffic()) { + if (!config.CACHE_MONITORING_ENABLED) return; + const key = JSON.stringify([Math.floor(Date.now() / 60000) * 60000, name, traffic]); + if (!pending.has(key) && pending.size >= 512) { dropped++; return; } + const value = pending.get(key) || { count: 0, bytes: 0, ms: 0, buckets: Array(7).fill(0) }; + value.count++; value.bytes += Math.max(0, bytes); value.ms += Math.max(0, ms); + const bucket = CACHE_BUCKETS.findIndex(bound => ms <= bound); + value.buckets[bucket < 0 ? 6 : bucket]++; + pending.set(key, value); + if (!timer) { timer = setInterval(flushCacheMetrics, 5000); timer.unref(); } +} +export function flushCacheMetrics() { + if (!config.CACHE_MONITORING_ENABLED) return; + try { + const sql = connection(); + const insert = sql.prepare(`INSERT INTO metrics VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?) + ON CONFLICT(period,bucket,name,traffic) DO UPDATE SET count=count+excluded.count,bytes=bytes+excluded.bytes,ms=ms+excluded.ms, + b0=b0+excluded.b0,b1=b1+excluded.b1,b2=b2+excluded.b2,b3=b3+excluded.b3,b4=b4+excluded.b4,b5=b5+excluded.b5,b6=b6+excluded.b6`); + sql.exec("BEGIN IMMEDIATE"); + try { + for (const [key, value] of pending) { + const [at, name, traffic] = JSON.parse(key); + for (const period of [60000, 3600000]) insert.run(period, Math.floor(at / period) * period, name, traffic, + value.count, value.bytes, value.ms, ...value.buckets); + } + sql.prepare("DELETE FROM metrics WHERE (period=60000 AND bucket sum + v.count, 0); pending.clear(); } +} +export function cacheMetricsReport(minutes = 60) { + if (!config.CACHE_MONITORING_ENABLED) return { available: false, reason: "Monitoring is disabled", rows: [] }; + flushCacheMetrics(); + const windowMinutes = [15, 60, 1440, 10080].includes(minutes) ? minutes : 60; + try { + const sql = connection(); + const rows = sql.prepare(`SELECT name,traffic,SUM(count) count,SUM(bytes) bytes,SUM(ms) ms, + SUM(b0) b0,SUM(b1) b1,SUM(b2) b2,SUM(b3) b3,SUM(b4) b4,SUM(b5) b5,SUM(b6) b6 + FROM metrics WHERE period=? AND bucket>=? GROUP BY name,traffic ORDER BY name,traffic`) + .all(windowMinutes > 2880 ? 3600000 : 60000, Date.now() - windowMinutes * 60000); + const health = sql.prepare("SELECT COALESCE(SUM(dropped),0) dropped FROM health").get(); + return { available: true, windowMinutes, sampledAt: Date.now(), lastFlush, dropped: health?.dropped, rows, latencyBucketsMs: CACHE_BUCKETS }; + } catch { return { available: false, reason: "Cache telemetry could not be read", rows: [], dropped }; } +} +export function closeCacheMetrics() { clearInterval(timer); timer = undefined; flushCacheMetrics(); db?.close(); db = undefined; } diff --git a/src/core/cached-response.ts b/src/core/cached-response.ts new file mode 100644 index 0000000..a43b7fc --- /dev/null +++ b/src/core/cached-response.ts @@ -0,0 +1,83 @@ +import { createGzip } from "zlib"; +import { createHash } from "crypto"; +import { Readable, PassThrough } from "stream"; +import { pipeline } from "stream/promises"; +import { Response } from "express"; +import { performance } from "perf_hooks"; +import config from "../config"; +import { BlobStream, CacheAdmissionError, resultBlobCache } from "./blob-cache"; +import { AnonymizeTransformer, classifyByName } from "./anonymize-utils"; +import { observeCache } from "./cache-observability"; + +class Unchanged extends Error {} +export function decisionKey(digest: string, options: unknown) { + return createHash("sha256").update(JSON.stringify(["anonymizer-v2", digest, options, + config.ANONYMIZATION_MASK, config.APP_HOSTNAME, config.additionalExtensions])).digest("hex"); +} +/** Returns false when the caller should use the existing streaming pipeline. Authorization precedes this call. */ +export async function sendSharedContent(content: Readable, res: Response, + options: ConstructorParameters[0]): Promise { + const source = (content as BlobStream).cachedBlob; + const results = resultBlobCache(); + if (!source || !results) return false; + const encoding = res.req.acceptsEncodings("gzip", "identity"); + res.vary("Accept-Encoding"); + if (!encoding) { content.destroy(); res.status(406).end(); return true; } + const key = decisionKey(source.record.digest, options); + const send = async (store: typeof results, digest: string, onHit?: () => void) => { + const stream = await store.open(digest, encoding === "gzip"); + if (!stream) return false; + const record = stream.cachedBlob!.record; + onHit?.(); + content.destroy(); + if (record.encoding === "gzip" && encoding === "gzip") { + res.setHeader("Content-Encoding", "gzip"); res.setHeader("Content-Length", record.stored); + } else { res.removeHeader("Content-Encoding"); res.setHeader("Content-Length", record.size); } + res.setHeader("Accept-Ranges", "none"); + if (record.encoding === "identity" && !res.req.acceptsEncodings("identity")) { + res.setHeader("Content-Encoding", "gzip"); res.removeHeader("Content-Length"); + await pipeline(stream, createGzip(), res); + } else await pipeline(stream, res); + return true; + }; + const decision = results.decision(key); + if (decision && await send(decision.changed ? results : source.store, decision.digest, () => { + observeCache("decision_hit", source.record.size); + observeCache(decision.changed ? "rewrite_changed_cached" : "rewrite_unchanged_cached", source.record.size); + })) return true; + observeCache("decision_miss", source.record.size); + if (classifyByName(options.filePath) === false) { + results.saveDecision(key, source.record.digest, false); + observeCache("rewrite_binary", source.record.size); + return send(source.store, source.record.digest); + } + // Preserve the original source reader as a fallback if result admission fails. + let processing: Readable | undefined; + const started = performance.now(); + const abort = () => { if (!res.writableFinished) processing?.destroy(new Error("response_cancelled")); }; + res.once("close", abort); + try { + const output = await results.getOrFill(`render-${key}`, async () => { + processing = await source.store.open(source.record.digest); + if (!processing) throw new CacheAdmissionError("source_evicted"); + const transform = new AnonymizeTransformer({ ...options, decisionManaged: true }); + const stream = new PassThrough(); + void pipeline(processing, transform, stream).catch(error => stream.destroy(error)); + return stream; + }, async proof => { + const unchanged = source.record.digest === `git-${proof.gitSha}` || source.record.digest === `sha256-${proof.sha256}`; + observeCache(unchanged ? "rewrite_unchanged" : "rewrite_changed", source.record.size, performance.now() - started); + if (unchanged) { results.saveDecision(key, source.record.digest, false); throw new Unchanged(); } + return `sha256-${proof.sha256}`; + }, source.record.size); + const digest = output.cachedBlob!.record.digest; + results.saveDecision(key, digest, true); + // Keep the result pinned until its HTTP reader has been opened. + try { if (await send(results, digest)) return true; } finally { output.destroy(); } + return false; + } catch (error) { + if (error instanceof Unchanged) return send(source.store, source.record.digest); + if (error instanceof CacheAdmissionError) { observeCache("decision_bypass", source.record.size); return false; } + content.destroy(); throw error; + } finally { res.removeListener("close", abort); processing?.destroy(); } +} diff --git a/src/core/request-monitoring.ts b/src/core/request-monitoring.ts index 97c60e0..c2b899c 100644 --- a/src/core/request-monitoring.ts +++ b/src/core/request-monitoring.ts @@ -12,7 +12,7 @@ export interface Metric { bytes: number; aborted: number; errors: number; slow: number; buckets: number[]; } const logger = createLogger("requests"); -const context = new AsyncLocalStorage<{ id: string; service: Service; stages: Partial> }>(); +const context = new AsyncLocalStorage<{ id: string; service: Service; traffic?: string; stages: Partial> }>(); const methods = new Set(["GET", "HEAD", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"]); const staticRoutes = new Set([ "/", "/dashboard", "/anonymize", "/healthcheck", "/api/healthcheck", "/api/stat", "/api/stat/history", @@ -77,8 +77,9 @@ let activeRequests = 0; export function activeRequestCount() { return activeRequests; } export function requestHeaders(): Record { const id = context.getStore()?.id; - return id ? { "x-request-id": id } : {}; + return id ? { "x-request-id": id, "x-cache-traffic": cacheTraffic() } : {}; } +export function cacheTraffic() { return context.getStore()?.traffic || "background"; } export function recordCacheHit(cache: "source" | "transformed", hit: boolean) { if (context.getStore()) requestMetrics.observe(`${cache}_${hit ? "hit" : "miss"}`, "all", "all", 0); } @@ -107,7 +108,12 @@ export function monitorRequests(service: Service, metrics = requestMetrics, return (req, res, next) => { const forwarded = service === "streamer" ? req.get("x-request-id") : undefined; const id = forwarded && /^[a-f0-9-]{36}$/.test(forwarded) ? forwarded : randomUUID(); - const trace = { id, service, stages: {} }; + const forwardedTraffic = service === "streamer" ? req.get("x-cache-traffic") : undefined; + const traffic = forwardedTraffic && ["file", "website", "zip", "monitor", "background"].includes(forwardedTraffic) + ? forwardedTraffic : /uptime|healthcheck|monitor/i.test(req.get("user-agent") || "") ? "monitor" + : /\/zip(?:[/?]|$)|\/download(?:[/?]|$)/.test(req.originalUrl) ? "zip" + : req.originalUrl.startsWith("/w/") ? "website" : "file"; + const trace = { id, service, traffic, stages: {} }; const route = requestRoute(req.originalUrl, service); const method = methods.has(req.method) ? req.method : "OTHER"; const started = performance.now(); diff --git a/src/core/source/GitHubStream.ts b/src/core/source/GitHubStream.ts index 122e8c4..3801ea2 100644 --- a/src/core/source/GitHubStream.ts +++ b/src/core/source/GitHubStream.ts @@ -1,5 +1,7 @@ import { withOwnerAccessRecovery } from "../owner-notifications"; import { ExpiringMap } from "../expiring-map"; +import { sharedBlobCache, CacheAdmissionError, BlobProof } from "../blob-cache"; +import { observeCache } from "../cache-observability"; import { contentGenerationPrefix, contentRetirementMarker } from "../content-generation"; import { createHash } from "crypto"; import { coordinatedFill } from "../cache-coordination"; @@ -384,8 +386,64 @@ export default class GitHubStream extends GitHubBase { return undefined; } }; + const shared = sharedBlobCache(); + if (shared && /^[a-f0-9]{40}$/.test(expected.sha)) { + await assertActive(); + if (expected.size != null && expected.size > config.MAX_FILE_SIZE) throw new AnonymousError("file_too_big", { httpStatus: 413 }); + let legacy = false, allowLegacy = true; + const download = async () => { + const parentToken = await this.data.getToken(); + const token = expected.upstream ? "" : parentToken; + const input = await origin.downloadWithFallback(token, expected.sha, sourcePath); + let bytes = 0; + const limited = new stream.Transform({ transform(chunk, _encoding, done) { + bytes += chunk.length; + done(bytes > config.MAX_FILE_SIZE ? new AnonymousError("file_too_big", { httpStatus: 413 }) : null, chunk); + } }); + input.on("error", error => limited.destroy(error)); + const deadline = setTimeout(() => limited.destroy(new Error("source_download_timeout")), 120000); + deadline.unref(); limited.once("close", () => { clearTimeout(deadline); input.destroy(); }); + input.pipe(limited); return limited; + }; + const produce = async () => { + if (allowLegacy && await cached()) { legacy = true; observeCache("source_legacy_promotion"); return storage.read(repoId, cachePath); } + legacy = false; return download(); + }; + const verify = async (proof: BlobProof) => { + if (proof.gitSha === expected.sha) return `git-${proof.gitSha}`; + // Resolved LFS bytes do not hash to the Git pointer SHA. Verify both the pointer and its payload. + const parentToken = await this.data.getToken(); + const pointer = origin.downloadFile(expected.upstream ? "" : parentToken, expected.sha); + const timer = setTimeout(() => pointer.destroy(new Error("lfs_pointer_timeout")), 30000); timer.unref(); + let bytes = 0; const chunks: Buffer[] = []; + try { + for await (const chunk of pointer) { bytes += chunk.length; if (bytes > 1024) throw new Error("invalid_lfs_pointer"); chunks.push(Buffer.from(chunk)); } + const raw = Buffer.concat(chunks), text = raw.toString("utf8"); + const sha = createHash("sha1").update(`blob ${raw.length}\0`).update(raw).digest("hex"); + if (sha !== expected.sha || !text.startsWith("version https://git-lfs.github.com/spec/v1\n") || + text.match(/^oid sha256:([a-f0-9]{64})$/m)?.[1] !== proof.sha256 || + Number(text.match(/^size (\d+)$/m)?.[1]) !== proof.size) throw new Error("invalid_blob_hash"); + return `sha256-${proof.sha256}`; + } finally { clearTimeout(timer); pointer.destroy(); } + }; + try { + let content; + try { content = await shared.getOrFill(`git-${expected.sha}`, produce, verify, expected.size); } + catch (error) { + if (!legacy || error instanceof CacheAdmissionError) throw error; + allowLegacy = false; + content = await shared.getOrFill(`git-${expected.sha}`, produce, verify, expected.size); + } + try { await assertActive(); } catch (error) { content.destroy(); throw error; } + return content; + } catch (error) { + if (!(error instanceof CacheAdmissionError)) throw error; + observeCache("source_bypass"); await assertActive(); return download(); + } + } const hit = await measureStage("cache_lookup", cached); recordCacheHit("source", !!hit); + observeCache(hit ? "legacy_source_hit" : "legacy_source_miss", expected.size || 0); if (hit) return storage.read(repoId, cachePath); if (expected.size != null && expected.size > config.MAX_FILE_SIZE) { throw new AnonymousError("file_too_big", { httpStatus: 413, object: filePath }); diff --git a/src/core/temporary-storage.ts b/src/core/temporary-storage.ts index a05cebe..d2bfa6f 100644 --- a/src/core/temporary-storage.ts +++ b/src/core/temporary-storage.ts @@ -1,3 +1,4 @@ +import { sharedBlobCache, resultBlobCache } from "./blob-cache"; import { promises as fs } from "fs"; import { join } from "path"; import { tmpdir } from "os"; @@ -34,7 +35,7 @@ export async function startTemporaryStorageMaintenance(intervalMs = 60_000) { if (running) return; running = true; try { - const results = await Promise.allSettled([maintainTextSpools(true), pruneTransformedCache()]); + const results = await Promise.allSettled([maintainTextSpools(true), pruneTransformedCache(), sharedBlobCache()?.maintain(), resultBlobCache()?.maintain()]); for (const result of results) if (result.status === "rejected") { logger.warn("temporary storage cleanup deferred", { message: (result.reason as Error).message }); } diff --git a/src/core/transformed-cache.ts b/src/core/transformed-cache.ts index 52a2fcc..8b6292f 100644 --- a/src/core/transformed-cache.ts +++ b/src/core/transformed-cache.ts @@ -1,3 +1,4 @@ +import { observeCache } from "./cache-observability"; import { promises as fs } from "fs"; import { join } from "path"; import { tmpdir } from "os"; @@ -63,9 +64,9 @@ export async function transformedFile(digest: string, options: unknown, output: }; const hit = await read(); if (hit !== undefined) { - try { const copied = await copyCached(hit); recordCacheHit("transformed", true); return copied; } catch { /* eviction: retry the transformation */ } + try { const copied = await copyCached(hit); recordCacheHit("transformed", true); observeCache("legacy_result_hit"); return copied; } catch { /* eviction: retry the transformation */ } } - recordCacheHit("transformed", false); + recordCacheHit("transformed", false); observeCache("legacy_result_miss"); const pending = fills.get(key); if (pending) { await pending.catch(() => {}); diff --git a/src/server/routes/admin.ts b/src/server/routes/admin.ts index 4babe89..8e754d9 100644 --- a/src/server/routes/admin.ts +++ b/src/server/routes/admin.ts @@ -1,3 +1,5 @@ +import { cacheMetricsReport } from "../../core/cache-observability"; +import { sharedBlobCache, resultBlobCache } from "../../core/blob-cache"; import { AsyncCache } from "../../core/async-cache"; import * as os from "os"; import { execFile } from "child_process"; @@ -88,6 +90,15 @@ router.get("/performance", async (req, res) => { catch { res.json({ available: false, instances: [], routes: [], stages: [] }); } }); +router.get("/cache", async (req, res) => { + res.set("Cache-Control", "no-store"); + try { + res.json({ ...cacheMetricsReport(Number(req.query.minutes)), enabled: config.SHARED_CACHE_ENABLED, + filesystemSupported: config.STORAGE === "filesystem", source: sharedBlobCache()?.stats() || null, + results: resultBlobCache()?.stats() || null }); + } catch { res.json({ available: false, reason: "The cache index is unavailable", rows: [] }); } +}); + function dashboardCache( _req: express.Request, res: express.Response, diff --git a/src/server/routes/file.ts b/src/server/routes/file.ts index 226ade6..67da556 100644 --- a/src/server/routes/file.ts +++ b/src/server/routes/file.ts @@ -146,7 +146,8 @@ router.get( anonymizedPath, repo.model.options ); - res.header("ETag", etag); + if (config.SHARED_CACHE_ENABLED) res.vary("Accept-Encoding"); + res.header("ETag", config.SHARED_CACHE_ENABLED ? `W/${etag}` : etag); // Force the browser to revalidate every time. The previous 210-day // max-age was keyed only on the upstream sha, so editing the // anonymization term list left old anonymizations cached under the diff --git a/src/streamer/route.ts b/src/streamer/route.ts index 447c759..3a64bf0 100644 --- a/src/streamer/route.ts +++ b/src/streamer/route.ts @@ -1,3 +1,4 @@ +import { sendSharedContent } from "../core/cached-response"; import * as express from "express"; import GitHubStream from "../core/source/GitHubStream"; import { @@ -99,6 +100,7 @@ router.post("/", async (req: express.Request, res: express.Response) => { } else if (isTextFile(filePath)) { res.contentType("text/plain"); } + if (await sendSharedContent(content, res, anonymizer.opt)) { anonymizer.destroy(); return; } // Only declare Accept-Ranges: none for text files — they get rewritten on // the fly so byte ranges aren't meaningful. For binary entries the // transformer is a passthrough; let