Use Case: Dormant Funds Transfer
--------------------------------

An AT that will transfer its funds to another account if it is not sent a tx before a given time. This can be
used as a simple "will" to endow or donate funds when an account has become dormant.

First execution will set up a timestamp in future and any later transaction sent by the AT's owner will reset
this to the future again. If a transaction is sent to it from any other account after the payout time then it
will transfer its balance to the "payout" account (this is initially hard-coded but can be at any time before
payout modified by the AT's owner via the first 64 bits of an AM if AMs are supported by the host).

Variables
---------

@00 ==> @timestamp
@01 ==> @payout_time
@02 ==> @txid
@03 ==> @tx_time
@04 ==> @tx_info
@05 ==> @tx_source
@06 ==> @am_type_subtype
@07 ==> @payout_account
@08 ==> @zero

Functions
---------

20 (0x14) = get a time stamp value for the last block in the blockchain
21 (0x15) = get txid for the first tx after the provided time stamp
22 (0x16) = get a time stamp value for a given txid
24 (0x18) = get source account/address for a given txid
26 (0x1a) = pay account balance to a given account/address
28 (0x1c) = get tx type and subtype for a given txid
29 (0x1d) = get the AT creator's account/address
30 (0x1e) = get first 64 bits of AM data

Sample Function Data
--------------------

function 020 0x0000000000012345 true
function +021 0x0000000000000064,0x0000000000000065,0x0000000000000066,0x0000000000000000 false
function 022 0x0000000000012345,0x0000000000012345,0x00000000000a5dc8,0x0000000000000000 false
function 024 0x1111000000000000,0x2222000000000000,0x3333000000000000,0x0000000000000000 false
function 028 0x0000000000000000,0x0000000100000002,0x0000000000000000,0x0000000000000000 false
function 029 0x2222000000000000 true
function 030 0x0000000000000000,0x1111111100000000,0x0000000000000000,0x0000000000000000 false

Sample Run Output
-----------------

func: 20 rc: 0000000000012345
func1: 21 with 74565 rc: 0000000000000064
func1: 22 with 100 rc: 0000000000012345
func1: 28 with 100 rc: 0000000000000000
func1: 21 with 74565 rc: 0000000000000065
func1: 22 with 101 rc: 0000000000012345
func1: 28 with 101 rc: 0000000100000002
func: 29 rc: 2222000000000000
func1: 24 with 101 rc: 2222000000000000
func2: 30 with 101 and 0 rc: 1111111100000000
func1: 21 with 74565 rc: 0000000000000066
func1: 22 with 102 rc: 00000000000a5dc8
func1: 28 with 102 rc: 0000000000000000
payout 56 to account: 1229782937960972288
(stopped - zero balance)

Script Assembly
---------------

if @timestamp not zero goto loop                         1e0000000046
get last block timestamp and put in @timestamp           35140000000000
set @am_type_subtype to 0x0000000100000002 (AM)          01060000000200000001000000
set @payout account to 0x0000000011111111                01070000001111111100000000

:init (00000027)
set @payout_time to $timestamp                           020100000000000000
set @tx_info to (604800 seconds in a week)               0104000000803a090000000000
add @tx_info to @payout_time                             060100000004000000

:loop (00000046)
get tx at after @timestamp and store in @txid            3615000200000000000000
if @txid is zero finish                                  2602000000
get timestamp for @txid and store in @tx_time            3616000300000002000000
get tx type for @txid and store in @tx_info              361c000400000002000000
if @tx_info != @am_type_subtype goto skip                24040000000600000044
get AT owner's account and store in @tx_info             351d0004000000
get account for @txid and put in @tx_source              3618000500000002000000
if @tx_info != @tx_source goto skip                      24040000000500000028
get AM data for @txid at pos @zero and put in @tx_info   371e00040000000200000008000000
if @tx_info zero then goto skip                          1b040000000f
set @payout_account to @tx_info                          020700000004000000

:skip (000000b0)
if @payout_account zero goto ignore                      1b0700000010
if @tx_time > @payout_time goto payout                   1f030000000100000018

:ignore (000000c0)
set @timestamp to @tx_time                               020000000003000000
goto init                                                1a27000000

:payout (000000ce)
pay balance to @payout_account                           331a0007000000
finish                                                   28

Assembly Code
-------------

00000000* BNZ $00000000 :00000046
00000006  FUN @00000000 20
0000000d  SET @00000006 #0000000100000002
0000001a  SET @00000007 #0000000011111111
00000027  SET @00000001 $00000000
00000030  SET @00000004 #0000000000093a80
0000003d  ADD @00000001 $00000004
00000046  FUN @00000002 21 $00000000
00000051  FIZ @00000002
00000056  FUN @00000003 22 $00000002
00000061  FUN @00000004 28 $00000002
0000006c  BNE $00000004 $00000006 :000000b0
00000076  FUN @00000004 29
0000007d  FUN @00000005 24 $00000002
00000088  BNE $00000004 $00000005 :000000b0
00000092  FUN @00000004 30 $00000002 $00000008
000000a1  BZR $00000004 :000000b0
000000a7  SET @00000007 $00000004
000000b0  BZR $00000007 :000000c0
000000b6  BGT $00000003 $00000001 :000000ce
000000c0  SET @00000000 $00000003
000000c9  JMP :00000027
000000ce  FUN 26 $00000007
000000d5  FIN

Machine Code
------------

1e00000000463514000000000001060000000200000001000000010700000011111111000000000201000000000000000104
000000803a090000000000060100000004000000361500020000000000000026020000003616000300000002000000361c00
040000000200000024040000000600000044351d0004000000361800050000000200000024040000000500000028371e0004
00000002000000080000001b040000000f0207000000040000001b07000000101f0300000001000000180200000000030000
001a27000000331a000700000028