This talk is about the memory access API, which is a new API which we added as an incubating API to Java 14 Just as the gate was coming crashing down. So basically on the very last date and The title of this talk is the Liberally inflammatory. I hope that by the end of this talk I will convince you that The role of the new memory access API is not to completely replace the by buffer API. You can decide Whether you want to use the new API with by buffers or if you want to completely replace by buffer usage with the new memory API So it's up to you Hopefully you will have yet another tool in the toolbox that will help your work. So usual disclaimer. Don't believe about what I say so there are a number of Situations to why people may want to reach for a quick memory Probably the primary one is to avoid the all the cost associated with GC now. We have Shenandoah, we have ZGC, so we have much better GC that we did in the past, but still there are cases where For example, when you want to do a real-time application, you may just want to entirely avoid GC poses There are also other Circumstances where using of a memory may be necessary For example, when you want to share memory across multiple processes or when you want to share memory with a native library So it's not an accident that we landed on this API when we were working on project Panama Which is a smart show before all about kind of native interop the Java de facto API for using this kind of Off-heap access is the by buffer API. There are also other APIs hidden in the JDK Come Miscan safe is some miscan safe is one of those you can use that if you want it's fast But it's unsafe. So if the VM come crashing down, it's your fault What about by buffers? Well, but buffers were added in Java 1.4. So they were part of the big push towards buffer oriented Input output they are a rich and stateful API and the main one of the main driver of by buffer was to Make it simple for you to write idiomatic IO code so it has a lot of state internally that allows you to prevent buffer overruns and underruns helps you with things like charles at encoding and decoding and By buffer crucially can be allocated both on the Java eep, but also Of the Java eep so you can actually allocate a slice of off-heap memory and associated with a white buffer This is like a very typical example of by buffer usage Basically, we want to read the contents of a file channel into a bite buffer And then we want to do a loop to read all the characters that we've read from the buffer. So When we allocate the buffer the buffer will be empty at the beginning Two notable things. So we have quite a bit of variables here There is a position which is initially set to zero and then there is a capacity Which is essentially how big this buffer is in this case. It's 10 bytes and Then there is a limit which is another mutable Part of the state of the by buffer which will be initially set to the to the capacity The first thing we have to do is well We have to read some stuff from the channel which means we are actually writing into the by buffer. So Here we read some characters and now we have to start reading them into In our application. So the first thing that we have to do is to flip the buffer from writing mode into reading mode Which means the position here will be set to zero and the limit will be set to the maximum Basically to to to the position after the last character that has been read So I can start doing my loop and read all the characters one by one until eventually will End up in a state where the position is identical to the limit in this case The predicate as remaining were return false Which means I will go out of my loop and then I have to get ready for yet another read from the file channel So you have to call clear and what does clear do well It will basically reset the state of the by buffer to the initial state So position will go back to zero the limit will go back to the capacity value And so I can do another iteration and that's basically how you work with buffers Of course, if you wanted to this is a buffer that is allocated on it If you wanted to use a buffer of it You just change a single line of the code here use the allocate direct instead of using the allocate method So this is called a direct buffer and is associated with off it memory So with direct buffer, we actually have a new weapon as developers because we can write code that allows us to access off it memory Access to off it memory with by buffer is quite efficient because at the end of the day by buffer is implemented on top of unsafe So we can still get advantage of all the c2 Data movement intrinsics that we have The access is also safe because as we've seen the by buffer have all these Concepts of capacity limit position. So every access will be within the boundaries of the by buffer. Otherwise, we will get an exception But how good are By buffers if we want to write general kind of heap Programs, well, let's try to look at some numbers, right? Here. I have a benchmark which is essentially allocating a slab of memory 400 bytes and then is setting 100 in inside those Bigs above memory The benchmark has been kind of cherry-picked because I think this benchmark is characteristic of what happens a lot when you do native Interop which is something that we care a lot When we do Panama, so you allocate a small buffer of memory You feel it and then you have to pass a pointer to this memory to maybe some Native function and then you have to free the memory after the function Returns. So this is maybe not a Use case that comes up a lot when you're doing a yo But this is something that you do quite typically when working with native libraries So if you use unsafe you get a certain throughput So nine operation per microsecond. That's fine Let's try to replace this code by using the byte buffer API, which is supported API. We can see that the throughput is almost Yeah, 9x Slower compared to unsafe. This is due to the extra safety that the byte buffer API provides But it's also due to a number of extra factors Here we can see that there are at least two factors that are hindering performances The first is that I'm using the relative position in scheme So I do a put in and I'm basically relying on that mutable position field that will be incremented on every axis and That slows things down a little bit But the second and most important thing is that every a byte buffer has to be registered with a GC cleaner for the office memory to be Deallocated after we can prove that the byte buffer is no longer referenced by anything in our application and Basically the GC has to do a lot of work here and this work shows up in the benchmark. In fact if we Change the match the benchmark a little bit first to use the absolute put in method and secondly more importantly to use The unsafe invoke cleaner method would actually allows us to free the memory Explicitly without relying on the GC cleaner. We see that the performance rise a little bit It's not as fast as unsafe, but it's a little bit better to be fair here To this benchmark and to byte buffer in general Unsafe doesn't zero memory byte buffer do zero memory I'm not allocating a very big chunk of memory here So zeroing is not affecting performances too much But still there is an extra cost here when using byte buffer And let's look at what happens in memory. So We don't say for course the GC is basically not working All all the access are unsafe that are of heap and that's basically what you would expect But with the first byte buffer example that we've wrote so just the naive By buffer usage the GC was actually spinning for five seconds during this benchmark Which is quite a lot considering that you wanted to use Off-heap memory to get rid of the GC in the first place With the third Benchmark so these new version things get a little bit more under control and the GC time goes back to zero But still the performance is not quite as good as it could be and the biggest problem here Is that byte buffer allocate direct that first invocation is quite heavy because the byte buffer has to be registered with a cleaner even if we are not using the cleaner anyway and also there is quite a complex state in order to Track how much off-heap memory we are using there is a limit So there are a couple of atomic instruction in order to check whether we are Allocating too much And so this is quite expensive and it shows up in this particular allocation intensive benchmark So where does this leave the byte buffer API is this a bad API? No, it's not a bad API It's just that here. We are I think we are trying to use it in a way That wasn't the way in which white buffer was meant were meant to be used at the beginning The direct buffer work very well if you allocate for example a very big back buffer and then you keep sharing it and also because The cost of IO operation typically dominates every other cost all the stuff that I show you before doesn't really matter, right? Unfortunately though by buffer fail to scale when considering kind of more general cases because you have no way to deterministically release the memory. So you're basically Either rely on the GC or you use some unsafe operation in order But but you still pay a lot up front in order to allocate the buffer and then you have the 2 gigabyte limit Which is starting to hurt especially now that we have support for mapping persistent memory files So a persistent memory can probably be a little bit bigger than 2 gigabytes And we have no way to access it using the by buffer API because all the indices that we can specify are essentially in And then there is there are limitation with the expressiveness of this API when it comes to accessing The memory because you can either choose between sequential access. So but essentially one inch at a time or Another absolute addressing scheme where I have to pass the offset all the time. There was no support for Structural access. So if I have a struct in memory, there's no way for me to say I want to access that particular field I have to work Offset manually in order to get to these of that location into memory So we think that rather than investing more on the by buffer API The time has actually come to build a new memory API from the ground up And of course this new API will be interoperable with by buffer. So you don't have to throw away all your code But as I was discussing with Paul last week, we think that by buffer have reached their functional capacity there Some of these limitations are such as the 2 gigabyte limits or the Deterministic the location are very hard to fix in the current by buffer API It will require a pretty big redesign of the entire API, which is probably not going to be very compatible. So It's probably better to start from scratch and to design a new API here This is what happens when by buffer kind of fails to meet the expectations on net is a big client of by buffer It allocates a lot of by buffer and starting from version 4. They're all in their own version of by buffer called by buff no pun intended and This is based on a different allocation scheme So they have also a specialized allocator which reuses memory. So it's an allocation pool and It's essentially a j e malloc Implementation written in Java and with this they were able to get a lot more scalability out of their Buffer infrastructure and this is unfortunately something we cannot support in Java today So people have to reach out for different abstraction. So we'd like that code to come back to the JDK eventually or at least that's dope So enter the memory access API. It's a new API It's a safe API. So the goal here and we will see that later even more. It's a Absolutely no VM crashes. So you should never get a VM crash while trying to access of your memory using this API It's as safe as by buffer are There are three key abstraction. The first is called memory segment, which is just a region of memory contiguous bytes somewhere They can be only poor of it. The API is actually neutral as to whether the bytes are stored and Then there we have addresses which are essentially offsets into segments So is you can think of it just as along that points to some location inside the segment And then we have memory layouts, which are optional description of the contents of memory You can decide to use them or you can just decide to ignore them But we we will see what are the advantages of attaching a memory layout to a segment The if you look to the in the Zava doc of this API, you will find no method called get into or put in Nothing of the kind and we have received some question when the request for review went out It's not an omission Because we forgot about them it's because There are plenty of ways in order to get to the data of a memory segment You can for example take a memory segment and map it it to a byte buffer and Then you can use the old good byte buffer API to get in them floats and longs and Never look back at segments ever again or if you are If you want to reach lower level and you want to go down the Varendo rabbit hole you can actually create Varendos that are able to the reference memory using memory addresses and This is actually a good option that I will explore in the final part of this talk So the the main idea here is that we don't need to reinvent the wheel We don't need to add a lot of access or for our memory. We can just Leverage the good API is that we already have This is what a segment looks like let's imagine that we have an array of struct point where a point has two int coordinates It's a very simple thing So we can imagine this array memory to be flattened so that all the coordinates are Specially consecutive so x 0 y 0 up to x 4 y 4 This segment will have natural Spatial bounds so we will start from a base address which is the which will point to x 0 and then We will have a limit address which is the maximum address associated with this segment Actually is the the address of the first by that is outside the segment So as long as the access occurs within the segment everything is fine If I have an address I can add an offset to it and obtain a new address So for example if I add 16 to the to the base address I will obtain a new address that instead of pointing to x 0 will point to x 2 And if I have a segment I can also slice it This is similar to the slice operation that by buffer also provides so I can specify a new start address and a new length And I will get a sub segment which will be contained into the original segment So nothing too fancy here The the main thing may maybe to notice here is that this API is immutable So there are none of these bounds that you see here are immutable you Whenever a new address is created you actually create a new instance With a new offset. So nothing will actually Mutating memory which will hopefully enable for better situ optimization in the future the goal of The big goal of the segment API API and the big bet is that we want an API that is able to do the deterministic Delocation which means whenever you are sure that your memory is no longer going to be used You should be able to explicitly free it and the way this is done is that You you essentially have a segment use it and when you are done you close the segment of Course with power comes responsibility if you forget to close your segment and the segment goes out of scope you have a memory leak because now you have some memory of eep and That is not being clear To help with that memory segments implement the auto closeable interface So you can use a memory segment with a try with a source construct Hopefully that will reduce the occurrences where these leaks will occur Other things we could do in order to improve on these is to do something similar to what neti has done Which is to add a debugging kind of mode where we actually register a cleaner and we keep track of when a segment goes out of scope and The closed method is not being called So the way you work with segment as I said you don't need to do a lot an awful lot You can just allocate your segment of the right size So here if we want to allocate a segment that is big enough to contain our abstract of point array We have to well do a little bit of computation. There are four bytes for each inch There are two inns for each point and then there are five points in the array And then I can just derive a byte buffer from the segment and then pretend that the segment doesn't even exist I will just use the byte buffer API to put the int for the x-coordinate and the y-coordinate into a loop and Then at the end of the try with resources when I close the brace a Close a close operation will happen the the memory associated with a segment will actually be released so Did I gain anything by doing this around trip? between memory segments and by buffer well actually again quite a bit because I Got rid of that expensive allocate direct operation the byte buffer that we are creating now It's just a view of the memory of the segment so it's a much cheaper operation to do and We also have a deterministic the location at the end So we no longer have to rely on the garbage collector to Go in and free the memory we can actually say when the memory needs to be freed And so if you write this code you will get the same performances that you could get with the benchmark But they show you last that was using an unsafe method to clean the memory Actually, this should go even faster because you are paying a lot less for the first Allocation of memory with the memory segment of native There are problems in this code though. I'm not gonna lie for example, we have to compute the size of the memory that we want to allocate manually and then there are all these offset and Constant spread all over the code and this is very fragile if I change for example the coordinates from in to be long For example, probably on 64 machine. This example is no longer going to work So how can we make this code a little bit more robust? Well, our idea was to introduce a to introduce an abstraction called memory layouts and the goal of this Abstraction is actually to be able to replace that comment And they show in the previous life So this thing at the top with an actual object creation So you can actually create an object which specify what is the layout of this? array of structs The advantage of doing that is that once you have an object you can derive all sort of Important information out of it. So for example, how big is your layout? what are the alignment of some of the components in in the layout and Since layout can compose so you can basically nest layouts inside of the layout so you can use layout paths to ask Tricky questions such as what is the offset of the field y inside a point? Which will be normally Have been an end written constant and now you can actually ask the API for that And you can imagine that when working with more complex tracks They will this will actually be useful. So the big bet here is that by having more declarative code There will be less places for bikes to hide So this is how we model the point struct using a layout So of course we have to start from the outside we create a sequence layout We call it sequence layout so you have to specify a size which is 5 in this case And then you have to specify what goes inside the sequence in this case We have a struct so we just call memory layout of struct and then we have to specify what are the field of Struct and there are two in 32 bits I'm assuming the ins here map to 32 bit value and I can even attach names to the fields So that then I can actually perform queries on on this particular layout So here I've done a little bit of a simplification in reality if you try it out on the Java 14 code the Constructor for the value bits will also take an end in this because of course we have to specify whether you are big Indian or little Indian, but it didn't fit in the slide So that that's kind of what it is So let's say that we have this big layout here, which represents my Array and I want to compute the offset of the y field inside a point How can I do that? Well, there is an ending method inside a layout object, which is called offset without too much fantasy, maybe You have to pass a path that enable the method to find the Field that you want to get the offset for Starting from the outer layout. So here we are starting from the sequence layout The first thing I have to do is to choose an element of the sequence Let's say that we pick the element number zero because that's the one with the least offset and Then inside the sequence now I have to choose which of the two field structs I want For computing the offset in this case. I want the y Field So by doing this I was able to specify a path from the sequence down to the y field and now I can ask for the offset So as you can see, I have been able to obtain the offset without writing any number I'm just essentially querying the API and that's exactly what we are doing now in this or victim example We got rid of the comment at the beginning of the example that we had Before and we replace it with an actual Memory layout instantiation. So now we have an object that describes the layout of the things that we are going to work on And then I I'm able in the middle part of this lie to use the layout derive constant such as how big is a point or What is the offset of the y? Field inside the struct point and then I can use all this stuff inside my loop to get rid of all the numeric constants and Most importantly, I can use the layout directly into the allocate call For the memory segment, which means I don't have to write the size by end I will just delegate to the layout API to do the right thing. So this is much easier to read We gain quite a lot in terms of expressiveness. There is still a little bit There is still something that I don't quite like which is if we go inside the loop We see that there are two calls to the byte buffer put in method It's pretty hard looking at this code that one call is meant to set one field of the struct and the other Call is meant to set a different field of the struct. It's only the offset computation that kind of gives away that information. So That's yet another place where bugs can hide. So can we do a little bit better? Can we improve a little bit on that and the idea that we got maybe a crazy idea? was to introduce a new breed of verandals Called memory access handles for those of you who are not able or family Sorry, not not familiar with the byte with the verandals API You can think of a verandals as a java lang reflect field on steroids in the sense that a Reflective field gives you access to java fields A verandal gives you also access to Reflective access to java field but also to more variables such as array elements or byte buffer element So it kind of felt natural to also provide a new verandal that was also able to give you Access to for example of a memory by taking as a coordinate a memory address The big gain that you get with this API is that number one you get all the Atomic operation that the verandal API support. So let's say that the byte buffer API is not enough you you you are not Good enough with just a scene a simple get you want an atomic get or or something like that Oh, you want memory fencing because you're working with multiple threads Then you need to reach for the verandal API That's that's probably the best API to to do this kind of stuff with and the second bonus point is that if you are using memory Layouts, you don't have to do anything particularly fancy in order to get this verandal You can just ask the layout API give me the verandal for access in the field and you will basically get it So if you want to see how this verandal work There is a factory inside the memory access API that allows you to construct the verandals by hand Typically, you won't have to do that because as I said before you will derive the verandals from the layouts But let's say that you want to kind of go through the process and create the verandals Bit by bit. So when you create a memory access verandal, the first thing that you have to specify is a carrier type So you have to say to the verandal What is the Java type that you want to come out of for example of a get operation? So in this case, we want to read the value as int because the value are for bytes So we are going to pass the int dot class To the verandal factory and so we get a verandal that for example If I give the base address of this segment, it will give me back the value of the x0 coordinate Can I do more? Yes, of course If I want for example to read the y0 rather than x0 I can combine my previous verandal with an offset so I can essentially take the address that comes in Attach an extra offset to it move it and then read that the second address And so I can read y0 if I pass the base address I can get y0 out But can I do something more fancy like can I access all the y coordinates in this array? Actually turns out I can I can construct Strided verandal so I can pass in the stride in this case The stride is of course the size of the point and so I get back a verandal That takes an extra coordinate not just a memory address, but also along where the long is a logical index Which is which basically says which point? I want to get the y from so if I do for example I get with an index of zero will get y0 if I Specify one as an index. I will get why y1 and so forth Now constructing verandals like that may be a little bit painful So we integrated this verandal machinery with the memory layout API so as you can see in the middle Sequence of this slide we can actually derive all the verandals for accessing x and y with two simple calls to the layout API There is a verandal method you specify a carrier type Then you specify a path down to the element that you want to access and so you can Construct in two lines a verandal for the x element our verandal for the y element And now inside the loop you can see that I'm using the x verandal for Setting the x elements and the y verandal for accessing the y element So now the code is more explicit and if I change anything in the layout up there Everything will just flow. So I won't need to update this code at the bottom ever again So let's switch gears a little bit and talk about safety as I said at the beginning This is a safe API. So one of the main goal is to avoid any kind of VM crashes It is beyond the scope of this API to avoid the kind of silly user mistakes such as writing an Int and maybe a reading the form byte value as a float That's not something we want to protect you against but for example, there are a couple of conditions that we want to protect you against such as Accessing memory out of bounds which if the memories of hip can result in a crash and also Accessing memory after the memory has already been freed The second problem is in particular Anasty one especially when you consider multiple threads accessing memory at the same time because you can have one thread Doing access and another thread doing the release. So how the act do we make this safe? It's actually pretty tricky. You could lock everything, but that basically kills the performances instead what we decided to do was to By default enforce a strong confinement model so that whenever you create a segment the segment is Confined to that particular thread who created it So only the thread has access to the memory associated with the segment any other thread that want to join in can But it has to do an explicit operation called acquire this acquire will call it will create a view that is specific to that second thread and You can only close the original segment after all the acquired views have gone So we still have deterministic the location even in the presence of multiple threads But if you are working with multiple threads, you have to be explicit on who is accessing what? So how does this translate in terms of performances? This was the best result. We could squeeze out of the byte buffer API We had to cheat a little bit by using unsafe and this is our these are the numbers that are coming today Out of the memory segment API They are still not as good as the unsafe numbers, but they are a little bit better than the by buffer once The main contributor I think for this number is the fact that the allocation got a lot less expensive Compared to the by buffer allocate direct Method but there are also other things. So all the bounds are final variables. So she too can hoist them Twill almost And there is still a little bit of a difference also We have to keep in mind that we are also zero in memory with the memory segment API So we can never go quite as fast as unsafe here But we are also kind of trying to look ahead a little bit and we are We don't want us to Provide you something that looks a little bit better than byte buffer We want to give you something that is actually more scalable as I was mentioning at the beginning So we are working on a different allocator Jim Lasky is doing a bunch of work on this new allocator called quota based allocator and The numbers so far and kind of teasing you a little bit are pretty impressive in the sense that after it is some Experiment to plug in this new allocator on the memory segment API I was able to reach better performances than unsafe even though I was still zeroing memory So this allocator is doing a lot of the tricks that the net the allocator probably does But there are a couple of tricks that I think are new for so for example We instead of Committing memory eagerly we pre-reserve a big bunch of memory like 4 gigabytes And then we only commit when the client requests memory and doing this saves the performance is quite a bit But the big save is that we don't need a native core for doing a mall lock each time We allocate a new segment or each time we have to free it because the allocator will be able to recycle this memory segments that Are being ended out and released So this is kind of where the future of this API is kind of heading and I think if we deliver something like this maybe or at least hopefully some of the Alternative API to bite buffer will over time disappear or maybe people that are going to write new API will decide to stay on the main JDK API How hard was it to get there? Well, I'm gonna be honest. It was a little bit hard Andrew did a some benchmark of this API and found some issues there are Indeed some issues with fix some of the stuff on in Java 14 already. So for example All spot was very conservative with respect to memory barriers every time there was an unsafe access it will immediately add barriers after the call now situ is Behaving a little bit better and it's removing barriers when the access is provably of hip and This also improved the performance of the base by buffer API. So that that's actually a good result Tread confinement checks were not very well treated by situ most of all because the thread dot current thread was not being a Perceived as a constant by situ. So we did some work blood is some work in order to To fix that and now performances are a little bit better. Although we have to disable this optimization for on the loom Branch because this of course creates all sorts of havoc with with fibers But we are not done. There are a lot of issues around escape analysis This API as I said is immutable every time you call base address You create a new instance every time you do add offset on another as you create a new instance and sometimes these instances go in the middle and perturbed some of the situ optimization that situ is not so able to kind of see through some of the allocations There is also another problem and this is probably the main problem with this API the API accept long as indices and This is good because it gives more room for this API to grow But at the same time we are running into some bottlenecks with situ in the sense that situ is optimized To remove bound checks on loops that work on int. So as soon as you step out of hints You are into an heap of trouble and the about check elimination no longer work Loops are no longer unrolled. You don't get vectorization any of that. So right now. We are doing some heroics in order to try to kind of generate the right set of code But we think that the right approach longer 10 will be to fix this big performance gap And at least let the situ to see whether a segment is bigger than 2 gigabytes or not And if it is not then refer to the logic and optimization that we already have In other words, there's more work here to be had So I think the memory access API is a great alternative to the by buffer API or a great complement It is a fully immutable API. So it should land over time to better G to optimization There is deterministic the location that you didn't have with by buffer and that makes quite a difference in terms of GC load The other thing limited the other thing scheme is not limited to 2 gigabyte Which also makes a difference if you are using persistent memories or things like that And there are there is the availability for doing structural access with the verandals memory layouts So I think it's a very Compiling alternative to buy buffer if what you want to do is on say is off-heap The memory access API is safe. It's a safe by buffer So it's a good safe replacement to for the unsafe API There are spatial and temporal checks on every access and there is a robust ownership model Which allow you to remain safe even if you are working on multiple thread and still attended the deterministic the allocation So where does all it fit in the bigger Panama picture? I'm not going to talk about Jini, but I just wanted to give you a Taste of kind of where it all fits together. So as mark showed earlier We want to in Panama. We want to give you tools so that you can start from another file Do some work and derive a set of Java bindings and these have a bindings initially with all well Maybe they are interfaced with some annotation and then there will be a runtime component that reads the notation And will generate some code on the fly. We actually realized that there's no need for that We only needed two pieces one is the memory I Memory access API piece which gives you a bunch of Varendos for accessing the memory For example struct fields of particular offset and things like that. The second bit is a foreign function API bit which we are going probably to deliver in 15 also as an incubating API Which allows you to map foreign function as method handles on top of these two bits You are able to create a very low-level Set of bindings and then you can also build on top of those if you want you can add the plugins to the basic tool that we will Provide and generate higher level bindings, but the low level bindings as mark showed before are not so bad We are generating static wrapper, so they are relatively usable So as I said at the beginning of this talk these API is actually available in Java 14 So my recommendation is to kind of try it out and report back Performance portals for usability issues or whatever you can find Next steps of course are to round up the performance work. We know that we have to do better here We want also to finish the work on the Allocator because we think there's a lot of room for improvement there And we have to polish and finalize the API right now is an incubating API There are probably methods that need to be polished for name or whatever and then we have to integrate this API into the overarching Panama story so you can follow the progress on Panama dev But if you are more familiar with core Libs, you can also report the issues on core Libs I will be looking for both. So thank you


Sears Radio Theater will begin after this message from your local station. U.S. You can't because they're prohibited. They're prohibited because even one of these foods, plants or animal products might carry a disease or pest that could spread to our crops and gardens and animals with devastating results. You haven't been everywhere on the coys tomorrow. And before you go again, write for the free booklet that explains U.S. Department of Agriculture, Washington, D.C. 202-50. This is Vincent Price. But first on earth, thy court shall from the tomb be rent. Then ghastly haunt thy native place. That, my friends, is the verse written by the poet Lord Byron. The vampire is a truly fabulous being that rises from the grave to pray upon sleeping persons who then become vampires themselves. Driving a stake through the heart of one of the undead while he lies slumbering in his coffin during daylight hours is said to put an end to his blood-seeking wanderlust. Fate brought Carmilla and Amy together in the city of Vienna in the year 1922, not long after an armistice had ended the First World War. They appeared to be equally young, beautiful, innocent. But one was an ageless vampire, the other an unsuspecting victim. And that's just the beginning of our story. Power and the Sears Radio Theatre is brought to you by Sears Robot & Company, where value is your byword. Sears, where America shops. Hey, look, in here, inside this stylish man's dress shirt, I'm a Sears value dress shirt label just popping with pride because Sears value dress shirts are sure to be popular for a number of reasons. They have fashion spread collars coming classic patterns and solids in short sleeves. You'll appreciate the perma-pressed polyester or polyester cotton blend for easy care plus at low value prices, what a buy. Just look for me, the value dress shirt label at Sears Bend Store, where style, sense and satisfaction combine to label me ripe for you. When I need advice, I go to my mom. Why not, it's free. Now that I'm married and moving into a new house, I want all the advice I can get. So when mom says shop Sears, I listen. You should. Sears is a great help on those big items you'll need for your new home. Major appliances like washers, dryers and refrigerators. They'll deliver, install and service. I always depend on Sears. You should too. Slinging jerseys, tight satin tops. They only look good if they hug your body smoothly. Sears Best Abra Light helps you and your clothes look good. How? Abra Light has no seam cups and straps adjust in the back so you look great up front. Whatever you do, whether it's dashing around town or simmering with disco fever in that slinky dress, it's flattering fun with the Sears Abra Light, available at most larger Sears retail stores. It is a midwinter day in the year night in an upstairs bedroom of an old house on the outskirts of Vienna. Miss Amy Forrester, a young lady of quality, is writing in her journal at an antique desk by the window. She is about to tell us, in her own words, about her encounter with a... I'm going to tell you something so strange that it will require all your faith to believe me. It concerns an incident that took place in my nursery long ago when we first lived here in Vienna. One night, I awoke and sat up. I saw a pretty face looking at me from the side of a bed. It was that of a young lady kneeling with her hands clasped in front of her on the coverlet. She drew me towards her smiling. I felt soothed and fell asleep again. I was wakened by a sensation as if two needles ran into my throat at the same moment. I screamed. The lady backed into the shadows. I recall my father embracing me and telling me it was nothing but a dream. But I wasn't comforted. For I knew the visit of the apparition was not a dream. For some years afterward, I could not be left alone and a nurse remained at my bedside every night. Now I'm back here in Vienna once again. I find I am still frightened by that childhood recollection. Some people might think it trifling, but you'll see why I must mention it. Something happened one afternoon this past summer. Yes, who is it? Excuse me, Miss Amy, your father wants to see you in his study. Thank you, Madame Peridun. I'll go at once. You wanted to see me, Papa? Yes, Amy, my dear. Come on in. Close the door. You look charming today. That's a lovely frock you're wearing. Thank you for noticing. I made it myself. Quite the proper young lady nowadays. How old are you getting to be? I'll be 18 next month, Papa. That's what I thought. Well, perhaps you're brave enough to listen to some unhappy news. Yes, Papa? I've had a letter from General Spielstorff. He can't come to us as soon as I'd hoped. Oh, I've been looking forward to meeting his daughter. I thought we could enjoy the summer sunshine together. It's just as well that you and Bertha never became close friends. Why do you say that? Because the poor young lady is dead. You can't mean it. Here, let me read you this. He says, during the last days of Bertha's suffering, I've been unable to talk on the phone or write to anyone. I've lost her and learned the truth too late. Thank God my child died without suspecting the cause of her misery. When I see you in the autumn, I'll tell you things I don't dare to put on paper now. Pray for me, my friend. I see what you mean. He's in great sorrow. Poor Bertha. Go there now, Amy. You mustn't cry. I do have other news. You're going to have some companionship after all. What do you mean, Papa? We're expecting a guest. She'll be with us tonight. That should cheer you. What are you telling me? A short while ago the phone rang. I heard the voice of the Baroness Krupska calling him Salzburg. I knew her in my embassy days at the turn of the century. She was lively and stylish then. A bit of a dragon now, they tell me. The Baroness is coming to visit us? No, I don't think either of us would like that very much. The Baroness is going to Paris on some vital business, but she's entrusting her niece to my care. What does she like, this girl? Quite beautiful. Everyone says so. Somewhat delicate, but altogether bewitching. That's a fine recommendation. The Baroness was afraid a young guest would tax my hospitality. I told her on the contrary, she'd be doing us a favor. My daughter, I said, has been expecting a house guest who cannot be with us. If you confide your niece to our care, I told her it'll be a consolation to Amy. And what's the name of this paragon? It's a very pretty name. She's called Carmilla. My visitor arrived at dusk while I was lying down and was carried upstairs, bundled in furs to a bedroom that had been prepared. She didn't appear at dinnertime, but she was certainly the topic of our conversation. Papa had insisted from the beginning that our dignified housekeeper sit down with us at table. Amy, my dear, please pass the cream. Certainly. How do you like our guest, Madame Peridon? Very much. Almost as pretty as you, my dear. About your age and exquisite manners. The rumours were correct. She's absolutely lovely. Papa, such a sweet voice. Though we only exchanged a word or two, she sank into a deep sleep as soon as her head touched the pillow. A fainting spell from the excitement, no doubt. I hope I haven't done a foolish thing in taking charge of the young lady. I had Dr. Kleinbach take a look at her to protect you from contagion. And what was his diagnosis? Favorable. She's tired and a trifle nervous, but completely sane and not subject to fits. Very amusing, Papa. When am I to be allowed to meet her? Forgive me, my child, but you know I always like to take precautions. She's sitting up now with a suppertree. There can be no harm in seeing her. The best way to save on new clothes, sew them. Start by saving $40 on a Kenmore sewing machine at Sears, with a convertible free arm for narrow sleeves, cuffs, and legs, a built-in button-holer, even six stretch stitches. This free arm Kenmore just $199.95 and save $30 on a wood veneer sewing cabinet. Sale ends March 31st. Prices and dates may vary in Alaska and Hawaii. Available at most Sears retail stores. Kenmore. Solid as Sears. Spring is a playground of texture. It's Sears Junior Bazaar. Our classic blazer is touchable in cotton and polyester terry. Push the collar and the sleeves up, wrap it close, or let it breeze open. Slip a saucy pointel top underneath and you've got contrast. Or let each go solo in the sunshine. Finish with crisp coolness and polyester and cotton, poplin wrap, skirts, and pleated pants. All mix and matchable in neutral and earthy tones. From Junior Bazaar at most larger Sears retail stores. Generations ago, families dined by the warmth of the open hearth. Today, Sears rekindles this spirit with its open hearth dining room furniture. Faithfully rendered early American designs and careful workmanship give it an heirloom quality. The satin glow and warm highlighting of Sears open hearth take 26 steps to achieve. There's no shorter method to bring out the beauty of the wood. And like all good furniture, open hearth is made to last for a long time with sturdy tongue and groove and mortise and tenon construction. Choose from 16 different pieces of open hearth at most Sears retail stores. Shortly thereafter, I entered the sanctum sanctorum. Carmilla rested against pillows on the canopy bed. Proat and opened my mouth to speak. I was suddenly struck dumb. I saw the very face which had visited me that terrible night in my childhood. It was a pretty face, but with a melancholy expression. This changed into a smile of recognition. I couldn't say a word. It was she who spoke first. How wonderful. Twelve years ago, I saw your face in a dream and it has haunted me ever since. Wonderful indeed. Twelve years ago, whether in a dream or in reality, I certainly saw you. I couldn't forget your face. This is not to be believed. Whatever had frightened me was gone. I felt reassured and blushed as I stammered words of welcome. Sit here beside me. I must tell you my vision about you. It's so strange that we had a vivid dream of each other, you and I, that we have seen one another before, looking as we do now, as children. My father has books on psychic experience, perceptions, intuitions, whatever you want to call them, but I never believed a word of it, until now.  I woke from a troubled dream to find myself in a different room, in another house. I knelt beside a bed as if to pray. Then I saw you. It was most assuredly you as I see you now with golden hair and angelic blue eyes. Ah! It was your looks that won me over. I wanted you to be my friend. I recall embracing you as if we had always known each other, and then I think we both fell asleep. Is that what you remember? I was roused by a scream. You were sitting up screaming. That frightened me and I ran away. Somehow I lost consciousness and when I came to, I was in my own bed again, at home. I only know that I was greatly terrified. In all this time I have never forgotten your lovely face. It isn't a mere resemblance. You are the young girl whom I saw then. I don't know which of us should be the most afraid. Ah! But if you were less pretty, I should be very much afraid of you. But being as you are and young as we both were, I made your acquaintance years ago. It does seem as if we were predestined to be friends. I've never had a close friend and I've longed to find one. Dear Amy, have I found one now? I'd like to be a companionable. I'll try. I want to make a compact of true friendship. But forgive me, I... You're exhausted. I can see that. Yes, suddenly I feel quite tired. It's my fault, Carmilla. I'll bid you good night. The doctor thinks you ought to have a maid to sit up with you. One of ours is waiting in the hall. You'll find her most useful in quiet. No, I never could sleep with an attendant in the room. Our house was robbed once and a servant was murdered so I always locked my door. It's become a habit. I see there's a key in the lock here. Suit yourself. Lock yourself in if you like. You'll be quite safe. Good night then, my new friend. Or should I say my old friend? It's hard to part with you. But we'll see each other again tomorrow. Though not too early. I like to lie a bed most of the day.  You'll soon get used to that. Good night. He had walked with me to the door and embraced me fondly. He determined that we should be great friends. Young people like and even fall in love with one another on impulse. I was flattered by the affection she showed and had every reason to be delighted with my new companion. Yet, I felt a faint antipathy along with my admiration of her. I woke in the night and saw a vision of Carmilla standing at the foot of my bed and smiling. I had a sudden premonition. A foreboding of my own death. There was a park between our villa and the river and one day, a month after Carmilla's arrival, we stepped outside for a stroll and met Madame Peridon on her way back from doing errands. If I were you girls, I shouldn't go into the park. Or anywhere there'll be crowds of people. Why do you say that, Madame? You see what's going on over there at the church? Another funeral. The third one since last Sunday. There's some sort of fever going around that infects young girls like yourselves. Why has no one told us? Your father never speaks of anything that might frighten you. He's gone to the churchyard. I thought you knew she was going to be buried. Is it someone we know? The daughter of the shoemaker at the corner. Not little Lenny. Poor child Fancy, she saw a ghost five days ago and has been dying slowly ever since. Tell me nothing about ghosts. I shan't sleep tonight if you do. I'm going into my kitchen. There'll be fewer germs there We'll see you at dinner. Au revoir, Madame.  What does that signify to you, my dear? It makes me wonder about the home and family you never mention. It indicates the people with strange manners and customs of which we in Vienna know nothing. I gather your native country is more remote than I imagined. That isn't true. It's very close by. Soon I intend to tell you all about it. Funeral bell. It fills my heart with fear whenever I hear it. Don't talk that way. The tragedy of life is not that men die, but that they cease to live. What does that mean? Oh, I'll explain it to you when the time comes. After this message from your local station. This is she. Mrs. Samuels, this is Peter's. I work with security at the Mutual Liberty Building. Where my husband works? What is this? Mrs. Samuels, your husband has collapsed here in the lobby. Oh, no. He was gripping at his chest, you know, some kind of seizure. We've got an ambulance on the way. What hospital is he being taken to? Mr. Samuels was having a heart attack, as will a million other people this year.  The American Heart Association wants everyone to learn cardiopulmonary resuscitation, CPR, and heart attack victims will have a better chance. CPR can sustain the life of a heart attack victim until emergency medical care arrives. CPR was pioneered and developed by the American Heart Association. Support your local Heart Association. We're fighting for your life. If trivia turns you on, turn on William B. Williams and Bill St. James every weekday when they may give you a chance to win WNEW cash for the answers to trivia questions from any one of four categories and you pick the category. To be eligible to play, send your name, address, phone number, including your business number if you work between 10 a.m. and 4 p.m. and your favorite category, popluck, sports, entertainment, or recent world history to WNEW right away. Now, if William B. or Bill call you, you'll win $10 for a trivia quickie answer or $100 for a Jim Lowe trivia tuppy. The question may be trivial, but the cash is not. If you question correctly or not, you're eligible just for playing to win an AMFM stereo system in a weekly drawing. Better get those cards in right away to trivia WNEW 565 Fifth Avenue, New York, 1-001-7. I wonder what the longest running play on Broadway was after all and break the bank. Wasn't that Bert Parks? And who was the last hitter to hit 400? The Forester continues to write in her journal. An appropriate background for Amy's story of her encounter with a vampire. Carmilla grew cheerful and we talked a great deal. The evening went by without further sign of her weakness as she called it. I didn't want her to pick up the fever they said was all around us. I was so healthy I couldn't allow anything to happen to my guest. The following evening after dinner my father called us to his study. Come right in young ladies to have something to show you. Look at these. What are they father? Old pictures, portraits mostly. I recently sent them to be cleaned. Aren't they splendid? Do you see them Carmilla? Yes. I can see them very well. My late wife was of an old Hungarian family. Most of these have come to us through her. Don't you like them? Images of dead people. I neither like nor dislike them. But they're undoubtedly old and some of them are quite curious. I'm seeing most of these myself for the first time. Smoke and dust had almost obliterated them till now. One in particular should interest you. See Aya, here it is. I remember that when I always loved her. But she was so black and with age I could hardly make out the face. It's a small picture but interesting. What is her history? Not only a small picture, it's a small miracle. Why it's the very image of you Carmilla. It's certainly a wonderful likeness. It's really startling. It seems to live. Here you are on canvas, living, smiling, ready to speak. Isn't it perfection? See she even has a little mole like yours on her throat. I don't have a mole.  May I hang this picture in my room? May I father? Of course you may. Now the lettering is restored. We can read the name quite plainly. Marsha Karnstein and the date 1698. Yes, but it's not Marsha. The name is Myrkala. Countess of Karnstein. There's a tiny coronet above it. I'm descended from the Karnsteins. I ought to say my mother was. Ah, so am I, you know. A long descent, very ancient. Are there any Karnsteins living now? The family was wiped out, I believe, in some civil wars. But the ruins of the castle aren't far from here. About three miles away. Yes, I've been there. It's situated among other more recent ruins of the Great War. But it's right in the middle of the city with honking traffic all around. I don't care much for ruins, but we must go there sometime. We'll get up an expedition and take a picnic before the weather turns too cold. Come to the window, Amy. See the moonlight? We can look at pictures tomorrow. Why don't we take a walk and look down on the river? Like the night you came to stay with us. There was a bright moon like this one. So you're thinking of the night I got here?  I shall always be glad. And you asked for the picture you think resembles me to hang in your room? I declare you're getting sentimental, Carmilla. When you get around to telling me your story, it'll be one romance after another. Don't be silly. I'm sure you've been in love. There's probably an affair of the heart going on right now. I've never cared deeply for anyone. And never shall, unless it be someone like you. You'll have me in tears in a minute. It's the fever. Papa would grieve if he thought you were running a fever and didn't let us know. How cold it's getting to be. Oh, that wind off the Danube. Yes, let's go back to the house at once. When we were by the fire, Carmilla seemed more melancholy than ever before. Tell me, my dear, have you heard from your aunt while you've been with us? No. No. Do you know where a letter would reach you right now? I can't really say. But I do think I've overstayed my welcome. You've already been too hospitable. I should go away tomorrow and look for my aunt. I know where I will find her eventually. Carmilla, you're talking nonsense. No, you mustn't dream of doing any such thing. I won't consent to your leaving us. The Baroness said you should stay with us till she returned. Do you hear that, Carmilla? We won't allow you to leave us. I'm not going to leave you. We won't allow you to leave us. I'm not used to taking orders from anyone. Oh, no one is giving orders, my dear girl. But tonight the reports of the mysterious disease in the district are more alarming than ever. I feel responsible for your safety. You mustn't think of leaving us. I must thank you again, sir. I have seldom been so happy in my life as under your care and in the company of your daughter. I went up with Carmilla to her room as I did every evening while she was preparing to go to bed. I apologize for my behaviour tonight. There are things I want to tell you, but I don't know how to begin. Do you think you'll ever confide in me? You won't answer. I ought not to have asked you that. You were quite right to ask me. I wish I could answer, but you don't realise I'm under vows. The time is coming soon when I shall tell you everything. When I do tell you, you'll think of me as cruel and very selfish. Selfish? My kind of friendship is always selfish. You and I, we need a blood oath to seal our friendship. You're delirious again. How you do run on. If you're going to talk that way, I won't listen. I shall leave the room. Good night, Carmilla.  Remember that.  This precaution of locking my bedroom door, having taken into my head her fear of midnight invaders. But dreams have a way of coming through walls to light up dark rooms. I had a dream that night which was the beginning of an agony of dreams. I saw, or imagined I saw, something moving around the foot of my bed.  Before my eyes, it transformed itself into Carmilla, standing there, staring with blood on her nightgown. I heard a voice.  I was terrified. I ran to the door and found it locked as usual from the inside. My next recollection is of being in the hallway, crying for help and counting on Carmilla's door. Carmilla. Go downstairs, madame. Bring some men to force this locker or break the door down. We gazed into the room. We called her by name, but there was no reply. We looked around the room. Everything was undisturbed. It was exactly in the state I left it when beating her goodnight. But Carmilla was gone in herself somewhere nearby. But the door had been locked and I heard daylight brought no solution. The entire household was in a state of agitation. As evening came on, I went upstairs again and there was Carmilla standing at a dressing table. She beckoned to me and I ran to embrace her. Amy, oh, my own darling, Amy. We've been frightened half to death. Where have you been? When did you come back? This last night has been a night of wonders. I want a sensible explanation. It was past two last night before I went to sleep with the doors and windows locked. All I can say is that my sleep was uninterrupted and dreamless. But I woke just now on the sofa in the little dressing room. The door between the rooms was open. The other door was forced open. How could that have happened without my being awakened? By this time hearing voices, my father entered the room. He was incredulous to be told the same story I had heard. I took Carmilla's hand. Will you forgive me, my dear, if I ask you a question? Ask what you please. I'll do my best to answer, but my story is simply one of bewilderment. Precisely. Now, the marvel of last night consists in your having been removed from your bed and your room without being awakened. What possible explanation can there be? Have you ever been suspected of walking in your sleep? Never. Not since I was very young. Ah, but you did walk in your sleep when you were young. But also by my nurse. Oh, well, and what happened is this. You got up in your sleep and unlocked the door. You took the key with you, locking the door from the outside. Do you follow what I mean? But, Hal, Papa, do you account for her finding herself in the dressing room, which we had searched so carefully? She came back there after you had searched it, still in her sleep, and awoke spontaneously as much surprise to find herself where she was as anyone else. I wish all mysteries were as easily explained. The explanation involves no drugging, tampering with locks, no burglars, poisoners, witches, nothing that need alarm anyone about our safety. And that's the end of it. Father arranged that a servant should sleep outside Carmilla's door in case she walked in her sleep again. But if her sleep was dreamless, mine was not. Strange sensations troubled my sleep. There was a cold, peculiar thrill as if one were swimming against the current of a river. Sometimes there came a sensation as if warm lips kissed me longer and more lovingly as they reached my throat. And there, the caress fixed itself. My breath came faster and faster with a sense of strangulation till I became unconscious. It told on my appearance the siege of nightmares. But I assured my father I was quite well. In a way, this was true. I felt no pain. Some kind of narcotic was acting on me. And my perceptions were benumbed. Race step right up to most Sears retail stores for the Sears National Hardware Week sale. Take aim for special savings on these items. Save $40 on a fully automatic garage door opener. Save $10 to $15 on several handy and versatile bathroom storage cabinets. Get $40 off a 14-inch lightweight chainsaw with its own carrying case. Take home big savings real straight shooting at the Sears National Hardware Week sale. Hurry, hurry! Prices may vary in Alaska and away. Furnish it with the quaintness and charm of Sears Jenny Lynn's crib dresser and chest. Your baby will be secure in our old fashioned crib built with high sides and a safety drop-side latch. And each handsome maple color piece comes in a non-toxic finish. Sears Jenny Lynn dresser and chest is furniture that will adapt gracefully as baby grows old or too.  Available at most Sears retail stores. Understand you type fast. Yes. Accurate? That's okay. You'll be typing on Sears exclusive corrector electric typewriter with easy correction and more. It's Sears best. Try typing Sears corrector typewriter. Whoops! Now first, Sears is S-E-A-R-S not Z. So backspace to the incorrect letter. Tap the correction key. Now the mistake is blocked out. Next type the correct letter. Then proceed. Yes daddy. Price again. And here's the concluding act of Carmilla. Early one morning I found Dr. Kleinbach waiting downstairs. Father had sent for him without telling me. Since the doctor was there I told him my story. My father came and stood beside me.  Not a bit of it. You mentioned the sensation. Needles piercing the skin of your throat the night of that first dream. Did you feel any soreness? None at all. Indicate with your finger the point where this occurred. A little below my throat. Here. Remove your scarf please and open your collar. We need to look for symptoms. There's nothing there, is there? Indeed there is, my dear girl. A small blue spot. God bless me so there is. A spot about the size of the tip of your little finger. The question is, what's best to be done? Am I in any danger? I trust not, my dear. I don't see why you shouldn't begin to get better immediately. Now that's the same point at which the feeling of strangulation began. Yes. And also the center of that thrill like the current of an icy stream running against you. It may be. Yes, I think it is. May I say a word to Madame? Yes, certainly. Madame Paradon, will you come over here please? Yes, Doctor. Is there something I can do? I find this young lady far from well. Steps must be taken. Madame, be so good as to not let Miss Amy be alone for one moment. That is the only order I need give for the present. But it's an important one. We may rely on your discretion, Madame. I know. Indeed you may, sir. Thank you. I should be back this evening. He came from his study. He had an envelope in his hand. Amy, this letter has been delayed in the mail. It's from General Spielstorff. He'll be with us soon. He may be here today. You don't look pleased as you should when a friend is coming. You look as if you wished him at the bottom of the Red Sea. It's just that his plans are so erratic. Dear papa, will you confide in me? That all depends. Does the doctor think me very ill? He thinks you'll be well again, Amy. At least on the road to recovery in a day or two. Meanwhile, don't trouble your head about it. Then upstairs, sleeping late as always. When next I saw her, it was mid-afternoon and she was coming from the kitchen with a picnic basket on her arm. Get ready, Amy. We're going to make our expedition. Where are we going? To the ruins of Cranstein. We're not putting off seeing them any longer. How will we get there? Let's see, of course. Come along. Don't keep me waiting. But I shouldn't. An old friend of my father's. General Spielsdorf may be arriving this afternoon. The general will have to wait. See him when we get back. Come now. Put on your coat this instant. Amy, where are you going? You can't go out right now. It's a sort of picnic. Carmilla has decided. Does your father know? He said you mustn't be alone. Madame, I shan't be alone. Carmilla will be with me. I could have been prettier. The deep Gothic bridge led to the deserted chapel among a grove of cypress trees. We had dismissed the taxicab to enjoy our stroll. Isn't it peaceful, Amy dear? Look at those colours. A woodland in the midst of a busy city. One could linger for an eternity. We shan't do that. Let's find a grassy spot to spread the blanket and have our sandwiches. I love the crunch of leaves underfoot, don't you? Autumn is my favourite season. Autumn is my favourite season. We can sit down here. Give me the basket. Goodness, the sun's going down. We must think of getting home before dark. You're not going home, Amy. Neither of us will go. This will be our home from now on. Slender hand closed like a vice of steel around my wrist.  I awoke in a dim, dark chamber. I shan't do that. It was so cold, so frightening. I couldn't see her, but I knew she was there on the marble floor beside me. The moonlight showed her once lovely face. Twisted in a diabolical green. Amy, my dear child. Where have you taken me? What is this place? It is a place of refuge. I come here every day for the sleep I have been given. It is a place of refuge. I come here every day for the sleep I have been given. I come here every day for the sleep I need to sustain my existence. This is a nightmare. Another nightmare. It's the renewed slumber as much as the living blood that supplies us with our vigor. What must I do? You will do as I do. You no longer have any choice. But before the night is over, I will drain you to the brink. You shan't suffer. I have learned to be gentle. You needn't be afraid. Are you afraid of dying? Why?   And all are happier when they do. Where have you brought me? What is this place? It is the tomb of the Karnsteins, my dear friend. I am Mirkala, Countess of Karnstein. Countries ago. I am undead. I will soon be one of us. Tell me, always. You're the companion I've been seeking. I will teach you the things you must know. You've seen your last sunrise.  But I will keep you alive forever as a vampire. Tomorrow you will begin. Tomorrow night, you make your first kill. I will show you how. I've made the decision for you. You had to come with me. Now you know what I couldn't tell you before. I've pity on me, please. Too late for pity. Now we must be quiet. We must rest. While we can, go to sleep. It was related to me later. When General Spielsdorf arrived, he brought a priest to exercise evil spirits. And a learned man who knew the tradition of vampirism. The General had come to Vienna with the intention of exploring the graves of the Karnstein family. Using ancient maps, they found the tomb and ripped away the ivy which concealed the marble tablet. With crowbars, they broke in the door. All right, down there. Come on, then. Both of them are here. Let me test your pulse. Is she alive? She and her aspiration are barely perceptible. Then we've come in time. We'll save her and never fear. And the other one there, gentlemen, is the Countess Miocala. Another name. Camilla Miocala, the same creature. With the letters of the name re-arranged. Your daughter and mine were victims of the same demon. At least this child can be saved. Though Bertno was not. The commissioner will be here shortly. We can't wait for him. Hand me the stake. I'll wield the hammer. How come? To recover. But to this day, the image of Camilla returns to memory. Sometimes the playful, languid girl. Sometimes the writhing fiend I saw in the tomb under the ruined chapel. Often from a daytime reverie, I have been startled into sudden fear thinking I've heard the light step of Camilla at the door to my room. The light of day, it is not particularly alarming. The light of day, it is not particularly alarming. The light of day, it is not particularly alarming. There's sometimes enough to make my heart stop. I'm assured that Camilla is dead. She will never be gone for my memory. Not now. Spread and fast about the genes from Sears men's store that grow and get them free washed. Up to most Sears retail stores for the Sears National Hardware Week sale. Save $3 a gallon on easy-living flat semi-gloss hand-saving paint. Now only $9.99 a gallon. Save $100 on a 10-inch radial arm saw with leg set. Just $2.79.95. Save $30 or $40 on two crystal-glass chandeliers. Now $59.99 and $79.99. Take home big savings. It's Sears National Hardware Week sale. Prices may vary in Alaska and Hawaii. The natural look really helps do something for a woman. The classic look does too. Now there's a group of classic coordinates at Sears that really does up the natural look for spring. Everything in a nubby texture-rich blend of polyester rayon and flax in two of this season's favorite colors, mauve or natural. Capture the double-breasted blazer, wrap, skirt, straight-leg trouser pants and open basket-weave shirts. Sears Spring Coord. Group in sizes 8 to 16 will really help do something for you at most larger Sears retail stores. Robo Get Company where our policy is satisfaction guaranteed for your money bank. Sears America's Shops. Carmilla was written by Brainer Duffield, produced and directed by Fletcher Markel. Your host was Vincent Price. Our stars were Antoinette Bauer and Anne Gibbon. Also heard were Bolen Suley and Seymour, George Spardakos and Don Dilan. The music for Sears Radio Theater was composed and conducted by Nelson Riddle, Art Gilmore speaking. The Elliott Lewis production for Sears Radio Theater is a presentation of CDI.


Paid $5 at a yard sale noticed her next at DC Comics. So after searching I could not find her anywhere on eBay Put her on an auction for 300 and she's sold. Hey fellow buddies. Thanks for watching Amazing, right? All right, let's get started Okay, we have 40 May Bolo's what do I mean by may Bolo's these are items that sold in May from my Facebook group members It is the best of the best. I asked them to share their best May Bolo So you are gonna see some big money probably some unexpected Bolo's I know some of these have definitely been expected unexpected for me. All right, we're gonna get started here I'm gonna tell you where they got it what they paid for it and what it sold for I'm also gonna pop a screenshot up right here of the sold listing. We're gonna keep this really educational We're gonna keep it fast-paced and there were a ton of submissions this month So this is gonna be a three-part video So definitely stay tuned for parts two and three coming soon If you can hit that Bell notification that will alert you when I post new videos And if you would like to be a part of the next video to have your Bolo featured Head on over to my Bolo buddies YouTube channel and check the featured Announcement section for posts that look like this. All right, here is the first one Probably not a huge Bolo, but I got this brand new Nintendo Zelda shield lunch bag at Goodwill For some reason it was in the toys marked 50 cents It's stolen in 24 hours on McCurry for full asking price of $20 and That's what it looks like The next item it says they got it free. What is the best price ever free doesn't say where they got it But it is a vintage 1990s corduroy LA Raiders snapback hat sold for $202 and 50 cents plus shipping Bought at the Salvation Army for a dollar each. I like bread and butter These are vintage pyrex a dollar each that is fantastic Now if you don't know pyrex is there are so many pieces that are bread and butter There are some super duper high dollar bolos for pyrex And I have a video on that that I did a long time ago um But I made the mistake in the beginning of thinking that all pyrex was big money So you'll get to see my wall wall in that video, but it's an older video So you can check that out if you like But these sold the first one sold for 30 to 99 and the second one sold for 29 So those are great margins if you pick them up for a dollar a piece Paid $13 for a lot of hats and belts at an estate sale auction Cost of goods less than 50 cents per item promoted at 5% It is a Prada skinny gold women's belt and they sold this for $99 Lot of crochet hooks paid 50 cents at an estate sale and sold within a couple hours of listing They are Boyle and Susan Bates crochet hooks and these sold for $38.99 Somebody put oh really never thought about crochet hooks So some of these may just be unexpected bolo items And but most of them are going to be big money But still definitely items that you should be looking for when you're out at those Thrift stores, estate sales, garage sales, you name it Found at a local independent pharmacy for $34 sold for my asking price of $295 It is a therapeutic coal tar shampoo What? That is amazing. It's discontinued shampoo. It's new without the box. So it's new old stock That is fantastic. Never heard of that brand. It's i o n i l Dash tea I know I know tea. I don't know, but I'm definitely going to be on the lookout Picked up for 25 cents at a yard at a yard sale at a yard sale And sold it for $45 plus shipping It's a vintage raincoat and it is Um, I don't see the actual brand. I don't know if the brand is important, but this is what it looks like Paid 99 cents at a city mission thrifty shopper researched and found another one had sold for $300 Started mine at $74.99 hoping for a bidding war had a couple watchers But only one bidder still a huge profit for me. It's sold for $74.99. It is a unibock unie boek David the known porcelain shelf sitter miniature. I'm not sure if I pronounced that right. I do apologize This is what it looks like from 1978 Paid five dollars at a yard sale noticed her next at dc comics So after searching I could not find her anywhere on ebay put her on an auction for 300 and she sold I bought two other vintage dolls at the sale and all have sold but none for as much as this pretty girl It says mega newbie Nubia Wonder Woman character doll rare Wow, check that out. Never seen that one Gijo 50 cents sold for 61 dollars I think this is one of the guys that has like the flocked beard and the flocked hair 20 dollars at a yard sale accepted a best offer of 175 it is a mountain dew clock Bought it for a dollar at a local independent thrift store listed on ebay for 150 yesterday and sold same day for a best offer of 125 It is a purple fenton fairy lamp pineapple heart candle holder lamp vintage So this is what it looks like right here A bowlo is some but I paid 15 for this weird owl record and it was worth about 60 to 70 by itself I'll definitely be keeping an eye out for old weird Al is it records from now on what is al? Um, that's for sure And it says reserved for so I I'm not sure what the title of the record is it says even worse Oh weird owl. Maybe that's the I'm not sure the other two albums by buyer wanted to bundle for this sale were given to me, but I already had copies I don't think they'd be bowlo's on their own So it was this record and then two others and it sold for 80 dollars on mccarrie vintage sim city computer game for mac a dollar at a thrift store accepted a best offer of 70 So sim city supreme apple macintosh version 1991. This is what it looks like Got this got at the give and take section at the dump. So paid nothing for it I think I listed it around 175 and took a best offer of 120 after a few days Tritronic sports basic g3 electronic dog training transmitter collar. So these are dog collars for dogs I have sold these before Even if they don't have it's not a complete system and you just have the collars those will sell Hi, Courtney. This is a Kate spade place Your bets coin purse. It is super tiny just bigger than a credit card. I found it at the Goodwill bins It was super lightweight. So my cost of goods was about 25 cents sold it for 100 on poshmark My full asking price in about two weeks I just want to say to not be afraid to dig and dig deep at the bins. You never know what you will find This was in the bin of toys and random things. It was truly a surprise find for sure Awesome. Wow dug it out of the bins for a quarter Somebody put nice tip Found at the Goodwill for two dollars and sold on ebay in less than a week for $80 with free shipping It is a Robert Graham x marvel spidey battle graphic t-shirt. So I guess maybe robert graham and Marvel did a collab never knew anything about that I know that some robert graham can do really well Found this in the bins at the outlet. It was only five dollars. I it also came with a zelda game System worth about 240 and game 35. My son who goes with me every week to the bins decided to keep it for himself He deserved it because he's a great business partner. This is what it looks like um Purchased for 60 dollars on facebook marketplace and did local pickups. So no shipping fees sold for 699 dollars full asking price on etsy $95 shipping this one comes from be carried away She is a moderator of my bola buddies facebook group and a member of my channel. She is awesome Her channel is amazing. Please go sub her up at be carried away. This is her channel And I will try to remember to link it down below Got for a dollar at a garage sale put it up for auction with a starting bid of a dollar Oh Brave I never start things at a dollar um 30 bids later sold for $595 Elder scrolls arena iBM pc do seedy rom version 1993 I don't know what it is. Is it a pc game? Maybe I think it is Bought for 50 cents at a yard sale. Are you kidding me? It is a let me zoom in here and try and read this 50 cents It's some sort of keyboard digital piano with stand pet a pedal power cord I can't read the brand. Hopefully when I pop up the screen share it'll be bigger I'm trying to zoom in on my computer and I'm just cannot read the brand it starts with an a So Hopefully I can get that clear for you guys up there paid $10 at an oh and it sold for $50 and $8 50 cents into 508. Are you kidding me? Wow paid $10 at an estate sale. It's a sears lantern avocado green sold for $144.09 Got this for two dollars. It is a rare 1936 world war one era crash relic us army plain Something canvas it's cut off and it says the soldier's name sold it for $500 two bucks Wow Wow also this world war one navy's pilot jacket paid 20 and I don't know if this is sold yet or if it looks like it's currently still listed. So um I don't know if he'll get his asking price or not, but he has it listed for $688 and 88 cents Okay, the other item sold Hello paid six dollars at the Goodwill sold on ebay for full asking price of $100 They are north face pendleton camp mules Thermo ball loafer shoes men's unisex size 10 So again north face and pendleton doing a collab Hello again found these at an independent thrift store for four bucks sold on ebay for full asking price of $235 plus shipping. They are alan edmonds fifth avenue cap toe oxfords Great keywords there. That's what they look like 235 bucks Got two of these at my local honey hole for five dollars listed on both ebay and mercari I've been on mercari less than a month sold on mercari within three days Best thing I still have the other on ebay with watchers sailor moon always seems to sell well Yeah sailor moon is definitely a bolo Um, these are rubber squeeze toys. Um, and it's a set of two. It looks like or maybe three Uh, they're big vintage figurines, but they're bath toys. That's what it looks like 99 bucks on mercari Men's Harley button down shirt sold in a week paid six dollars at the Goodwill Brother p touch electronic labeling system She said her mom gave her this took over a year to sell And found these at the bins about a month from date of sale sold international women's 90s Y2k overalls guess light denim button fly pressed logo wide leg And she is a new member of my bolo buddies channel. I have not got her, um Ebay store yet, but as soon as I have that information which I will have it before I post this video I will pop a screenshot up of her ebay store and I will try to remember to link it down below So definitely go and check her out. So I'd say both are great bolos for different reasons. Cookie Monster stuff for me is something I love personally Only paid a dollar. The 49ers jacket is a real nice sale as well and only cost four dollars So the Cookie Monster shirt sold for 50 dollars and this is what it looks like And the san francisco 49ers bomber jacket sold for 75 dollars So definitely some nice bolos in this video. Thank you all so much for sharing if you are a bolo buddies member of my youtube channel If you'd like to join there is a link down below. If not, no worries It is level two to get the shout out like if you want your ebay store or your youtube channel shout it out Um got this machine and two bottles for free donated the machine because I didn't want to deal with shipping So both bottles separately at 50 dollars each It is a shark sonic duo reusable cleaning solution bottle discontinued. It looks like it's just an empty bottle An empty bottle I can't tell if there's solution in there or not, but maybe to refill it That is definitely interesting Paid four dollars and 99 cents at a local thrift store started bidding at 49 dollars and 99 cents and got several offers within the first hour But nothing close to what it sold for this is the vintage 2000 put put purple car with pep plus humongous entertainment Sold for 255 dollars. So definitely a bolo guard. Um Let's see. I just wanted to share so badly with someone. My husband does not like what I do Oh, well bought at the salvation army for five dollars half off day was originally 999 I went two hours before closing and was surprised. They were still there Bought them because all white comfort casual shoes are trending right now What a return on money Um, return on investment ROI Uh, let's see sold them on poshmark for a hundred dollars poshmark took 20 So net earnings was 80 bucks on a five dollar pickup. They are eco ecco women's slip-on sneakers Got at the Goodwill Benz for two dollars. It is a wilson tennis racket and details are right here in the listing sold it for 249 dollars and 99 cents. That is incredible for sure Got this at an online auction house by me for two dollars and sold yesterday They are 10 tdk 120 minute superior normal bias D 120 blank audio tapes. This is what they look like they sold for 85 dollars and 99 cents I got these awfully ugly nikes at a garage sale and they took about two months to sell But they finally sold last week for full asking price of 70 dollars Nike men's size nine and a half Metcon four xd training shoes Red camo red brown camo. That's what they look like All right, you guys that was about 40 Bolo items again There's going to be a part two and three this month because you guys brought so many amazing Bolo's Thank you all so much for participating and if you haven't participated and would like to head on over to my Bolo buddies Facebook group and join and share Bolo under the announcements Featured section. You'll see a post that's and it tells you what to put in the comments along with a screenshot Thank you all so much for being here. Thank you for watching and I will see you at the next one